Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIE1QRUctNCBBQUMgRGVjb2RlciAgKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICBBdXRob3Iocyk6ICAgUm9iZXJ0IFdlaWRuZXIgKERTUCBTb2x1dGlvbnMpCiAgIERlc2NyaXB0aW9uOiBIQ1IgRGVjb2RlcjogQ29tbW9uIGRlZmluZXMgYW5kIHN0cnVjdHVyZXM7IGRlZmluZXMgZm9yCiAgICAgICAgICAgICAgICBzd2l0Y2hpbmcgZXJyb3ItZ2VuZXJhdG9yLCAtZGV0ZWN0b3IsIGFuZCAtY29uY2VhbG1lbnQ7CgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBfQUFDREVDX0hDUl9UWVBFU19IXwojZGVmaW5lIF9BQUNERUNfSENSX1RZUEVTX0hfCgoKCiNpbmNsdWRlICJGREtfYml0c3RyZWFtLmgiCiNpbmNsdWRlICJvdmVybGFwYWRkLmgiCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgojZGVmaW5lICBMSU5FU19QRVJfVU5JVCAgICAgICAgICAgICAgICA0CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIC0tLS0tLS0tLS0tIGJhc2ljIEhDUiBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLSAqLwoKCiAjZGVmaW5lICBNQVhfU0ZCX0hDUiAgICAgICAgICAgICAgICAgKCgoMTAyNC84KSAvIExJTkVTX1BFUl9VTklUKSAqIDgpICAvKiAoOCAqIDE2KSBpcyBub3QgZW5vdWdoIGJlY2F1c2Ugc2ZicyBhcmUgc3BsaXQgaW4gdW5pdHMgZm9yIGJsb2NrdHlwZSBzaG9ydCAqLwogI2RlZmluZSAgTlVNQkVSX09GX1VOSVRfR1JPVVBTICAgICAgIChMSU5FU19QRVJfVU5JVCAqIDgpCiAjZGVmaW5lICBMSU5FU19QRVJfVU5JVF9HUk9VUCAgICAgICAgKDEwMjQgLyBOVU1CRVJfT0ZfVU5JVF9HUk9VUFMpICAgICAvKiAxNSAxNiAzMCAzMiAqLwoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgojZGVmaW5lICBGUk9NX0xFRlRfVE9fUklHSFQgICAgICAgICAgICAwCiNkZWZpbmUgIEZST01fUklHSFRfVE9fTEVGVCAgICAgICAgICAgIDEKCiNkZWZpbmUgIE1BWF9DQl9QQUlSUyAgICAgICAgICAgICAgICAgIDIzCiNkZWZpbmUgIE1BWF9IQ1JfU0VUUyAgICAgICAgICAgICAgICAgIDE0CgojZGVmaW5lICBFU0NBUEVfVkFMVUUgICAgICAgICAgICAgICAgICAxNgojZGVmaW5lICBQT1NJVElPTl9PRl9GTEFHX0EgICAgICAgICAgICAyMQojZGVmaW5lICBQT1NJVElPTl9PRl9GTEFHX0IgICAgICAgICAgICAyMAoKI2RlZmluZSAgTUFYX0NCICAgICAgICAgICAgICAgICAgICAgICAgMzIgICAgIC8qIGxhc3QgdXNlZCBDQiBpcyBjYiAjMzEgd2hlbiBWQ0IxMSBpcyB1c2VkICovCgojZGVmaW5lICBNQVhfQ0JfQ0hFQ0sgICAgICAgICAgICAgICAgICAzMiAgICAgLyogc3VwcG9ydCBmb3IgVkNCMTEgYXZhaWxhYmxlIC0tIGlzIG1vcmUgZ2VuZXJhbCwgY291bGQgdGhlcmVmb3JlIHVzZWQgaW4gYm90aCBjYXNlcyAqLwoKI2RlZmluZSAgTlVNQkVSX09GX0JJVF9JTl9XT1JEICAgICAgICAgMzIKCi8qIGxvZyAqLwojZGVmaW5lICBUSElSVFlUV09fTE9HX0RJVl9UV09fTE9HICAgICA1CiNkZWZpbmUgIEVJR0hUX0xPR19ESVZfVFdPX0xPRyAgICAgICAgIDMKI2RlZmluZSAgRk9VUl9MT0dfRElWX1RXT19MT0cgICAgICAgICAgMgoKLyogYm9yZGVycyAqLwojZGVmaW5lICBDUEVfVE9QX0xFTkdUSCAgICAgICAgICAgICAgICAxMjI4OAojZGVmaW5lICBTQ0VfVE9QX0xFTkdUSCAgICAgICAgICAgICAgICA2MTQ0CiNkZWZpbmUgIExFTl9PRl9MT05HRVNUX0NXX1RPUF9MRU5HVEggIDQ5CgovKiBxc2MncyBvZiBoaWdoIGxldmVsICovCiNkZWZpbmUgIFFfVkFMVUVfSU5WQUxJRCAgICAgICAgICAgICAgIDgxOTIgICAvKiBtYXJrIGEgaW52YWxpZCBsaW5lIHdpdGggdGhpcyB2YWx1ZSAodG8gYmUgY29uY2VhbGVkIGxhdGVyIG9uKSAqLwojZGVmaW5lICBIQ1JfRElSQUMgICAgICAgICAgICAgICAgICAgICA1MDAgICAgLyogYSBsaW5lIG9mIGhpZ2ggbGV2ZWwgKi8KCi8qIG1hc2tzICovCiNkZWZpbmUgIE1BU0tfTEVGVCAgICAgICAgICAgICAgICAgICAgIDB4RkZGMDAwCiNkZWZpbmUgIE1BU0tfUklHSFQgICAgICAgICAgICAgICAgICAgIDB4RkZGCiNkZWZpbmUgIENMUl9CSVRfMTAgICAgICAgICAgICAgICAgICAgIDB4M0ZGCiNkZWZpbmUgIFRFU1RfQklUXzEwICAgICAgICAgICAgICAgICAgIDB4NDAwCgojZGVmaW5lICBMRUZUX09GRlNFVCAgICAgICAgICAgICAgICAgICAxMgoKLyogd2hlbiBzZXQgSENSIGlzIHJlcGxhY2VkIGJ5IGEgZHVtbXktbW9kdWxlIHdoaWNoIGp1c3QgZmlsbHMgdGhlIG91dHB1dGJ1ZmZlciB3aXRoIGEgZGlyYWMgc2VxdWVuY2UgKi8KLyogdXNlIHRoaXMgaWYgSENSIGlzIHN1c3BlY3RlZCB0byB3cml0ZSBpbiBvdGhlciBtb2R1bGVzIC0tIGlmIGVycm9yIGlzIHN0ZWxsIHRoZXJlLCBIQ1IgaXMgaW5ub2NlbnQgKi8KI2RlZmluZSBVU0VfSENSX0RVTU1ZICAgICAgICAgICAgICAgICAgICAgMAoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAtICAgIGluc2VydCBIQ1IgZXJyb3JzICAgICAgIC0gKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogIC8qIG1vZGlmeSBpbnB1dCBsZW5ndGhzIC0tIGhpZ2ggcHJvdGVjdGVkICovCiNkZWZpbmUgRVJST1JfTE9SU0QgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIG9mZnNldDogZXJyb3IgaWYgZGlmZmVyZW50IGZyb20gemVybyAqLwojZGVmaW5lIEVSUk9SX0xPTEMgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBvZmZzZXQ6IGVycm9yIGlmIGRpZmZlcmVudCBmcm9tIHplcm8gKi8KCiAgLyogc2VnbWVudHMgYXJlIGVhcmxpZXIgZW1wdHkgYXMgZXhwZWN0ZWQgd2hlbiBkZWNvZGluZyBQQ1dzICovCiNkZWZpbmUgRVJST1JfUENXX0JPRFkgICAgICAgICAgICAgICAgICAgIDAgIC8qIHNldCBhIHBvc2l0aXZlIHZhbHVlcyB0byB0cmlnZ2VyIHRoZSBlcnJvciAobWFrZSBzZWdtZW50cyBlYXJseWVyIGFwcGVhciB0byBiZSBlbXB0eSkgKi8KI2RlZmluZSBFUlJPUl9QQ1dfQk9EWV9TSUdOICAgICAgICAgICAgICAgMCAgLyogc2V0IGEgcG9zaXRpdmUgdmFsdWVzIHRvIHRyaWdnZXIgdGhlIGVycm9yIChtYWtlIHNlZ21lbnRzIGVhcmx5ZXIgYXBwZWFyIHRvIGJlIGVtcHR5KSAqLwojZGVmaW5lIEVSUk9SX1BDV19CT0RZX1NJR05fRVNDICAgICAgICAgICAwICAvKiBzZXQgYSBwb3NpdGl2ZSB2YWx1ZXMgdG8gdHJpZ2dlciB0aGUgZXJyb3IgKG1ha2Ugc2VnbWVudHMgZWFybHllciBhcHBlYXIgdG8gYmUgZW1wdHkpICovCgogIC8qIHByZXRlbmQgdGhlcmUgYXJlIHRvbyBtYW55IGJpdHMgZGVjb2RlZCAoZW5sYXJnZSBsZW5ndGggb2YgY29kZXdvcmQpIGF0IFBDV3MgLS0gdXNlIGEgcG9zaXRpdmUgdmFsdWUgKi8KI2RlZmluZSBFUlJPUl9QQ1dfQk9EWV9PTkxZX1RPT19MT05HICAgICAgMCAgLyogc2V0IGEgcG9zaXRpdmUgdmFsdWVzIHRvIHRyaWdnZXIgdGhlIGVycm9yICovCiNkZWZpbmUgRVJST1JfUENXX0JPRFlfU0lHTl9UT09fTE9ORyAgICAgIDAgIC8qIHNldCBhIHBvc2l0aXZlIHZhbHVlcyB0byB0cmlnZ2VyIHRoZSBlcnJvciAqLwojZGVmaW5lIEVSUk9SX1BDV19CT0RZX1NJR05fRVNDX1RPT19MT05HICAwICAvKiBzZXQgYSBwb3NpdGl2ZSB2YWx1ZXMgdG8gdHJpZ2dlciB0aGUgZXJyb3IgKi8KCiAgLyogbW9kaWZ5IEhDUiBiaXRzdHJlYW0gYmxvY2sgKi8KI2RlZmluZSBFUlJPUl9HRU5FUkFUT1JfQklUX1NUUkVBTV9IQ1IgICAgMCAgLyogbW9kaWZ5IGV2ZXJ5IDxNT0RVTE9fRElWSVNPUl9IQ1I+LWJpdCB3aGVuIHJlYWRpbmcgZnJvbSBiaXRzdHJlYW0gKi8gLyogISEhIEJFV0FSRSEhISBpZiBSVkxDIGlzIGFjdGl2ZSwgYWxzbyBSVkxDIGRhdGEgYXQgRVNDMiB3aWxsIGJlIG1vZGlmaWVkICEhISAqLwojZGVmaW5lIE1PRFVMT19ESVZJU09SX0hDUiAgICAgICAgICAgICAgIDMwCgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIC0gICAgZGV0ZWN0IEhDUiBlcnJvcnMgICAgICAgLSAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAvKiBjaGVjayBpbnB1dCBkYXRhICovCiNkZWZpbmUgQ0hFQ0tfVkFMSURfSENSX0lOUFVUICAgICAgICAgICAgIDEgIC8qIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBjaGVjayBpbnB1dCBkYXRhICovCgogIC8qIGR1cmluZyBkZWNvZGluZyAqLwojZGVmaW5lIENIRUNLX1NFR01FTlRBVElPTl9JTU1FRElBVEVMWSAgICAxICAvKiB0aGUgMiBvciA0IGxpbmVzIG9mIGEgZGV0ZWN0ZWQgUENXLWRlY29kaW5nLWVycm9yIGlzIG1hcmtlZCAqLwoKI2RlZmluZSBDSEVDS19TRUdNRU5UQVRJT05fRklOQUwgICAgICAgICAgMSAgLyogYWxsIHRoZSBzZWdtZW50cyBhcmUgY2hlY2tlZCAtLSB0aGVyZWZvcmUgLS0gaWYgdGhpcyBjaGVjayBwYXNzZXMsIGl0cyBhIGtpbmQgb2YgZXZpZGVuY2UgdGhhdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCBQQ1dzIGFuZCBub24tUENXcyBhcmUgZmluZSAqLwoKI2RlZmluZSBERVRFQ1RfVE9PX0xPTkdfQ1dfUkVBRFMgICAgICAgICAgMSAgLyogaWYgYSBjb2Rld29yZCBpcyBkZWNvZGVkIHRoZXJlIGV4aXN0cyBhIGJvcmRlciBmb3IgdGhlIG51bWJlciBvZiBiaXRzLCB3aGljaCBhcmUgYWxsb3dlZCB0byByZWFkIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGV3b3JkLiBUaGlzIGJvcmRlciBpcyB0aGUgbWluaW11bSBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGNvZGV3b3JkIChmb3IgdGhlIGN1cnJlbnRseSB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVib29rKSBhbmQgdGhlIHNlcGFyYXRlbHkgdHJhbnNtaXR0ZWQgJ2xlbmd0aE9mTG9uZ2VzdENvZGV3b3JkJyBpbiB0aGlzIGZyYW1lIGFuZCBjaGFubmVsLiBUaGUgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGRlY29kZWQgYml0cyBpcyBjb3VudGVkIChmb3IgUENXcyBvbmx5IC0tIHRoZXJlIGl0IG1ha2VzIHJlYWxseSBzZW5zZSBpbiBteSBvcGluaW9uKS4gSWYgdGhpcyBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZWVkcyB0aGUgYm9yZGVyIChkZXJpdmVkIGFzIG1pbmltdW0gLS0gc2VlIGFib3ZlKSwgYSBlcnJvciBpcyBkZXRlY3RlZC4gKi8KCiNkZWZpbmUgU1RBVEVfTUFDSElORV9FUlJPUl9DSEVDSyAgICAgICAgIDEgIC8qIHRlc3QgaWYgdGhlIG51bWJlciBvZiByZW1haW5pbmcgYml0cyBpbiBhIHNlZ21lbnQgaXMgX2JlbG93XyB6ZXJvLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzIHRoZSBsb3dlc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCB2YWx1ZSBmb3IgcmVtYWluaW5nQml0c0luU2VnbWVudCBpcyB6ZXJvLiBUaGlzIGNoZWNrIGFsc28gY291bGQgYmUgc2V0IHRvIHplcm8gKHNhdmUgcnVudGltZSkgKi8KICAvKiBvdGhlciAqLwojZGVmaW5lIFZBTElEX0xBVl9FUlJPUl9UUklHR0VSICAgICAgICAgICAxICAvKiB3aGVuIHNldCB0byAnMScsIGF2b2lkIHNldHRpbmcgdGhlIExBVi1GbGFnIGluIGVycm9yTG9nIGR1ZSB0byBhIHByZXZpb3VzLWxpbmUtbWFya2luZyAoYXQgUENXIGRlY29kZXIpLiBBIGxpdHRsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIHJ1bnRpbWUgaXMgbmVlZGVkIHRoZW4gd2hlbiB3cml0aW5nIHZhbHVlcyBvdXQgaW50byBvdXRwdXQtYnVmZmVyLiAqLwoKI2RlZmluZSBIQ1JfTElTVEVOX1RPX01VVEVEX0xJTkVTICAgICAgICAgMCAgLyogbGlzdGVuIHRvIHRoZSAiZXJyb3ItY29uY2VhbG1lbnQiIGZvciB0ZXN0aW5nICovCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogLSAgICBjb25jZWFsIEhDUiBlcnJvcnMgICAgICAtICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBIQ1JfRVJST1JfQ09OQ0VBTE1FTlQgICAgICAgICAgICAgMSAgLyogaWYgc2V0IHRvICcxJywgSENSIF9tdXRlc18gdGhlIGVycmVkIHF1YW50aXplZCBzcGVjdHJhbCBjb2VmZmljaWVudHMgKi8KCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTG9nOiBBIHdvcmQgb2YgMzIgYml0cyB1c2VkIGZvciBsb2dnaW5nIHBvc3NpYmxlIGVycm9ycyB3aXRoaW4gSENSCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gY2FzZSBvZiBkaXN0b3J0ZWQgYml0c3RyZWFtcy4gVGFibGUgb2YgYWxsIGtub3duIGVycm9yczoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0ICBmYXRhbCAgbG9jYXRpb24gICAgbWVhbmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2RlZmluZSBTRUdNRU5UX09WRVJSSURFX0VSUl9QQ1dfQk9EWSAgICAgICAgICAgMHg4MDAwMDAwMCAvLyAgMzEgICBubyAgICBQQ1ctRGVjICAgICBEdXJpbmcgUENXIGRlY29kaW5nIGl0IGlzIGNoZWNrZWQgYWZ0ZXIgZXZlcnkgUENXIGlmIHRoZXJlIGFyZSB0b28gbWFueSBiaXRzIGRlY29kZWQgKGltbWVkaWF0ZSBjaGVjaykuCiNkZWZpbmUgU0VHTUVOVF9PVkVSUklERV9FUlJfUENXX0JPRFlfU0lHTiAgICAgIDB4NDAwMDAwMDAgLy8gIDMwICAgbm8gICAgUENXLURlYyAgICAgRHVyaW5nIFBDVyBkZWNvZGluZyBpdCBpcyBjaGVja2VkIGFmdGVyIGV2ZXJ5IFBDVyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgYml0cyBkZWNvZGVkIChpbW1lZGlhdGUgY2hlY2spLgojZGVmaW5lIFNFR01FTlRfT1ZFUlJJREVfRVJSX1BDV19CT0RZX1NJR05fRVNDICAweDIwMDAwMDAwIC8vICAyOSAgIG5vICAgIFBDVy1EZWMgICAgIER1cmluZyBQQ1cgZGVjb2RpbmcgaXQgaXMgY2hlY2tlZCBhZnRlciBldmVyeSBQQ1cgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGJpdHMgZGVjb2RlZCAoaW1tZWRpYXRlIGNoZWNrKS4KI2RlZmluZSBFWFRFTkRFRF9TT1JURURfQ09VTlRFUl9PVkVSRkxPVyAgICAgICAgMHgxMDAwMDAwMCAvLyAgMjggICB5ZXMgICBJbml0LURlYyAgICBFcnJvciBkdXJpbmcgZXh0ZW5kaW5nIHNpZGVpbmZvIChuZWl0aGVyIGEgUENXIG5vciBhIG5vblBDVyB3YXMgZGVjb2RlZCBzbyBmYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDgwMDAwMDAgLy8gIDI3ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHgwNDAwMDAwMCAvLyAgMjYgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDAyMDAwMDAwIC8vICAyNSAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDEwMDAwMDAgLy8gIDI0ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHgwMDgwMDAwMCAvLyAgMjMgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDAwNDAwMDAwIC8vICAyMiAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDAyMDAwMDAgLy8gIDIxICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHgwMDEwMDAwMCAvLyAgMjAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZWNpYWwgZXJyb3JzICovCiNkZWZpbmUgVE9PX01BTllfUENXX0JPRFlfQklUU19ERUNPREVEICAgICAgICAgIDB4MDAwODAwMDAgLy8gIDE5ICAgeWVzICAgUENXLURlYyAgICAgRHVyaW5nIFBDVy1ib2R5LWRlY29kaW5nIHRvbyBtYW55IGJpdHMgaGF2ZSBiZWVuIHJlYWQgZnJvbSBiaXRzdHJlYW0gLS0gYWR2aWNlOiBza2lwIG5vbi1QQ1cgZGVjb2RpbmcKI2RlZmluZSBUT09fTUFOWV9QQ1dfQk9EWV9TSUdOX0JJVFNfREVDT0RFRCAgICAgMHgwMDA0MDAwMCAvLyAgMTggICB5ZXMgICBQQ1ctRGVjICAgICBEdXJpbmcgUENXLWJvZHktc2lnbi1kZWNvZGluZyB0b28gbWFueSBiaXRzIGhhdmUgYmVlbiByZWFkIGZyb20gYml0c3RyZWFtIC0tIGFkdmljZTogc2tpcCBub24tUENXIGRlY29kaW5nCiNkZWZpbmUgVE9PX01BTllfUENXX0JPRFlfU0lHTl9FU0NfQklUU19ERUNPREVEIDB4MDAwMjAwMDAgLy8gIDE3ICAgeWVzICAgUENXLURlYyAgICAgRHVyaW5nIFBDVy1ib2R5LXNpZ24tZXNjLWRlY29kaW5nIHRvbyBtYW55IGJpdHMgaGF2ZSBiZWVuIHJlYWQgZnJvbSBiaXRzdHJlYW0gLS0gYWR2aWNlOiBza2lwIG5vbi1QQ1cgZGVjb2RpbmcKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDAwMDEwMDAwIC8vICAxNiAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkCiNkZWZpbmUgU1RBVEVfRVJST1JfQk9EWV9PTkxZICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAgLy8gIDE1ICAgbm8gICAgTm9uUENXLURlYyAgU3RhdGUgbWFjaGluZSByZXR1cm5lZCB3aXRoIGVycm9yCiNkZWZpbmUgU1RBVEVfRVJST1JfQk9EWV9TSUdOX19CT0RZICAgICAgICAgICAgIDB4MDAwMDQwMDAgLy8gIDE0ICAgbm8gICAgTm9uUENXLURlYyAgU3RhdGUgbWFjaGluZSByZXR1cm5lZCB3aXRoIGVycm9yCiNkZWZpbmUgU1RBVEVfRVJST1JfQk9EWV9TSUdOX19TSUdOICAgICAgICAgICAgIDB4MDAwMDIwMDAgLy8gIDEzICAgbm8gICAgTm9uUENXLURlYyAgU3RhdGUgbWFjaGluZSByZXR1cm5lZCB3aXRoIGVycm9yCiNkZWZpbmUgU1RBVEVfRVJST1JfQk9EWV9TSUdOX0VTQ19fQk9EWSAgICAgICAgIDB4MDAwMDEwMDAgLy8gIDEyICAgbm8gICAgTm9uUENXLURlYyAgU3RhdGUgbWFjaGluZSByZXR1cm5lZCB3aXRoIGVycm9yCiNkZWZpbmUgU1RBVEVfRVJST1JfQk9EWV9TSUdOX0VTQ19fU0lHTiAgICAgICAgIDB4MDAwMDA4MDAgLy8gIDExICAgbm8gICAgTm9uUENXLURlYyAgU3RhdGUgbWFjaGluZSByZXR1cm5lZCB3aXRoIGVycm9yCiNkZWZpbmUgU1RBVEVfRVJST1JfQk9EWV9TSUdOX0VTQ19fRVNDX1BSRUZJWCAgIDB4MDAwMDA0MDAgLy8gIDEwICAgbm8gICAgTm9uUENXLURlYyAgU3RhdGUgbWFjaGluZSByZXR1cm5lZCB3aXRoIGVycm9yCiNkZWZpbmUgU1RBVEVfRVJST1JfQk9EWV9TSUdOX0VTQ19fRVNDX1dPUkQgICAgIDB4MDAwMDAyMDAgLy8gICA5ICAgbm8gICAgTm9uUENXLURlYyAgU3RhdGUgbWFjaGluZSByZXR1cm5lZCB3aXRoIGVycm9yCiNkZWZpbmUgSENSX1NJX0xFTkdUSFNfRkFJTFVSRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgLy8gICA4ICAgeWVzICAgSW5pdC1EZWMgICAgTGVuZ3RoT2ZMb25nZXN0Q29kZXdvcmQgbXVzdCBub3QgYmUgbGVzcyB0aGFuIGxlbmdodE9mUmVvcmRlcmVkU3BlY3RyYWxEYXRhCiNkZWZpbmUgTlVNX1NFQ1RfT1VUX09GX1JBTkdFX1NIT1JUX0JMT0NLICAgICAgIDB4MDAwMDAwODAgLy8gICA3ICAgeWVzICAgSW5pdC1EZWMgICAgVGhlIG51bWJlciBvZiBzZWN0aW9ucyBpcyBub3Qgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlIChzaG9ydCBibG9jaykKI2RlZmluZSBOVU1fU0VDVF9PVVRfT0ZfUkFOR0VfTE9OR19CTE9DSyAgICAgICAgMHgwMDAwMDA0MCAvLyAgIDYgICB5ZXMgICBJbml0LURlYyAgICBUaGUgbnVtYmVyIG9mIHNlY3Rpb25zIGlzIG5vdCB3aXRoaW4gdGhlIGFsbG93ZWQgcmFuZ2UgKGxvbmcgYmxvY2spCiNkZWZpbmUgTElORV9JTl9TRUNUX09VVF9PRl9SQU5HRV9TSE9SVF9CTE9DSyAgIDB4MDAwMDAwMjAgLy8gICA1ICAgeWVzICAgSW5pdC1EZWMgICAgVGhlIG51bWJlciBvZiBsaW5lcyBwZXIgc2VjdGlvbiBpcyBub3Qgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlIChzaG9ydCBibG9jaykKI2RlZmluZSBDQl9PVVRfT0ZfUkFOR0VfU0hPUlRfQkxPQ0sgICAgICAgICAgICAgMHgwMDAwMDAxMCAvLyAgIDQgICB5ZXMgICBJbml0LURlYyAgICBUaGUgY29kZWJvb2sgaXMgbm90IHdpdGhpbiB0aGUgYWxsb3dlZCByYW5nZSAoc2hvcnQgYmxvY2spCiNkZWZpbmUgTElORV9JTl9TRUNUX09VVF9PRl9SQU5HRV9MT05HX0JMT0NLICAgIDB4MDAwMDAwMDggLy8gICAzICAgeWVzICAgSW5pdC1EZWMgICAgVGhlIG51bWJlciBvZiBsaW5lcyBwZXIgc2VjdGlvbiBpcyBub3Qgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlIChsb25nIGJsb2NrKQojZGVmaW5lIENCX09VVF9PRl9SQU5HRV9MT05HX0JMT0NLICAgICAgICAgICAgICAweDAwMDAwMDA0IC8vICAgMiAgIHllcyAgIEluaXQtRGVjICAgIFRoZSBjb2RlYm9vayBpcyBub3Qgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlIChsb25nIGJsb2NrKQojZGVmaW5lIExBVl9WSU9MQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8vICAgMSAgIG5vICAgIEZpbmFsICAgICAgIFRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhdCBsZWFzdCBvbmUgZGVjb2RlZCBsaW5lIHdhcyB0b28gaGlnaCBmb3IgdGhlIGFjY29yZGluZyBjb2RlYm9vay4KI2RlZmluZSBCSVRfSU5fU0VHTUVOVEFUSU9OX0VSUk9SICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvLyAgIDAgICBubyAgICBGaW5hbCAgICAgICBBZnRlciBQQ1cgYW5kIG5vbi1QV0MtZGVjb2RpbmcgYXQgbGVhc3Qgb25lIHNlZ21lbnQgaXMgbm90IHplcm8gKGdsb2JhbCBjaGVjaykuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tKi8KI2RlZmluZSBIQ1JfRkFUQUxfUENXX0VSUk9SX01BU0sgICAgICAgICAgICAgICAgMHgxMDBFMDFGQwoKCnR5cGVkZWYgZW51bSB7CiAgUENXX0JPRFksCiAgUENXX0JPRFlfU0lHTiwKICBQQ1dfQk9EWV9TSUdOX0VTQwp9IFBDV19UWVBFOwoKCi8qIGludGVyZmFjZSBEZWNvZGVyIDwtLS0+IEhDUiAqLwp0eXBlZGVmIHN0cnVjdCB7CiAgVUlOVCAgICAgICAgICBlcnJvckxvZzsKICBTUEVDVFJBTF9QVFIgIHBRdWFudGl6ZWRTcGVjdHJhbENvZWZmaWNpZW50c0Jhc2U7CiAgaW50ICAgICAgICAgICBxdWFudGl6ZWRTcGVjdHJhbENvZWZmaWNpZW50c0lkeDsKICBTSE9SVCAgICAgICAgIGxlbmd0aE9mUmVvcmRlcmVkU3BlY3RyYWxEYXRhOwogIFNIT1JUICAgICAgICAgbnVtU2VjdGlvbjsKICBTSE9SVCAgICAgICAgKnBOdW1MaW5lSW5TZWN0OwogIFVTSE9SVCAgICAgICAgYml0c3RyZWFtSW5kZXg7CiAgU0NIQVIgICAgICAgICBsZW5ndGhPZkxvbmdlc3RDb2Rld29yZDsKICBVQ0hBUiAgICAgICAgKnBDb2RlYm9vazsKfSBIQ1JfSU5QVVRfT1VUUFVUOwoKdHlwZWRlZiBzdHJ1Y3QgewogIGNvbnN0IFVDSEFSICpwTWluT2ZDYlBhaXI7CiAgY29uc3QgVUNIQVIgKnBNYXhPZkNiUGFpcjsKfSBIQ1JfQ0JfUEFJUlM7Cgp0eXBlZGVmIHN0cnVjdHsKICBjb25zdCBVU0hPUlQgKnBMYXJnZXN0QWJzVmFsOwogIGNvbnN0IFVDSEFSICAqcE1heEN3TGVuZ3RoOwogIGNvbnN0IFVDSEFSICAqcENiRGltZW5zaW9uOwogIGNvbnN0IFVDSEFSICAqcENiRGltU2hpZnQ7CiAgY29uc3QgVUNIQVIgICpwQ2JTaWduOwogIGNvbnN0IFVDSEFSICAqcENiUHJpb3JpdHk7Cn0gSENSX1RBQkxFX0lORk87Cgp0eXBlZGVmIHN0cnVjdHsKICBVSU5UICAgICAgbnVtU2VnbWVudDsKICBVSU5UICAgICAgcFNlZ21lbnRCaXRmaWVsZFsoKDEwMjQ+PjEpL05VTUJFUl9PRl9CSVRfSU5fV09SRCsxKV07CiAgVUlOVCAgICAgIHBDb2Rld29yZEJpdGZpZWxkWygoMTAyND4+MSkvTlVNQkVSX09GX0JJVF9JTl9XT1JEKzEpXTsKICBVSU5UICAgICAgc2VnbWVudE9mZnNldDsKICBGSVhQX0RCTCAgcFRlbXBWYWx1ZXNbMTAyNF07CiAgVVNIT1JUICAgIHBMZWZ0U3RhcnRPZlNlZ21lbnRbMTAyND4+MV07CiAgVVNIT1JUICAgIHBSaWdodFN0YXJ0T2ZTZWdtZW50WzEwMjQ+PjFdOwogIFNDSEFSICAgICBwUmVtYWluaW5nQml0c0luU2VnbWVudFsxMDI0Pj4xXTsKICBVQ0hBUiAgICAgcmVhZERpcmVjdGlvbjsKICBVQ0hBUiAgICAgbnVtV29yZEZvckJpdGZpZWxkOwogIFVTSE9SVCAgICBwTnVtQml0VmFsaWRJbkxhc3RXb3JkOwp9IEhDUl9TRUdNRU5UX0lORk87Cgp0eXBlZGVmIHN0cnVjdHsKCiAgVUlOVCAgICBudW1Db2Rld29yZDsKICBVSU5UICAgIG51bVNvcnRlZFNlY3Rpb247CiAgVVNIT1JUICBwTnVtQ29kZXdvcmRJblNlY3Rpb25bTUFYX1NGQl9IQ1JdOwogIFVTSE9SVCAgcE51bVNvcnRlZENvZGV3b3JkSW5TZWN0aW9uW01BWF9TRkJfSENSXTsKICBVU0hPUlQgIHBOdW1FeHRlbmRlZFNvcnRlZENvZGV3b3JkSW5TZWN0aW9uW01BWF9TRkJfSENSK01BWF9IQ1JfU0VUU107CiAgaW50ICAgICBudW1FeHRlbmRlZFNvcnRlZENvZGV3b3JkSW5TZWN0aW9uSWR4OwogIFVTSE9SVCAgcE51bUV4dGVuZGVkU29ydGVkU2VjdGlvbnNJblNldHNbTUFYX0hDUl9TRVRTXTsKICBpbnQgICAgIG51bUV4dGVuZGVkU29ydGVkU2VjdGlvbnNJblNldHNJZHg7CiAgVVNIT1JUICBwUmVvcmRlck9mZnNldFtNQVhfU0ZCX0hDUl07CiAgVUNIQVIgICBwU29ydGVkQ29kZWJvb2tbTUFYX1NGQl9IQ1JdOwoKICBVQ0hBUiAgIHBFeHRlbmRlZFNvcnRlZENvZGVib29rW01BWF9TRkJfSENSK01BWF9IQ1JfU0VUU107CiAgaW50ICAgICBleHRlbmRlZFNvcnRlZENvZGVib29rSWR4OwojaWYgREVURUNUX1RPT19MT05HX0NXX1JFQURTCiAgVUNIQVIgICBwTWF4TGVuT2ZDYkluRXh0U3J0U2VjW01BWF9TRkJfSENSK01BWF9IQ1JfU0VUU107CiAgaW50ICAgICBtYXhMZW5PZkNiSW5FeHRTcnRTZWNJZHg7CiNlbmRpZgogIFVDSEFSICAgcENvZGVib29rU3dpdGNoW01BWF9TRkJfSENSXTsKfSBIQ1JfU0VDVElPTl9JTkZPOwoKdHlwZWRlZiBVSU5UICgqU1RBVEVGVU5DKShIQU5ETEVfRkRLX0JJVFNUUkVBTSwgdm9pZCopOwoKdHlwZWRlZiBzdHJ1Y3R7CiAgLyogd29yc3QtY2FzZSBhbmQgMTAyNC80IG5vbi1QQ1dzIGV4aXN0IGluIHdvcnN0LWNhc2UgKi8KICBGSVhQX0RCTCAgKnBSZXN1bHRCYXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhc2UgYWRkcmVzcyBmb3Igc3BlY3RyYWwgZGF0YSBvdXRwdXQgdGFyZ2V0IGJ1ZmZlciAqLwogIFVJTlQgICAgICAgaU5vZGVbMTAyND4+Ml07ICAgICAgICAgICAvKiBIZWxwZXIgaW5kaWNlcyBmb3IgY29kZSBib29rcyAqLwogIFVTSE9SVCAgICAgaVJlc3VsdFBvaW50ZXJbMTAyND4+Ml07ICAvKiBIZWxwZXIgaW5kaWNlcyBmb3IgYWNjZXNzaW5nIHBSZXN1bHRCYXNlICovCiAgVUlOVCAgICAgICBwRXNjYXBlU2VxdWVuY2VJbmZvWzEwMjQ+PjJdOwogIFVJTlQgICAgICAgY29kZXdvcmRPZmZzZXQ7CiAgU1RBVEVGVU5DICBwU3RhdGU7CiAgVUNIQVIgICAgICBwQ29kZWJvb2tbMTAyND4+Ml07CiAgVUNIQVIgICAgICBwQ250U2lnblsxMDI0Pj4yXTsKICAvKiB0aGlzIGFycmF5IGhvbGRzIHRoZSBzdGF0ZXMgY29kZWQgYXMgaW50ZWdlciB2YWx1ZXMgd2l0aGluIHRoZSByYW5nZSBbMCwxLC4uLDddICovCiAgU0NIQVIgICAgICBwU3RhWzEwMjQ+PjJdOwp9IEhDUl9OT05fUENXX1NJREVJTkZPOwoKdHlwZWRlZiBzdHJ1Y3R7CiAgSENSX0lOUFVUX09VVFBVVCAgICAgIGRlY0luT3V0OwogIEhDUl9DQl9QQUlSUyAgICAgICAgICBjYlBhaXJzOwogIEhDUl9UQUJMRV9JTkZPICAgICAgICB0YWJsZUluZm87CiAgSENSX1NFR01FTlRfSU5GTyAgICAgIHNlZ21lbnRJbmZvOwogIEhDUl9TRUNUSU9OX0lORk8gICAgICBzZWN0aW9uSW5mbzsKICBIQ1JfTk9OX1BDV19TSURFSU5GTyAgbm9uUGN3U2lkZWluZm87CgogIElOVCAgICAgICAgICAgICAgICAgICBnbG9iYWxIY3JUeXBlOwp9IENFckhjckluZm87CgoKdHlwZWRlZiAgQ0VySGNySW5mbyAgKkhfSENSX0lORk87CgoKI2VuZGlmIC8qIF9BQUNERUNfSENSX1RZUEVTX0hfICovCg==