Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKiAgRmFzdCBNUEVHIEFBQyBBdWRpbyBFbmNvZGVyICAqKioqKioqKioqKioqKioqKioqKioqCgogICBJbml0aWFsIGF1dGhvcjogICAgICAgTS4gU2NodWcgLyBBLiBHcm9lc2NoZWwKICAgY29udGVudHMvZGVzY3JpcHRpb246IGZhc3QgYWFjIGNvZGVyIGludGVyZmFjZSBsaWJyYXJ5IGZ1bmN0aW9ucwoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBfYWFjZW5jX2hfCiNkZWZpbmUgX2FhY2VuY19oXwoKI2luY2x1ZGUgImNvbW1vbl9maXguaCIKI2luY2x1ZGUgIkZES19hdWRpby5oIgoKI2luY2x1ZGUgInRwZW5jX2xpYi5oIgoKI2luY2x1ZGUgInNicl9lbmNvZGVyLmgiCgojZGVmaW5lIEJJVFJFU19NQVhfTEQgICA0MDAwCiNkZWZpbmUgQklUUkVTX01JTl9MRCAgICA1MDAKI2RlZmluZSBCSVRSQVRFX01BWF9MRCA3MDAwMCAvKiBNYXggYXNzdW1lZCBiaXRyYXRlIGZvciBiaXRyZXMgY2FsY3VsYXRpb24gKi8KI2RlZmluZSBCSVRSQVRFX01JTl9MRCAxMjAwMCAvKiBNaW4gYXNzdW1lZCBiaXRyYXRlIGZvciBiaXRyZXMgY2FsY3VsYXRpb24gKi8KCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmCgovKgogKiBBQUMtTEMgZXJyb3IgY29kZXMuCiAqLwp0eXBlZGVmIGVudW0gewogIEFBQ19FTkNfT0sgICAgICAgPSAweDAwMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFsbCBmaW5lLiAqLwoKICBBQUNfRU5DX1VOS05PV04gID0gMHgwMDAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciBjb25kaXRpb24gaXMgb2YgdW5rbm93biByZWFzb24sIG9yIGZyb20gYW5vdGhlciBtb2R1bGUuICAgICAgICAgICAgICAqLwoKICAvKiBpbml0aWFsaXphdGlvbiBlcnJvcnMgKi8KICBhYWNfZW5jX2luaXRfZXJyb3Jfc3RhcnQgICAgICA9IDB4MjAwMCwKICBBQUNfRU5DX0lOVkFMSURfSEFORExFICAgICAgICA9IDB4MjAyMCwgICAgICAgICAgICAgLyohPCBUaGUgaGFuZGxlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gY2FsbCB3YXMgaW52YWxpZCAocHJvYmFibHkgTlVMTCkuICAgICAgICAqLwogIEFBQ19FTkNfSU5WQUxJRF9GUkFNRV9MRU5HVEggID0gMHgyMDgwLCAgICAgICAgICAgICAvKiE8IEludmFsaWQgZnJhbWUgbGVuZ3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19JTlZBTElEX05fQ0hBTk5FTFMgICAgPSAweDIwZTAsICAgICAgICAgICAgIC8qITwgSW52YWxpZCBhbW91bnQgb2YgYXVkaW8gaW5wdXQgY2hhbm5lbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX0lOVkFMSURfU0ZCX1RBQkxFICAgICA9IDB4MjE0MCwgICAgICAgICAgICAgLyohPCBJbnRlcm5hbCBlbmNvZGVyIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICBBQUNfRU5DX1VOU1VQUE9SVEVEX0FPVCAgICAgICAgICAgID0gMHgzMDAwLCAgICAgICAgLyohPCBUaGUgQXVkaW8gT2JqZWN0IFR5cGUgKEFPVCkgaXMgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfVU5TVVBQT1JURURfQklUUkFURSAgICAgICAgPSAweDMwMjAsICAgICAgICAvKiE8IFRoZSBjaG9zZW4gYml0cmF0ZSBpcyBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19VTlNVUFBPUlRFRF9CSVRSQVRFX01PREUgICA9IDB4MzAyOCwgICAgICAgIC8qITwgVW5zdXBwb3J0ZWQgYml0IHJhdGUgbW9kZSAoQ0JSIG9yIFZCUikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX1VOU1VQUE9SVEVEX0FOQ19CSVRSQVRFICAgID0gMHgzMDQwLCAgICAgICAgLyohPCBVbnN1cHBvcnRlZCBhbmNpbGxheSBiaXRyYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfVU5TVVBQT1JURURfQU5DX01PREUgICAgICAgPSAweDMwNjAsCiAgQUFDX0VOQ19VTlNVUFBPUlRFRF9UUkFOU1BPUlRfVFlQRSA9IDB4MzA4MCwgICAgICAgIC8qITwgVGhlIGJpdHN0cmVhbSBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX1VOU1VQUE9SVEVEX0VSX0ZPUk1BVCAgICAgID0gMHgzMGEwLCAgICAgICAgLyohPCBUaGUgZXJyb3IgcmVzaWxpZW5jZSB0b29sIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfVU5TVVBQT1JURURfRVBDT05GSUcgICAgICAgPSAweDMwYzAsICAgICAgICAvKiE8IFRoZSBlcnJvciBwcm90ZWN0aW9uIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19VTlNVUFBPUlRFRF9DSEFOTkVMQ09ORklHICA9IDB4MzBlMCwgICAgICAgIC8qITwgVGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAoZWl0aGVyIG51bWJlciBvciBhcnJhbmdlbWVudCkgaXMgbm90IHN1cHBvcnRlZC4gKi8KICBBQUNfRU5DX1VOU1VQUE9SVEVEX1NBTVBMSU5HUkFURSAgID0gMHgzMTAwLCAgICAgICAgLyohPCBTYW1wbGUgcmF0ZSBvZiBhdWRpbyBpbnB1dCBpcyBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfTk9fTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDMxMjAsICAgICAgICAvKiE8IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkuICovCiAgQUFDX0VOQ19QRV9JTklUX1RBQkxFX05PVF9GT1VORCAgICA9IDB4MzE0MCwgICAgICAgIC8qITwgSW50ZXJuYWwgZW5jb2RlciBlcnJvci4gICAgKi8KCiAgYWFjX2VuY19pbml0X2Vycm9yX2VuZCwKCiAgLyogZW5jb2RlIGVycm9ycyAqLwogIGFhY19lbmNfZXJyb3Jfc3RhcnQgICAgICAgICAgICAgICAgICAgICAgID0gMHg0MDAwLAogIEFBQ19FTkNfUVVBTlRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMHg0MDIwLCAgICAgICAvKiE8IFRvbyBtYW55IGJpdHMgdXNlZCBpbiBxdWFudGl6YXRpb24uICAgICAgICAgICAgICovCiAgQUFDX0VOQ19XUklUVEVOX0JJVFNfRVJST1IgICAgICAgICAgICAgICAgPSAweDQwNDAsICAgICAgIC8qITwgVW5leHBlY3RlZCBudW1iZXIgb2Ygd3JpdHRlbiBiaXRzLCBkaWZmZXJzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlZCBudW1iZXIgb2YgYml0cy4gICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX1BOU19UQUJMRV9FUlJPUiAgICAgICAgICAgICAgICAgICA9IDB4NDA2MCwgICAgICAgLyohPCBQTlMgbGV2ZWwgb3V0IG9mIHJhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfR0xPQkFMX0dBSU5fVE9PX0hJR0ggICAgICAgICAgICAgID0gMHg0MDgwLCAgICAgICAvKiE8IEludGVybmFsIHF1YW50aXplciBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19CSVRSRVNfVE9PX0xPVyAgICAgICAgICAgICAgICAgICAgPSAweDQwYTAsICAgICAgIC8qITwgVG9vIGZldyAgYml0cyBpbiBiaXQgcmVzZXJ2b2lyLiAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX0JJVFJFU19UT09fSElHSCAgICAgICAgICAgICAgICAgICA9IDB4NDBhMSwgICAgICAgLyohPCBUb28gbWFueSBiaXRzIGluIGJpdCByZXNlcnZvaXIuICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfSU5WQUxJRF9DSEFOTkVMX0JJVFJBVEUgICAgICAgICAgID0gMHg0MTAwLAogIEFBQ19FTkNfSU5WQUxJRF9FTEVNRU5USU5GT19UWVBFICAgICAgICAgID0gMHg0MTIwLCAgICAgICAvKiE8IEludGVybmFsIGVuY29kZXIgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIEFBQ19FTkNfV1JJVEVfU0NBTF9FUlJPUiAgICAgICAgICAgICAgICAgID0gMHg0MWUwLCAgICAgICAvKiE8IEVycm9yIHdyaXRpbmcgc2NhbGVmYWNEYXRhLiAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19XUklURV9TRUNfRVJST1IgICAgICAgICAgICAgICAgICAgPSAweDQyMDAsICAgICAgIC8qITwgRXJyb3Igd3JpdGluZyBzZWN0aW9uRGF0YS4gICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX1dSSVRFX1NQRUNfRVJST1IgICAgICAgICAgICAgICAgICA9IDB4NDIyMCwgICAgICAgLyohPCBFcnJvciB3cml0aW5nIHNwZWN0cmFsRGF0YS4gICAgICAgICAgICAgICAgICAgICAqLwogIGFhY19lbmNfZXJyb3JfZW5kCgp9IEFBQ19FTkNPREVSX0VSUk9SOwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKI2RlZmluZSBBTkNfREFUQV9CVUZGRVJTSVpFIDEwMjQgICAgICAvKiBhbmNCdWZmZXIgc2l6ZSAqLwoKI2RlZmluZSBNQVhfVE9UQUxfRVhUX1BBWUxPQURTICAoKCg4KSAqICgxKSkgKyAoMisyKSkKCgp0eXBlZGVmIGVudW0gewogIEFBQ0VOQ19CUl9NT0RFX0lOVkFMSUQgPSAtMSwgIC8qITwgSW52YWxpZCBiaXRyYXRlIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDRU5DX0JSX01PREVfQ0JSICAgICA9ICAwLCAgLyohPCBDb25zdGFudCBiaXRyYXRlIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNFTkNfQlJfTU9ERV9WQlJfMSAgID0gIDEsICAvKiE8IFZhcmlhYmxlIGJpdHJhdGUgbW9kZSwgYWJvdXQgMzIga2Jwcy9jaGFubmVsLiAgICAqLwogIEFBQ0VOQ19CUl9NT0RFX1ZCUl8yICAgPSAgMiwgIC8qITwgVmFyaWFibGUgYml0cmF0ZSBtb2RlLCBhYm91dCA0MCBrYnBzL2NoYW5uZWwuICAgICovCiAgQUFDRU5DX0JSX01PREVfVkJSXzMgICA9ICAzLCAgLyohPCBWYXJpYWJsZSBiaXRyYXRlIG1vZGUsIGFib3V0IDQ4LTU2IGticHMvY2hhbm5lbC4gKi8KICBBQUNFTkNfQlJfTU9ERV9WQlJfNCAgID0gIDQsICAvKiE8IFZhcmlhYmxlIGJpdHJhdGUgbW9kZSwgYWJvdXQgNjQga2Jwcy9jaGFubmVsLiAgICAqLwogIEFBQ0VOQ19CUl9NT0RFX1ZCUl81ICAgPSAgNSwgIC8qITwgVmFyaWFibGUgYml0cmF0ZSBtb2RlLCBhYm91dCA4MC05NiBrYnBzL2NoYW5uZWwuICovCiAgQUFDRU5DX0JSX01PREVfRkYgICAgICA9ICA2LCAgLyohPCBGaXhlZCBmcmFtZSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNFTkNfQlJfTU9ERV9TRlIgICAgID0gIDcgICAvKiE8IFN1cGVyZnJhbWUgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKfSBBQUNFTkNfQklUUkFURV9NT0RFOwoKdHlwZWRlZiBlbnVtIHsKCiAgQ0hfT1JERVJfTVBFRyA9IDAsICAvKiE8IE1QRUcgY2hhbm5lbCBvcmRlcmluZyAoZS4gZy4gNS4xOiBDLCBMLCBSLCBTTCwgU1IsIExGRSkgICAgICAgICAgICovCiAgQ0hfT1JERVJfV0FWICAgICAgICAvKiE8IFdBViBmaWxlZm9ybWF0IGNoYW5uZWwgb3JkZXJpbmcgKGUuIGcuIDUuMTogTCwgUiwgQywgTEZFLCBTTCwgU1IpICovCgp9IENIQU5ORUxfT1JERVI7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0cnVjdHVyZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKc3RydWN0IEFBQ0VOQ19DT05GSUcgewogIElOVCAgIHNhbXBsZVJhdGU7ICAgICAgICAgICAgIC8qIGVuY29kZXIgc2FtcGxlIHJhdGUgKi8KICBJTlQgICBiaXRSYXRlOyAgICAgICAgICAgICAgICAvKiBlbmNvZGVyIGJpdCByYXRlIGluIGJpdHMvc2VjICovCiAgSU5UICAgYW5jRGF0YUJpdFJhdGU7ICAgICAgICAgLyogYWRkaXRpb25hbCBiaXRzIGNvbnN1bWVkIGJ5IGFuYyBkYXRhIG9yIHNiciBoYXZlIHRvIGJlIGNvbnNpZWRlcmVkIHdoaWxlIGNvbmZpZ3VyYXRpb24gKi8KCiAgSU5UICAgblN1YkZyYW1lczsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGZyYW1lcyBpbiBzdXBlciBmcmFtZSAobm90IEFEVFMvTEFUTSBzdWJmcmFtZXMgISkgKi8KICBBVURJT19PQkpFQ1RfVFlQRSBhdWRpb09iamVjdFR5cGU7ICAgLyogQXVkaW8gT2JqZWN0IFR5cGUgICovCgogIElOVCAgIGF2ZXJhZ2VCaXRzOyAgICAgICAgICAgIC8qIGVuY29kZXIgYml0IHJhdGUgaW4gYml0cy9zdXBlcmZyYW1lICovCiAgSU5UICAgYml0cmF0ZU1vZGU7ICAgICAgICAgICAgLyogZW5jb2RlciBiaXRyYXRlIG1vZGUgKENCUi9WQlIpICovCiAgSU5UICAgbkNoYW5uZWxzOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHByb2Nlc3MgKi8KICBDSEFOTkVMX09SREVSIGNoYW5uZWxPcmRlcjsgICAvKiBJbnB1dCBDaGFubmVsIG9yZGVyaW5nIHNjaGVtZS4gKi8KICBJTlQgICBiYW5kV2lkdGg7ICAgICAgICAgICAgICAvKiB0YXJnZXRlZCBhdWRpbyBiYW5kd2lkdGggaW4gSHogKi8KICBDSEFOTkVMX01PREUgIGNoYW5uZWxNb2RlOyAgICAvKiBlbmNvZGVyIGNoYW5uZWwgbW9kZSBjb25maWd1cmF0aW9uICovCiAgSU5UICAgZnJhbWVsZW5ndGg7ICAgICAgICAgICAgLyogdXNlZCBmcmFtZSBzaXplICovCgogIFVJTlQgIHN5bnRheEZsYWdzOyAgICAgICAgICAgIC8qIGJpdHN0cmVhbXMgc3ludGF4IGNvbmZpZ3VyYXRpb24gKi8KICBTQ0hBUiBlcENvbmZpZzsgICAgICAgICAgICAgICAvKiBlcnJvciBwcm90ZWN0aW9uIGNvbmZpZ3VyYXRpb24gKi8KCiAgSU5UICAgYW5jX1JhdGU7ICAgICAgICAgICAgICAgLyogYW5jaWxsYXJ5IHJhdGUsIDAgKGRpc2FibGVkKSwgLTEgKGRlZmF1bHQpIGVsc2UgZGVzaXJlZCByYXRlICovCiAgVUlOVCAgbWF4QW5jQnl0ZXNQZXJBVTsKICBJTlQgICBtaW5CaXRzUGVyRnJhbWU7ICAgICAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBiaXRzIGluIEFVICovCiAgSU5UICAgbWF4Qml0c1BlckZyYW1lOyAgICAgICAgLyogbWF4aW11bSBudW1iZXIgb2YgYml0cyBpbiBBVSAqLwogIElOVCAgIGJpdHJlc2Vydm9pcjsgICAgICAgICAgIC8qIHNpemUgb2YgYml0cmVzZXJ2b2lyICovCgogIElOVCAgIGF1ZGlvTXV4VmVyc2lvbjsgICAgICAgIC8qIGF1ZGlvIG11eCB2ZXJzaW9uIGluIGxvYXMvbGF0bSB0cmFuc3BvcnQgZm9ybWF0ICovCgogIFVJTlQgIHNiclJhdGlvOyAgICAgICAgICAgICAgIC8qIHNiciBzYW1wbGluZyByYXRlIHJhdGlvOiBkdWFsLSBvciBzaW5nbGUtcmF0ZSAqLwoKICBVQ0hBUiB1c2VUbnM7ICAgICAgICAgICAgICAgICAvKiBmbGFnOiB1c2UgdGVtcG9yYWwgbm9pc2Ugc2hhcGluZyAqLwogIFVDSEFSIHVzZVBuczsgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHVzZSBwZXJjZXB0dWFsIG5vaXNlIHN1YnN0aXR1dGlvbiAqLwogIFVDSEFSIHVzZUlTOyAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHVzZSBpbnRlbnNpdHkgY29kaW5nICovCgogIFVDSEFSIHVzZVJlcXVhbnQ7ICAgICAgICAgICAgIC8qIGZsYWc6IHVzZSBhZnRlcmJ1cm5lciAqLwp9OwoKdHlwZWRlZiBzdHJ1Y3QgewogIFVDSEFSICAgICAgICAgICAgKnBEYXRhOyAgICAgIC8qIHBvaW50ZXIgdG8gZXh0ZW5zaW9uIHBheWxvYWQgZGF0YSAqLwogIFVJTlQgICAgICAgICAgICAgIGRhdGFTaXplOyAgIC8qIGV4dGVuc2lvbiBwYXlsb2FkIGRhdGEgc2l6ZSBpbiBiaXRzICovCiAgRVhUX1BBWUxPQURfVFlQRSAgZGF0YVR5cGU7ICAgLyogZXh0ZW5zaW9uIHBheWxvYWQgZGF0YSB0eXBlICovCiAgSU5UICAgICAgICAgICAgICAgYXNzb2NpYXRlZENoRWxlbWVudDsgIC8qIG51bWJlciBvZiB0aGUgY2hhbm5lbCBlbGVtZW50IHRoZSBkYXRhIGlzIGFzc2lnbmVkIHRvICovCn0gQUFDRU5DX0VYVF9QQVlMT0FEOwoKdHlwZWRlZiBzdHJ1Y3QgQUFDX0VOQyAqSEFORExFX0FBQ19FTkM7CgovKioKICogXGJyaWVmIENhbGN1bGF0ZSBmcmFtZXNpemUgaW4gYml0cyBmb3IgZ2l2ZW4gYml0IHJhdGUsIGZyYW1lIGxlbmd0aCBhbmQgc2FtcGxpbmcgcmF0ZS4KICoKICogXHBhcmFtIGJpdFJhdGUgICAgICAgICAgICAgICBUdGFyZ2V0IGJpdHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLgogKiBccGFyYW0gZnJhbWVMZW5ndGggICAgICAgICAgIE51bWJlciBvZiBhdWRpbyBzYW1wbGVzIGluIG9uZSBmcmFtZS4KICogXHBhcmFtIHNhbXBsaW5nUmF0ZSAgICAgICAgICBTYW1wbGluZyByYXRlIGluIEh6LgogKgogKiBccmV0dXJuICAgICAgICAgICAgICAgICAgICAgIEZyYW1lc2l6ZSBpbiBiaXRzIHBlciBmcmFtZS4KKi8KSU5UIEZES2FhY0VuY19DYWxjQml0c1BlckZyYW1lKAogICAgICAgIGNvbnN0IElOVCBiaXRSYXRlLAogICAgICAgIGNvbnN0IElOVCBmcmFtZUxlbmd0aCwKICAgICAgICBjb25zdCBJTlQgc2FtcGxpbmdSYXRlCiAgICAgICAgKTsKCi8qKgogKiBcYnJpZWYgQ2FsY3VsYXRlIGJpdHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kIGZvciBnaXZlbiBmcmFtZXNpemUsIGZyYW1lIGxlbmd0aCBhbmQgc2FtcGxpbmcgcmF0ZS4KICoKICogXHBhcmFtIGJpdHNQZXJGcmFtZSAgICAgICAgICBGcmFtZXNpemUgaW4gYml0cyBwZXIgZnJhbWUuCiAqIFxwYXJhbSBmcmFtZUxlbmd0aCAgICAgICAgICAgTnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMgaW4gb25lIGZyYW1lLgogKiBccGFyYW0gc2FtcGxpbmdSYXRlICAgICAgICAgIFNhbXBsaW5nIHJhdGUgaW4gSHouCiAqCiAqIFxyZXR1cm4gICAgICAgICAgICAgICAgICAgICAgQml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuCiovCklOVCBGREthYWNFbmNfQ2FsY0JpdHJhdGUoCiAgICAgICAgY29uc3QgSU5UIGJpdHNQZXJGcmFtZSwKICAgICAgICBjb25zdCBJTlQgZnJhbWVMZW5ndGgsCiAgICAgICAgY29uc3QgSU5UIHNhbXBsaW5nUmF0ZQogICAgICAgICk7CgovKioKICogXGJyaWVmIExpbWl0IGdpdmVuIGJpdCByYXRlIHRvIGEgdmFsaWQgdmFsdWUKICogXHBhcmFtIGhUcEVuYyB0cmFuc3BvcnQgZW5jb2RlciBoYW5kbGUKICogXHBhcmFtIGNvcmVTYW1wbGluZ1JhdGUgdGhlIHNhbXBsZSByYXRlIHRvIGJlIHVzZWQgZm9yIHRoZSBBQUMgZW5jb2RlcgogKiBccGFyYW0gZnJhbWVMZW5ndGggdGhlIGZyYW1lTGVuZ3RoIHRvIGJlIHVzZWQgZm9yIHRoZSBBQUMgZW5jb2RlcgogKiBccGFyYW0gbkNoYW5uZWxzIG51bWJlciBvZiB0b3RhbCBjaGFubmVscwogKiBccGFyYW0gbkNoYW5uZWxzRWZmIG51bWJlciBvZiBlZmZlY3RpdmUgY2hhbm5lbHMKICogXHBhcmFtIGJpdFJhdGUgdGhlIGluaXRpYWwgYml0IHJhdGUgdmFsdWUgZm9yIHdoaWNoIHRoZSBjbG9zZXN0IHZhbGlkIGJpdCByYXRlIHZhbHVlIGlzIHNlYXJjaGVkIGZvcgogKiBccGFyYW0gYXZlcmFnZUJpdHMgYXZlcmFnZSBiaXRzIHBlciBmcmFtZSBmb3IgZml4ZWQgZnJhbWluZy4gU2V0IHRvIC0xIGlmIG5vdCBhdmFpbGFibGUuCiAqIFxwYXJhbSBvcHRpb25hbCBwb2ludGVyIHdoZXJlIHRoZSBjdXJyZW50IGJpdHMgcGVyIGZyYW1lIGFyZSBzdG9yZWQgaW50by4KICogXHBhcmFtIGJpdHJhdGVNb2RlIHRoZSBjdXJyZW50IGJpdCByYXRlIG1vZGUKICogXHBhcmFtIG5TdWJGcmFtZXMgbnVtYmVyIG9mIHN1YiBmcmFtZXMgZm9yIHN1cGVyIGZyYW1pbmcgKG5vdCB0cmFuc3BvcnQgZnJhbWVzKS4KICogXHJldHVybiBhIHZhbGlkIGJpdCByYXRlIHZhbHVlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIG9yIGlkZW50aWNhbCB0byBiaXRSYXRlCiAqLwpJTlQgRkRLYWFjRW5jX0xpbWl0Qml0cmF0ZSgKICAgICAgICBIQU5ETEVfVFJBTlNQT1JURU5DIGhUcEVuYywKICAgICAgICBJTlQgY29yZVNhbXBsaW5nUmF0ZSwKICAgICAgICBJTlQgZnJhbWVMZW5ndGgsCiAgICAgICAgSU5UIG5DaGFubmVscywKICAgICAgICBJTlQgbkNoYW5uZWxzRWZmLAogICAgICAgIElOVCBiaXRSYXRlLAogICAgICAgIElOVCBhdmVyYWdlQml0cywKICAgICAgICBJTlQgKnBBdmVyYWdlQml0c1BlckZyYW1lLAogICAgICAgIElOVCBiaXRyYXRlTW9kZSwKICAgICAgICBJTlQgblN1YkZyYW1lcwogICAgICAgICk7CgogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICBmdW5jdGlvbm5hbWU6IEZES2FhY0VuY19HZXRWQlJCaXRyYXRlCiAgICAgZGVzY3JpcHRpb246ICBHZXQgVkJSIGJpdHJhdGUgZnJvbSB2YnIgcXVhbGl0eQogICAgIGlucHV0IHBhcmFtczogaW50IHZiclF1YWxpdHkgKFZCUjAsIFZCUjEsIFZCUjIpCiAgICAgICAgICAgICAgICAgICBjaGFubmVsTW9kZQogICAgIHJldHVybnM6ICAgICAgdmJyIGJpdHJhdGUKCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogSU5UIEZES2FhY0VuY19HZXRWQlJCaXRyYXRlKElOVCBiaXRyYXRlTW9kZSwgQ0hBTk5FTF9NT0RFIGNoYW5uZWxNb2RlKTsKCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIGZ1bmN0aW9ubmFtZTogRkRLYWFjRW5jX0FhY0luaXREZWZhdWx0Q29uZmlnCiAgICAgZGVzY3JpcHRpb246ICBnaXZlcyByZWFzb25hYmxlIGRlZmF1bHQgY29uZmlndXJhdGlvbgogICAgIHJldHVybnM6ICAgICAgLS0tCgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8Kdm9pZCBGREthYWNFbmNfQWFjSW5pdERlZmF1bHRDb25maWcoQUFDRU5DX0NPTkZJRyAgICAgKmNvbmZpZyk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCSAgICBmdW5jdGlvbm5hbWU6RkRLYWFjRW5jX09wZW4KICAgIGRlc2NyaXB0aW9uOiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBlbmNvZGVyIGluc3RhbmNlCiAgICByZXR1cm5zOiAgICAgMCBpZiBzdWNjZXNzCgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkFBQ19FTkNPREVSX0VSUk9SIEZES2FhY0VuY19PcGVuKEhBTkRMRV9BQUNfRU5DICAqcGhBYWNFbmMsICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGFuIGVuY29kZXIgaGFuZGxlLCBpbml0aWFsaXplZCBvbiByZXR1cm4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgICBuRWxlbWVudHMsICAgICAgICAgICAgIC8qIG51bWJlciBvZiBtYXhpbWFsIGVsZW1lbnRzIGluIGluc3RhbmNlIHRvIHN1cHBvcnQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgICBuQ2hhbm5lbHMsICAgICAgICAgICAgIC8qIG51bWJlciBvZiBtYXhpbWFsIGNoYW5uZWxzIGluIGluc3RhbmNlIHRvIHN1cHBvcnQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgICBuU3ViRnJhbWVzKTsgICAgICAgICAgIC8qIHN1cHBvcnQgc3VwZXJmcmFtaW5nIGluIGluc3RhbmNlICovCgoKQUFDX0VOQ09ERVJfRVJST1IgRkRLYWFjRW5jX0luaXRpYWxpemUoSEFORExFX0FBQ19FTkMgICAgIGhBYWNFbmNvZGVyLCAgIC8qIHBvaW50ZXIgdG8gYW4gZW5jb2RlciBoYW5kbGUsIGluaXRpYWxpemVkIG9uIHJldHVybiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQUNFTkNfQ09ORklHICAgICpjb25maWcsICAgICAgICAgLyogcHJlLWluaXRpYWxpemVkIGNvbmZpZyBzdHJ1Y3QgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX1RSQU5TUE9SVEVOQyBoVHBFbmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HICAgICAgICAgICAgICAgaW5pdEZsYWdzKTsKCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9ubmFtZTogRkRLYWFjRW5jX0VuY29kZUZyYW1lCiAgICBkZXNjcmlwdGlvbjogIGVuY29kZSBvbmUgZnJhbWUKICAgIHJldHVybnM6ICAgICAgMCBpZiBzdWNjZXNzCgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgpBQUNfRU5DT0RFUl9FUlJPUiBGREthYWNFbmNfRW5jb2RlRnJhbWUoIEhBTkRMRV9BQUNfRU5DICAgICAgIGhBYWNFbmMsICAgICAgICAgLyogZW5jb2RlciBoYW5kbGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVfVFJBTlNQT1JURU5DICBoVHBFbmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UX1BDTSogICAgICAgICAgICAgaW5wdXRCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UKiAgICAgICAgICAgICAgICAgbnVtT3V0Qnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFDRU5DX0VYVF9QQVlMT0FEICAgZXh0UGF5bG9hZFtNQVhfVE9UQUxfRVhUX1BBWUxPQURTXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbm5hbWU6RkRLYWFjRW5jX0Nsb3NlCiAgICBkZXNjcmlwdGlvbjogZGVsZXRlIGVuY29kZXIgaW5zdGFuY2UKICAgIHJldHVybnM6CgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2b2lkIEZES2FhY0VuY19DbG9zZSggSEFORExFX0FBQ19FTkMqICBwaEFhY0VuYyk7ICAgLyogZW5jb2RlciBoYW5kbGUgKi8KCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2VuZGlmIC8qIF9hYWNlbmNfaF8gKi8KCg==