JCEKJCEgVGhpcyBmaWxlIGNvbmZpZ3VyZXMgdGhlIGJmZCBsaWJyYXJ5IGZvciB1c2Ugd2l0aCBvcGVuVk1TIChBbHBoYSBhbmQgVmF4KQokIQokISBXZSBkbyBub3QgdXNlIHRoZSBjb25maWd1cmUgc2NyaXB0LCBzaW5jZSB3ZSBkbyBub3QgaGF2ZSAvYmluL3NoCiQhIHRvIGV4ZWN1dGUgaXQuCiQhCiQhIFdyaXR0ZW4gYnkgS2xhdXMgSyJhbXBmIChra2FlbXBmQHJtaS5kZSkKJCEKJGFyY2hfaW5keCA9IDEgKyAoKGYkZ2V0c3lpKCJDUFUiKS5nZS4xMjgpLmFuZC4xKSAgICAgICEgdmF4PT0xLCBhbHBoYT09MgokYXJjaCA9IGYkZWxlbWVudChhcmNoX2luZHgsInwiLCJ8VkFYfEFscGhhfCIpCiQhCiRpZiBhcmNoIC5lcXMuICJBbHBoYSIKJHRoZW4KJCB3cml0ZSBzeXMkb3V0cHV0ICJDb25maWd1cmluZyBmb3IgQWxwaGEgdGFyZ2V0IgokIHRhcmdldCA9ICJhbHBoYSIKJCEKJCEgY29weSBiZmQtaW4yLmggdG8gYmZkLmgsIHJlcGxhY2luZyBAIG1hY3JvcwokIQokIGVkaXQvdHB1L25vam91cm5hbC9ub3NlY3Rpb24vbm9kaXNwbGF5L2NvbW1hbmQ9c3lzJGlucHV0IC0KICAgICAgICBbXWJmZC1pbjIuaCAvb3V0cHV0PVtdYmZkLmgKJERFQ0sKIQohICBDb3B5IGZpbGUsIGNoYW5naW5nIGxpbmVzIHdpdGggbWFjcm9zIChAQCkKIQohCiAgIHZmaWxlIDo9IENSRUFURV9CVUZGRVIoInZmaWxlIiwgIkNPTkZJR1VSRS5JTiIpOwogICByYW5nIDo9IENSRUFURV9SQU5HRShCRUdJTk5JTkdfT0YodmZpbGUpLCBFTkRfT0YodmZpbGUpKTsKICAgbWF0Y2hfcG9zIDo9IFNFQVJDSF9RVUlFVExZKCdBTV9JTklUX0FVVE9NQUtFKGJmZCwgJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgIHZlcnMgOj0gQ1VSUkVOVF9MSU5FLSIpIjsKICAgRUxTRTsKICAgICB2ZXJzIDo9ICJ1bmtub3duIjsKICAgRU5ESUY7CgogICBmaWxlIDo9IENSRUFURV9CVUZGRVIoImZpbGUiLCBHRVRfSU5GTyhDT01NQU5EX0xJTkUsICJmaWxlX25hbWUiKSk7CiAgIHJhbmcgOj0gQ1JFQVRFX1JBTkdFKEJFR0lOTklOR19PRihmaWxlKSwgRU5EX09GKGZpbGUpKTsKCiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQFZFUlNJT05AJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgICBQT1NJVElPTihCRUdJTk5JTkdfT0YobWF0Y2hfcG9zKSk7CiAgICAgIEVSQVNFKG1hdGNoX3Bvcyk7CiAgICAgIENPUFlfVEVYVCh2ZXJzKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQHdvcmRzaXplQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJzY0Jyk7CiAgIEVORElGOwogICBtYXRjaF9wb3MgOj0gU0VBUkNIX1FVSUVUTFkoJ0BiZmRfZGVmYXVsdF90YXJnZXRfc2l6ZUAnLCBGT1JXQVJELCBFWEFDVCwgcmFuZyk7CiAgIElGIG1hdGNoX3BvcyA8PiAwIFRIRU47CiAgICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICAgRVJBU0UobWF0Y2hfcG9zKTsKICAgICAgQ09QWV9URVhUKCc2NCcpOwogICBFTkRJRjsKICAgbWF0Y2hfcG9zIDo9IFNFQVJDSF9RVUlFVExZKCdAQkZEX0hPU1RfNjRCSVRfTE9OR0AnLCBGT1JXQVJELCBFWEFDVCwgcmFuZyk7CiAgIElGIG1hdGNoX3BvcyA8PiAwIFRIRU47CiAgICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICAgRVJBU0UobWF0Y2hfcG9zKTsKICAgICAgQ09QWV9URVhUKCcwJyk7CiAgIEVORElGOwogICBtYXRjaF9wb3MgOj0gU0VBUkNIX1FVSUVUTFkoJ0BCRkRfSE9TVF9MT05HX0xPTkdAJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgICBQT1NJVElPTihCRUdJTk5JTkdfT0YobWF0Y2hfcG9zKSk7CiAgICAgIEVSQVNFKG1hdGNoX3Bvcyk7CiAgICAgIENPUFlfVEVYVCgnMCcpOwogICBFTkRJRjsKICAgbWF0Y2hfcG9zIDo9IFNFQVJDSF9RVUlFVExZKCdAQkZEX0hPU1RfNjRCSVRfTE9OR19MT05HQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJzAnKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQEJGRF9IT1NUXzY0X0JJVF9ERUZJTkVEQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJ19fREVDQycpOwogICAgICBTUExJVF9MSU5FOwogICAgICBDT1BZX1RFWFQoJyNpbmNsdWRlIDxpbnRzLmg+Jyk7CiAgIEVORElGOwogICBtYXRjaF9wb3MgOj0gU0VBUkNIX1FVSUVUTFkoJ0BCRkRfSE9TVF82NF9CSVRAJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgICBQT1NJVElPTihCRUdJTk5JTkdfT0YobWF0Y2hfcG9zKSk7CiAgICAgIEVSQVNFKG1hdGNoX3Bvcyk7CiAgICAgIENPUFlfVEVYVCgnaW50NjQnKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQEJGRF9IT1NUX1VfNjRfQklUQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJ3VpbnQ2NCcpOwogICBFTkRJRjsKICAgbWF0Y2hfcG9zIDo9IFNFQVJDSF9RVUlFVExZKCdAQkZEX0hPU1RQVFJfVEAnLCBGT1JXQVJELCBFWEFDVCwgcmFuZyk7CiAgIElGIG1hdGNoX3BvcyA8PiAwIFRIRU47CiAgICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICAgRVJBU0UobWF0Y2hfcG9zKTsKICAgICAgQ09QWV9URVhUKCd1aW50NjQnKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQGJmZF9maWxlX3B0ckAnLCBGT1JXQVJELCBFWEFDVCwgcmFuZyk7CiAgIElGIG1hdGNoX3BvcyA8PiAwIFRIRU47CiAgICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICAgRVJBU0UobWF0Y2hfcG9zKTsKICAgICAgQ09QWV9URVhUKCdiZmRfc2lnbmVkX3ZtYScpOwogICBFTkRJRjsKICAgbWF0Y2hfcG9zIDo9IFNFQVJDSF9RVUlFVExZKCd1bnNpZ25lZCBAYmZkX2ZpbGVfcHRyQCB1ZmlsZV9wdHInLCBGT1JXQVJELCBFWEFDVCwgcmFuZyk7CiAgIElGIG1hdGNoX3BvcyA8PiAwIFRIRU47CiAgICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICAgRVJBU0UobWF0Y2hfcG9zKTsKICAgICAgQ09QWV9URVhUKCdiZmRfdm1hIHVmaWxlX3B0cicpOwogICBFTkRJRjsKICAgV1JJVEVfRklMRShmaWxlLCBHRVRfSU5GTyhDT01NQU5EX0xJTkUsICJvdXRwdXRfZmlsZSIpKTsKICAgUVVJVAokICBFT0QKJAokZWxzZQokCiQgd3JpdGUgc3lzJG91dHB1dCAiQ29uZmlndXJpbmcgZm9yIFZheCB0YXJnZXQiCiQgdGFyZ2V0ID0gInZheCIKJCEKJCEgY29weSBiZmQtaW4yLmggdG8gYmZkLmgsIHJlcGxhY2luZyBAIG1hY3JvcwokIQokIGVkaXQvdHB1L25vam91cm5hbC9ub3NlY3Rpb24vbm9kaXNwbGF5L2NvbW1hbmQ9c3lzJGlucHV0IC0KICAgICAgICBbXWJmZC1pbjIuaCAvb3V0cHV0PVtdYmZkLmgKJERFQ0sKIQohICBDb3B5IGZpbGUsIGNoYW5naW5nIGxpbmVzIHdpdGggbWFjcm9zIChAQCkKIQohCiAgIHZmaWxlIDo9IENSRUFURV9CVUZGRVIoInZmaWxlIiwgIkNPTkZJR1VSRS5JTiIpOwogICByYW5nIDo9IENSRUFURV9SQU5HRShCRUdJTk5JTkdfT0YodmZpbGUpLCBFTkRfT0YodmZpbGUpKTsKICAgbWF0Y2hfcG9zIDo9IFNFQVJDSF9RVUlFVExZKCdBTV9JTklUX0FVVE9NQUtFKGJmZCwgJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgIHZlcnMgOj0gQ1VSUkVOVF9MSU5FLSIpIjsKICAgRUxTRTsKICAgICB2ZXJzIDo9ICJ1bmtub3duIjsKICAgRU5ESUY7CgogICBmaWxlIDo9IENSRUFURV9CVUZGRVIoImZpbGUiLCBHRVRfSU5GTyhDT01NQU5EX0xJTkUsICJmaWxlX25hbWUiKSk7CiAgIHJhbmcgOj0gQ1JFQVRFX1JBTkdFKEJFR0lOTklOR19PRihmaWxlKSwgRU5EX09GKGZpbGUpKTsKCiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQFZFUlNJT05AJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgICBQT1NJVElPTihCRUdJTk5JTkdfT0YobWF0Y2hfcG9zKSk7CiAgICAgIEVSQVNFKG1hdGNoX3Bvcyk7CiAgICAgIENPUFlfVEVYVCh2ZXJzKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQHdvcmRzaXplQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJzMyJyk7CiAgIEVORElGOwogICBtYXRjaF9wb3MgOj0gU0VBUkNIX1FVSUVUTFkoJ0BCRkRfSE9TVF82NEJJVF9MT05HQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJzAnKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQEJGRF9IT1NUXzY0X0JJVF9ERUZJTkVEQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJ19fREVDQycpOwogICAgICBTUExJVF9MSU5FOwogICAgICBDT1BZX1RFWFQoJyNpbmNsdWRlIDxpbnRzLmg+Jyk7CiAgIEVORElGOwogICBtYXRjaF9wb3MgOj0gU0VBUkNIX1FVSUVUTFkoJ0BCRkRfSE9TVF82NF9CSVRAJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgICBQT1NJVElPTihCRUdJTk5JTkdfT0YobWF0Y2hfcG9zKSk7CiAgICAgIEVSQVNFKG1hdGNoX3Bvcyk7CiAgICAgIENPUFlfVEVYVCgnaW50NjQnKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQEJGRF9IT1NUX1VfNjRfQklUQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJ3VpbnQ2NCcpOwogICBFTkRJRjsKICAgV1JJVEVfRklMRShmaWxlLCBHRVRfSU5GTyhDT01NQU5EX0xJTkUsICJvdXRwdXRfZmlsZSIpKTsKICAgUVVJVAokICBFT0QKJGVuZGlmCiQKJCB3cml0ZSBzeXMkb3V0cHV0ICJHZW5lcmF0ZWQgYGJmZC5oJyBmcm9tIGBiZmQtaW4yLmgnLiIKJCEKJCEgY3JlYXRlIGJmZHZlci5oCiQhCiQgZWRpdC90cHUvbm9qb3VybmFsL25vc2VjdGlvbi9ub2Rpc3BsYXkvY29tbWFuZD1zeXMkaW5wdXQgLQogICAgICAgIFtddmVyc2lvbi5oIC9vdXRwdXQ9W11iZmR2ZXIuaAokREVDSwohCiEgIENvcHkgZmlsZSwgY2hhbmdpbmcgbGluZXMgd2l0aCBtYWNyb3MgKEBAKQohCiEKICAgdmZpbGUgOj0gQ1JFQVRFX0JVRkZFUigidmZpbGUiLCAiY29uZmlndXJlLmluIik7CiAgIHJhbmcgOj0gQ1JFQVRFX1JBTkdFKEJFR0lOTklOR19PRih2ZmlsZSksIEVORF9PRih2ZmlsZSkpOwogICBtYXRjaF9wb3MgOj0gU0VBUkNIX1FVSUVUTFkoJ0FNX0lOSVRfQVVUT01BS0UoYmZkLCAnLCBGT1JXQVJELCBFWEFDVCwgcmFuZyk7CiAgIElGIG1hdGNoX3BvcyA8PiAwIFRIRU47CiAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgIEVSQVNFKG1hdGNoX3Bvcyk7CiAgICAgdmVycyA6PSBDVVJSRU5UX0xJTkUtIikiOwogICBFTFNFOwogICAgIHZlcnMgOj0gInVua25vd24iOwogICBFTkRJRjsKICAgdmVyc251bSA6PSB2ZXJzIC0gIi4iIC0gIi4iOwoKICAgZmlsZSA6PSBDUkVBVEVfQlVGRkVSKCJmaWxlIiwgR0VUX0lORk8oQ09NTUFORF9MSU5FLCAiZmlsZV9uYW1lIikpOwogICByYW5nIDo9IENSRUFURV9SQU5HRShCRUdJTk5JTkdfT0YoZmlsZSksIEVORF9PRihmaWxlKSk7CgogICBtYXRjaF9wb3MgOj0gU0VBUkNIX1FVSUVUTFkoJ0BiZmRfdmVyc2lvbkAnLCBGT1JXQVJELCBFWEFDVCwgcmFuZyk7CiAgIElGIG1hdGNoX3BvcyA8PiAwIFRIRU47CiAgICAgIFBPU0lUSU9OKEJFR0lOTklOR19PRihtYXRjaF9wb3MpKTsKICAgICAgRVJBU0UobWF0Y2hfcG9zKTsKICAgICAgQ09QWV9URVhUKHZlcnNudW0pOwogICBFTkRJRjsKICAgbWF0Y2hfcG9zIDo9IFNFQVJDSF9RVUlFVExZKCdAYmZkX3ZlcnNpb25fc3RyaW5nQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJyInKTsKICAgICAgQ09QWV9URVhUKHZlcnMpOwogICAgICBDT1BZX1RFWFQoJyInKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQGJmZF92ZXJzaW9uX3BhY2thZ2VAJywgRk9SV0FSRCwgRVhBQ1QsIHJhbmcpOwogICBJRiBtYXRjaF9wb3MgPD4gMCBUSEVOOwogICAgICBQT1NJVElPTihCRUdJTk5JTkdfT0YobWF0Y2hfcG9zKSk7CiAgICAgIEVSQVNFKG1hdGNoX3Bvcyk7CiAgICAgIENPUFlfVEVYVCgnIihHTlUgQmludXRpbHMpICInKTsKICAgRU5ESUY7CiAgIG1hdGNoX3BvcyA6PSBTRUFSQ0hfUVVJRVRMWSgnQHJlcG9ydF9idWdzX3RvQCcsIEZPUldBUkQsIEVYQUNULCByYW5nKTsKICAgSUYgbWF0Y2hfcG9zIDw+IDAgVEhFTjsKICAgICAgUE9TSVRJT04oQkVHSU5OSU5HX09GKG1hdGNoX3BvcykpOwogICAgICBFUkFTRShtYXRjaF9wb3MpOwogICAgICBDT1BZX1RFWFQoJyI8aHR0cDovL3d3dy5zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS8+IicpOwogICBFTkRJRjsKICAgV1JJVEVfRklMRShmaWxlLCBHRVRfSU5GTyhDT01NQU5EX0xJTkUsICJvdXRwdXRfZmlsZSIpKTsKICAgUVVJVAokICBFT0QKJCB3cml0ZSBzeXMkb3V0cHV0ICJHZW5lcmF0ZWQgYGJmZHZlci5oJyBmcm9tICd2ZXJzaW9uLmgnIGFuZCBgY29uZmlndXJlLmluJy4iCiQhCiQhCiQhIGNyZWF0ZSB0YXJnbWF0Y2guaAokIQokIG9wZW4vd3JpdGUgdGZpbGUgW110YXJnbWF0Y2guaAokIHdyaXRlIHRmaWxlICJ7ICIiIiArIHRhcmdldCArICItKi0qdm1zKiIiIiArICIsIgokIHdyaXRlIHRmaWxlICIjaWYgZGVmaW5lZCAoU0VMRUNUX1ZFQ1MpIgokIHdyaXRlIHRmaWxlICJTRUxFQ1RfVkVDUyIKJCB3cml0ZSB0ZmlsZSAiI2Vsc2UiCiQgd3JpdGUgdGZpbGUgIlVOU1VQUE9SVEVEX1RBUkdFVCIKJCB3cml0ZSB0ZmlsZSAiI2VuZGlmIgokIHdyaXRlIHRmaWxlICJ9LCIKJCBjbG9zZSB0ZmlsZQokIHdyaXRlIHN5cyRvdXRwdXQgIkdlbmVyYXRlZCBgdGFyZ21hdGNoLmgnIgokIQokIQokISBjcmVhdGUgY29uZmlnLmgKJCEKJCBjcmVhdGUgW11jb25maWcuaAovKiBjb25maWcuaC12bXMuICBHZW5lcmF0ZWQgYnkgaGFuZCBieSBLbGF1cyBL5G1wZiwga2thZW1wZkBkaWR5bXVzLnJtaS5kZS4gICovCi8qIGNvbmZpZy5pbi4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLwovKiBXaGV0aGVyIG1hbGxvYyBtdXN0IGJlIGRlY2xhcmVkIGV2ZW4gaWYgPHN0ZGxpYi5oPiBpcyBpbmNsdWRlZC4gICovCi8qICN1bmRlZiBORUVEX0RFQ0xBUkFUSU9OX01BTExPQyAqLwovKiBXaGV0aGVyIGZyZWUgbXVzdCBiZSBkZWNsYXJlZCBldmVuIGlmIDxzdGRsaWIuaD4gaXMgaW5jbHVkZWQuICAqLwovKiAjdW5kZWYgTkVFRF9ERUNMQVJBVElPTl9GUkVFICovCi8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgYG1tYXAnIHN5c3RlbSBjYWxsLiAgKi8KLyogI2RlZmluZSBIQVZFX01NQVAgMSAqLwovKiBEbyB3ZSBuZWVkIHRvIHVzZSB0aGUgYiBtb2RpZmllciB3aGVuIG9wZW5pbmcgYmluYXJ5IGZpbGVzPyAgKi8KLyogI3VuZGVmIFVTRV9CSU5BUllfRk9QRU4gKi8KLyogTmFtZSBvZiBob3N0IHNwZWNpZmljIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUgaW4gdHJhZC1jb3JlLmMuICAqLwovKiAjdW5kZWYgVFJBRF9IRUFERVIgKi8KLyogRGVmaW5lIG9ubHkgaWYgPHN5cy9wcm9jZnMuaD4gaXMgYXZhaWxhYmxlICphbmQqIGl0IGRlZmluZXMgcHJzdGF0dXNfdC4gICovCi8qICN1bmRlZiBIQVZFX1NZU19QUk9DRlNfSCAqLwovKiBEbyB3ZSByZWFsbHkgd2FudCB0byB1c2UgbW1hcCBpZiBpdCdzIGF2YWlsYWJsZT8gICovCi8qICN1bmRlZiBVU0VfTU1BUCAqLwovKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZjbnRsIGZ1bmN0aW9uLiAgKi8KI2RlZmluZSBIQVZFX0ZDTlRMIDEKLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwYWdlc2l6ZSBmdW5jdGlvbi4gICovCiNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCi8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbWFkdmlzZSBmdW5jdGlvbi4gICovCiNkZWZpbmUgSEFWRV9NQURWSVNFIDEKLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtcHJvdGVjdCBmdW5jdGlvbi4gICovCiNkZWZpbmUgSEFWRV9NUFJPVEVDVCAxCi8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAgKi8KI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQovKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICAqLwojZGVmaW5lIEhBVkVfU1REREVGX0ggMQovKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICAqLwojZGVmaW5lIEhBVkVfU1RETElCX0ggMQovKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICAqLwojZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQovKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAgKi8KI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBmaWxlLiAgKi8KI2RlZmluZSBIQVZFX1NZU19GSUxFX0ggMQovKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAgKi8KI2RlZmluZSBIQVZFX1RJTUVfSCAxCi8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gICovCiNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi8qIERpc2FibGUgTkxTICAqLwojdW5kZWYgRU5BQkxFX05MUwokIQokIHdyaXRlIHN5cyRvdXRwdXQgIkdlbmVyYXRlZCBgY29uZmlnLmgnIgoK