Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKiogIEZyYXVuaG9mZXIgSUlTIEZESyBTeXNMaWIgICoqKioqKioqKioqKioqKioqKioqKioKCiAgIEF1dGhvcihzKTogICBNYW51ZWwgSmFuZGVyCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiogXGZpbGUgICBGREtfYXVkaW8uaAogKiAgXGJyaWVmICBHbG9iYWwgYXVkaW8gc3RydWN0IGFuZCBjb25zdGFudCBkZWZpbml0aW9ucy4KICovCgojaWZuZGVmIEZES19BVURJT19ICiNkZWZpbmUgRkRLX0FVRElPX0gKCiNpbmNsdWRlICJtYWNoaW5lX3R5cGUuaCIKI2luY2x1ZGUgImdlbmVyaWNTdGRzLmgiCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIgp7CiNlbmRpZgoKLyoqCiAqIEZpbGUgZm9ybWF0IGlkZW50aWZpZXJzLgogKi8KdHlwZWRlZiBlbnVtCnsKICBGRl9VTktOT1dOICAgICAgICAgICA9IC0xLCAvKio8IFVua25vd24gZm9ybWF0LiAgICAgICAgKi8KICBGRl9SQVcgICAgICAgICAgICAgICA9IDAsICAvKio8IE5vIGNvbnRhaW5lciwgYml0IHN0cmVhbSBkYXRhIGNvbnZleWVkICJhcyBpcyIuICovCgogIEZGX01QNF8zR1BQICAgICAgICAgID0gMywgIC8qKjwgM0dQUCBmaWxlIGZvcm1hdC4gICAgICAqLwogIEZGX01QNF9NUDRGICAgICAgICAgID0gNCwgIC8qKjwgTVBFRy00IEZpbGUgZm9ybWF0LiAgICAgKi8KCiAgRkZfUkFXUEFDS0VUUyAgICAgICAgPSA1LCAgLyoqPCBQcm9wcmlldGFyeSByYXcgcGFja2V0IGZpbGUuICovCgogIEZGX0RSTUNUICAgICAgICAgICAgID0gMTIgIC8qKjwgRGlnaXRhbCBSYWRpbyBNb25kaWFsIChEUk0zMC9EUk0rKSBDVCBwcm9wcmlldGFyeSBmaWxlIGZvcm1hdC4gKi8KCn0gRklMRV9GT1JNQVQ7CgovKioKICogVHJhbnNwb3J0IHR5cGUgaWRlbnRpZmllcnMuCiAqLwp0eXBlZGVmIGVudW0KewogIFRUX1VOS05PV04gICAgICAgICAgID0gLTEsIC8qKjwgVW5rbm93biBmb3JtYXQuICAgICAgICAgICAgKi8KICBUVF9NUDRfUkFXICAgICAgICAgICA9IDAsICAvKio8ICJhcyBpcyIgYWNjZXNzIHVuaXRzIChwYWNrZXQgYmFzZWQgc2luY2UgdGhlcmUgaXMgb2J2aW91c2x5IG5vIHN5bmMgbGF5ZXIpICovCiAgVFRfTVA0X0FESUYgICAgICAgICAgPSAxLCAgLyoqPCBBRElGIGJpdHN0cmVhbSBmb3JtYXQuICAgICAqLwogIFRUX01QNF9BRFRTICAgICAgICAgID0gMiwgIC8qKjwgQURUUyBiaXRzdHJlYW0gZm9ybWF0LiAgICAgKi8KCiAgVFRfTVA0X0xBVE1fTUNQMSAgICAgPSA2LCAgLyoqPCBBdWRpbyBNdXggRWxlbWVudHMgd2l0aCBtdXhDb25maWdQcmVzZW50ID0gMSAqLwogIFRUX01QNF9MQVRNX01DUDAgICAgID0gNywgIC8qKjwgQXVkaW8gTXV4IEVsZW1lbnRzIHdpdGggbXV4Q29uZmlnUHJlc2VudCA9IDAsIG91dCBvZiBiYW5kIFN0cmVhbU11eENvbmZpZyAqLwoKICBUVF9NUDRfTE9BUyAgICAgICAgICA9IDEwLCAvKio8IEF1ZGlvIFN5bmMgU3RyZWFtLiAgICAgICAgICovCgogIFRUX0RSTSAgICAgICAgICAgICAgID0gMTIsIC8qKjwgRGlnaXRhbCBSYWRpbyBNb25kaWFsIChEUk0zMC9EUk0rKSBiaXRzdHJlYW0gZm9ybWF0LiAqLwoKICBUVF9NUDFfTDEgICAgICAgICAgICA9IDE2LCAvKio8IE1QRUcgMSBBdWRpbyBMYXllciAxIGF1ZGlvIGJpdHN0cmVhbS4gKi8KICBUVF9NUDFfTDIgICAgICAgICAgICA9IDE3LCAvKio8IE1QRUcgMSBBdWRpbyBMYXllciAyIGF1ZGlvIGJpdHN0cmVhbS4gKi8KICBUVF9NUDFfTDMgICAgICAgICAgICA9IDE4LCAvKio8IE1QRUcgMSBBdWRpbyBMYXllciAzIGF1ZGlvIGJpdHN0cmVhbS4gKi8KCiAgVFRfUlNWRDUwICAgICAgICAgICAgPSA1MCAvKio8ICovCgp9IFRSQU5TUE9SVF9UWVBFOwoKI2RlZmluZSBUVF9JU19QQUNLRVQoeCkgXAogICAgICAgKCAoKHgpID09IFRUX01QNF9SQVcpIFwKICAgICAgfHwgKCh4KSA9PSBUVF9EUk0pIFwKICAgICAgfHwgKCh4KSA9PSBUVF9NUDRfTEFUTV9NQ1AwKSBcCiAgICAgIHx8ICgoeCkgPT0gVFRfTVA0X0xBVE1fTUNQMSkgKQoKLyoqCiAqIEF1ZGlvIE9iamVjdCBUeXBlIGRlZmluaXRpb25zLgogKi8KdHlwZWRlZiBlbnVtCnsKICBBT1RfTk9ORSAgICAgICAgICAgICA9IC0xLAogIEFPVF9OVUxMX09CSkVDVCAgICAgID0gMCwKICBBT1RfQUFDX01BSU4gICAgICAgICA9IDEsIC8qKjwgTWFpbiBwcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfQUFDX0xDICAgICAgICAgICA9IDIsIC8qKjwgTG93IENvbXBsZXhpdHkgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfQUFDX1NTUiAgICAgICAgICA9IDMsCiAgQU9UX0FBQ19MVFAgICAgICAgICAgPSA0LAogIEFPVF9TQlIgICAgICAgICAgICAgID0gNSwKICBBT1RfQUFDX1NDQUwgICAgICAgICA9IDYsCiAgQU9UX1RXSU5fVlEgICAgICAgICAgPSA3LAogIEFPVF9DRUxQICAgICAgICAgICAgID0gOCwKICBBT1RfSFZYQyAgICAgICAgICAgICA9IDksCiAgQU9UX1JTVkRfMTAgICAgICAgICAgPSAxMCwgLyoqPCAocmVzZXJ2ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9SU1ZEXzExICAgICAgICAgID0gMTEsIC8qKjwgKHJlc2VydmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfVFRTSSAgICAgICAgICAgICA9IDEyLCAvKio8IFRUU0kgT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX01BSU5fU1lOVEggICAgICAgPSAxMywgLyoqPCBNYWluIFN5bnRoZXRpYyBvYmplY3QgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9XQVZfVEFCX1NZTlRIICAgID0gMTQsIC8qKjwgV2F2ZXRhYmxlIFN5bnRoZXNpcyBvYmplY3QgICAgICAgICAgICAgICAgKi8KICBBT1RfR0VOX01JREkgICAgICAgICA9IDE1LCAvKio8IEdlbmVyYWwgTUlESSBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX0FMR19TWU5USF9BVURfRlggPSAxNiwgLyoqPCBBbGdvcml0aG1pYyBTeW50aGVzaXMgYW5kIEF1ZGlvIEZYIG9iamVjdCAqLwogIEFPVF9FUl9BQUNfTEMgICAgICAgID0gMTcsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBBQUMgTG93IENvbXBsZXhpdHkgICAgKi8KICBBT1RfUlNWRF8xOCAgICAgICAgICA9IDE4LCAvKio8IChyZXNlcnZlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX0VSX0FBQ19MVFAgICAgICAgPSAxOSwgLyoqPCBFcnJvciBSZXNpbGllbnQoRVIpIEFBQyBMVFAgb2JqZWN0ICAgICAgICAqLwogIEFPVF9FUl9BQUNfU0NBTCAgICAgID0gMjAsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBBQUMgU2NhbGFibGUgb2JqZWN0ICAgKi8KICBBT1RfRVJfVFdJTl9WUSAgICAgICA9IDIxLCAvKio8IEVycm9yIFJlc2lsaWVudChFUikgVHdpblZRIG9iamVjdCAgICAgICAgICovCiAgQU9UX0VSX0JTQUMgICAgICAgICAgPSAyMiwgLyoqPCBFcnJvciBSZXNpbGllbnQoRVIpIEJTQUMgb2JqZWN0ICAgICAgICAgICAqLwogIEFPVF9FUl9BQUNfTEQgICAgICAgID0gMjMsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBBQUMgTG93RGVsYXkgb2JqZWN0ICAgKi8KICBBT1RfRVJfQ0VMUCAgICAgICAgICA9IDI0LCAvKio8IEVycm9yIFJlc2lsaWVudChFUikgQ0VMUCBvYmplY3QgICAgICAgICAgICovCiAgQU9UX0VSX0hWWEMgICAgICAgICAgPSAyNSwgLyoqPCBFcnJvciBSZXNpbGllbnQoRVIpIEhWWEMgb2JqZWN0ICAgICAgICAgICAqLwogIEFPVF9FUl9ISUxOICAgICAgICAgID0gMjYsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBISUxOIG9iamVjdCAgICAgICAgICAgKi8KICBBT1RfRVJfUEFSQSAgICAgICAgICA9IDI3LCAvKio8IEVycm9yIFJlc2lsaWVudChFUikgUGFyYW1ldHJpYyBvYmplY3QgICAgICovCiAgQU9UX1JTVkRfMjggICAgICAgICAgPSAyOCwgLyoqPCBtaWdodCBiZWNvbWUgU1NDICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9QUyAgICAgICAgICAgICAgID0gMjksIC8qKjwgUFMsIFBhcmFtZXRyaWMgU3RlcmVvIChpbmNsdWRlcyBTQlIpICAgICAgKi8KICBBT1RfTVBFR1MgICAgICAgICAgICA9IDMwLCAvKio8IE1QRUcgU3Vycm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIEFPVF9FU0NBUEUgICAgICAgICAgID0gMzEsIC8qKjwgU2lnbmFsIEFPVCB1c2VzIG1vcmUgdGhhbiA1IGJpdHMgICAgICAgICAgKi8KCiAgQU9UX01QM09OTVA0X0wxICAgICAgPSAzMiwgLyoqPCBNUEVHLUxheWVyMSBpbiBtcDQgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9NUDNPTk1QNF9MMiAgICAgID0gMzMsIC8qKjwgTVBFRy1MYXllcjIgaW4gbXA0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfTVAzT05NUDRfTDMgICAgICA9IDM0LCAvKio8IE1QRUctTGF5ZXIzIGluIG1wNCAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX1JTVkRfMzUgICAgICAgICAgPSAzNSwgLyoqPCBtaWdodCBiZWNvbWUgRFNUICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9SU1ZEXzM2ICAgICAgICAgID0gMzYsIC8qKjwgbWlnaHQgYmVjb21lIEFMUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfQUFDX1NMUyAgICAgICAgICA9IDM3LCAvKio8IEFBQyArIFNMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX1NMUyAgICAgICAgICAgICAgPSAzOCwgLyoqPCBTTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9FUl9BQUNfRUxEICAgICAgID0gMzksIC8qKjwgQUFDIEVuaGFuY2VkIExvdyBEZWxheSAgICAgICAgICAgICAgICAgICAgKi8KCiAgQU9UX1VTQUMgICAgICAgICAgICAgPSA0MiwgLyoqPCBVU0FDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9TQU9DICAgICAgICAgICAgID0gNDMsIC8qKjwgU0FPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfTERfTVBFR1MgICAgICAgICA9IDQ0LCAvKio8IExvdyBEZWxheSBNUEVHIFN1cnJvdW5kICAgICAgICAgICAgICAgICAgICovCgogIEFPVF9SU1ZENTAgICAgICAgICAgID0gNTAsICAvKio8IEludGVyaW0gQU9UIGZvciBSc3ZkNTAgICAgICAgICAgICAgICAgICAgKi8KCiAgLyogUHNldWRvIEFPVHMgKi8KICBBT1RfTVAyX0FBQ19NQUlOICAgICA9IDEyOCwgLyoqPCBWaXJ0dWFsIEFPVCBNUDIgTWFpbiBwcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfTVAyX0FBQ19MQyAgICAgICA9IDEyOSwgLyoqPCBWaXJ0dWFsIEFPVCBNUDIgTG93IENvbXBsZXhpdHkgcHJvZmlsZSAgICAgICAgICAgICAgICAgKi8KICBBT1RfTVAyX0FBQ19TU1IgICAgICA9IDEzMCwgLyoqPCBWaXJ0dWFsIEFPVCBNUDIgU2NhbGFibGUgU2FtcGxpbmcgUmF0ZSBwcm9maWxlICAgICAgICAgKi8KCiAgQU9UX01QMl9TQlIgICAgICAgICAgPSAxMzIsIC8qKjwgVmlydHVhbCBBT1QgTVAyIExvdyBDb21wbGV4aXR5IFByb2ZpbGUgd2l0aCBTQlIgICAgICAgICovCgogIEFPVF9EQUIgICAgICAgICAgICAgID0gMTM0LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgKExheWVyMiB3aXRoIHNjYWxlZmFjdG9yIENSQykgICAgICAqLwogIEFPVF9EQUJQTFVTX0FBQ19MQyAgID0gMTM1LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgcGx1cyBBQUMtTEMgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9EQUJQTFVTX1NCUiAgICAgID0gMTM2LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgcGx1cyBIRS1BQUMgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9EQUJQTFVTX1BTICAgICAgID0gMTM3LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgcGx1cyBIRS1BQUMgdjIgICAgICAgICAgICAgICAgICAgICAqLwoKICBBT1RfUExBSU5fTVAxICAgICAgICA9IDE0MCwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgcGxhaW4gbXAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfUExBSU5fTVAyICAgICAgICA9IDE0MSwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgcGxhaW4gbXAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfUExBSU5fTVAzICAgICAgICA9IDE0MiwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgcGxhaW4gbXAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgQU9UX0RSTV9BQUMgICAgICAgICAgPSAxNDMsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSAoRVItQUFDLVNDQUwgd2l0aG91dCBTQlIpICAgICAgICAgICovCiAgQU9UX0RSTV9TQlIgICAgICAgICAgPSAxNDQsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSAoRVItQUFDLVNDQUwgd2l0aCBTQlIpICAgICAgICAgICAgICovCiAgQU9UX0RSTV9NUEVHX1BTICAgICAgPSAxNDUsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSAoRVItQUFDLVNDQUwgd2l0aCBTQlIgYW5kIE1QRUctUFMpICovCiAgQU9UX0RSTV9TVVJST1VORCAgICAgPSAxNDYsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSBTdXJyb3VuZCAoRVItQUFDLVNDQUwgKCtTQlIpICtNUFMpICovCgogIEFPVF9NUDJfUFMgICAgICAgICAgID0gMTU2LCAvKio8IFZpcnR1YWwgQU9UIE1QMiBMb3cgQ29tcGxleGl0eSBQcm9maWxlIHdpdGggU0JSIGFuZCBQUyAqLwoKICBBT1RfTVBFR1NfUkVTSURVQUxTICA9IDI1NiAgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgTVBFRyBTdXJyb3VuZCByZXNpZHVhbHMgICAgICAgICAgICAgICAgKi8KCn0gQVVESU9fT0JKRUNUX1RZUEU7CgovKiogQ2hhbm5lbCBNb2RlICggMS03IGVxdWFscyBNUEVHIGNoYW5uZWwgY29uZmlndXJhdGlvbnMsIG90aGVycyBhcmUgYXJiaXRyYXJ5KS4gKi8KdHlwZWRlZiBlbnVtIHsKICBNT0RFX0lOVkFMSUQgICAgICAgICAgICAgICAgICA9IC0xLAogIE1PREVfVU5LTk9XTiAgICAgICAgICAgICAgICAgID0gIDAsCiAgTU9ERV8xICAgICAgICAgICAgICAgICAgICAgICAgPSAgMSwgICAgICAgLyoqPCBDICovCiAgTU9ERV8yICAgICAgICAgICAgICAgICAgICAgICAgPSAgMiwgICAgICAgLyoqPCBMK1IgKi8KICBNT0RFXzFfMiAgICAgICAgICAgICAgICAgICAgICA9ICAzLCAgICAgICAvKio8IEMsIEwrUiAqLwogIE1PREVfMV8yXzEgICAgICAgICAgICAgICAgICAgID0gIDQsICAgICAgIC8qKjwgQywgTCtSLCBSZWFyICovCiAgTU9ERV8xXzJfMiAgICAgICAgICAgICAgICAgICAgPSAgNSwgICAgICAgLyoqPCBDLCBMK1IsIExTK1JTICovCiAgTU9ERV8xXzJfMl8xICAgICAgICAgICAgICAgICAgPSAgNiwgICAgICAgLyoqPCBDLCBMK1IsIExTK1JTLCBMRkUgKi8KICBNT0RFXzFfMl8yXzJfMSAgICAgICAgICAgICAgICA9ICA3LCAgICAgICAvKio8IEMsIExDK1JDLCBMK1IsIExTK1JTLCBMRkUgKi8KCgogIE1PREVfMV8xICAgICAgICAgICAgICAgICAgICAgID0gMTYsICAgICAgIC8qKjwgMiBTQ0VzIChkdWFsIG1vbm8pICovCiAgTU9ERV8xXzFfMV8xICAgICAgICAgICAgICAgICAgPSAxNywgICAgICAgLyoqPCA0IFNDRXMgKi8KICBNT0RFXzFfMV8xXzFfMV8xICAgICAgICAgICAgICA9IDE4LCAgICAgICAvKio8IDYgU0NFcyAqLwogIE1PREVfMV8xXzFfMV8xXzFfMV8xICAgICAgICAgID0gMTksICAgICAgIC8qKjwgOCBTQ0VzICovCiAgTU9ERV8xXzFfMV8xXzFfMV8xXzFfMV8xXzFfMSAgPSAyMCwgICAgICAgLyoqPCAxMiBTQ0VzICovCgogIE1PREVfMl8yICAgICAgICAgICAgICAgICAgICAgID0gMjEsICAgICAgIC8qKjwgMiBDUEVzICovCiAgTU9ERV8yXzJfMiAgICAgICAgICAgICAgICAgICAgPSAyMiwgICAgICAgLyoqPCAzIENQRXMgKi8KICBNT0RFXzJfMl8yXzIgICAgICAgICAgICAgICAgICA9IDIzLCAgICAgICAvKio8IDQgQ1BFcyAqLwogIE1PREVfMl8yXzJfMl8yXzIgICAgICAgICAgICAgID0gMjQsICAgICAgIC8qKjwgNiBDUEVzICovCgogIE1PREVfMl8xICAgICAgICAgICAgICAgICAgICAgID0gMzAsICAgICAgIC8qKjwgQ1BFLFNDRSAoQVJJQiBzdGFuZGFyZCBCMzIpICovCgogIE1PREVfN18xX1JFQVJfU1VSUk9VTkQgICAgICAgID0gMzMsICAgICAgIC8qKjwgQywgTCtSLCBMUytSUywgTHJlYXIrUnJlYXIsIExGRSAqLwogIE1PREVfN18xX0ZST05UX0NFTlRFUiAgICAgICAgID0gMzQgICAgICAgIC8qKjwgQywgTEMrUkMsIEwrUiwgTFMrUlMsIExGRSAqLwoKfSBDSEFOTkVMX01PREU7CgovKiogU3BlYWtlciBkZXNjcmlwdGlvbiB0YWdzICovCnR5cGVkZWYgZW51bSB7CiAgQUNUX05PTkUsCiAgQUNUX0ZST05ULAogIEFDVF9TSURFLAogIEFDVF9CQUNLLAogIEFDVF9MRkUsCiAgQUNUX0ZST05UX1RPUCwKICBBQ1RfU0lERV9UT1AsCiAgQUNUX0JBQ0tfVE9QLAogIEFDVF9UT1AgLyogVHMgKi8KfSBBVURJT19DSEFOTkVMX1RZUEU7Cgp0eXBlZGVmIGVudW0KewogIFNJR19VTktOT1dOICAgICAgICAgICAgICAgICA9IC0xLAogIFNJR19JTVBMSUNJVCAgICAgICAgICAgICAgICA9ICAwLAogIFNJR19FWFBMSUNJVF9CV19DT01QQVRJQkxFICA9ICAxLAogIFNJR19FWFBMSUNJVF9ISUVSQVJDSElDQUwgICA9ICAyCgp9IFNCUl9QU19TSUdOQUxJTkc7CgovKioKICogQXVkaW8gQ29kZWMgZmxhZ3MuCiAqLwojZGVmaW5lIEFDX0VSX1ZDQjExICAgICAweDAwMDAwMSAgLyohPCBhYWNTZWN0aW9uRGF0YVJlc2lsaWVuY2VGbGFnICAgICBmbGFnIChmcm9tIEFTQyk6IDEgbWVhbnMgdXNlIHZpcnR1YWwgY29kZWJvb2tzICAqLwojZGVmaW5lIEFDX0VSX1JWTEMgICAgICAweDAwMDAwMiAgLyohPCBhYWNTcGVjdHJhbERhdGFSZXNpbGllbmNlRmxhZyAgICAgZmxhZyAoZnJvbSBBU0MpOiAxIG1lYW5zIHVzZSBodWZmbWFuIGNvZGV3b3JkIHJlb3JkZXJpbmcgKi8KI2RlZmluZSBBQ19FUl9IQ1IgICAgICAgMHgwMDAwMDQgIC8qITwgYWFjU2VjdGlvbkRhdGFSZXNpbGllbmNlRmxhZyAgICAgZmxhZyAoZnJvbSBBU0MpOiAxIG1lYW5zIHVzZSB2aXJ0dWFsIGNvZGVib29rcyAgKi8KI2RlZmluZSBBQ19TQ0FMQUJMRSAgICAgMHgwMDAwMDggIC8qITwgQUFDIFNjYWxhYmxlKi8KI2RlZmluZSBBQ19FTEQgICAgICAgICAgMHgwMDAwMTAgIC8qITwgQUFDLUVMRCAqLwojZGVmaW5lIEFDX0xEICAgICAgICAgICAweDAwMDAyMCAgLyohPCBBQUMtTEQgKi8KI2RlZmluZSBBQ19FUiAgICAgICAgICAgMHgwMDAwNDAgIC8qITwgRVIgc3ludGF4ICovCiNkZWZpbmUgQUNfQlNBQyAgICAgICAgIDB4MDAwMDgwICAvKiE8IEJTQUMgKi8KI2RlZmluZSBBQ19VU0FDICAgICAgICAgMHgwMDAxMDAgIC8qITwgVVNBQyAqLwojZGVmaW5lIEFDX1VTQUNfVFcgICAgICAweDAwMDIwMCAgLyohPCBVU0FDIHRpbWUgd2FycGVkIGZpbHRlciBiYW5rIGlzIGFjdGl2ZSAqLwojZGVmaW5lIEFDX1VTQUNfTk9JU0UgICAweDAwMDQwMCAgLyohPCBVU0FDIG5vaXNlIGZpbGxpbmcgaXMgYWN0aXZlICovCiNkZWZpbmUgQUNfVVNBQ19IQkUgICAgIDB4MDAwODAwICAvKiE8IFVTQUMgaGFybW9uaWMgYmFuZHdpZHRoIGV4dGVuc2lvbiBpcyBhY3RpdmUgKi8KI2RlZmluZSBBQ19SU1ZENTAgICAgICAgMHgwMDEwMDAgIC8qITwgUnN2ZDUwICovCiNkZWZpbmUgQUNfU0JSX1BSRVNFTlQgIDB4MDAyMDAwICAvKiE8IFNCUiBwcmVzZW50IGZsYWcgKGZyb20gQVNDKSAgICAgICAgICAgICAqLwojZGVmaW5lIEFDX1NCUkNSQyAgICAgICAweDAwNDAwMCAgLyohPCBTQlIgQ1JDIHByZXNlbnQgZmxhZy4gT25seSByZWxldmFudCBmb3IgQUFDLUVMRCBmb3Igbm93LiAqLwojZGVmaW5lIEFDX1BTX1BSRVNFTlQgICAweDAwODAwMCAgLyohPCBQUyBwcmVzZW50IGZsYWcgKGZyb20gQVNDIG9yIGltcGxpY2l0KSAgKi8KI2RlZmluZSBBQ19NUFNfUFJFU0VOVCAgMHgwMTAwMDAgIC8qITwgTVBTIHByZXNlbnQgZmxhZyAoZnJvbSBBU0Mgb3IgaW1wbGljaXQpICovCiNkZWZpbmUgQUNfRFJNICAgICAgICAgIDB4MDIwMDAwICAvKiE8IERSTSBiaXQgc3RyZWFtIHN5bnRheCAqLwojZGVmaW5lIEFDX0lOREVQICAgICAgICAweDA0MDAwMCAgLyohPCBJbmRlcGVuZGVuY3kgZmxhZyAqLwojZGVmaW5lIEFDX01QU19SRVMgICAgICAweDA4MDAwMCAgLyohPCBNUFMgcmVzaWR1YWwgaW5kaXZpZHVhbCBjaGFubmVsIGRhdGEuICovCiNkZWZpbmUgQUNfREFCICAgICAgICAgIDB4ODAwMDAwICAvKiE8IERBQiBiaXQgc3RyZWFtIHN5bnRheCAqLwojZGVmaW5lIEFDX0xEX01QUyAgICAgMHgwMTAwMDAwMCAgLyohPCBMb3cgRGVsYXkgTVBTLiAqLwoKCi8qIENPREVSX0NPTkZJRzo6ZmxhZ3MgKi8KI2RlZmluZSBDQ19NUEVHX0lEICAgICAgICAgMHgwMDEwMDAwMAojZGVmaW5lIENDX0lTX0JBU0VMQVlFUiAgICAweDAwMjAwMDAwCiNkZWZpbmUgQ0NfUFJPVEVDVElPTiAgICAgIDB4MDA0MDAwMDAKI2RlZmluZSBDQ19TQlIgICAgICAgICAgICAgMHgwMDgwMDAwMAojZGVmaW5lIENDX1NCUkNSQyAgICAgICAgICAweDAwMDEwMDAwCiNkZWZpbmUgQ0NfUlZMQyAgICAgICAgICAgIDB4MDEwMDAwMDAKI2RlZmluZSBDQ19WQ0IxMSAgICAgICAgICAgMHgwMjAwMDAwMAojZGVmaW5lIENDX0hDUiAgICAgICAgICAgICAweDA0MDAwMDAwCiNkZWZpbmUgQ0NfUFNFVURPX1NVUlJPVU5EIDB4MDgwMDAwMDAKI2RlZmluZSBDQ19VU0FDX05PSVNFICAgICAgMHgxMDAwMDAwMAojZGVmaW5lIENDX1VTQUNfVFcgICAgICAgICAweDIwMDAwMDAwCiNkZWZpbmUgQ0NfVVNBQ19IQkUgICAgICAgIDB4NDAwMDAwMDAKCi8qKiBHZW5lcmljIGF1ZGlvIGNvZGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiAqLwp0eXBlZGVmIHN0cnVjdCB7CiAgQVVESU9fT0JKRUNUX1RZUEUgYW90OyAgICAgICAgIC8qKjwgQXVkaW8gT2JqZWN0IFR5cGUgKEFPVCkuICAgICAgICAgICAqLwogIEFVRElPX09CSkVDVF9UWVBFIGV4dEFPVDsgICAgICAvKio8IEV4dGVuc2lvbiBBdWRpbyBPYmplY3QgVHlwZSAoU0JSKS4gKi8KICBDSEFOTkVMX01PREUgY2hhbm5lbE1vZGU7ICAgICAgLyoqPCBDaGFubmVsIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICovCiAgSU5UICAgICAgICBzYW1wbGluZ1JhdGU7ICAgICAgIC8qKjwgU2FtcGxpbmcgcmF0ZS4gICAgICAgICAgICAgICAgICAgICAqLwogIElOVCAgICAgICAgZXh0U2FtcGxpbmdSYXRlOyAgICAvKio8IEV4dGVuZGVkIHNhbXBsZXJhdGUgKFNCUikuICAgICAgICAgKi8KICBJTlQgICAgICAgIGJpdFJhdGU7ICAgICAgICAgICAgLyoqPCBBdmVyYWdlIGJpdHJhdGUuICAgICAgICAgICAgICAgICAgICovCiAgaW50ICAgICAgICBzYW1wbGVzUGVyRnJhbWU7ICAgIC8qKjwgTnVtYmVyIG9mIFBDTSBzYW1wbGVzIHBlciBjb2RlYyBmcmFtZSBhbmQgYXVkaW8gY2hhbm5lbC4gKi8KICBpbnQgICAgICAgIG5vQ2hhbm5lbHM7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMuICAgICAgICAgICovCiAgaW50ICAgICAgICBiaXRzRnJhbWU7CiAgaW50ICAgICAgICBuU3ViRnJhbWVzOyAgICAgICAgIC8qKjwgQW1vdW50IG9mIGVuY29kZXIgc3ViZnJhbWVzLiAxIG1lYW5zIG5vIHN1YmZyYW1pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgaW50ICAgICAgICBCU0FDbnVtT2ZTdWJGcmFtZTsgIC8qKjwgVGhlIG51bWJlciBvZiB0aGUgc3ViLWZyYW1lcyB3aGljaCBhcmUgZ3JvdXBlZCBhbmQgdHJhbnNtaXR0ZWQgaW4gYSBzdXBlci1mcmFtZSAoQlNBQykuICovCiAgaW50ICAgICAgICBCU0FDbGF5ZXJMZW5ndGg7ICAgIC8qKjwgVGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIHRoZSBsYXJnZS1zdGVwIGxheWVycyBpbiBieXRlcyAoQlNBQykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgVUlOVCAgICAgICBmbGFnczsgICAgICAgICAgICAgIC8qKjwgZmxhZ3MgKi8KICBVQ0hBUiAgICAgIG1hdHJpeE1peGRvd25BOyAgICAgLyoqPCBNYXRyaXggbWl4ZG93biBpbmRleCB0byBwdXQgaW50byBQQ0UuIERlZmF1bHQgdmFsdWUgMCBtZWFucyBubyBtaXhkb3duIGNvZWZmaWNpZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcyBhcmUgMS00IHdoaWNoIGNvcnJlc3BvbmQgdG8gbWF0cml4X21peGRvd25faWR4IDAtMy4gKi8KICBVQ0hBUiAgICAgIGhlYWRlclBlcmlvZDsgICAgICAgLyoqPCBGcmFtZSBwZXJpb2QgZm9yIHNlbmRpbmcgaW4gYmFuZCBjb25maWd1cmF0aW9uIGJ1ZmZlcnMgaW4gdGhlIHRyYW5zcG9ydCBsYXllci4gKi8KCiAgVUNIQVIgICAgICBzdGVyZW9Db25maWdJbmRleDsgLyoqPCBVU0FDIE1QUyBzdGVyZW8gbW9kZSAqLwogIFVDSEFSICAgICAgc2JyTW9kZTsgICAgICAgICAgIC8qKjwgVVNBQyBTQlIgbW9kZSAqLwogIFNCUl9QU19TSUdOQUxJTkcgc2JyU2lnbmFsaW5nOy8qKjwgMDogaW1wbGljaXQgc2lnbmFsaW5nLCAxOiBiYWNrd2FyZHMgY29tcGF0aWJsZSBleHBsaWNpdCBzaWduYWxpbmcsIDI6IGhpZXJhcmNpY2FsIGV4cGxpY2l0IHNpZ25hbGluZyAqLwoKICBVQ0hBUiAgICAgIHNiclByZXNlbnQ7CiAgVUNIQVIgICAgICBwc1ByZXNlbnQ7Cn0gQ09ERVJfQ09ORklHOwoKLyoqIE1QNCBFbGVtZW50IElEcy4gKi8KdHlwZWRlZiBlbnVtCnsKICBJRF9OT05FID0gLTEsICAgLyoqPCBJbnZhbGlkIEVsZW1lbnQgaGVscGVyIElELiAgICAgICAgICAgICAqLwogIElEX1NDRSA9IDAsICAgICAvKio8IFNpbmdsZSBDaGFubmVsIEVsZW1lbnQuICAgICAgICAgICAgICAgICovCiAgSURfQ1BFID0gMSwgICAgIC8qKjwgQ2hhbm5lbCBQYWlyIEVsZW1lbnQuICAgICAgICAgICAgICAgICAgKi8KICBJRF9DQ0UgPSAyLCAgICAgLyoqPCBDb3VwbGluZyBDaGFubmVsIEVsZW1lbnQuICAgICAgICAgICAgICAqLwogIElEX0xGRSA9IDMsICAgICAvKio8IExGRSBDaGFubmVsIEVsZW1lbnQuICAgICAgICAgICAgICAgICAgICovCiAgSURfRFNFID0gNCwgICAgIC8qKjwgQ3VycmVudGx5IG9uZSBEYXRhIFN0cmVhbSBFbGVtZW50IGZvciBhbmNpbGxhcnkgZGF0YSBpcyBzdXBwb3J0ZWQuICovCiAgSURfUENFID0gNSwgICAgIC8qKjwgUHJvZ3JhbSBDb25maWcgRWxlbWVudC4gICAgICAgICAgICAgICAgKi8KICBJRF9GSUwgPSA2LCAgICAgLyoqPCBGaWxsIEVsZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIElEX0VORCA9IDcsICAgICAvKio8IEFybmllIChFbmQgRWxlbWVudCA9IFRlcm1pbmF0b3IpLiAgICAgICovCiAgSURfRVhUID0gOCwgICAgIC8qKjwgRXh0ZW5zaW9uIFBheWxvYWQgKEVSIG9ubHkpLiAgICAgICAgICAgKi8KICBJRF9TQ0FMID0gOSwgICAgLyoqPCBBQUMgc2NhbGFibGUgZWxlbWVudCAoRVIgb25seSkuICAgICAgICAqLwogIElEX0xBU1QKfSBNUDRfRUxFTUVOVF9JRDsKCiNkZWZpbmUgSVNfQ0hBTk5FTF9FTEVNRU5UKGVsZW1lbnRJZCkgXAogICgoZWxlbWVudElkKSA9PSBJRF9TQ0UgXAp8fCAoZWxlbWVudElkKSA9PSBJRF9DUEUgXAp8fCAoZWxlbWVudElkKSA9PSBJRF9MRkUpCgojZGVmaW5lIEVYVF9JRF9CSVRTIDQgIC8qKjwgU2l6ZSBpbiBiaXRzIG9mIGV4dGVuc2lvbiBwYXlsb2FkIHR5cGUgdGFncy4gKi8KCi8qKiBFeHRlbnNpb24gcGF5bG9hZCB0eXBlcy4gKi8KdHlwZWRlZiBlbnVtIHsKICBFWFRfRklMICAgICAgICAgICA9IDB4MDAsCiAgRVhUX0ZJTExfREFUQSAgICAgPSAweDAxLAogIEVYVF9EQVRBX0VMRU1FTlQgID0gMHgwMiwKICBFWFRfREFUQV9MRU5HVEggICA9IDB4MDMsCiAgRVhUX0xEU0FDX0RBVEEgICAgPSAweDA5LAogIEVYVF9TQU9DX0RBVEEgICAgID0gMHgwYSwKICBFWFRfRFlOQU1JQ19SQU5HRSA9IDB4MGIsCiAgRVhUX1NBQ19EQVRBICAgICAgPSAweDBjLAogIEVYVF9TQlJfREFUQSAgICAgID0gMHgwZCwKICBFWFRfU0JSX0RBVEFfQ1JDICA9IDB4MGUKfSBFWFRfUEFZTE9BRF9UWVBFOwoKCi8qKgogKiBQcm9wcmlldGFyeSByYXcgcGFja2V0IGZpbGUgY29uZmlndXJhdGlvbiBkYXRhIHR5cGUgaWRlbnRpZmllci4KICovCnR5cGVkZWYgZW51bQp7CiAgVENfTk9USElORyA9IDAsICAgICAvKiBObyBjb25maWd1cmF0aW9uIGF2YWlsYWJsZSAtPiBpbi1iYW5kIGNvbmZpZ3VyYXRpb24uICAgKi8KICBUQ19SQVdfQVNDLCAgICAgICAgIC8qIENvbmZpZ3VyYXRpb24gZGF0YSBmaWVsZCBpcyBhIHJhdyBBdWRpb1NwZWNpZmljQ29uZmlnLiAqLwogIFRDX1JBV19TTUMsICAgICAgICAgLyogQ29uZmlndXJhdGlvbiBkYXRhIGZpZWxkIGlzIGEgcmF3IFN0cmVhbU11eENvbmZpZy4gICAgICovCiAgVENfUkFXX1NEQyAgICAgICAgICAvKiBDb25maWd1cmF0aW9uIGRhdGEgZmllbGQgaXMgYSByYXcgRHJtIFNEQy4gICAgICAgICAgICAgKi8KCn0gVFBfQ09ORklHX1RZUEU7CgovKgogKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAqIExpYnJhcnkgaWRlbnRpZmljYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nCiAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICovCi8qIFxjb25kICovCiNkZWZpbmUgTU9EVUxFX0lEX01BU0sgICgweDAwMDAwMGZmKQojZGVmaW5lIE1PRFVMRV9JRF9TSElGVCAoMjQpCgp0eXBlZGVmIGVudW0gewogIEZES19OT05FICAgPSAwLAogIEZES19UT09MUyAgPSAxLAogIEZES19TWVNMSUIgPSAyLAogIEZES19BQUNERUMgPSAzLAogIEZES19BQUNFTkMgPSA0LAogIEZES19TQlJERUMgPSA1LAogIEZES19TQlJFTkMgPSA2LAogIEZES19UUERFQyAgPSA3LAogIEZES19UUEVOQyAgPSA4LAogIEZES19NUFNERUMgPSA5LAogIEZES19NUEVHRklMRVJFQUQgID0gMTAsCiAgRkRLX01QRUdGSUxFV1JJVEUgPSAxMSwKICBGREtfTVAyREVDID0gMTIsCiAgRkRLX0RBQkRFQyA9IDEzLAogIEZES19EQUJQQVJTRSA9IDE0LAogIEZES19EUk1ERUMgPSAxNSwKICBGREtfRFJNUEFSU0UgPSAxNiwKICBGREtfQUFDTERFTkMgPSAxNywKICBGREtfTVAyRU5DID0gMTgsCiAgRkRLX01QM0VOQyA9IDE5LAogIEZES19NUDNERUMgPSAyMCwKICBGREtfTVAzSEVBRFBIT05FID0gMjEsCiAgRkRLX01QM1NERUMgPSAyMiwKICBGREtfTVAzU0VOQyA9IDIzLAogIEZES19FQUVDICAgID0gMjQsCiAgRkRLX0RBQkVOQyAgPSAyNSwKICBGREtfRE1CREVDICA9IDI2LAogIEZES19GRFJFVkVSQiA9IDI3LAogIEZES19EUk1FTkMgID0gMjgsCiAgRkRLX01FVEFEQVRBVFJBTlNDT0RFUiA9IDI5LAogIEZES19BQzNERUMgPSAzMCwKICBGREtfUENNRE1YID0gMzEsCgogIEZES19NT0RVTEVfTEFTVAoKfSBGREtfTU9EVUxFX0lEOwoKLyogQUFDIGNhcGFiaWxpdHkgZmxhZ3MgKi8KI2RlZmluZSBDQVBGX0FBQ19MQyAgICAgICAgICAgMHgwMDAwMDAwMSAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBMb3cgQ29tcGxleGl0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9FUl9BQUNfTEQgICAgICAgIDB4MDAwMDAwMDIgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgTG93IERlbGF5IHdpdGggRXJyb3IgUmVzaWxpZW5jZSB0b29scy4gICAgICAqLwojZGVmaW5lIENBUEZfRVJfQUFDX1NDQUwgICAgICAweDAwMDAwMDA0ICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIFNjYWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0VSX0FBQ19MQyAgICAgICAgMHgwMDAwMDAwOCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBMb3cgQ29tcGxleGl0eSB3aXRoIEVycm9yIFJlc2lsaWVuY2UgdG9vbHMuICovCiNkZWZpbmUgQ0FQRl9BQUNfNDgwICAgICAgICAgIDB4MDAwMDAwMTAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgd2l0aCA0ODAgZnJhbWVsZW5ndGguICAqLwojZGVmaW5lIENBUEZfQUFDXzUxMiAgICAgICAgICAweDAwMDAwMDIwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIHdpdGggNTEyIGZyYW1lbGVuZ3RoLiAgKi8KI2RlZmluZSBDQVBGX0FBQ185NjAgICAgICAgICAgMHgwMDAwMDA0MCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyB3aXRoIDk2MCBmcmFtZWxlbmd0aC4gICovCiNkZWZpbmUgQ0FQRl9BQUNfMTAyNCAgICAgICAgIDB4MDAwMDAwODAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgd2l0aCAxMDI0IGZyYW1lbGVuZ3RoLiAqLwojZGVmaW5lIENBUEZfQUFDX0hDUiAgICAgICAgICAweDAwMDAwMTAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIHdpdGggSHVmZm1hbiBDb2Rld29yZCBSZW9yZGVyaW5nLiAgICAqLwojZGVmaW5lIENBUEZfQUFDX1ZDQjExICAgICAgICAweDAwMDAwMjAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIFZpcnR1YWwgQ29kZWJvb2sgMTEuICAgICovCiNkZWZpbmUgQ0FQRl9BQUNfUlZMQyAgICAgICAgIDB4MDAwMDA0MDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgUmV2ZXJzaWJsZSBWYXJpYWJsZSBMZW5ndGggQ29kaW5nLiAgICovCiNkZWZpbmUgQ0FQRl9BQUNfTVBFRzQgICAgICAgIDB4MDAwMDA4MDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBNUEVHIGZpbGUgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9BQUNfRFJDICAgICAgICAgIDB4MDAwMDEwMDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgRHluYW1pYyBSYW5nZSBDb250cm9sLiAqLwojZGVmaW5lIENBUEZfQUFDX0NPTkNFQUxNRU5UICAweDAwMDAyMDAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIGNvbmNlYWxtZW50LiAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0FBQ19EUk1fQlNGT1JNQVQgMHgwMDAwNDAwMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBEUk0gYmlzdHJlYW0gZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfRVJfQUFDX0VMRCAgICAgICAweDAwMDA4MDAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIEVuaGFuY2VkIExvdyBEZWxheSB3aXRoIEVycm9yIFJlc2lsaWVuY2UgdG9vbHMuICAqLwojZGVmaW5lIENBUEZfRVJfQUFDX0JTQUMgICAgICAweDAwMDEwMDAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIEJTQUMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0FBQ19TVVBFUkZSQU1JTkcgMHgwMDAyMDAwMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBTdXBlcmZyYW1pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCi8qIFRyYW5zcG9ydCBjYXBhYmlsaXR5IGZsYWdzICovCiNkZWZpbmUgQ0FQRl9BRFRTICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBRFRTIHRyYW5zcG9ydCBmb3JtYXQuICAgICAgICAqLwojZGVmaW5lIENBUEZfQURJRiAgICAgICAgICAgICAweDAwMDAwMDAyICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQURJRiB0cmFuc3BvcnQgZm9ybWF0LiAgICAgICAgKi8KI2RlZmluZSBDQVBGX0xBVE0gICAgICAgICAgICAgMHgwMDAwMDAwNCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIExBVE0gdHJhbnNwb3J0IGZvcm1hdC4gICAgICAgICovCiNkZWZpbmUgQ0FQRl9MT0FTICAgICAgICAgICAgIDB4MDAwMDAwMDggIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBMT0FTIHRyYW5zcG9ydCBmb3JtYXQuICAgICAgICAqLwojZGVmaW5lIENBUEZfUkFXUEFDS0VUUyAgICAgICAweDAwMDAwMDEwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgUkFXIFBBQ0tFVFMgdHJhbnNwb3J0IGZvcm1hdC4gKi8KI2RlZmluZSBDQVBGX0RSTSAgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIERSTS9EUk0rIHRyYW5zcG9ydCBmb3JtYXQuICAgICovCiNkZWZpbmUgQ0FQRl9SU1ZENTAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBSU1ZENTAgdHJhbnNwb3J0IGZvcm1hdCAgICAgICAqLwoKLyogU0JSIGNhcGFiaWxpdHkgZmxhZ3MgKi8KI2RlZmluZSBDQVBGX1NCUl9MUCAgICAgICAgICAgMHgwMDAwMDAwMSAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIFNCUiBMb3cgUG93ZXIgbW9kZS4gICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9TQlJfSFEgICAgICAgICAgIDB4MDAwMDAwMDIgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBTQlIgSGlnaCBRdWFsaXR5IG1vZGUuICAgICAgICAqLwojZGVmaW5lIENBUEZfU0JSX0RSTV9CUyAgICAgICAweDAwMDAwMDA0ICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX1NCUl9DT05DRUFMTUVOVCAgMHgwMDAwMDAwOCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIFNCUiBjb25jZWFsbWVudC4gICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9TQlJfRFJDICAgICAgICAgIDB4MDAwMDAwMTAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBTQlIgRHluYW1pYyBSYW5nZSBDb250cm9sLiAgICAqLwojZGVmaW5lIENBUEZfU0JSX1BTX01QRUcgICAgICAweDAwMDAwMDIwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgTVBFRyBQYXJhbWV0cmljIFN0ZXJlby4gICAgICAgKi8KI2RlZmluZSBDQVBGX1NCUl9QU19EUk0gICAgICAgMHgwMDAwMDA0MCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIERSTSBQYXJhbWV0cmljIFN0ZXJlby4gICAgICAgICovCgovKiBNUDIgZW5jb2RlciBjYXBhYmlsaXR5IGZsYWdzICovCiNkZWZpbmUgQ0FQRl9NUDJFTkNfU1MgICAgICAgIDB4MDAwMDAwMDEgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBTZWFtbGVzcyBTd2l0Y2hpbmcuICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfTVAyRU5DX0RBQiAgICAgICAweDAwMDAwMDAyICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgTGF5ZXIyIERBQi4gICAgICAgICAgICAgICAgICAgKi8KCi8qIERBQiBjYXBhYmlsaXR5IGZsYWdzICovCiNkZWZpbmUgQ0FQRl9EQUJfTVAyICAgICAgICAgIDB4MDAwMDAwMDEgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBMYXllcjIgREFCLiAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfREFCX0FBQyAgICAgICAgICAweDAwMDAwMDAyICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgREFCKyAoSEUtQUFDIHYyKS4gICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0RBQl9QQUQgICAgICAgICAgMHgwMDAwMDAwNCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIFBBRCBleHRyYWN0aW9uLiAgICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9EQUJfRFJDICAgICAgICAgIDB4MDAwMDAwMDggIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBEeW5hbWljIFJhbmdlIENvbnRyb2wuICAgICAgICAqLwojZGVmaW5lIENBUEZfREFCX1NVUlJPVU5EICAgICAweDAwMDAwMDEwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgREFCIFN1cnJvdW5kIChNUFMpLiAgICAgICAgICAgKi8KCi8qIERNQiBjYXBhYmlsaXR5IGZsYWdzICovCiNkZWZpbmUgQ0FQRl9ETUJfQlNBQyAgICAgICAgIDB4MDAwMDAwMDEgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBFUiBBQUMgQlNBQy4gICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfRE1CX0RSQyAgICAgICAgICAweDAwMDAwMDA4ICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgRHluYW1pYyBSYW5nZSBDb250cm9sLiAgICAgICAgKi8KI2RlZmluZSBDQVBGX0RNQl9TVVJST1VORCAgICAgMHgwMDAwMDAxMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIERNQiBTdXJyb3VuZCAoTVBTKS4gICAgICAgICAgICovCgovKiBQQ00gdXAvZG93bm1taXggY2FwYWJpbGl0eSBmbGFncyAqLwojZGVmaW5lIENBUEZfRE1YX0JMSU5EICAgICAgICAweDAwMDAwMDAxICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgYmxpbmQgZG93bm1peGluZy4gICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0RNWF9QQ0UgICAgICAgICAgMHgwMDAwMDAwMiAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIGd1aWRlZCBkb3dubWl4IHdpdGggZGF0YSBmcm9tIE1QRUctMi80IFByb2dyYW0gQ29uZmlnIEVsZW1lbnRzIChQQ0UpLiAqLwojZGVmaW5lIENBUEZfRE1YX0FSSUIgICAgICAgICAweDAwMDAwMDA0ICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgUENFIGd1aWRlZCBkb3dubWl4IHdpdGggc2xpZ2h0bHkgZGlmZmVyZW50IGVxdWF0aW9ucyBhbmQgbGV2ZWxzIHRvIGZ1bGZpbGwgQVJJQiBzdGFuZGFyZC4gKi8KI2RlZmluZSBDQVBGX0RNWF9EVkIgICAgICAgICAgMHgwMDAwMDAwOCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIGd1aWRlZCBkb3dubWl4IHdpdGggZGF0YSBmcm9tIERWQiBhbmNpbGxhcnkgZGF0YSBmaWVsZHMuICovCiNkZWZpbmUgQ0FQRl9ETVhfQ0hfRVhQICAgICAgIDB4MDAwMDAwMTAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBzaW1wbGUgdXBtaXhpbmcgYnkgZHVibGljYXRpbmcgY2hhbm5lbHMgb3IgYWRkaW5nIHplcm8gY2hhbm5lbHMuICovCi8qIFxlbmRjb25kICovCgoKLyoKICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogKiBMaWJyYXJ5IHZlcnNpb25pbmcKICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogKi8KCi8qKgogKiBDb252ZXJ0IGVhY2ggbWVtYmVyIG9mIHZlcnNpb24gbnVtYmVycyB0byBvbmUgc2luZ2xlIG51bWVyaWMgdmVyc2lvbiByZXByZXNlbnRhdGlvbi4KICogXHBhcmFtIGxldjAgIDFzdCBsZXZlbCBvZiB2ZXJzaW9uIG51bWJlci4KICogXHBhcmFtIGxldjEgIDJuZCBsZXZlbCBvZiB2ZXJzaW9uIG51bWJlci4KICogXHBhcmFtIGxldjIgIDNyZCBsZXZlbCBvZiB2ZXJzaW9uIG51bWJlci4KICAqLwojZGVmaW5lIExJQl9WRVJTSU9OKGxldjAsIGxldjEsIGxldjIpICgobGV2MDw8MjQgJiAweGZmMDAwMDAwKSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldjE8PDE2ICYgMHgwMGZmMDAwMCkgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXYyPDw4ICAmIDB4MDAwMGZmMDApKQoKLyoqCiAqICBCdWlsZCB0ZXh0IHN0cmluZyBvZiB2ZXJzaW9uLgogKi8KI2RlZmluZSBMSUJfVkVSU0lPTl9TVFJJTkcoaW5mbykgRkRLc3ByaW50ZigoaW5mbyktPnZlcnNpb25TdHIsICIlZC4lZC4lZCIsICgoKGluZm8pLT52ZXJzaW9uID4+IDI0KSAmIDB4ZmYpLCAoKChpbmZvKS0+dmVyc2lvbiA+PiAxNikgJiAweGZmKSwgKCgoaW5mbyktPnZlcnNpb24gPj4gOCApICYgMHhmZikpCgovKioKICogIExpYnJhcnkgaW5mb3JtYXRpb24uCiAqLwp0eXBlZGVmIHN0cnVjdCBMSUJfSU5GTwp7CiAgY29uc3QgY2hhciogdGl0bGU7CiAgY29uc3QgY2hhciogYnVpbGRfZGF0ZTsKICBjb25zdCBjaGFyKiBidWlsZF90aW1lOwogIEZES19NT0RVTEVfSUQgbW9kdWxlX2lkOwogIElOVCB2ZXJzaW9uOwogIFVJTlQgIGZsYWdzOwogIGNoYXIgdmVyc2lvblN0clszMl07Cn0gTElCX0lORk87CgovKiogSW5pdGlhbGl6ZSBsaWJyYXJ5IGluZm8uICovCnN0YXRpYyBpbmxpbmUgdm9pZCBGREtpbml0TGliSW5mbyggTElCX0lORk8qIGluZm8gKQp7CiAgaW50IGk7CgogIGZvciAoaSA9IDA7IGkgPCBGREtfTU9EVUxFX0xBU1Q7IGkrKykgewogICAgaW5mb1tpXS5tb2R1bGVfaWQgPSBGREtfTk9ORTsKICB9Cn0KCi8qKiBBcXVpcmUgc3VwcG9ydGVkIGZlYXR1cmVzIG9mIGxpYnJhcnkuICovCnN0YXRpYyBpbmxpbmUgVUlOVCBGREtsaWJJbmZvX2dldENhcGFiaWxpdGllcyggY29uc3QgTElCX0lORk8qIGluZm8sIEZES19NT0RVTEVfSUQgbW9kdWxlX2lkICkKewogIGludCBpOwoKICBmb3IgKGk9MDsgaTxGREtfTU9EVUxFX0xBU1Q7IGkrKykgewogICAgaWYgKGluZm9baV0ubW9kdWxlX2lkID09IG1vZHVsZV9pZCkgewogICAgICByZXR1cm4gaW5mb1tpXS5mbGFnczsKICAgIH0KICB9CiAgcmV0dXJuIDA7Cn0KCi8qKiBTZWFyY2ggZm9yIG5leHQgZnJlZSB0YWIuICovCnN0YXRpYyBpbmxpbmUgSU5UIEZES2xpYkluZm9fbG9va3VwKCBjb25zdCBMSUJfSU5GTyogaW5mbywgRkRLX01PRFVMRV9JRCBtb2R1bGVfaWQgKQp7CiAgaW50IGkgPSAtMTsKCiAgZm9yIChpID0gMDsgaSA8IEZES19NT0RVTEVfTEFTVDsgaSsrKSB7CiAgICBpZiAoaW5mb1tpXS5tb2R1bGVfaWQgPT0gbW9kdWxlX2lkKQogICAgICByZXR1cm4gLTE7CiAgICBpZiAoaW5mb1tpXS5tb2R1bGVfaWQgPT0gRkRLX05PTkUpCiAgICAgIGJyZWFrOwogIH0KICBpZiAoaSA9PSBGREtfTU9EVUxFX0xBU1QpCiAgICByZXR1cm4gLTE7CgogIHJldHVybiBpOwp9CgoKLyoKICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogKiBCdWZmZXIgZGVzY3JpcHRpb24KICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogKi8KCi8qKgogKiAgSS9PIGJ1ZmZlciBkZXNjcmlwdG9yLgogKi8KdHlwZWRlZiBzdHJ1Y3QgRkRLX2J1ZkRlc2NyCnsKICB2b2lkICAqKnBwQmFzZTsgICAgIC8qITwgUG9pbnRlciB0byBhbiBhcnJheSBjb250YWluaW5nIGJ1ZmZlciBiYXNlIGFkZHJlc3Nlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIE5VTEwgZm9yIGJ1ZmZlciByZXF1aXJlbWVudCBpbmZvLiAqLwogIFVJTlQgICAqcEJ1ZlNpemU7ICAgLyohPCBQb2ludGVyIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IGNhbgogICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwbGFjZWQgaW4gdGhlIHNwZWNpZmljIGJ1ZmZlci4gKi8KICBVSU5UICAgKnBFbGVTaXplOyAgIC8qITwgUG9pbnRlciB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSBlbGVtZW50IHNpemUgZm9yIGVhY2ggYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJ5dGVzLiBUaGF0IGlzIG1vc3RseSB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IHRoZSBzaXplb2YoKQogICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBmb3IgdGhlIGRhdGEgdHlwZSB1c2VkIGZvciB0aGUgc3BlY2lmaWMgYnVmZmVyLiAqLwogIFVJTlQgICAqcEJ1ZlR5cGU7ICAgLyohPCBQb2ludGVyIHRvIGFuIGFycmF5IG9mIGJpdCBmaWVsZHMgY29udGFpbmluZyBhIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIGJ1ZmZlci4gU2VlIFhYWCBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLiAgKi8KICBVSU5UICAgIG51bUJ1ZnM7ICAgIC8qITwgVG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMuICovCgp9IEZES19idWZEZXNjcjsKCi8qKgogKiBCdWZmZXIgdHlwZSBkZXNjcmlwdGlvbiBmaWVsZC4KICovCiNkZWZpbmUgRkRLX0JVRl9UWVBFX01BU0tfSU8gICAgICggMHgwMyA8PCAzMCApCiNkZWZpbmUgRkRLX0JVRl9UWVBFX01BU0tfREVTQ1IgICggMHgzRiA8PCAxNiApCiNkZWZpbmUgRkRLX0JVRl9UWVBFX01BU0tfSUQgICAgICggMHhGRiApCgojZGVmaW5lIEZES19CVUZfVFlQRV9JTlBVVCAgICAgICAoIDB4MSA8PCAzMCApCiNkZWZpbmUgRkRLX0JVRl9UWVBFX09VVFBVVCAgICAgICggMHgyIDw8IDMwICkKCiNkZWZpbmUgRkRLX0JVRl9UWVBFX1BDTV9EQVRBICAgICggMHgxIDw8IDE2ICkKI2RlZmluZSBGREtfQlVGX1RZUEVfQU5DX0RBVEEgICAgKCAweDIgPDwgMTYgKQojZGVmaW5lIEZES19CVUZfVFlQRV9CU19EQVRBICAgICAoIDB4NCA8PCAxNiApCgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKCiNlbmRpZiAvKiBGREtfQVVESU9fSCAqLwo=