ZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL0FVVEhPUlMgYi9hcC9hcHAvYy1hcmVzL3NyYy9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMjllYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9BVVRIT1JTCkBAIC0wLDAgKzEsODIgQEAKK2MtYXJlcyBpcyBiYXNlZCBvbiBhcmVzLCBhbmQgdGhlc2UgYXJlIHRoZSBwZW9wbGUgdGhhdCBoYXZlIHdvcmtlZCBvbiBpdCBzaW5jZQordGhlIGZvcmsgd2FzIG1hZGU6CisKK0FsYmVydCBDaGluCitBbGV4IExvdWtpc3NhcworQWxleGFuZGVyIEtsYXVlcgorQWxleGFuZGVyIExhemljCitBbGV4ZXkgU2ltYWsKK0FuZHJlYXMgUmlla2UKK0FuZHJldyBBbmRramFyCitBbmRyZXcgQXllcgorQW5kcmV3IEMuIE1vcnJvdworQXNoaXNoIFNoYXJtYQorQmVuIEdyZWVhcgorQmVuIE5vb3JkaHVpcworQm9nRGFuIFZhdHJhCitCcmFkIEhvdXNlCitCcmFkIFNwZW5jZXIKK0JyYW0gTWF0dGh5cworQ2hyaXMgQXJhbWFuCitEYW4gRmFuZHJpY2gKK0RhbmllbCBKb2huc29uCitEYW5pZWwgU3RlbmJlcmcKK0RhdmlkIERyeXNkYWxlCitEYXZpZCBTdHVhcnQKK0RlbmlzIEJpbGVua28KK0RpbWEgVGlzbmVrCitEaXJrIE1hbnNrZQorRG9taW5pY2sgTWVnbGlvCitEb3VnIEdvbGRzdGVpbgorRG91ZyBLd2FuCitEdW5jYW4gV2lsY294CitFaW5vIFR1b21pbmVuCitFcmlrIEtsaW5lCitGZWRvciBJbmR1dG55CitGcmVkZXJpYyBHZXJtYWluCitHZWVydCBVeXR0ZXJob2V2ZW4KK0dlb3JnZSBOZWlsbAorR2lzbGUgVmFuZW0KK0dyZWdvciBKYXNueQorR3VlbnRlciBLbmF1ZgorR3VpbGhlcm1lIEJhbGVuYSBWZXJzaWFuaQorR3VudGVyIEtuYXVmCitIZW5yaWsgU3RvZXJuZXIKK0pha3ViIEhyb3plaworSmFtZXMgQnVyc2EKK0rDqXLDqW15IExhbAorS2VpdGggU2hhdworTGVpIFNoaQorTWFya28gS3JlZW4KK01pY2hhZWwgV2FsbG5lcgorTWlrZSBDcm93ZQorTmljayBBbGNvY2sKK05pY2sgTWF0aGV3c29uCitOaWNvbGFzICJQaXhlbCIgTm9ibGUKK05pbmcgRG9uZworT2xlZyBQdWRleWV2CitQYXRyaWNrIFZhbHNlY2NoaQorUGF0cmlrIFRodW5zdHJvbQorUGF1bCBTYWFiCitQZXRlciBQZW50Y2hldgorUGhpbCBCbHVuZGVsbAorUG91bCBUaG9tYXMgTG9taG9sdAorUmF2aSBQcmF0YXAKK1JvYmluIENvcm5lbGl1cworU2HDumwgSWJhcnJhIENvcnJldGfDqQorU2ViYXN0aWFuIGF0IGJhc3RpNzkuZGUKK1NobXVsaWsgUmVnZXYKK1N0ZWZhbiBCw7xobGVyCitTdGVpbmFyIEguIEd1bmRlcnNvbgorU3ZhbnRlIEthcmxzc29uCitUb2Z1IExpbmRlbgorVG9tIEh1Z2hlcworVG9yIEFybnRzZW4KK1Zpa3RvciBTemFrYXRzCitWbGFkIERpbnVsZXNjdQorV2lsbGlhbSBBaGVybgorWWFuZyBUc2UKK2hwb3Blc2N1IGF0IGl4aWFjb20uY29tCitsaXJlbiBhdCB2aXZpc2ltby5jb20KK25vcmRzdHVybQorc2FnaHVsCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9DSEFOR0VTIGIvYXAvYXBwL2MtYXJlcy9zcmMvQ0hBTkdFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2U2YTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvQ0hBTkdFUwpAQCAtMCwwICsxLDM5NjggQEAKKyAgIENoYW5nZWxvZyBmb3IgdGhlIGMtYXJlcyBwcm9qZWN0LiBHZW5lcmF0ZWQgd2l0aCBnaXQyY2hhbmdlcy5wbAorCitWZXJzaW9uIDEuMTIuMCAoMjkgU2VwIDIwMTYpCisKK0RhbmllbCBTdGVuYmVyZyAoMjkgU2VwIDIwMTYpCistIFJFTEVBU0UtTk9URVM6IDEuMTIuMAorCistIFtEYXZpZCBEcnlzZGFsZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXMtdGVzdC1taXNjOiB0ZXN0IGFyZXNfY3JlYXRlX3F1ZXJ5IHdpdGggZXNjYXBlZCB0cmFpbGluZyBkb3QKKworLSBhcmVzX2NyZWF0ZV9xdWVyeTogYXZvaWQgc2luZ2xlLWJ5dGUgYnVmZmVyIG92ZXJ3cml0ZQorICAKKyAgLi4uIHdoZW4gdGhlIG5hbWUgZW5kcyB3aXRoIGFuIGVzY2FwZWQgZG90LgorICAKKyAgQ1ZFLTIwMTYtNTE4MAorICAKKyAgQnVnOiBodHRwczovL2MtYXJlcy5oYXh4LnNlL2Fkdl8yMDE2MDkyOS5odG1sCisKKy0gYXJlc19saWJyYXJ5X2luaXRpYWxpemVkLjM6IGFkZGVkCisKKy0gbWFrZTogYnVtcCBDQVJFU19WRVJTSU9OX0lORk8gZm9yIHJlbGVhc2UKKworRGF2aWQgRHJ5c2RhbGUgKDI5IFNlcCAyMDE2KQorLSBtYW46IHVwZGF0ZSBhcmVzX2luaXRfb3B0aW9ucy4zCisKK0RhbmllbCBTdGVuYmVyZyAoMjkgU2VwIDIwMTYpCistIGFyZXNfbGlicmFyeV9pbml0LjM6IGNvcnJlY3RlZCB0aGUgYXJlc19saWJyYXJ5X2luaXRfbWVtIHByb3RvCisKKy0gUkVBRE1FLm1kOiByZW1vdmUgc3BhY2UgZnJvbSBsaW5rCisKKy0gUkVBRE1FOiBsaW5rIHRvIHRoZSBjb3JyZWN0IGMtYXJlcyBiYWRnZSEKKyAgCisgIFJlcG9ydGVkLWJ5OiBEYXZpZCBIb3RoYW0KKyAgCisgIEZpeGVzICM2MworCistIGRvY3M6IG1pbm9yIGZvcm1hdHRpbmcgZWRpdHMKKworLSBhcmVzX2Rlc3Ryb3kuMzogZm9ybWF0dGluZyBwb2xpc2gKKworLSBhcmVzX2luaXQuMzogc3BsaXQgdGhlIGluaXQgZG9jcyBpbnRvIHR3byBzZXBhcmF0ZSBtYW4gcGFnZXMKKworLSBTRUNVUklUWTogcG9pbnQgdG8gdGhlIHZ1bG5lcmFiaWxpdGllcyBwYWdlIG5vdworCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGRhYTcyMzViMWE1CisKKy0gYXJlc19jcmVhdGVfcXVlcnkuMzogZWRpdCBsYW5ndWFnZQorICAKKyAgVHJpZWQgdG8gbWFrZSB0aGUgbWFuIHBhZ2UgbW9yZSByZWFkYWJsZS4KKworRGF2aWQgRHJ5c2RhbGUgKDI2IFNlcCAyMDE2KQorLSB0ZXN0OiBmaXggZ01vY2sgdG8gd29yayB3aXRoIGdjYyA+PSA2LngKKyAgCisgIFRha2VuIGZyb206CisgIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvZ29vZ2xldGVzdC9pc3N1ZXMvNzA1I2lzc3VlY29tbWVudC0yMzUwNjc5MTcKKworRGFuaWVsIFN0ZW5iZXJnICgyNiBTZXAgMjAxNikKKy0gW0JyYWQgSG91c2UgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBoZWFkZXJzOiByZW1vdmUgY2hlY2tzIGZvciBhbmQgZGVmaW5lcyBvZiB2YXJpYWJsZSBzaXplcworICAKKyAgLi4uIHRoZXkncmUgbm90IHJlYWxseSB1c2VkIGFuZCBieSBhdm9pZGluZyB0aGVtIGluIHRoZSBhcmVzX2J1aWxkLmgKKyAgb3V0cHV0IHdlIG1ha2UgdGhlIHB1YmxpYyBoZWFkZXIgbGVzcyBkZXBlbmRlbnQgb24gZGF0YSBzaXplcy4KKworRGF2aWQgRHJ5c2RhbGUgKDI0IFNlcCAyMDE2KQorLSBhcGk6IGFkZCBBUkVTX09QVF9OT1JPVEFURSBvcHRtYXNrIHZhbHVlCisgIAorICBGaXggdXAgYSBjb3VwbGUgb2YgcHJvYmxlbXMgd2l0aCBjb25maWd1cmluZyB3aGV0aGVyIGMtYXJlcyByb3RhdGVzCisgIGJldHdlZW4gZGlmZmVyZW50IG5hbWUgc2VydmVycyBiZXR3ZWVuIHJlcXVlc3RzLgorICAKKyAgRmlyc3RseSwgYXJlc19zYXZlX29wdGlvbnMoKSByZXR1cm5zIChpbiAqb3B0bWFzaykgdGhlIHZhbHVlIG9mCisgIChjaGFubmVsLT5vcHRtYXNrICYgQVJFU19PUFRfUk9UQVRFKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseQorICBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjaGFubmVsIGlzIG9yIGlzIG5vdCBhY3R1YWxseSBkb2luZyByb3RhdGlvbi4KKyAgVGhpcyBjYW4gYmUgY29uZnVzaW5nL2luY29ycmVjdCBpZjoKKyAgIC0gdGhlIGNoYW5uZWwgd2FzIG9yaWdpbmFsbHkgY29uZmlndXJlZCB3aXRob3V0IEFSRVNfT1BUX1JPVEFURQorICAgICAoc28gaXQgYXBwZWFycyB0aGF0IHRoZSBjaGFubmVsIGlzIG5vdCByb3RhdGluZykKKyAgIC0gdGhlIC9ldGMvcmVzb2x2LmNvbmYgZmlsZSBpbmNsdWRlcyB0aGUgJ3JvdGF0ZScgb3B0aW9uCisgICAgIChzbyB0aGUgY2hhbm5lbCBpcyBhY3R1YWxseSBwZXJmb3JtaW5nIHJvdGF0aW9uKS4KKyAgCisgIFNlY29uZGx5LCBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVsaWFibHkgY29uZmlndXJlIGEgY2hhbm5lbAorICB0byBub3Qtcm90YXRlOyBsZWF2aW5nIG9mZiBBUkVTX09QVF9ST1RBVEUgaXMgbm90IGVub3VnaCwgc2luY2UKKyAgYSAncm90YXRlJyBvcHRpb24gaW4gL2V0Yy9yZXNvbHYuY29uZiB3aWxsIHR1cm4gaXQgb24gYWdhaW4uCisgIAorICBUaGVyZWZvcmU6CisgICAtIGFkZCBhbiBBUkVTX09QVF9OT1JPVEFURSBvcHRtYXNrIHZhbHVlIHRvIGFsbG93IGV4cGxpY2l0CisgICAgIGNvbmZpZ3VyYXRpb24gb2Ygbm8tcm90YXRlIGJlaGF2aW91cgorICAgLSBpbiBhcmVzX3NhdmVfb3B0aW9ucygpLCByZXBvcnQgdGhlIHZhbHVlIG9mIGNoYW5uZWwtPnJvdGF0ZQorICAgICBhcyBleGFjdGx5IG9uZSBvZiAob3B0bWFzayAmIEFSRVNfT1BUX1JPVEFURSkgb3IKKyAgICAgKG9wdG1hc2sgJiBBUkVTX09QVF9OT1JPVEFURSkuCisgIAorICBJbiB0ZXJtcyBvZiBiYWNrLWNvbXBhdGliaWxpdHk6CisgICAtIGV4aXN0aW5nIGFwcHMgdGhhdCBzZXQgQVJFU19PUFRfUk9UQVRFIHdpbGwgY29udGludWUgdG8gcm90YXRlLAorICAgICBhbmQgdG8gaGF2ZSBBUkVTX09QVF9ST1RBVEUgcmVwb3J0ZWQgYmFjayBmcm9tIGFyZXNfc2F2ZV9vcHRpb25zKCkKKyAgIC0gZXhpc3RpbmcgYXBwcyB0aGF0IGRvbid0IHNldCBBUkVTX09QVF9ST1RBVEUgd2lsbCBjb250aW51ZSB0bworICAgICB1c2UgbG9jYWwgY29uZmlnL2RlZmF1bHRzIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJvdGF0ZSwgYW5kIHdpbGwKKyAgICAgbm93IGdldCBBUkVTX09QVF9ST1RBVEUgb3IgQVJFU19PUFRfTk9ST1RBVEUgcmVwb3J0ZWQgYmFjayBmcm9tCisgICAgIGFyZXNfc2F2ZV9vcHRpb25zKCkgcmF0aGVyIHRoYW4gMC4KKworLSBhcmVzX2luaXRfb3B0aW9uczogb25seSBwcm9wYWdhdGUgaW5pdCBmYWlsdXJlcyBmcm9tIG9wdGlvbnMKKyAgCisgIENvbW1pdCA0NmJiODIwYmUzYTggKCJhcmVzX2luaXRfb3B0aW9uczogZG9uJ3QgbG9zZSBpbml0IGZhaWx1cmUiKQorICBjaGFuZ2VkIGluaXQgYmVoYXZpb3VyIHNvIHRoYXQgZWFybGllciBlcnJvcnMgaW4gaW5pdGlhbGl6YXRpb24KKyAgd2VyZW4ndCBsb3N0LiAgSW4gcGFydGljdWxhciwgaWYgdGhlIHVzZXIgcGFzc2VzIGluIHNwZWNpZmljCisgIG9wdGlvbnMgYnV0IHRoZXkgYXJlIG5vdCBhcHBsaWVkIChlLmcuIGJlY2F1c2Ugb2YgYW4gYWxsb2NhdGlvbgorICBmYWlsdXJlKSwgdGhhdCBmYWlsdXJlIG5lZWRzIHRvIGJlIHJlcG9ydGVkIGJhY2sgdG8gdGhlIHVzZXI7IHRoaXMKKyAgYWxzbyBhcHBsaWVzIHdoZW4gZHVwbGljYXRpbmcgYSBjaGFubmVsIHdpdGggYXJlc19kdXAoKS4KKyAgCisgIEhvd2V2ZXIsIG90aGVyIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGNhbiBiZSBpZ25vcmVkIGFuZAorICBvdmVycmlkZGVuIC0tIGluIHBhcnRpY3VsYXIsIGlmIGluaXRfYnlfcmVzb2x2X2NvbmYoKSBvcgorICBpbml0X2J5X2Vudmlyb25tZW50KCkgZmFpbCwgdGhlbiBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCB2YWx1ZXMKKyAgaXMgT0suCisgIAorICBTbyBvbmx5IHByZXNlcnZlIGZhaWx1cmVzIGZyb20gdGhlIGluaXRfYnlfb3B0aW9ucygpIHN0YWdlLCBub3QKKyAgZnJvbSBhbGwgaW5pdGlhbGl6YXRpb24gc3RhZ2VzLgorICAKKyAgRml4ZXMgaXNzdWUgNjAuCisKKy0gdGVzdDogRm9yY2UgcmVpbnN0YWxsIG9mIGxpYnRvb2wgb24gT1NYCisgIAorICBUcmF2aXMgYnVpbGQgZW52aXJvbm1lbnQgYXBwZWFycyB0byBoYXZlIGNoYW5nZWQuCisKKy0gdGVzdDogQWRkIHZhbGdyaW5kIGJ1aWxkIHZhcmlhbnQKKworLSB0ZXN0OiBBZGQgbnVsbCBwb2ludGVyIHRvIGd0ZXN0IGFyZ3MKKyAgCisgIEdvb2dsZVRlc3QgYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGEgbnVsbCBwb2ludGVyIGluIGFyZ3ZbYXJnY10sCisgIHNvIG1ha2UgaXQgbG9vayBsaWtlIHRoYXQuIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIHRlc3RzIHJ1biB3aXRoCisgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZ2V0IG1lbW9yeSBlcnJvcnMgdW5kZXIgdmFsZ3JpbmQvQVNBTi4KKworRGFuaWVsIFN0ZW5iZXJnICgyMSBBdWcgMjAxNikKKy0gQVVUSE9SOiBtYXliZSBnaXRndWIgaXNuJ3QgcmVhbGx5IGFuIGF1dGhvciA9KQorCistIEFVVEhPUlM6IGFkZGVkIGNvbnRyaWJ1dG9ycyBmcm9tIHRoZSBnaXQgbG9nCisKKy0gTElDRU5TRS5tZDogYWRkIGEgc3RhbmQtYWxvbmUgbGljZW5zZSBmaWxlCisgIAorICBKdXN0IHRoZSBNSVQgbGljZW5zZSB1c2VkIGluIHRoZSB0b3AgdGhlIHNvdXJjZSBmaWxlcyBtb3ZlZCBvdXQgdG8gYQorICBzdGFuZC1hbG9uZSBmaWxlIGZvciBlYXNpZXIgcmVmZXJlbmNlIGFuZCBkaXNjb3ZlcnkuCisKKy0gUkVBRE1FOiBhZGRlZCAiQ0lJIGJlc3QgcHJhY3RpY2VzIiBiYWRnZQorCistIFNFQ1VSSVRZLm1kOiBzdWdnZXN0ZWQgInNlY3VyaXR5IHByb2Nlc3MiIGZvciB0aGUgcHJvamVjdAorCitEYXZpZCBEcnlzZGFsZSAoMTcgQXVnIDIwMTYpCistIHRlc3Q6IEFkZCBDbGFuZyBzdGF0aWMgYW5hbHlzaXMgYnVpbGQgdG8gVHJhdmlzCisgIAorICBSdW4gc2Nhbi1idWlsZCBvdmVyIHRoZSBsaWJyYXJ5IHNvdXJjZSBjb2RlLCBidXQgc2tpcCB0aGUKKyAgdGVzdHMuICBOZWVkcyBhIGxhdGVyIENsYW5nIGluc3RhbGwgaW4gVHJhdmlzCisKKy0gdGVzdDogbW9yZSBpbmZvIG9uIGhvdyB0byBydW4gZnV6eiB0ZXN0aW5nCisKKy0gdGVzdDogbWFrZSBmdXp6ZXIgZHJpdmVyIGNvZGUgQyBub3QgQysrCisKKy0gdGVzdDogZnV6emVyIG1vZGUgZm9yIEFGTCdzIHBlcnNpc3RlbnQgbW9kZQorICAKKyAgV2hlbiBmdXp6aW5nIHdpdGggQUZMLCBpZiB0aGUgTExWTS1iYXNlZCBpbnN0cnVtZW50YXRpb24gaXMKKyAgdXNlZCAodmlhIHRoZSBhZmwtY2xhbmctZmFzdCB3cmFwcGVyKSwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0bworICBoYXZlIGEgc2luZ2xlIGV4ZWN1dGlvbiBvZiB0aGUgZnV6emVyIHByb2dyYW0gaXRlcmF0ZSBtdWx0aXBsZQorICB0aW1lcyBvdmVyIHRoZSBmdXp6aW5nIGVudHJ5cG9pbnQgKHNpbWlsYXIgdG8gbGliRnV6emVyJ3Mgbm9ybWFsCisgIG1vZGUgb2YgZXhlY3V0aW9uKSB3aXRoIGRpZmZlcmVudCBkYXRhLiAgVGhpcyBpcyBtdWNoIChlLmcuIDEweCkKKyAgZmFzdGVyLgorICAKKyAgQWRkIGNvZGUgdG8gc3VwcG9ydCB0aGlzLCBieSBjaGVja2luZyB3aGV0aGVyIF9fQUZMX0xPT1AgaXMKKyAgZGVmaW5lZCBhdCBjb21waWxlLXRpbWUuCisgIAorICBBbHNvLCBzaGlmdCB0aGUgY29kZSB0byBlZmZlY3RpdmVseSBiZSBDIHJhdGhlciB0aGFuIEMrKy4KKworLSB0ZXN0OiBzaW1wbGlmeSBkZXBzIGZvciBmdXp6ZXIgZW50cnlwb2ludAorICAKKyAgTm8gbmVlZCB0byBkZXBlbmQgb24gdGhlIHJlc3Qgb2YgdGhlIHRlc3QgY29kZSAoYXJlcy10ZXN0LmgpIGZvcgorICB0aGUgZnV6emVyIGVudHJ5cG9pbnQ7IHRoaXMgbWFrZXMgdGhlIGVudHJ5cG9pbnQgc2xpZ2h0bHkgc2ltcGxlcgorICB0byBidWlsZCB3aXRoIExMVk0ncyBsaWJGdXp6ZXIuCisgIAorICBBbHNvIHNoaWZ0IHRoZSBjb2RlIHRvIGVmZmVjdGl2ZWx5IGJlIEMgcmF0aGVyIHRoYW4gQysrCisKKy0gdGVzdDogZGlzYWJsZSBNaW5HVyB0ZXN0cworICAKKyAgVGhlIHRlc3QgYmluYXJ5IGJ1aWx0IGluIHRoZSBNaW5HVyBidWlsZCBpcyBmYWlsaW5nIGZvciBzb21lCisgIHJlYXNvbi4gIEl0IHdvcmtzIGZvciBtZSB3aGVuIEkgYnVpbGQgbG9jYWxseSwgc28gSSdtIGd1ZXNzaW5nCisgIGl0J3MgZG93biB0byBzb21lIHNvcnQgb2YgQXBwVmV5b3IgZW52aXJvbm1lbnQgaXNzdWUuCisgIAorICBEaXNhYmxlIGZvciBub3cuCisKK0RhbmllbCBTdGVuYmVyZyAoMTYgQXVnIDIwMTYpCistIHJlYWRfdGNwX2RhdGE6IHJlbW92ZSBzdXBlcmZsdW91cyBOVUxMIGNoZWNrCisgIAorICBDSUQgNTY4ODQgYnkgQ292ZXJpdHkuIFRoZSBwb2ludGVyIGlzIGFscmVhZHkgZGVyZWZlbmNlZCBiZWZvcmUgdGhpcworICBwb2ludCBzbyBpdCBjYW4ndCBiZSBOVUxMIGhlcmUgYW55d2F5LgorCistIHdlYjogaHR0cCA9PiBodHRwcworCitHaXRIdWIgKDIwIEp1bCAyMDE2KQorLSBbRGF2aWQgRHJ5c2RhbGUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBNZXJnZSBwdWxsIHJlcXVlc3QgIzU5IGZyb20gZnV6ZS9tYXN0ZXIKKyAgCisgIFVwZGF0ZSBtc3ZjX3Zlci5pbmMgZm9yIFZTMjAxNSBVcGRhdGUgMworCistIFtDaHJpcyBBcmFtYW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBVcGRhdGUgbXN2Y192ZXIuaW5jCisgIAorICBzdXBwb3J0IFZpc3VhbCBTdHVkaW8gMjAxNSBVcGRhdGUgMworCitEYXZpZCBEcnlzZGFsZSAoMiBNYXkgMjAxNikKKy0gRml4IHRyYWlsaW5nIGNvbW1lbnQgZm9yICNlbmRpZgorCitEYW5pZWwgU3RlbmJlcmcgKDMwIEFwciAyMDE2KQorLSBlbWFpbDogdXNlIEdpc2xlJ3MgIm5ldyIgYWRkcmVzcworCitEYXZpZCBEcnlzZGFsZSAoMTggQXByIDIwMTYpCistIHRlc3Q6IGRyb3Agc3VwZXJmbHVvdXMgZnV6eiBpbnB1dHMKKyAgCisgIFdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBmdXp6IGlucHV0IGZpbGVzIHRoYXQgb25seSBkaWZmZXIgaW4KKyAgdGhlIGZpcnN0IHR3byBieXRlcyAodGhlIHF1ZXJ5IElEKSwganVzdCBrZWVwIHRoZSBmaXJzdCBzdWNoCisgIGZpbGUuCisKK3N2YW50ZSBrYXJsc3NvbiAoMTUgQXByIDIwMTYpCistIFVwZGF0ZSBtc3ZjX3Zlci5pbmMKKyAgCisgIHN1cHBvcnQgVmlzdWFsIFN0dWRpbyAyMDE1IFVwZGF0ZSAyCisKK0RhdmlkIERyeXNkYWxlICgzMSBNYXIgMjAxNikKKy0gdGVzdDogUnVuIGZ1enpjaGVjay5zaCBpbiBUcmF2aXMgYnVpbGQKKworLSB0ZXN0OiBhZGQgZnV6emluZyBjaGVjayBzY3JpcHQgdG8gdGVzdHMKKyAgCisgIEFkZCBhIHRlc3Qgc2NyaXB0IHRoYXQgcnVucyB0aGUgZnV6emluZyBjb21tYW5kIG92ZXIgdGhlCisgIGNvcnB1cyBvZiBETlMgcGFja2V0cy4gIFRoaXMgZG9lc24ndCBhY3R1YWxseSBkbyBhbnkgZnV6emluZworICAoaXQganVzdCBydW5zIHRoZW0gYXMgaW5wdXRzIHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkgdmFyaWF0aW9ucykKKyAgYnV0IGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgZW50cnlwb2ludCBpcyBzdGlsbCB3b3JraW5nLgorCistIHRlc3Q6IGFsbG93IG11bHRpcGxlIGZpbGVzIGluIGFyZXNmdXp6IGNvbW1hbmQgbGluZQorICAKKyAgSWYgbm8gYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgT3RoZXJ3aXNlIHRyZWF0IGVhY2ggYXJndW1lbnQgYXMgYSBmaWxlbmFtZSBhbmQgZmVlZAorICBpdHMgY29udGVudHMgdG8gdGhlIGZ1enogZW50cnlwb2ludC4KKworLSB0ZXN0OiBBZGQgY29ycHVzIG9mIEROUyBwYWNrZXRzCisgIAorICBGb3IgZnV6eiB0ZXN0aW5nIGl0IGlzIHVzZWZ1bCB0byBzdGFydCBmcm9tIGEgY29ycHVzIG9mIHZhbGlkCisgIHBhY2tldHMsIHNvIGZpbGwgb3V0IHRoZSB0ZXN0L2Z1enppbnB1dC8gZGlyZWN0b3J5IHdpdGggYSBidW5jaAorICBvZiBpbnB1dHMuCisgIAorICBUaGVzZSBwYWNrZXRzIHdlcmUgZ2VuZXJhdGVkIGJ5IHRlbXBvcmFyaWx5IG1vZGlmeWluZyB0aGUgYy1hcmVzCisgIHByb2Nlc3NfYW5zd2VyKCkgZnVuY3Rpb24gdG8gc2F2ZSBvZmYgYW55IGluY29taW5nIHJlc3BvbnNlIG1lc3NhZ2VzLgorCistIHRlc3Q6IEFkZCB1dGlsaXR5IHRvIHNob3cgRE5TIHBhY2tldCBmcm9tIGZpbGUKKworLSBbbm9yZHN0dXJtIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRml4IG5zb3J0IGluaXRpYWxpemF0aW9uCisgIAorICBBdXRob3I6IEFsZXhhbmRlciBEcmFjaGV2c2tpeQorICBodHRwOi8vYy1hcmVzLmhheHguc2UvbWFpbC9jLWFyZXMtYXJjaGl2ZS0yMDE0LTA3LzAwMDQuc2h0bWwKKyAgaHR0cDovL2MtYXJlcy5oYXh4LnNlL21haWwvYy1hcmVzLWFyY2hpdmUtMjAxNC0wNy8wMDE0LnNodG1sCisKKy0gdGVzdDogQ2hlY2sgc2V0dGluZyBuc29ydD0wIG9wdGlvbiBpcyByZXNwZWN0ZWQKKworLSB0ZXN0OiBVcGRhdGUgZnV6emluZyBmdW5jdGlvbiBwcm90b3R5cGUKKyAgCisgIGxpYkZ1enplciBjaGFuZ2VkIGV4cGVjdGVkIHJldHVybiB0eXBlIGZyb20gdm9pZCB0byBpbnQKKyAgaW4gTExWTSAzLjguCisKKy0gRXhwbGljaXRseSBjbGVhciBzdHJ1Y3Qgc2VydmVudCBiZWZvcmUgdXNlCisgIAorICBPbiBhIGJ1aWxkIHdoZXJlIE1TQU4gaGFzIGJlZW4gbWFudWFsbHkgc2V0IHVwICh3aGljaCBpbnZvbHZlcworICB1c2luZyBhbiBNU0FOLWluc3RydW1lbnRlZCB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCBDKysgbGlicmFyeSwgc2VlCisgIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvc2FuaXRpemVycy93aWtpL01lbW9yeVNhbml0aXplckxpYmN4eEhvd1RvKQorICB0aGVyZSdzIGEgd2FybmluZyBhYm91dCB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gIEl0CisgIG1pZ2h0IGJlIGEgZmFsc2UgcG9zaXRpdmUsIGJ1dCB0aGUgZml4IGlzIHRyaXZpYWwgc28gaW5jbHVkZSBpdC4KKworLSB0ZXN0OiBmb3IgQUZfVU5TUEVDLCByZXR1cm4gQ05BTUUgb25seSBmb3IgQUFBQSwgYnV0IHZhbGlkIEEgcmVjb3JkCisgIAorICBBbHNvIHNodWZmbGUgZXhwZWN0ZWQgcmVzcG9uc2VzIHJzcDYvcnNwNCBpbnRvIHRoZSBvcmRlciB0aGV5IHdpbGwgb2NjdXIuCisKKy0gW0NocmlzIEFyYW1hbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIG1zdmNfdmVyLmluYzogc3VwcG9ydCBWaXN1YWwgU3R1ZGlvIDIwMTUgVXBkYXRlIDEKKworLSBidWlsZDogY29tbW9uaXplIE1TVkMgdmVyc2lvbiBkZXRlY3Rpb24KKyAgCisgIFJlbW92ZSB0aGUgbmVlZCB0byBjb3B5L3Bhc3RlIHZlcnNpb24gbnVtYmVyIG1hcHBpbmcgYmV0d2VlbgorICBNYWtlZmlsZS5tc3ZjIGFuZCB0ZXN0L01ha2VmaWxlLm1zdmMuCisKKy0gdGVzdDogVXNlIGRpZmZlcmVudCBuYW1lIGluIGxpdmUgdGVzdAorCistIHRlc3Q6IE9ubHkgcGFzcyB1bnVzZWQgYXJncyB0byBHb29nbGVUZXN0CisKKy0gYWhvc3QuYzogYWRkIGNhc3QgdG8gZml4IEMrKyBjb21waWxlCisgIAorICBJZiBhaG9zdC5jIGlzIGZvcmNlLWNvbXBpbGVkIGFzIEMrKyB0aGUgbWlzc2luZyBjYXN0IGZyb20KKyAgKHZvaWQgKikgdG8gKGNoYXIgKiopIGlzIHByb2JsZW1hdGljLgorCistIGFyZXNfbGlicmFyeV9jbGVhbnVwOiByZXNldCBhcmVzX3JlYWxsb2MgdG9vCisgIAorICBPdGhlcndpc2UgYSBzdWJzZXF1ZW50IHVzZSBvZiB0aGUgbGlicmFyeSBtaWdodCB1c2UgYSBwcmV2aW91cworICBpbmNhcm5hdGlvbidzIHJlYWxsb2MoKSBpbXBsZW1lbnRhdGlvbi4KKworRGFuaWVsIFN0ZW5iZXJnICg5IE1hciAyMDE2KQorLSBbQnJhZCBIb3VzZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGNvbmZpZ3VyZTogY2hlY2sgaWYgdGVzdHMgY2FuIGdldCBidWlsdCBiZWZvcmUgZW5hYmxlZAorICAKKyAgVGhlIGN1cnJlbnQgYXBwcm9hY2ggZm9yIGRpc2FibGluZyB0ZXN0cyBpcyBub3QgYSBnb29kIHNvbHV0aW9uIGJlY2F1c2UKKyAgaXQgZm9yY2VzIHlvdSB0byBwYXNzIC0tZGlzYWJsZS10ZXN0cywgcmF0aGVyIHRoYW4gYXV0by1kZXRlY3QgaWYgeW91cgorICBzeXN0ZW0gY2FuIHN1cHBvcnQgdGhlIHRlc3RzIGluIHRoZSBmaXJzdCBwbGFjZS4gIE1hbnkgKG1vc3Q/KSBzeXN0ZW1zCisgIGRvIG5vdCBoYXZlIEMrKzExLiAgVGhpcyBhbHNvIGNhdXNlcyBpc3N1ZXMgd2hlbiBjaGFpbi1idWlsZGluZyBjLWFyZXMsCisgIHRoZSBob3N0aW5nIHN5c3RlbSBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHN1cHBvcnQgcGFzc2luZyB0aGlzCisgIGFkZGl0aW9uYWwgZmxhZyBpZiBuZWNlc3NhcnksIGl0IGRvZXNuJ3Qgc2VlbSByZWFzb25hYmxlIHRvIGFkZCB0aGlzCisgIHJlcXVpcmVtZW50IHdoaWNoIGJyZWFrcyBjb21wYXRpYmlsaXR5LgorICAKKyAgVGhpcyBjaGFuZ2UgYXV0by1kZXRlY3RzIGlmIHRoZSBzeXN0ZW0gY2FuIGJ1aWxkIHRoZSB0ZXN0cyBhbmQKKyAgYXV0b21hdGljYWxseSBkaXNhYmxlIHRoZW0gaWYgaXQgY2Fubm90LiAgSWYgeW91IHBhc3MgLS1lbmFibGUtdGVzdHMgdG8KKyAgY29uZmlndXJlIGFuZCB0aGUgc3lzdGVtIGNhbm5vdCBidWlsZCB0aGVtIGVpdGhlciBkdWUgdG8gbGFjayBvZiBzeXN0ZW0KKyAgc3VwcG9ydCwgb3IgYmVjYXVzZSBjcm9zcy1jb21waWxhdGlvbiBpcyBiZWluZyB1c2VkLCBpdCB3aWxsIHRocm93IGFuCisgIGFwcHJvcHJpYXRlIGVycm9yIHNpbmNlIHRoZSB1c2VyIGluZGljYXRlZCB0aGV5IHJlYWxseSBkaWQgd2FudCB0aGUKKyAgdGVzdHMuCisKK0RhdmlkIERyeXNkYWxlICgzIE1hciAyMDE2KQorLSBbVmlrdG9yIFN6YWthdHMgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBNYWtlZmlsZS5tMzI6IGFkZCBzdXBwb3J0IGZvciBDUk9TU1BSRUZJWAorCistIFtWaWt0b3IgU3pha2F0cyBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIE1ha2VmaWxlLm0zMjogYWRkIHN1cHBvcnQgZm9yIGV4dHJhIGZsYWdzCisgIAorICBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIENBUkVTX3tMRCxDfUZMQUdfRVhUUkFTIGVudnZhcnMKKyAgZm9yIG1pbmd3CisKKy0gdGVzdDogQnVpbGQgd2l0aCBNaW5HVyBvbiBBcHBWZXlvcgorCistIHRlc3Q6IGF2b2lkIGluNmFkZHJfKiBjb25zdGFudHMKKyAgCisgIFRoZXNlIGFyZW4ndCBhdmFpbGFibGUgb24gTWluR1csIHNvIHVzZSBleHBsaWNpdCBhZGRyZXNzZXMgaW5zdGVhZC4KKworLSB0ZXN0OiBhZGQgbWlzc2luZyAjaW5jbHVkZXMgZm9yIGRucy1wcm90by5jYworCistIFtHcmVnb3IgSmFzbnkgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGaXggbWFuIHBhZ2UgdHlwb3MgZGV0ZWN0ZWQgYnkgTGludGlhbgorCitEYW5pZWwgU3RlbmJlcmcgKDE5IEZlYiAyMDE2KQorLSBjb25maWd1cmU6IGFja25vd2xlZGdlIC0tZGlzYWJsZS10ZXN0cworICAKKyAgRml4ZXMgIzQ0CisKKy0gQVVUSE9SUzogYWRkZWQgY29udHJpYnV0b3JzIGZyb20gdGhlIDEuMTEuMCByZWxlYXNlCisKKy0gYnVtcDogc3RhcnQgd29ya2luZyBvbiB0aGUgbmV4dCB2ZXJzaW9uCisKK1ZlcnNpb24gMS4xMS4wICgxOSBGZWIgMjAxNikKKworRGFuaWVsIFN0ZW5iZXJnICgxOSBGZWIgMjAxNikKKy0gUkVMRUFTRS1OT1RFUzogZmluYWwgZWRpdHMgZm9yIDEuMTEuMAorCitEYXZpZCBEcnlzZGFsZSAoMTUgRmViIDIwMTYpCistIGFyZXNfZHVwLjM6IHJlbW92ZSBtZW50aW9uIG9mIG5vbmV4aXN0ZW50IGZ1bmN0aW9uCisgIAorICBhcmVzX2R1cF9vcHRpb25zKCkgZG9lc24ndCBleGlzdCwgc28gZG9uJ3QgZG9jdW1lbnQgaXQuCisKKy0gdGVzdDogc2tpcCByZXBlYXRlZCBidWlsZCBzdGVwcworICAKKyAgVG9wLWxldmVsIGJ1aWxkY29uZi9jb25maWd1cmUgbm93IHRyaWdnZXJzIGZvciB0aGUKKyAgdGVzdC8gc3ViZGlyIHRvbywgc28gZG9uJ3QgbmVlZCB0byBkbyBleHBsaWNpdGx5LgorCistIHRlc3Q6IG5hbWVzcGFjZXMgdW5hdmFpbGFibGUgd2hlbiBjcm9zcy1jb21waWxpbmcKKworRGFuaWVsIFN0ZW5iZXJnICgxMyBGZWIgMjAxNikKKy0gY29uZmlndXJlOiBvbmx5IHJ1biBjb25maWd1cmUgaW4gdGVzdCB3aGVuIE5PVCBjcm9zcy1jb21waWxpbmcKKyAgCisgIC4uLiBhcyB0aGUgdGVzdHMgd29uJ3QgcnVuIGNyb3NzLWNvbXBpbGVkIGFueXdheQorCitEYXZpZCBEcnlzZGFsZSAoMTMgRmViIDIwMTYpCistIHRlc3Q6IHByZWZlciBPTl9DQUxMIHRvIEVYUEVDVF9DQUxMIHRvIHJlZHVjZSBmbGFrZXMKKyAgCisgIEZvciBVRFAgdGVzdHMsIHRoZXJlJ3MgYSBjaGFuY2Ugb2YgYSByZXRyeS4gIEVYUEVDVF9DQUxMIG9ubHkKKyAgZXhwZWN0cyBhIHNpbmdsZSByZXF1ZXN0IHRvIGFycml2ZSBhdCB0aGUgc2VydmVyOyBPTl9DQUxMIGFsbG93cworICBmb3IgYSBVRFAgcmV0cnkgYW5kIHJlcGVhdHMgdGhlIHNhbWUgYW5zd2VyLgorICAKKyAgTm90ZSB0aGF0IE9OX0NBTEwgYW5kIEVYUEVDVF9DQUxMIGNhbid0IGJlIG1peGVkIGluIHRoZSBzYW1lCisgIHRlc3QsIGFuZCB0aGF0IHRlc3RzIHRoYXQgaGF2ZSBhIHZhcmllZCBzZXF1ZW5jZSBvZiByZXNwb25zZXMKKyAgZm9yIHRoZSBzYW1lIHJlcGVhdGVkIHJlcXVlc3Qgc3RpbGwgaGF2ZSB0byB1c2UgRVhQRUNUX0NBTEwuCisKK0RhbmllbCBTdGVuYmVyZyAoMTMgRmViIDIwMTYpCistIGNvbmZpZ3VyZTogcnVuIGNvbmZpZ3VyZSBpbiAndGVzdCcgdG9vCisgIAorICBIYXZpbmcgdGhlIHRlc3QgZGlyIGNvbXBsZXRlbHkgc3RhbmQtYWxvbmUgY2F1c2VzIHRvbyBtYW55IGlzc3VlcyBmb3IKKyAgdXNlcnMgYW5kIGRldnMuIEl0IHN0aWxsIG5lZWRzIHRvIGJlIGJ1aWx0IHNwZWNpZmljYWxseS4KKworLSBjb25maWd1cmU6IGJ1aWxkIHNpbGVudGx5IGJ5IGRlZmF1bHQKKworLSBidWlsZGNvbmY6IHJ1biB0ZXN0L2J1aWxkY29uZiB0b28gaWYgcHJlc2VudAorCistIHRlc3QvY29uZmlndXJlOiBidWlsZCBzaWxlbnRseSBieSBkZWZhdWx0CisKKy0gW0dyZWdvciBKYXNueSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGRpc3Q6IERpc3RyaWJ1dGUgUkVBRE1FLm1kCisgIAorICBDbG9zZXMgIzQyCisKK1ZlcnNpb24gMS4xMS4wICgxMSBGZWIgMjAxNikKKworRGFuaWVsIFN0ZW5iZXJnICgxMSBGZWIgMjAxNikKKy0gTWFrZWZpbGUuYW06IGRpc3RyaWJ1dGUgdGhlIHRlc3QgZGlyIHRvbworCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDM4NTU4MmJkMTRiNjhhCisKKy0gW05pY29sYXMgXCJQaXhlbFwiIE5vYmxlIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgYXJlc193aW4zMl9pbml0OiBtYWtlIExvYWRMaWJyYXJ5IHdvcmsgd2hlbiB1c2luZyBVTklDT0RFIHRvbworICAKKyAgQ2xvc2VzICMxNworCitEYXZpZCBEcnlzZGFsZSAoMTEgRmViIDIwMTYpCistIFVzZSAicmVzb2x2ZSIgYXMgc3lub255bSBvZiAiZG5zIiBpbiBuc3N3aXRjaC5jb25mCisgIAorICBNb2Rlcm4gTGludXggc3lzdGVtcyBtYXkgaGF2ZSBsaWJuc3NfcmVzb2x2ZSBmcm9tIHN5c3RlbWQgYXMgdGhlCisgIHJlc29sdmVyLCB3aGljaCBpcyB0aGVuIGNvbmZpZ3VyZWQgaW4gL2V0Yy9uc3N3aXRjaC5jb25mIHdpdGgKKyAgdGhlICJyZXNvbHZlIiBrZXl3b3JkIHJhdGhlciB0aGFuICJkbnMiLgorICAKKyAgRml4ZXMgIzMzCisKKy0gYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrOiBtYWtlIG1hbnBhZ2UgbWF0Y2ggY29kZQorICAKKyAgVGhlIGNvZGUgaW4gYXJlc19wcm9jZXNzLmMgdGhhdCBpbnZva2VzIHRoZSBzb2NrZXQgY3JlYXRpb24vY29ubmVjdGlvbgorICBjYWxsYmFjayBvbmx5IGNoZWNrcyBmb3IgcmMgPCAwLCBub3QgZm9yIHN0YW5kYXJkIGFyZXMgZXJyb3IgY29kZXMuCisKKy0gTWVyZ2UgcHVsbCByZXF1ZXN0ICMzNiBmcm9tIEFHV0EtZm9ya3MvbWFzdGVyCisgIAorICBBZGQgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjaygpCisKKy0gdGVzdDogVXBkYXRlIGluaXQgdGVzdHMgdG8gbWF0Y2ggYmVoYXZpb3VyCisgIAorICBVbnJlYWRhYmxlIGNvbmZpZyBmaWxlcyBhcmUgbm93IHRyZWF0ZWQgdGhlIHNhbWUgd2F5CisgIGFzIGFic2VudCBjb25maWcgZmlsZXMuCisKKy0gW0ZlZG9yIEluZHV0bnkgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBJZ25vcmUgYGZvcGVuYCBlcnJvcnMgdG8gdXNlIGRlZmF1bHQgdmFsdWVzCisgIAorICBBZnRlciA0NmJiODIwYmUzYTgzNTIwZTcwZTZjNWYwYzUxMzMyNTNmY2Q2OWNkIGBpbml0X2J5X3Jlc29sdl9jb25mYAorICBlcnJvcnMgYXJlIG5vIGxvbmdlciBzd2FsbG93ZWQgaW4gYGFyZXNfaW5pdF9vcHRpb25zYC4gVGhpcyBoYXMgZXhwb3NlZAorICBhIHByZXZpb3VzbHkgdW5rbm93biBidWcgaW4gYGxvb2t1cHNgIGluaXRpYWxpemF0aW9uIGNvZGUuCisgIAorICBJZiB0aGVyZSBpcyBubyBsb29rdXAgY29uZmlndXJhdGlvbiBpbiBgcmVzb2x2LmNvbmZgLAorICBgaW5pdF9ieV9yZXNvbHZfY29uZmAgd2lsbCBhdHRlbXB0IHRvIHJlYWQgaXQgZnJvbSBvdGhlciBmaWxlcyBhdmFpbGFibGUKKyAgb24gdGhlIHN5c3RlbS4gSG93ZXZlciwgc29tZSBvZiB0aGVzZSBmaWxlcyBtYXkgaGF2ZSByZXN0cmljdGVkCisgIHBlcm1pc3Npb25zIChsaWtlIGA2MDBgKSwgd2hpY2ggd2lsbCBsZWFkIHRvIGBFQUNDRVNTYCBlcnJubywgd2hpY2ggaW4KKyAgdHVybiBpcyBoYW5kbGVkIGxpa2UgYSBmYXRhbCBlcnJvciBieSBgaW5pdF9ieV9yZXNvbHZfY29uZmAuCisgIAorICBIb3dldmVyLCBpdCBzb3VuZHMgaWxsb2dpY2FsIHRoYXQgdGhpcyBlcnJvciBzaG91bGQgYmUgaGFuZGxlZCBhcyBhCisgIGZhdGFsLiBUaGVyZSBpcyBhIGBpbml0X2J5X2RlZmF1bHRzYCBjYWxsIHRoYXQgb3ZlcnJpZGVzIGBsb29rdXBzYCB3aXRoCisgIGRlZmF1bHQgdmFsdWUsIGFuZCBjZXJ0YWlubHkgcG9zc2libGUgYWJzZW5jZSBvZiBsb29rdXAgaW5mb3JtYXRpb24gaXMKKyAgdGhlIHJlYXNvbiB3aHkgdGhpcyBmdW5jdGlvbiBleGlzdHMgaW4gYSBmaXJzdCBwbGFjZSEKKyAgCisgIEkgc3VnZ2VzdCBoYW5kbGluZyBhbnkgYGZvcGVuYCBlcnJvcnMgYXMgbm9uLWZhdGFsIG9uZXMsIGFsbG93aW5nIHRvCisgIHBpY2sgdXAgdGhlIGBsb29rdXBzYCB2YWx1ZSBmcm9tIGRpZmZlcmVudCBjb25maWcgZmlsZXMsIG9yIHRvIHBpY2sgdXAKKyAgZGVmYXVsdCB2YWx1ZS4KKworQW5kcmV3IEF5ZXIgKDkgRmViIDIwMTYpCistIERvY3VtZW50IGNhbGxiYWNrIHR5cGUgaW4gbWFuIHBhZ2UgZm9yIGFyZXNfc2V0X3NvY2tldF9jYWxsYmFjaworCistIEFkZCBhcmVzX3NldF9zb2NrZXRfY29uZmlndXJlX2NhbGxiYWNrKCkKKyAgCisgIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCBhZnRlciB0aGUgc29ja2V0IGlzCisgIGNyZWF0ZWQsIGJ1dCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuICBUaGlzIGlzIGFuIGlkZWFsCisgIHRpbWUgdG8gY3VzdG9taXplIHZhcmlvdXMgc29ja2V0IG9wdGlvbnMuCisKK0RhdmlkIERyeXNkYWxlICg5IEZlYiAyMDE2KQorLSB0ZXN0OiBhcmVzX3NldF9zb2NrZXRfY2FsbGJhY2sgZmFpbHVyZSBiZWhhdmlvdXIKKworLSB0ZXN0OiBDaGVjayBhcmVzX3BhcnNlX3R4dF9yZXBseV9leHQoKSBlbnRyeXBvaW50CisKKy0gW0ZlZG9yIEluZHV0bnkgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICB0eHQ6IGludHJvZHVjZSBgYXJlc19wYXJzZV90eHRfcmVwbHlfZXh0YAorICAKKyAgSW50cm9kdWNlIGBhcmVzX3R4dF9leHRgIHN0cnVjdHVyZSB3aXRoIGFuIGV4dHJhIGByZWNvcmRfc3RhcnRgCisgIGZpZWxkLCB3aGljaCBpbmRpY2F0ZXMgYSBzdGFydCBvZiBhIG5ldyBUWFQgcmVjb3JkLCB0aHVzIGFsbG93aW5nIHRvCisgIGRpZmZlcmVudGlhdGUgdGhlIGNodW5rcyBpbiB0aGUgc2FtZSByZWNvcmQsIGZyb20gYSBjaHVua3MgaW4gYQorICBkaWZmZXJlbnQgcmVjb3JkLgorICAKKyAgSW50cm9kdWNlIGEgbmV3IEFQSSBtZXRob2Q6IGBhcmVzX3BhcnNlX3R4dF9yZXBseV9leHRgIHRoYXQgd29ya3Mgd2l0aAorICB0aGlzIGtpbmQgb2Ygc3RydWN0LgorCistIGRvYzogVXBkYXRlIG1pc3NlZCByZXBvIHJlZmVyZW5jZXMKKworLSBkb2M6IFVwZGF0ZSBkb2NzIG9uIGNvbnRyaWJ1dGluZworCistIHRlc3Q6IFJ1biBjb21tYW5kIGxpbmUgdG9vbHMgaW4gVHJhdmlzCisgIAorICBEbyBhIHF1aWNrIGV4ZWN1dGlvbiBvZiBlYWNoIG9mIHRoZSBjb21tYW5kIGxpbmUgdG9vbHMKKyAgaW4gdGhlIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gYnVpbGQsIHNvIHRoYXQgYW55IChzYXkpCisgIHNhbml0aXplciBmYWlsdXJlcyBzaG93IHVwLgorCistIGFjb3VudHJ5OiBkcm9wIGluZXJ0IHRlc3QKKyAgCisgIElmIHZlcl8xIGlzIHRydWUsIHRoZW4gejAgYW5kIHoxIG11c3QgYm90aCBiZSAneicsIGFuZCBzbworICAoejAgIT0gJ3onICYmIHoxICE9ICd6JykgY2FuIG5ldmVyIGJlIHRydWUuCisgIAorICBDSUQgNTY4NzksIHBvaW50ZWQgb3V0IGJ5IENvdmVyaXR5LgorCistIGRvYzogdXBkYXRlIGJhZGdlIGxvY2F0aW9ucyB0byBtYXN0ZXIgcmVwbworCistIHRlc3Q6IEVuYWJsZSBtYWludGFpbmVyIG1vZGUgKyBkZWJ1ZyBpbiBUcmF2aXMKKworLSB0ZXN0OiBBZGQgYW4gaU9TIGJ1aWxkIHRhcmdldAorCistIHRlc3Q6IElnbm9yZSBTSUdQSVBFIGluIHRlc3RzCisKKy0gdGVzdDogTW9yZSBpbml0aWFsaXphdGlvbiB0ZXN0cworCistIHRlc3Q6IEltcHJvdmUgY29udGFpbmVyaXplZCB0ZXN0IG1lY2hhbmlzbQorICAKKyAgQWltIGlzIHRvIGVuc3VyZSB0aGF0IGNvZGUgY292ZXJhZ2UgaW5mb3JtYXRpb24gY2FuIGVzY2FwZSB0aGUKKyAgY29udGFpbmVyLiAgVG8gZG8gdGhpczoKKyAgIC0gRW50ZXIgYSBuZXcgbW91bnQgbmFtZXNwYWNlIHRvbywgc28gdGhhdCB3ZSBjYW4uLi4KKyAgIC0gQmluZCBtb3VudCB0aGUgZXhwZWN0ZWQgc291cmNlIGRpcmVjdG9yeSBpbnRvIHRoZSBjb250YWluZXIKKyAgIC0gU2hhcmUgbWVtb3J5IHdpdGggdGhlIHN1Yi1wcm9jZXNzIHNvIGNvdmVyYWdlIGluZm9ybWF0aW9uIGlzCisgICAgIHNoYXJlZCB0b28uCisKKy0gdGVzdDogTWFrZSBjb250YWluZWQgdGVzdHMgZWFzaWVyIHRvIHdyaXRlCisKKy0gdGVzdDogQWRkIGZyYW1ld29yayBmb3IgY29udGFpbmVyaXplZCB0ZXN0aW5nCisgIAorICBPbiBMaW51eCB3ZSBjYW4gcG90ZW50aWFsbHkgdXNlIHVzZXIgYW5kIFVUUyBuYW1lc3BhY2VzIHRvIHJ1biAgYSB0ZXN0CisgIGluIGEgcHNldWRvLWNvbnRhaW5lciB3aXRoOgorICAgLSBhcmJpdHJhcnkgZmlsZXN5c3RlbSAoZS5nLiAvZXRjL3Jlc29sdi5jb25mLCAvZXRjL25zc3dpdGNoLmNvbmYsIC9ldGMvaG9zdHMpCisgICAtIGFyYml0cmFyeSBob3N0bmFtZS9kb21haW5uYW1lLgorICAKKyAgSW5jbHVkZSBhIGZpcnN0IHBhc3MgYXQgdGhlIGZyYW1ld29yayBjb2RlIHRvIGFsbG93IHRoaXMsIGFsb25nIHdpdGggYQorICBmaXJzdCB0ZXN0IGNhc2UgdGhhdCB1c2VzIHRoZSBjb250YWluZXIuCisKKy0gdGVzdDogVXNlIGEgbG9uZ2VyIHRpbWVvdXQgZm9yIGxlc3MgZmxha2luZXNzCisgIAorICBIYXZpbmcgb2NjYXNpb25hbCB0ZXN0IGZhaWx1cmVzIGZyb20gdGltZW91dCBiZWZvcmUgbXVsdGlwbGUKKyAgcXVlcmllcyBjYW4gY29tcGxldGUsIHNvIHVwIHRoZSBkZWZhdWx0IHRpbWVvdXQgZm9yIHRoZSB0ZXN0CisgIGZyb20gMTAwbXMgdG8gMTUwMG1zLgorCistIHRlc3Q6IE1ha2UgZmFpbHVyZSB0ZXN0cyBtb3JlIHJvYnVzdAorICAKKyAgRGlmZmVyZW50IHBsYXRmb3JtcyB3aWxsIGRvIGRpZmZlcmVudCBudW1iZXJzIG9mIGFsbG9jYXRpb25zCisgIGluIHRoZSBwcm9jZXNzaW5nIG9mIGEgZ2l2ZW4gQVBJIGNhbGw7IGp1c3QgY2hlY2sgdGhhdCB0aGUKKyAgcmV0dXJuIGNvZGUgaXMgZWl0aGVyIHN1Y2Nlc3Mgb3IgRU5PTUVNLCBhbmQgZnJlZSBvZmYgYW55CisgIHJldHVybmVkIHN0YXRlIGluIHRoZSBmb3JtZXIgY2FzZS4KKyAgCisgIEFsc28gY29wZSB3aXRoIEVDT05OUkVGVVNFRCBhcyB3ZWxsIGFzIEVOT1RGT1VORC4KKworLSB0ZXN0OiBHZXQgdGVzdCBjb2RlIGJ1aWxkaW5nIHVuZGVyIFdpbmRvd3MKKyAgCisgICAtIEluaXRpYWwgbm1ha2UgZmlsZSBiYXNlZCBvZmYgbGlicmFyeSBubWFrZSBmaWxlCisgICAtIENhc3Qgc29ja2V0IGNhbGwgYXJndW1lbnRzIHRvIChjaGFyICopCisgICAtIFVzZSB3cmFwcGVyIHNjbG9zZSgpIHRoYXQgbWFwcyB0byBjbG9zZXNvY2tldCgpIG9yIGNsb3NlKCkKKyAgIC0gQnVpbGQgYSBjb25maWcuaCBpbmRpY2F0aW5nIHByZXNlbmNlIG9mIGhlYWRlcnMKKyAgIC0gQ29uZGl0aW9uYWxseSBpbmNsdWRlIG5ldGRiLmgKKyAgIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IGluY2x1ZGUgb2Ygc3lzL3NvY2tldC5oCisgICAtIEZvcmNlIGxvbmdlciBiaXRtYXNrIGZvciBhbGxvY2F0aW9uIGZhaWx1cmUgdHJhY2tpbmcKKyAgIC0gQ2FsbCBXU0FTdGFydHVwKCkgLyBXU0FDbGVhbnVwKCkgaW4gbWFpbigpCisgICAtIFNldCBUQ1BfTk9ERUxBWSBmb3IgbW9jayBzZXJ2ZXIKKyAgIC0gVHVybiBvbiB0ZXN0cyBpbiBBcHBWZXlvciBidWlsZAorCistIHRlc3Q6IERpc2FibGUgdGVzdHMgdGhhdCBtYW5pcHVsYXRlIGVudiBvbiBXaW5kb3dzCisKKy0gdGVzdDogTW92ZSBmaWxlIGxpc3RzIGludG8gTWFrZWZpbGUuaW5jCisgIAorICBJbiBwcmVwYXJhdGlvbiBmb3IgYSBXaW4zMiBidWlsZCBvZiB0aGUgdGVzdCBzdWl0ZS4KKworLSB0ZXN0OiBBZGQgYSBzaW1wbGUgbXVsdGktc2VydmVyIHRlc3QKKyAgCisgIENoZWNrIHJvdGF0ZSBvcHRpb24gZG9lcyBzb21ldGhpbmcKKworLSB0ZXN0OiBBbGxvdyBmb3IgbXVsdGlwbGUgbW9jayBzZXJ2ZXJzCisgIAorICAgLSBVcGRhdGUgdGhlIE1vY2tTZXJ2ZXIgdG8gYWxsb3cgc2VwYXJhdGUgc3BlY2lmaWNhdGlvbiBvZgorICAgICBVRFAgYW5kIFRDUCBwb3J0cworICAgLSBIYXZlIGFuIGFycmF5IG9mIG1vY2sgc2VydmVycyBsaXN0ZW5pbmcgb24gY29uc2VjdXRpdmUKKyAgICAgc2V0cyBvZiBwb3J0cy4KKyAgIC0gUmVuYW1lIFByb2Nlc3MoZmQpIHRvIFByb2Nlc3NGRChmZCkgdG8gYXZvaWQgY29uZnVzaW9uLgorICAgLSBJbml0aWFsaXplIGNoYW5uZWwgYnkgdXNpbmcgdGhlIG5ldyBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzKCkKKyAgICAgZW50cnlwb2ludCwgc28gbXVsdGlwbGUgcG9ydHMgb24gdGhlIHNhbWUgbG9vcGJhY2sgYWRkcmVzcworICAgICBjYW4gYmUgdXNlZC4KKworLSB0ZXN0OiBVcGRhdGUgdGVzdCBmb3Igc2V0L2dldF9zZXJ2ZXJzIHZhcmlhbnRzCisgIAorICBQb3J0cyBhcmUgc2lnbmlmaWNhbnQgaW4gdGhlIF9wb3J0c18gdmFyaWFudCBmdW5jdGlvbnMsIHNvIHVwZGF0ZSB0ZXN0IHRvIGNvcGUuCisKKy0gdGVzdDogTWFrZSBHZXROYW1lU2VydmVycygpIHV0aWxpdHkgZnVuY3Rpb24gcG9ydC1hd2FyZQorICAKKyAgQWxzbyBtYWtlIGl0IGdlbmVyYWxseSBhdmFpbGFibGUuCisKKy0gdGVzdDogbW9yZSB0ZXN0aW5nLCBpbmNsdWRpbmcgb2YgaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucworCistIHRlc3Q6IG1vcmUgdGVzdHMsIGVzcGVjaWFsbHkgZmFsbGJhY2sgcHJvY2Vzc2luZworICAKKyAgIC0gTWFrZSBtb2NrIHNlcnZlciBsaXN0ZW4gb24gVURQICsgVENQIGluIHBhcmFsbGVsLgorICAgLSBUZXN0IFVEUC0+VENQIGZhbGxiYWNrIG9uIHRydW5jYXRpb24KKyAgIC0gVGVzdCBFRE5TLT5uby1FRE5TIGZhbGxiYWNrCisgICAtIFRlc3Qgc29tZSBlbnZpcm9ubWVudCBpbml0IG9wdGlvbnMKKyAgIC0gVGVzdCBub25zZW5zZSByZXBseQorICAKKyAgdGVzdDogc2hvcnQgcmVzcG9uc2UKKworLSB0ZXN0OiBtb3JlIHRlc3RzLCBwYXJ0aWN1bGFybHkgb2YgaW5pdGlhbGl6YXRpb24KKworLSB0ZXN0OiBSdW4gbW9jayB0ZXN0cyBvdmVyIGJvdGggVENQIGFuZCBVRFAKKyAgCisgIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGZldyB0ZXN0cyB0aGF0IG1ha2UgdXNlIG9mIHRoZSB0aW1lZAorICByZXRyeSBhc3BlY3Qgb2YgVURQLgorCistIHRlc3Q6IFJ1biBtb2NrIHRlc3RzIG92ZXIgYm90aCBJUHY0IGFuZCBJUHY2CisKKy0gdGVzdDogQWRkIG1vcmUgdGVzdHMgZm9yIGVkZ2UgY2FzZXMKKworLSB0ZXN0OiBtb3JlIG5vb2tzIGFuZCBjcmFubmllcyBvZiBwdG9uIGZ1bmN0aW9ucworCistIHRlc3Q6IE1vcmUgdGVzdHMgZm9yIFBUUiBwYXJzaW5nCisKKy0gdGVzdDogVXNlIG9mIEhPU1RBTElBUyBlbnZpcm9ubWVudCB2YXJpYWJsZQorCistIHRlc3Q6IEFkZCBSQUlJIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGVzdGluZworICAKKyAgIC0gVGVtcEZpbGUgaG9sZHMgc3BlY2lmaWMgY29udGVudHMKKyAgIC0gRW52VmFsdWUgc2V0cyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZQorCistIHRlc3Q6IE1vcmUgc2VhcmNoIGRvbWFpbiBzY2VuYXJpb3MKKworLSB0ZXN0OiBSZW1vdmUgZHVwbGljYXRlIGZsYWdzIGZyb20gTWFrZWZpbGUuYW0KKworLSB0ZXN0OiBNYWtlIHRlc3QgY29kZSBsZWFrLWZyZWUKKworLSB0ZXN0OiBNb3JlIHRlc3RzCisgIAorICAgLSB0ZXN0IHVzZSBvZiBzb3J0bGlzdAorICAgLSB0ZXN0IGdldGhvc3RieW5hbWUoQUZfVU5TUEVDKQorCistIHRlc3Q6IFRlc3QgYXJlc19nZXRob3N0YnluYW1lX2ZpbGUoKQorCistIHRlc3Q6IEFkZCBtb3JlIHRlc3RzIG9mIGFyZXNfZ2V0bmFtZWluZm8oKQorCistIHRlc3Q6IFR3ZWFrIHRlc3RzLCBhZGQgYWxsb2MgZmFpbHVyZSB0ZXN0CisKKy0gdGVzdDogVGVzdCBpbml0IHdpdGggb3B0aW9ucworCistIHRlc3Q6IE1vcmUgdGVzdHMKKyAgCisgICAtIGFyZXNfaW5ldF9uZXRfcHRvbigpIHZhcmlhbnRzCisgICAtIGFyZXNfZ2V0c29jaygpIHZhcmlhbnRzCisKKy0gdGVzdDogRXhwb3NlIFByb2Nlc3NXb3JrKCkgZnVuY3Rpb24KKworLSB0ZXN0OiBNb3JlIHBhcnNpbmcgdGVzdHMKKyAgCisgIEluY2x1ZGluZzoKKyAgIC0gU3BsaXQgZWFjaCBwYXJzZSBmdW5jdGlvbiB0ZXN0IHNldCBvdXQgaW50byBzZXBhcmF0ZSBmaWxlcy4KKyAgIC0gQWRkIGFuIGFsbG9jYXRpb24gZmFpbHVyZSB0ZXN0IGZvciBlYWNoIHBhcnNpbmcgZnVuY3Rpb24uCisgICAtIEFkZCBlcnJvciBjaGVjayB0ZXN0IGZvciBlYWNoIHBhcnNpbmcgZnVuY3Rpb24uCisKKy0gdGVzdDogQWRkIHZhcmlvdXMgYWRkaXRpb25hbCB0ZXN0cworCistIHRlc3Q6IE1vcmUgdGVzdHMKKyAgCisgIEluY2x1ZGUgdGVzdHMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlCisgIENBUkVTX1NZTUJPTF9ISURJTkcgbWFjcm87IG5lZWQgdG8gY29uZmlndXJlIHRoZSBsaWJyYXJ5IHdpdGgKKyAgLS1kaXNhYmxlLXN5bWJvbC1oaWRpbmcgdG8gZW5hYmxlIHRoZXNlIHRlc3RzLgorCistIHRlc3Q6IEFsbG93IGNvbW1hbmQgbGluZSBvdmVycmlkZSBvZiBtb2NrIHNlcnZlciBwb3J0CisKKy0gdGVzdDogQWRkIFJFQURNRS5tZCBkb2N1bWVudGF0aW9uCisKKy0gdGVzdDogVGVtcG9yYXJpbHkgYXZvaWQgbGF0ZXN0IFB5dGhvbiByZXF1ZXN0cyBwYWNrYWdlCisgIAorICBDdXJyZW50bHkgZ2V0IGVycm9yIGZyb20gVHJhdmlzIG9uIHRoaXMgaW5zdGFsbCBzdGVwLCBhbmQgZG93bmdyYWRpbmcgb25lCisgIHZlcnNpb24gYXBwZWFycyB0byBmaXggdGhlIHByb2JsZW0uCisgIAorICAiQ291bGQgbm90IGZpbmQgYW55IGRvd25sb2FkcyB0aGF0IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50IHB5T3BlblNTTD49MC4xMworICAoZnJvbSByZXF1ZXN0c1tzZWN1cml0eV0pIgorCistIHRlc3Q6IEFkZCBBcHBWZXlvciBjb25maWcgZmlsZSBmb3IgV2luZG93cyBidWlsZAorCistIHRlc3Q6IEFkZCBjb25maWd1cmF0aW9uIGZvciBhIFRyYXZpcyBidWlsZAorICAKKyAgQ292ZXIgTGludXggJiBPU1ggb24gdGhlIGNvbnRhaW5lciBpbmZyYXN0cnVjdHVyZSwgYnV0IGluc3RhbGwKKyAgYSBsYXRlciBHKysgdG8gc2F0aXNmeSB0aGUgdGVzdHMnIG5lZWQgZm9yIEMrKzExLgorICAKKyAgVXNlIGEgYnVpbGQgbWF0cml4IHRvIGluY2x1ZGUgYSB2YXJpZXR5IG9mIGJ1aWxkIHZhcmlhbnRzOgorICAgLSBBU0FOCisgICAtIFVCU0FOCisgICAtIExTQU4KKyAgIC0gQ292ZXJhZ2UgdmlhIGNvdmVyYWxscy5pbworICAKKyAgdGVzdDogaW52b2tlIEFTQU4gYW5kIGNvdmVyYWdlIGluIFRyYXZpcyBidWlsZAorICAKKyAgQWxzbyBzaGlmdCB0byB1c2UgZXhwbGljaXQgYnVpbGQgbWF0cml4CisgIAorICB0ZXN0OiBVc2UgY292ZXJhbGxzLmlvIGZvciBjb3ZlcmFnZSB0cmFja2luZworICAKKyAgdGVzdDogQWRkIGEgYnVpbGQgd2l0aCBVQlNBTgorICAKKyAgQWxzbyBleHBhbmQgYW5kIHJlLW9yZGVyIHRoZSBzZXR0aW5nIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcworICBmb3IgZWFzaWVyIG1vZGlmaWNhdGlvbi4KKyAgCisgIHRlc3Q6IEFkZCBMU0FOIGJ1aWxkIHRvIFRyYXZpcyBjb25maWcKKworLSB0ZXN0OiBBZGQgaW5pdGlhbCB1bml0IHRlc3RzIGZvciBjLWFyZXMgbGlicmFyeQorICAKKyAgVGhlIHRlc3RzIGFyZSB3cml0dGVuIGluIEMrKzExLCB1c2luZyB0aGUgR29vZ2xlVGVzdCBhbmQgR29vZ2xlTW9jaworICBmcmFtZXdvcmtzLiAgVGhleSBoYXZlIHRoZWlyIG93biBpbmRlcGVuZGVudCBhdXRvY29uZiBzZXR1cCwgc28gdGhhdAorICB1c2VycyBvZiB0aGUgbGlicmFyeSBuZWVkIG5vdCBoYXZlIGEgQysrIGNvbXBpbGVyIGp1c3QgdG8gZ2V0IGMtYXJlcworICB3b3JraW5nIChob3dldmVyLCB0aGUgdGVzdC9jb25maWd1cmUuYWMgZmlsZSBkb2VzIGFzc3VtZSB0aGUgdXNlIG9mCisgIGEgc2hhcmVkIHRvcC1sZXZlbCBtNC8gZGlyZWN0b3J5KS4gIEhvd2V2ZXIsIHRoaXMgYXV0b2NvbmYgc2V0dXAgaGFzCisgIG9ubHkgYmVlbiB0ZXN0ZWQgb24gTGludXggYW5kIE9TWCBzbyBmYXIuCisgIAorICBSdW4gd2l0aCAiLi9hcmVzdGVzdCIsIG9yICIuL2FyZXN0ZXN0IC12IiB0byBzZWUgZXh0cmEgZGVidWcgaW5mby4KKyAgVGhlIEdvb2dsZVRlc3Qgb3B0aW9ucyBmb3IgcnVubmluZyBzcGVjaWZpYyB0ZXN0cyBhcmUgYWxzbworICBhdmFpbGFibGUgKGUuZy4gIi4vYXJlc3Rlc3QgLS1ndGVzdF9maWx0ZXI9KkxpdmUqIikuCisgIAorICBUaGUgdGVzdHMgYXJlIG5vd2hlcmUgbmVhciBjb21wbGV0ZSB5ZXQgKGN1cnJlbnRseSBoaXR0aW5nIGFyb3VuZAorICA2MCUgY292ZXJhZ2UgYXMgcmVwb3J0ZWQgYnkgZ2NvdiksIGJ1dCB0aGV5IGRvIGluY2x1ZGUgZXhhbXBsZXMKKyAgb2YgYSBmZXcgZGlmZmVyZW50IHN0eWxlcyBvZiB0ZXN0aW5nOgorICAKKyAgIC0gVGhlcmUgYXJlIGxpdmUgdGVzdHMgKGFyZXMtdGVzdC1saXZlLmNjKSwgd2hpY2ggYXNzdW1lIHRoYXQgdGhlCisgICAgIGN1cnJlbnQgbWFjaGluZSBoYXMgYSB2YWxpZCBETlMgc2V0dXAgYW5kIGNvbm5lY3Rpb24gdG8gdGhlCisgICAgIGludGVybmV0OyB0aGVzZSB0ZXN0cyBpc3N1ZSBxdWVyaWVzIGZvciByZWFsIGRvbWFpbnMgYnV0IGRvbid0CisgICAgIHBhcnRpY3VsYXJseSBjaGVjayB3aGF0IGdldHMgcmV0dXJuZWQuICBUaGUgdGVzdHMgd2lsbCBmYWlsIG9uCisgICAgIGFuIG9mZmxpbmUgbWFjaGluZS4KKyAgCisgICAtIFRoZXJlIGEgZmV3IG1vY2sgdGVzdHMgKGFyZXMtdGVzdC1tb2NrLmNjKSB0aGF0IHNldCB1cCBhIGZha2UgRE5TCisgICAgIHNlcnZlciBhbmQgaW5qZWN0IGl0cyBwb3J0IGludG8gdGhlIGMtYXJlcyBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24uCisgICAgIFRoZXNlIHRlc3RzIGFsbG93IHNwZWNpZmljIHJlc3BvbnNlIG1lc3NhZ2VzIHRvIGJlIGNyYWZ0ZWQgYW5kCisgICAgIGluamVjdGVkLCBhbmQgc28gYXJlIGxpa2VseSB0byBiZSB1c2VkIGZvciBtYW55IG1vcmUgdGVzdHMgaW4KKyAgICAgZnV0dXJlLgorICAKKyAgICAgIC0gVG8gbWFrZSB0aGlzIGdlbmVyYXRpb24vaW5qZWN0aW9uIGVhc2llciwgdGhlIGRucy1wcm90by5oIGZpbGUKKyAgICAgICAgaW5jbHVkZXMgQysrIGhlbHBlciBjbGFzc2VzIGZvciBidWlsZGluZyBETlMgcGFja2V0cy4KKyAgCisgICAtIE90aGVyIGxpYnJhcnkgZW50cnlwb2ludHMgdGhhdCBkb24ndCByZXF1aXJlIG5ldHdvcmsgYWN0aXZpdHkKKyAgICAgKGUuZy4gYXJlc19wYXJzZV8qX3JlcGx5KSBhcmUgdGVzdGVkIGRpcmVjdGx5LgorICAKKyAgIC0gVGhlcmUgYXJlIGZldyB0ZXN0cyBvZiBsaWJyYXJ5LWludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QKKyAgICAgbm9ybWFsbHkgdmlzaWJsZSB0byBBUEkgdXNlcnMgKGluIGFyZXMtdGVzdC1pbnRlcm5hbC5jYykuCisgIAorICAgLSBBIGNvdXBsZSBvZiB0aGUgdGVzdHMgdXNlIGEgaGVscGVyIG1ldGhvZCBvZiB0aGUgdGVzdCBmaXh0dXJlIHRvCisgICAgIGluamVjdCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgdXNpbmcgdGhlIGVhcmxpZXIgY2hhbmdlIHRvIHRoZQorICAgICBsaWJyYXJ5IHRvIGFsbG93IG92ZXJyaWRlIG9mIG1hbGxvYy9yZWFsbG9jL2ZyZWUuCisgIAorICAgLSBUaGVyZSBpcyBhbHNvIGFuIGVudHJ5cG9pbnQgdG8gYWxsb3cgQ2xhbmcncyBsaWJmdXp6ZXIgdG8gZHJpdmUKKyAgICAgdGhlIHBhY2tldCBwYXJzaW5nIGNvZGUgaW4gYXJlc19wYXJzZV8qX3JlcGx5LCB0b2dldGhlciB3aXRoIGEKKyAgICAgc3RhbmRhbG9uZSB3cmFwcGVyIGZvciBpdCAoLi9hcmVzZnV6eikgdG8gYWxsb3cgdXNlIG9mIGFmbC1mdXp6CisgICAgIGZvciBmdXJ0aGVyIGZ1enogdGVzdGluZy4KKworLSB0ZXN0OiBBZGQgbG9jYWwgY29weSBvZiBHb29nbGVNb2NrL0dvb2dsZVRlc3QgMS43LjAKKyAgCisgIERvbid0IGNoZWNrIGluIGd0ZXN0L200IGZpbGVzLCBhcyB0aGV5IGFyZSB1bnVzZWQgYW5kIGludGVyZmVyZQorICB3aXRoIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJlIHByb2Nlc3MuCisKKy0gZG9jOiBTaG93IGJ1aWxkIGJhZGdlcyBpbiBSRUFETUUubWQKKyAgCisgIE5vdGUgdGhhdCB0aGVzZSBVUkxzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIGlmL3doZW4gdGhlIHRlc3QgYnJhbmNoCisgIGdldHMgcHVsbGVkIGludG8gdGhlIG1hc3RlciByZXBvL2JyYW5jaC4KKworLSBkb2M6IENvbnZlcnQgUkVBRE1FIHRvIFJFQURNRS5tZAorICAKKyAgR2l2ZXMgYmV0dGVyIGRpc3BsYXkgb24gR2l0SHViCisKKy0gZG9jOiBVcGRhdGUgaW4gcHJlcGFyYXRpb24gZm9yIG5leHQgcmVsZWFzZQorICAKKyAgQXNzdW1lIDEuMTEuMCBpcyBuZXh0IChhcyB0aGVyZSBhcmUgdmFyaW91cyBBUEkgYWRkaXRpb25zKS4KKyAgQWxzbyBhZGQgbXlzZWxmIHRvIEFVVEhPUlMuCisKKy0gYnVpbGQ6IEFsbG93IGhlYWRlciBjb21waWxhdGlvbiBieSBXaW5kb3dzIEMrKyBjb21waWxlcgorCistIGJ1aWxkOiBFeHBvc2Ugd2hldGhlciBzeW1ib2wgaGlkaW5nIGlzIG9uCisgIAorICBBZGRpbmcgdGhlIENBUkVTX1NZTUJPTF9ISURJTkcgZGVmaW5pdGlvbiBhbGxvd3MgdGhlIHRlc3Qgc3VpdGUgdG8KKyAgZGV0ZWN0IHdoZXRoZXIgaW50ZXJuYWwgc3ltYm9scyBhcmUgYXZhaWxhYmxlIG9yIG5vdC4KKworLSBidWlsZDogQWRkIGF1dG9jb25mIG1hY3JvcyBmb3IgQysrMTEgY29kZSB1c2luZyBwdGhyZWFkcworICAKKyAgUHVsbCBpbiB0ZXN0aW5nIG1hY3JvcyBmcm9tIHRoZSBHTlUgYXV0b2NvbmYgYXJjaGl2ZSB0byBhbGxvdworICBjb25maWd1cmUgc2NyaXB0cyB0byB0ZXN0IGZvciBhbmQgc2V0dXAgdXNlIG9mIGEgQysrMTEgY29tcGlsZXIKKyAgKEFYX0NYWF9DT01QSUxFX1NURENYWF8xMSkgYW5kIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IChBWF9QVEhSRUFEKS4KKyAgCisgIE5vdGUgdGhhdCB0aGVzZSBtYWNyb3MgYXJlIG5vdCB1c2VkIGJ5IHRoZSBtYWluIGxpYnJhcnkgYXV0b2NvbmYsCisgIGp1c3QgYnkgdGhlIHRlc3RzICh3aGljaCBzaGFyZSB0aGUgc2FtZSBtNC8gZGlyZWN0b3J5KS4KKworLSBidWlsZDogQWRkIGEgY29kZSBjb3ZlcmFnZSBvcHRpb24KKyAgCisgIENvbmZpZ3VyZSB3aXRoOgorICAgIC4vY29uZmlndXJlIC0tZW5hYmxlLWNvZGUtY292ZXJhZ2UKKyAgU2hvdyBjb3ZlcmFnZSBvdXRwdXQgd2l0aDoKKyAgICBtYWtlIGNvZGUtY292ZXJhZ2UtY2FwdHVyZQorICAKKyAgQnVpbHQgb24gbTQvYXhfY29kZV9jb3ZlcmFnZS5tNCBmcm9tIHRoZSBHTlUgYXV0b2NvbmYgYXJjaGl2ZQorICB0byBwcm92aWRlIHRoZSBtYWNyb3MgdG8gY2hlY2sgZm9yIHByZXNlbmNlIG9mIGdjb3YgKyBsY292OworICB1cHN0cmVhbSBtYWNybyBtb2RpZmllZCB0bzoKKyAgIC0gUmVtb3ZlIHVzZSBvZiAkKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSAsIGFzIGVhcmxpZXIgdmVyc2lvbnMgb2YKKyAgICAgYXV0b2NvbmYgKHN1Y2ggYXMgdGhlIG9uZSB1c2VkIGJ5IGRlZmF1bHQgb24gVHJhdmlzKSBkbyBub3QgaGF2ZSB0aGlzLgorICAgLSBSYXRoZXIgdGhhbiBhdXRvbWF0aWNhbGx5IGRlZmluaW5nIENPREVfQ09WRVJBR0VfUlVMRVMgdG8gYmUgYSBzZXQKKyAgICAgb2YgbWFrZWZpbGUgcnVsZXMgdGhhdCB1c2UgaWZlcS9lbmRpZiAod2hpY2ggaXMgR05VIG1ha2Utc3BlY2lmaWMpLAorICAgICBpbnN0ZWFkIG9ubHkgZGVmaW5lIENPREVfQ09WRVJBR0VfUlVMRVMgaWYgY292ZXJhZ2VzIGlzIHR1cm5lZCBvbiwKKyAgICAgYW5kIGluIHRoYXQgY2FzZSBkb24ndCB1c2UgY29uZGl0aW9uYWxzIGluIHRoZSBtYWtlZmlsZS4KKworLSBhcGk6IEFkZCBlbnRyeXBvaW50cyB0byBhbGxvdyB1c2Ugb2YgcGVyLXNlcnZlciBwb3J0cworICAKKyAgQWRkIHVzZXItdmlzaWJsZSBlbnRyeXBvaW50cyBhcmVzX3tnZXQsc2V0fV9zZXJ2ZXJzX3BvcnRzKDMpLCB3aGljaAorICB0YWtlIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlIHJhdGhlciB0aGFuIHN0cnVjdCBhcmVzX2FkZHJfbm9kZS4KKyAgVGhpcyBzdHJ1Y3R1cmUgaW5jbHVkZXMgYSBVRFAgYW5kIFRDUCBwb3J0IG51bWJlcjsgaWYgdGhpcyBpcyBzZXQKKyAgdG8gemVybywgdGhlIGNoYW5uZWwtd2lkZSBwb3J0IHZhbHVlcyBhcmUgdXNlZCBhcyBiZWZvcmUuCisgIAorICBTaW1pbGFybHksIGFkZCBhIG5ldyBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2NzdigzKSBlbnRyeXBvaW50LCB3aGljaAorICBpcyBhbmFsb2dvdXMgdG8gYXJlc19zZXRfc2VydmVycygzKSBleGNlcHQgaXQgZG9lc24ndCBpZ25vcmUgYW55CisgIHNwZWNpZmllZCBwb3J0IGluZm9ybWF0aW9uOyBpbnN0ZWFkLCBhbnkgcGVyLXNlcnZlciBzcGVjaWZpZWQgcG9ydAorICBpcyB1c2VkIGFzIGJvdGggdGhlIFVEUCBhbmQgVENQIHBvcnQgZm9yIHRoYXQgc2VydmVyLgorICAKKyAgVGhlIGludGVybmFsIHN0cnVjdCBhcmVzX2FkZHIgaXMgZXh0ZW5kZWQgdG8gaG9sZCB0aGUgVURQL1RDUCBwb3J0cywKKyAgc3RvcmVkIGluIG5ldHdvcmsgb3JkZXIsIHdpdGggdGhlIGNvbnZlbnRpb24gdGhhdCBhIHZhbHVlIG9mIHplcm8KKyAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5uZWwtd2lkZSBVRFAvVENQIHBvcnQgc2hvdWxkIGJlIHVzZWQuCisgIAorICBGb3IgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGFyZXNfZHVwKDMpLCBzaGlmdCB0byB1c2UgdGhlCisgIF9wb3J0cygpIHZlcnNpb24gb2YgdGhlIGdldC9zZXQgZnVuY3Rpb25zLCBzbyBwb3J0IGluZm9ybWF0aW9uIGlzCisgIHRyYW5zZmVycmVkIGNvcnJlY3RseSB0byB0aGUgbmV3IGNoYW5uZWwuCisgIAorICBVcGRhdGUgbWFucGFnZXMsIGFuZCBhZGQgbWlzc2luZyBhcmVzX3NldF9zZXJ2ZXJzX2NzdiB0byB0aGUgbGlzdHMKKyAgd2hpbGUgd2UncmUgYXQgaXQKKworLSBhcGk6IEFkZCBhcmVzX3NldF9zb3J0bGlzdCgzKSBlbnRyeXBvaW50CisgIAorICBBbGxvdyBleHBsaWNpdCBjb25maWd1cmF0aW9uIG9mIHRoZSBjaGFubmVsJ3Mgc29ydGxpc3QsIGJ5CisgIHNwZWNpZnlpbmcgYSBzdHJpbmcgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBlcXVpdmFsZW50CisgIC9ldGMvcmVzb2x2LmNvbmYgb3B0aW9uLgorICAKKyAgVGhpcyBhbGxvd3MgbGlicmFyeSB1c2VycyB0byBwZXJmb3JtIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24KKyAgdGhhdCBpcyBhdmFpbGFibGUgdmlhIC9ldGMvcmVzb2x2LmNvbmYsIGJ1dCB3aXRob3V0IG5lZWRpbmcKKyAgdG8gY2hhbmdlIHRoYXQgZmlsZS4KKworLSBhcGk6IEFsbG93IGluamVjdGlvbiBvZiB1c2VyLXNwZWNpZmllZCBtYWxsb2MvZnJlZSBmdW5jdGlvbnMKKyAgCisgIEFkZCBhIG5ldyBhcmVzX2xpYnJhcnlfaW5pdF9tZW0oKSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlCisgIGxpYnJhcnkgd2hpY2ggYWxsb3dzIHRoZSBsaWJyYXJ5IHVzZXIgdG8gc3BlY2lmeSB0aGVpciBvd24gbWFsbG9jLAorICByZWFsbG9jICYgZnJlZSBlcXVpdmFsZW50cyBmb3IgdXNlIGxpYnJhcnktd2lkZS4KKyAgCisgIFN0b3JlIHRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGxpYnJhcnktd2lkZSBnbG9iYWwgdmFyaWFibGVzLAorICBkZWZhdWx0aW5nIHRvIGxpYmMncyBtYWxsb2MoKSwgcmVhbGxvYygpIGFuZCBmcmVlKCkuCisgIAorICBDaGFuZ2UgYWxsIGNhbGxzIHRvIG1hbGxvYywgcmVhbGxvYyBhbmQgZnJlZSB0byB1c2UgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKKyAgaW5zdGVhZC4gIEFsc28gZW5zdXJlIHRoYXQgYXJlc19zdHJkdXAoKSBpcyBhbHdheXMgYXZhaWxhYmxlCisgIChldmVuIGlmIHRoZSBsb2NhbCBlbnZpcm9ubWVudCBpbmNsdWRlcyBzdHJkdXAoMykpLCBhbmQgY2hhbmdlIHRoZQorICBsaWJyYXJ5IGNvZGUgdG8gYWx3YXlzIHVzZSBpdC4KKyAgCisgIENvbnZlcnQgY2FsbHMgdG8gY2FsbG9jKCkgdG8gdXNlIGFyZXNfbWFsbG9jKCkgKyBtZW1zZXQKKworLSBhcGk6IEFkZCBvcHRpb24gdG8gZXhwb3NlIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb25zCisgIAorICBQdXJlbHkgZm9yIHRlc3RpbmcsIGFkZCAtLWVuYWJsZS1leHBvc2Utc3RhdGljcyBvcHRpb24gdG8gY29uZmlndXJlCisgIHdoaWNoIGNvbnZlcnRzIHNvbWUgc3RhdGljIGludGVybmFsIGZ1bmN0aW9ucyB0byBiZSBleHRlcm5hbGx5IHZpc2libGUuCisKKy0gYXBpOiBFeHBvc2UgdGhlIGFyZXNfbGlicmFyeV9pbml0aWFsaXplZCgpIGZ1bmN0aW9uCisKKy0gYWhvc3Q6IEFsbG93IHJlcGVhdGVkIC1zIDxkb21haW4+IG9wdGlvbnMKKyAgCisgIFRoaXMgYWxzbyByZW1vdmVzIGEgcG90ZW50aWFsIGxlYWsgd2hlcmUgbGF0ZXIgLXMgb3B0aW9ucyB3b3VsZAorICByZXBsYWNlIGVhcmxpZXIgb25lcyB3aXRob3V0IGZyZWVpbmcgdGhlIHJlbGV2YW50IHN0cmluZy4KKworLSBNYXJrIHVuaGl0dGFibGUgbGluZXMKKyAgCisgIEFkZCBjb21tZW50cyBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIGxjb3YgdG9vbCwgbWFya2luZworICBsaW5lcyB0aGF0IGNhbm5vdCBiZSBoaXQuICBUeXBpY2FsbHkgdGhlc2UgYXJlIGZhbGwtYmFjaworICBwcm90ZWN0aW9uIGFybXMgdGhhdCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IGVhcmxpZXIgY2hlY2tzLAorICBhbmQgc28gaXQncyBub3Qgd29ydGggdGFraW5nIG91dCB0aGUgdW5oaXR0YWJsZSBjb2RlIChpbiBjYXNlCisgIHNvbWVvbmUgY2hhbmdlcyB0aGUgY29kZSBiZXR3ZWVuIHRoZSB0d28gcGxhY2VzIGluIGZ1dHVyZSkuCisKKy0gYXJlc19zZXRfc2VydmVyc19jc3YuMzogbWFrZSByZXR1cm4gdHlwZSBtYXRjaCBjb2RlCisKKy0gYml0bmNtcDogdXBkYXRlIGNvbW1lbnQgdG8gbWF0Y2ggY29kZSBiZWhhdmlvdXIKKworLSBhcmVzX3N0cmllbmRzdHI6IGZpeCBzbyBub24tTlVMTCByZXR1cm4gY2FuIGhhcHBlbgorICAKKyAgVGhpcyBsb29rcyB0byBoYXZlIGJlZW4gYnJva2VuIHNpbmNlIGl0IHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIDIwMDUgaW4KKyAgY29tbWl0IGFiYTBiNzc1ZWEzMCAoIkFkZGVkIGFyZXNfZ2V0bmFtZWluZm8gd2hpY2ggbWltaWNzIHRoZQorICBnZXRuYW1laW5mbyBBUEkiKQorCistIGNvbmZpZ19zb3J0bGlzdDogZnJlZSBhbnkgZXhpc3Rpbmcgc29ydGxpc3Qgb24gKHJlKWFsbG9jIGZhaWx1cmUKKyAgCisgIElmIHdlIGdldCBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgb24gMm5kIG9yIGxhdGVyIGVudHJ5IGluIHRoZSBzb3J0bGlzdCwgdGhlCisgIGNvZGUgd291bGQgcmV0dXJuIEVOT01FTSBidXQgc3RpbGwgbGVhdmUgdGhlIGluaXRpYWwgZW50cmllcyBhbGxvY2F0ZWQuCisgIEVuc3VyZSB0aGF0ICpzb3J0bGlzdCBpcyBzZXQgdG8gTlVMTCB3aGVuZXZlciBFTk9NRU0gaXMgcmV0dXJuZWQuCisKKy0gYXJlc19kdXA6IGNsZWFyIG5ldyBjaGFubmVsIG9uIGZhaWx1cmUKKyAgCisgIElmIHRoZSBhdHRlbXB0IHRvIHRyYW5zZmVyIElQdjYgc2VydmVycyBmcm9tIHRoZSBvbGQgdG8gdGhlIG5ldyBjaGFubmVsCisgIGZhaWxzLCB0aGUgcHJldmlvdXMgY29kZSB3b3VsZCBzdGlsbCByZXR1cm4gYSBjaGFubmVsIHRvIHRoZSB1c2VyIGV2ZW4gdGhvdWdoCisgIGFuIGVycm9yIHJldHVybiBjb2RlIHdhcyBnZW5lcmF0ZWQuICBUaGlzIG1ha2VzIGl0IGxpa2VseSB0aGF0IHVzZXJzIHdvdWxkCisgIGxlYWsgdGhlIGNoYW5uZWwsIHNvIGV4cGxpY2l0bHkgY2xlYXIgdGhlIGNoYW5uZWwgaW4gdGhpcyBjYXNlLgorCistIGFyZXNfaW5pdF9vcHRpb25zOiBkb24ndCBsb3NlIGluaXQgZmFpbHVyZQorICAKKyAgSWYgKHNheSkgaW5pdF9ieV9vcHRpb25zKCkgZmFpbHMsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8KKyAgaW5pdF9ieV9kZWZhdWx0cygpIHdhcyBvdmVyd3JpdGluZyB0aGUgcmV0dXJuIGNvZGUgd2l0aAorICBzdWNjZXNzLiAgU3RpbGwgY2FsbCBpbml0X2J5X2RlZmF1bHRzKCkgcmVnYXJkbGVzcywgYnV0IHRyYWNrCisgIGl0cyByZXR1cm4gdmFsdWUgc2VwYXJhdGVseQorCistIGFyZXNfZ2V0aG9zdGJ5bmFtZTogZG9uJ3QgbGVhayB2YWxpZC1idXQtZW1wdHkgaG9zdGVudAorICAKKyAgSWYgYW4gQUZfVU5TUEVDIHF1ZXJ5IGdldHMgYSB2YWxpZCByZXNwb25zZSB0byBpdHMgQUFBQSBxdWVyeSwKKyAgYnV0IHdoaWNoIGhhcyBubyBJUHY2IGFkZHJlc3NlcyBpbiBpdCwgdGhlbiB0aGUgY29kZSBjaGFpbnMgb24gdG8KKyAgYSBBIHJlY29yZCBxdWVyeS4gIEhvd2V2ZXIsIHRoZSBob3N0ZW50IGZyb20gdGhlIEFBQUEgcmVzcG9uc2UKKyAgd2FzIGJlaW5nIGxlYWtlZCBhbG9uZyB0aGUgd2F5IChiZWNhdXNlIGl0IGdldHMgcmVwbGFjZWQgYmVmb3JlCisgIHRoZSBmb2xsb3ctb24gZW5kX2hxdWVyeSgpIGludm9jYXRpb24pLgorCistIGFyZXNfcGFyc2VfdHh0X3JlcGx5OiBwcm9wYWdhdGUgZXJyb3JzIGZyb20gcGVyLXN1YnN0cmluZyBsb29wCisgIAorICBJZiB3ZSBnZXQgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIHdoZW4gcHJvY2Vzc2luZyBhIHBhcnRpY3VsYXIgc3Vic3RyaW5nIGluIGEKKyAgVFhUIHJlY29yZCwgdGhhdCBmYWlsdXJlIGlzIHNpbGVudGx5IGxvc3Q7IGZpeCB0aGF0IGJ5IHByb3BhZ2F0aW5nIGVycm9ycyBmcm9tCisgIHRoZSBpbm5lciBsb29wIHRvIHRoZSBvdXRlciBsb29wLgorCistIHByb2Nlc3NfYW5zd2VyOiBmaXggdGhpbmdzIHVwIGNvcnJlY3RseSB3aGVuIHJlbW92aW5nIEVETlMgb3B0aW9uCisgIAorICBXaGVuIGEgc2VydmVyIHJlamVjdHMgYW4gRUROUy1lcXVpcHBlZCByZXF1ZXN0LCB3ZSByZXRyeSB3aXRob3V0CisgIHRoZSBFRE5TIG9wdGlvbi4gIEhvd2V2ZXIsIGluIFRDUCBtb2RlLCB0aGUgMi1ieXRlIGxlbmd0aCBwcmVmaXggd2FzCisgIGJlaW5nIGNhbGN1bGF0ZWQgd3JvbmcgLS0gaXQgd2FzIGJ1aWx0IGZyb20gdGhlIGFuc3dlciBsZW5ndGggcmF0aGVyIHRoYW4KKyAgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdC4KKyAgCisgIEFsc28sIGl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdGhhdCB0aGUgY2FsbCB0byByZWFsbG9jKCkgbWlnaHQgY2hhbmdlCisgIHRoZSBkYXRhIHBvaW50ZWQgdG87IHRvIGFsbG93IGZvciB0aGlzLCBxYnVmIGFsc28gbmVlZHMgdXBkYXRpbmcuCisgIAorICAoQm90aCB0aGVzZSBmaXhlcyB3ZXJlIGFjdHVhbGx5IGluY2x1ZGVkIGluIGEgcGF0Y2hzZXQgc2VudCBvbiB0aGUgbWFpbGluZworICBsaXN0IGluIE9jdCAyMDEyLCBidXQgd2VyZSBpbmNsdWRlZCB3aXRoIG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0CisgIGRpZG4ndCBnZXQgbWVyZ2VkOgorICBodHRwOi8vYy1hcmVzLmhheHguc2UvbWFpbC9jLWFyZXMtYXJjaGl2ZS0yMDEyLTEwLzAwMDQuc2h0bWwpCisKKy0gYXJlc19fcmVhZF9saW5lOiBjbGVhciBidWYgcG9pbnRlciBvbiByZWFsbG9jIGZhaWx1cmUKKworLSBhcmVzX2V4cGFuZF9uYW1lOiBjaGVjayBmb3IgdmFsaWQgYml0cyBpbiBsYWJlbCBsZW5ndGgKKyAgCisgIFRoZSB0b3AgdHdvIGJpdHMgb2YgdGhlIGxhYmVsIGxlbmd0aCBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMgaXMgYQorICBsYWJlbCBsZW5ndGggKDAwKSBvciBhbiBpbmRleCB0byBhIG5hbWUgZWxzZXdoZXJlIGluIHRoZSBtZXNzYWdlCisgICgxMSkuICBSRkMxMDM1IDQuMS40IHNheXMgdGhhdCB0aGUgb3RoZXIgcG9zc2libGUgdmFsdWVzIGZvciB0aGUKKyAgdG9wIHR3byBiaXRzICgwMSwgMTApIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KKworRGFuaWVsIFN0ZW5iZXJnICgyMyBKYW4gMjAxNikKKy0gW0dyZWdvciBKYXNueSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEZpeCB0eXBvcyBkZXRlY3RlZCBieSBsaW50aWFuCisgIAorICBDbG9zZXMgIzMyCisKKy0gW0dyZWdvciBKYXNueSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIERpc3RyaWJ1dGUgYWxsIG1hbiBwYWdlcworCistIFJFQURNRS5jYXJlczogcy9JL0RhbmllbAorICAKKyAgLi4uIGFuZCBhZGQgYSBwb2ludGVyIHRvIGFuIGV4aXN0aW5nIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIGFyZWEgMS4xLjEKKyAgcGFja2FnZS5hCisKKy0gcmVhZF90Y3BfZGF0YTogZG9uJ3QgdHJ5IHRvIHVzZSBOVUxMIHBvaW50ZXIgYWZ0ZXIgbWFsbG9jIGZhaWx1cmUKKyAgCisgIENJRCA1Njg4NCwgcG9pbnRlZCBvdXQgYnkgQ292ZXJpdHkuIFdlIHJlYWxseSBzaG91bGQgbWFrZSB0aGlzIGZ1bmN0aW9uCisgIHJldHVybiBhbiBlcnJvciBjb2RlIHNvIHRoYXQgYSBtYWxsb2MoKSBmYWlsdXJlIGNhbiByZXR1cm4gYmFjayBhIG1ham9yCisgIGZhaWx1cmUuCisKKy0gY29uZmlndXJlX3NvY2tldDogZXhwbGljaXRseSBpZ25vcmUgcmV0dXJuIGNvZGUKKyAgCisgIENJRCA1Njg4OSBpbiBDb3Zlcml0eSBwb2ludGVkIG91dCB0aGUgcmV0dXJuIGNvZGUgZnJvbSBzZXRzb2Nrbm9uYmxvY2soKQorICBpcyBpZ25vcmVkLCBhbmQgdGhpcyBhZGRlZCB0eXBlY2FzdCB0byAodm9pZCkgbWFrZXMgaXQgZXhwbGljaXQuCisKKy0gYWhvc3Q6IGNoZWNrIHRoZSBzZWxlY3QoKSByZXR1cm4gY29kZQorICAKKyAgRml4ZXMgQ0lEIDEzNzE4OSwgcG9pbnRlZCBvdXQgYnkgQ292ZXJpdHkKKworRGF2aWQgRHJ5c2RhbGUgKDE4IEphbiAyMDE2KQorLSBGaXggYnVpbGRjb25mIG9uIHBsYXRmb3JtcyB1c2luZyBnbGlidG9vbGl6ZQorICAKKyAgQ29tbWl0IGM0OWE4N2VlYTUzOCBjaGFuZ2VkIGJ1aWxkY29uZiB0byBvbmx5IGNoZWNrIGZvcgorICBsaWJ0b29saXplLCBidXQgbWlzc2VkIGEgbGluZQorCistIERvbid0IGV4aXQgbG9vcCBlYXJseSBsZWF2aW5nIHVuaW5pdGlhbGl6ZWQgZW50cmllcworICAKKyAgVXBkYXRlIGZvciBjb21taXQgYWZmYzYzY2JhODc1ZC4KKyAgCisgIFRoZSBvcmlnaW5hbCBwYXRjaCBmcm9tIEdyZWdvciBKYXNueSBkaWQgbm90IGhhdmUgdGhlIGJyZWFrCisgIHN0YXRlbWVudDsgSSBpbmNvcnJlY3RseSBhZGRlZCBpdCB0byBwcmV2ZW50IGNvbnRpbnVpbmcgdGhlIGxvb3AuCisgIEhvd2V2ZXIsIHRoZSBsYXRlciBlbnRyaWVzIGluIHRoZSBhcnJheSB3b3VsZCB0aGVuIGJlIGxlZnQKKyAgdW5pbml0aWFsaXplZCwgY2F1c2luZyBwcm9ibGVtcyBmb3IgbGF0ZXIgY2xlYW51cC4KKyAgCisgIFNvIGZpeCB0byBtYXRjaCBHcmVnb3IncyBvcmlnaW5hbCBwYXRjaCwgd2l0aCBhcG9sb2dpZXMuCisKK0RhbmllbCBTdGVuYmVyZyAoMTggSmFuIDIwMTYpCistIGJ1aWxkY29uZjogcmVtb3ZlIGNoZWNrIGZvciBsaWJ0b29sLCBpdCBvbmx5IHJlcXVpcmVzIGxpYnRvb2xpemUKKworRGF2aWQgRHJ5c2RhbGUgKDE3IEphbiAyMDE2KQorLSBbR3JlZ29yIEphc255IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgVXNlIGxpYnJlc29sdiB0byBpbml0aWFsaXplIGNhcmVzIG9uIGlQaG9uZSB0YXJnZXRzCisgIAorICBPbiBpUGhvbmUgdGFyZ2V0cyBsaWtlIGlPUywgd2F0Y2hPUyBvciB0dk9TIHRoZSBmaWxlCisgIC9ldGMvcmVzb2x2LmNvbmYgY2Fubm90IGJlIHVzZWQgdG8gY29uZmlndXJlIGNhcmVzLgorICAKKyAgSW5zdGVhZCB0aGUgcmVzb2x2ZXIgbGlicmFyeSBpcyBxdWVyaWVkIGZvciBjb25maWd1cmF0aW9uCisgIHZhbHVlcy4KKyAgCisgIENDOiBZdXJ5IEtpcnBpY2hldiA8eWtpcnBpY2hldkB5YW5kZXgtdGVhbS5ydT4KKworRGFuaWVsIFN0ZW5iZXJnICgxNyBKYW4gMjAxNikKKy0gUkVBRE1FOiB1cGRhdGVkIHRvIG5ldyByZXBvIFVSTAorCitEYXZpZCBEcnlzZGFsZSAoMTQgSmFuIDIwMTYpCistIFtMZWkgU2hpIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRml4aW5nIHNsb3cgRE5TIGxvb2t1cCBpc3N1ZQorICAKKyAgVGhpcyBwYXRjaCBpcyBmaXhpbmcgdGhlIGRucyBsb29rdXAgaXNzdWUgZHVlIHRvIGR1bW15IGRucyBpbmZvcm1hdGlvbgorICBvZiBhIGRpc2Nvbm5lY3RlZCBhZGFwdGVyKGluIG15IGNhc2UgaXMgYSBibHVldG9vdGggYWRhcHRlcikuIEkgY2hhbmdlZAorICB0aGUgZG5zIGxvb2t1cCBwb2xpY3kgdG8gdHJ5IEdldE5ldHdvcmtQYXJhbXMgZmlyc3QgYmVjYXVzZSB0aGUKKyAgR2V0TmV0d29ya1BhcmFtcyBwcm92aWRlcyB0aGUgbW9zdCByZWxpYWJsZSBkbnMgaW5mb3JtYXRpb24gKGxvdHMgb2YKKyAgY2hlY2tzIHdlcmUgZG9uZSBieSBzeXN0ZW0pLiBJIGFsc28gZmlsdGVyIG91dCBpbm9wZXJhYmxlIGFkYXB0ZXIgaW4KKyAgRE5TX0FkYXB0ZXJzQWRkcmVzc2VzIGluIGNhc2UgR2V0TmV0d29ya1BhcmFtcyBmYWlsLgorCistIE1lcmdlIHB1bGwgcmVxdWVzdCAjMzAgZnJvbSBwLXB1c2gvdnMtMjAxNQorICAKKyAgU3VwcG9ydCBWaXN1YWwgU3R1ZGlvIDIwMTUKKworT2xlZyBQdWRleWV2ICgzIEphbiAyMDE2KQorLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBTdXBwb3J0IFZpc3VhbCBTdHVkaW8gMjAxNQorCitEYXZpZCBEcnlzZGFsZSAoMTEgTm92IDIwMTUpCistIFtBbmRyZXcgQW5ka2phciBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFkZGVkIGFub3RoZXIgdmVyc2lvbiBjYXNlIHRvIE1ha2VmaWxlLm1zdmMKKyAgCisgIG5tYWtlIHZlcnNpb24gMTEuMDAuNjEwMzAuMCByZXNvbHZlcyB0byBDQ19WRVJTX05VTSA9IDExMAorCistIE1lcmdlIHB1bGwgcmVxdWVzdCAjMjYgZnJvbSBiaXRib3VuY2VyL3ZzLTIwMTMKKyAgCisgIGFkZGVkIGRlZmluZSBmb3IgdmlzdWFsIHN0dWRpbyAyMDEzCisKK3N2YW50ZSBrYXJsc3NvbiAoMjUgSnVuIDIwMTUpCistIGFkZGVkIGRlZmluZSBmb3IgdmlzdWFsIHN0dWRpbyAyMDEzCisKK0pha3ViIEhyb3playAoNiBOb3YgMjAxNCkKKy0gYXJlc19fcmVhZF9saW5lOiBmcmVlIGJ1ZiBvbiByZWFsbG9jIGZhaWx1cmUKKworLSBEZXN0cm95IG9wdGlvbnMgaWYgYXJlc19zYXZlX29wdGlvbnMgZmFpbHMKKyAgCisgIEl0J3MgcG9zc2libGUgdGhhdCwgaWYgYXJlc19zYXZlX29wdGlvbnMgZmFpbGVkLCB0aGUgb3B0cyBzdHJ1Y3R1cmUKKyAgd291bGQgY29udGFpbiBzb21lIGFsbG9jYXRlZCBtZW1vcnkuIENhbGxpbmcgYXJlc19kZXN0cm95X29wdGlvbnMgaW4KKyAgdGhpcyBjYXNlIGlzIHNhZmUsIGJlY2F1c2UgYXJlc19zYXZlX29wdGlvbnMgemVyb2VzIG91dCB0aGUgbWVtb3J5CisgIGluaXRpYWxseS4KKworLSBbRGF2aWQgRHJ5c2RhbGUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDb250aW51ZSBsb29wIGlmIHNwYWNlIGZvciBob3N0bmFtZSBub3QgbGFyZ2UgZW5vdWdoCisgIAorICBXaGVuIGF0dGVtcHRpbmcgdG8gYnVpbGQgYSBzZWFyY2ggZG9tYWluIGZyb20gdGhlIGxvY2FsIGhvc3RuYW1lCisgICh1c2VkIGFzIGEgZmFsbGJhY2sgd2hlbiBubyBvdGhlciBtZXRob2RzIGhhdmUgZ2l2ZW4gYSBzZWFyY2gKKyAgZG9tYWluKSwgdGhlIGNvZGUgZG91YmxlcyB0aGUgYnVmZmVyIHNpemUgb24gZWFjaCBsb29wIGl0ZXJhdGlvbi4KKyAgCisgIEhvd2V2ZXIsIHRoZSBsb29wIHByZXZpb3VzbHkgaGFkIGEgV0hJTEVfRkFMU0UgdGVybWluYXRvciBzbyB0aGUgY29udGludWUKKyAgc3RhdGVtZW50IGV4aXRlZCB0aGUgbG9vcCByYXRoZXIgdGhhbiBnb2luZyByb3VuZCBhZ2Fpbi4KKworRGFuaWVsIFN0ZW5iZXJnICgzMCBPY3QgMjAxNCkKKy0gYXJlc19nZXRuYW1laW5mby4zOiB0aGVyZSBpcyBubyBhcmVzX2dldGFkZHJpbmZvCisKK0RhdmlkIERyeXNkYWxlICgzMCBTZXAgMjAxNCkKKy0gW0dyZWdvciBKYXNueSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIFByZXZlbnQgdG1wYnVmIGZyb20gb3ZlcnJ1bm5pbmcKKyAgCisgIEZpeCBDb3Zlcml0eSBlcnJvciBDSUQgNTY4ODYuCisgIAorICBTaWduZWQtb2ZmLWJ5OiBHcmVnb3IgSmFzbnkgPGdqYXNueUBnb29nbGVtYWlsLmNvbT4KKworLSBbR3JlZ29yIEphc255IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgUmUtc3RhcnQgbG9vcCBpZiBzZWxlY3QgZmFpbHMKKyAgCisgIEZpeCBDb3Zlcml0eSBlcnJvciBDSUQgNTY4ODIKKyAgCisgIFNpZ25lZC1vZmYtYnk6IEdyZWdvciBKYXNueSA8Z2phc255QGdvb2dsZW1haWwuY29tPgorCistIFtHcmVnb3IgSmFzbnkgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGcmVlIHRlbXBvcmFyeSB2YXJpYWJsZSBpbiBlcnJvciBwYXRoCisgIAorICBGaXggQ292ZXJpdHkgQ0lEIDU2ODkwCisgIAorICBTaWduZWQtb2ZmLWJ5OiBHcmVnb3IgSmFzbnkgPGdqYXNueUBnb29nbGVtYWlsLmNvbT4KKworLSBbR3JlZ29yIEphc255IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRml4IGludGVnZXIgc2hpZnQgb3ZlcmZsb3cgaWYgYm90aCB0Y3Bfc29ja2V0IGFuZCB1ZHBfc29ja2V0IGFyZSBzZXQKKyAgCisgIFRoZSBwcm9ibGVtIG9jY3VycyBpZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxvb3AgdGhlIHNvY2tpbmRleCBpcyBhdCB0aGUKKyAgbGFzdCB2YWxpZCBBUkVTX0dFVFNPQ0tfTUFYTlVNIHBvc2l0aW9uLiBJZiB0aGVuIGJvdGggdWRwX3NvY2tldCBhbmQKKyAgdGNwX3NvY2tldCBhcmUgdmFsaWQsIHNvY2tpbmRleCBnZXRzIGluY3JlbWVudGVkIGZvciBVRFAgZmlyc3QgYW5kCisgIHBvaW50cyBvbmUgZW50cnkgYmVoaW5kIHRoZSBhcnJheSBmb3IgdGhlIHRjcCBibG9jay4KKyAgU28gdGhlIGZpeCBpcyB0byBjaGVjayBhZnRlciBldmVyeSBpbmNyZW1lbnQgb2Ygc29ja2luZGV4IGlmIGl0IGlzIHN0aWxsCisgIHZhbGlkLgorICAKKyAgRml4IENvdmVyaXR5IGVycm9yIENJRCA1Njg3OAorICAKKyAgU2lnbmVkLW9mZi1ieTogR3JlZ29yIEphc255IDxnamFzbnlAZ29vZ2xlbWFpbC5jb20+CisKKy0gW0dyZWdvciBKYXNueSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIE51bGwgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNlCisgIAorICBGaXggQ292ZXJpdHkgZXJyb3IgQ0lEIDU2ODgwCisgIAorICBTaWduZWQtb2ZmLWJ5OiBHcmVnb3IgSmFzbnkgPGdqYXNueUBnb29nbGVtYWlsLmNvbT4KKworSmFrdWIgSHJvemVrICgyOCBKdWwgMjAxNCkKKy0gW0dpc2xlIFZhbmVtIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ29tbWVudCBpbiBhcmVzX2lwdjYuaAorCitEYXZpZCBEcnlzZGFsZSAoMjUgSnVsIDIwMTQpCistIENPTlRSSUJVVElORzogYWRkIGZpbGUgdG8gaW5kaWNhdGUgbWFpbGluZyBsaXN0IGlzIHByZWZlcnJlZAorCistIEFkZCAtdCB1IG9wdGlvbiB0byBhaG9zdAorICAKKyAgQWRkIGFuIG9wdGlvbiB0byBhbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBBRl9VTlNQRUMKKyAgYWRkcmVzcyBmYW1pbHkuCisKK0pha3ViIEhyb3playAoMjQgSnVsIDIwMTQpCistIGhvc3RfY2FsbGJhY2s6IEZhbGwgYmFjayB0byBBRl9JTkVUIG9uIHNlYXJjaGluZyB3aXRoIEFGX1VOU1BFQworICAKKyAgUHJldmlvdXNseSwgd2hlbiBhbiBhcmVzX2dldGhvc3RieW5hbWUoKSBzZWFyY2hlZCB3aXRoIEFGX1VOU1BFQyBhbmQgdGhlCisgIGZpcnN0IEFGX0lORVQ2IGNhbGwgb25seSByZXR1cm5lZCBDTkFNRXMsIHRoZSBob3N0X2NhbGxiYWNrIG5ldmVyCisgIHJldHJpZWQgQUZfSU5FVC4KKyAgCisgIFRoaXMgcGF0Y2ggbWFrZXMgc3VyZSB0aGFuIG9uIEFSRVNfU1VDQ0VTUywgdGhlIHJlc3VsdCBvZiBBRl9JTkVUNiBpcworICB0YWtlbiBhcyBhdXRob3JpdGF0aXZlIG9ubHkgaWYgdGhlIHJlc3VsdCBjb250YWlucyBzb21lIGFkZHJlc3Nlcy4KKworLSBbRGF2aWQgRHJ5c2RhbGUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBNb3ZlIG1lbXNldCBjYWxsIGJlbG93IHBsYXRmb3JtLXNwZWNpZmljIGRlY2xhcmF0aW9ucworICAKKyAgQSBHaXRIdWIgY29tbWVudGVyIFsxXSBzYXlzIHRoYXQgbXkgcmVjZW50IGNoYW5nZSB0byBhaG9zdC5jIGhhcworICBwcm9ibGVtcyBjb21waWxpbmcgb24gV2luZG93cyArIEM4OSBwbGF0Zm9ybXMuCisgIAorICBbMV0gIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWdkZXIvYy1hcmVzL2NvbW1pdC9lZTIyMjQ2NTA3YzkjY29tbWl0Y29tbWVudC02NTg3NjE2CisKKy0gW0RhdmlkIERyeXNkYWxlIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgVXBkYXRlIGFob3N0IG1hbiBwYWdlIHRvIGRlc2NyaWJlIC1zIG9wdGlvbi4KKyAgCisgIENvbW1pdCBlZTIyMjQ2NTA3YzkgYWRkZWQgdGhlIC1zIDxkb21haW4+IG9wdGlvbiB0byB0aGUKKyAgYWhvc3QgY29tbWFuZCwgYnV0IG5lZ2xlY3RlZCB0byB1cGRhdGUgdGhlIG1hbiBwYWdlIHRvCisgIGRlc2NyaWJlIGl0LgorICAKKyAgQWxzbyBmaXggdHlwbyBpbiBkZXNjcmlwdGlvbiBvZiAtdCBvcHRpb24uCisKKy0gYXJlc19wYXJzZV9zb2FfcmVwbHk6IERvIG5vdCBsZWFrIHJyX25hbWUgb24gYWxsb2NhdGlvbiBmYWlsdXJlCisgIAorICBJZiBhcmVzX21hbGxvY19kYXRhIGZhaWxlZCwgYWxyZWFkeSBhbGxvY2F0ZWQgcnJfbmFtZSB3b3VsZCBnbyBvdXQgb2YKKyAgc2NvcGUuCisKKy0gW0RhdmlkIERyeXNkYWxlIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRG9uJ3Qgb3ZlcnJpZGUgZXhwbGljaXRseSBzcGVjaWZpZWQgc2VhcmNoIGRvbWFpbnMKKyAgCisgIE9ubHkgc2V0IHNlYXJjaCBkb21haW5zIGZyb20gL2V0Yy9yZXNvbHYuY29uZiBpZiB0aGVyZSBpc24ndCBhIHZhbHVlCisgIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY2hhbm5lbC4KKworLSBbRGF2aWQgRHJ5c2RhbGUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHNlYXJjaCBkb21haW4gaW4gYWhvc3QKKyAgCisgIEFkZCB0aGUgIi1zIGRvbWFpbiIgY29tbWFuZCBsaW5lIG9wdGlvbiB0byBvdmVycmlkZSB0aGUgc2VhcmNoCisgIGRvbWFpbnMuCisKK0RhbmllbCBTdGVuYmVyZyAoMTIgTWF5IDIwMTQpCistIFJldmVydCAiYXJlc19wYXJzZV9hYWFhX3JlcGx5OiBmaXggbGVhayB3aGVuIHJlcGx5IGNvbnRhaW5zIDEgYWxpYXMgYW5kIG5vIGFkZHJlc3MiCisgIAorICBUaGlzIHJldmVydHMgY29tbWl0IDQ0MDExMGIzMDNmZGJmYWRiM2FkNTNkMzBlZWI5OGNjNDVkNzA0NTEuCisKKy0gW0ZyZWRlcmljIEdlcm1haW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhcmVzX3BhcnNlX2FhYWFfcmVwbHk6IGZpeCBsZWFrIHdoZW4gcmVwbHkgY29udGFpbnMgMSBhbGlhcyBhbmQgbm8gYWRkcmVzcworCistIFtEb3VnIEt3YW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhcmVzX2J1aWxkLmg6IGZpeCBidWlsZGluZyBvbiA2NC1iaXQgcG93ZXJwYworICAKKyAgVGhlcmUgYXJlIHR3byBpc3N1ZXMuCisgIAorICAxLiBnY2MgYWN0dWFsbHkgZG9lcyBub3QgdXNlIF9fcHBjX18gYW5kIF9fcHBjNjRfXyBidXQgX19QUENfXyBhbmQKKyAgX19QUEM2NF9fLiAgVGhlIHRlc3RzIG9mIF9fSUxQMzJfXyBhbmQgX19MUDY0X18gYXJlIHN1ZmZpY2llbnQgZm9yIGdjYy4KKyAgCisgIDIuIGNsYW5nIGRlZmluZXMgX19HTlVfXyBhbmQgZGVmaW5lcyBib3RoIF9fcHBjNjRfXyBhbmQgX19wcGNfXyB3aGVuCisgIHRhcmdldGluZyBwcGM2NC4gIFRoaXMgbWFrZXMgQ0FSRVNfU0laRU9GX0xPTkcgdG8gYmUgNCBvbiBhIHBwYzY0IHN5c3RlbQorICB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcuCisgIAorICBNeSBwYXRjaCBpcyB0d28gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgY2hlY2tzIHNvIHRoYXQgd2UgY2hlY2sgdGhlCisgIDY0LWJpdCBjYXNlIGZpcnN0LgorCistIHJlZnJlc2g6IHVwZGF0ZWQgbm93IHdpdGggYXV0b21ha2UgMS4xNAorCistIFtEYXZpZCBEcnlzZGFsZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIHNpbmdsZV9kb21haW46IEludmFsaWQgbWVtb3J5IGFjY2VzcyBmb3IgZW1wdHkgc3RyaW5nIGlucHV0CisgIAorICBXZSBub3RpY2VkIGEgc21hbGwgYnVnbGV0IGluIGFyZXNfc2VhcmNoKCkgd2hlbiBpdCBnZXRzIGFuIGVtcHR5IHN0cmluZworICBhcyBpbnB1dCAtLSB0aGUgc2luZ2xlX2RvbWFpbigpIHV0aWxpdHkgZnVuY3Rpb24gaW4gYXJlc19zZWFyY2guYworICBhY2Nlc3NlcyBpbnZhbGlkIG1lbW9yeSAoYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nKS4KKworR3VlbnRlciBLbmF1ZiAoMzEgQXVnIDIwMTMpCistIEZpeGVkIHdhcm5pbmcgJ3R5cGUgc3BlY2lmaWVyIG1pc3NpbmcnLgorCitEYW5pZWwgU3RlbmJlcmcgKDMwIEF1ZyAyMDEzKQorLSBbVG9yIEFybnRzZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhcmVzX3J1bGVzLmg6IENBUkVTX1NJWkVPRl9MT05HIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSwgZG9uJ3QgdGVzdCBmb3IgaXQKKyAgCisgIEl0IHdhcyByZW1vdmVkIGluIGYxOTM4N2RkNzI0MzIKKworLSBub3dhcm46IHVzZSA8bGltaXRzLmg+IGluc3RlYWQgb2YgY29uZmlndXJlIGZvciBzaXplIG9mIGxvbmcKKyAgCisgIFRoaXMgbWFrZXMgdGhlIGhlYWRlciBmaWxlIG11Y2ggbW9yZSBtdWx0aS1hcmNoIGZyaWVuZGx5IGFuZCBjYW4gYmUgdXNlZAorICBhcy1pcyB3aXRoIGJvdGggMzIgYml0IGFuZCA2NCBiaXQgYnVpbGRzLgorCistIHRpbWVvZmZzZXQ6IG1hZGUgc3RhdGljIGFuZCBwcml2YXRlCisgIAorICBhcmVzX190aW1lb2Zmc2V0KCkgd2FzIG9ubHkgdXNlZCBvbmNlIHdpdGhpbiB0aGlzIHNpbmdsZSBzb3VyY2UgZmlsZQorCistIHRpbWVhZGQ6IG1ha2Ugc3RhdGljCisgIAorICBhcmVzX190aW1lYWRkKCkgd2FzIG9ubHkgZXZlciB1c2VkIGZyb20gd2l0aGluIHRoZSBzYW1lIHNvdXJjZQorCitZYW5nIFRzZSAoMTggSnVsIDIwMTMpCistIHhjLWFtLWlmYWNlLm00OiBjb21tZW50cyByZWZpbmVtZW50CisKKy0gY29uZmlndXJlOiBmaXggJ3N1YmRpci1vYmplY3RzJyBkaXN0Y2xlYW4gcmVsYXRlZCBpc3N1ZQorICAKKyAgU2VlIFhDX0FNRU5EX0RJU1RDTEVBTiBjb21tZW50cyBmb3IgZGV0YWlscy4KKworLSBjb25maWd1cmU6IGF1dG9tYWtlIDEuMTQgY29tcGF0aWJpbGl0eSB0d2VhayAodXNlIFhDX0FVVE9NQUtFKQorCistIHhjLWFtLWlmYWNlLm00OiBwcm92aWRlIFhDX0FVVE9NQUtFIG1hY3JvCisKK0RhbmllbCBTdGVuYmVyZyAoMTIgTWF5IDIwMTMpCistIGdpdGlnbm9yZTogaWdub3JlIGFsbCBhcmVzXypwZGYgYnV0IGFsc28gQ0hBTkdFUy5kaXN0CisKKy0gYnVtcDogc3RhcnQgd29ya2luZyB0b3dhcmRzIDEuMTAuMQorCitWZXJzaW9uIDEuMTAuMCAoMTIgTWF5IDIwMTMpCisKK0RhbmllbCBTdGVuYmVyZyAoMTIgTWF5IDIwMTMpCistIFJFTEVBU0UtTk9URVM6IHR3byBtb3JlIGJ1ZyBmaXhlcworCistIFtLZWl0aCBTaGF3IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgYXJlc19zZXRfc2VydmVyc19jc3Y6IGZpeGVkIElQdjYgYWRkcmVzcyBwYXJzaW5nCisgIAorICBGaXhlZCBidWcgdGhhdCBjYXVzZWQgdGhlIGxhc3QgcGFydCBvZiBhbiBJUHY2IGFkZHJlc3MgdG8gYmUgcGFyc2VkIGFzCisgIHRoZSBwb3J0IG51bWJlciB3aGVuIHRoZSBsYXN0IHBhcnQgaXMgYWxsIG51bWVyaWMuCisKKy0gbnJvZmY6IGZpeCB0d28gc3ludGF4IG1pc3Rha2VzCisgIAorICBhcmVzX3BhcnNlX2FfcmVwbHkgYW5kIGFyZXNfcGFyc2VfYWFhYV9yZXBseSBib3RoIGhhZCB0d28gXGZCIGluc3RlYWQgb2YKKyAgXGZQCisgIAorICBSZXBvcnRlZC1ieTogQWxleGFuZGVyIEtsYXVlcgorICBCdWc6IGh0dHA6Ly9jLWFyZXMuaGF4eC5zZS9tYWlsL2MtYXJlcy1hcmNoaXZlLTIwMTMtMDMvMDAxMC5zaHRtbAorCistIFtBbGV4IExvdWtpc3NhcyBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGJ1aWxkOiBmaXggYnVpbGQgb24gbXN2YzExCisKKy0gTWFrZWZpbGUuYW06IGluY3JlbWVudCAtdmVyc2lvbi1pbmZvIGZvciAxLjEwLjAgcmVsZWFzZQorCistIFJFQURNRTogcmVtb3ZlIHVubmVjZXNzYXJ5IGNvbW1lbnQKKworLSBhcmVzX3ZlcnNpb24uaDogY29weXJpZ2h0IGVuZCByYW5nZSB5ZWFyIGlzIG5vdyAyMDEzCisKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggZmIwNzM3ZjNhMGExYzM3CisKKy0gW1BhdWwgU2FhYiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXNfcGFyc2VfYWFhYV9yZXBseTogUGx1ZyBtZW1vcnkgbGVhaworICAKKyAgVGhpcyBjaGFuZ2UgaXMgc2ltaWxhciB0byBhcmVzX3BhcnNlX2FfcmVwbHkuYyBpbiBjb21taXQKKyAgYmZmZDY3ZjE2YThmNDJmZTZkYmY3OWFiMmUzOWQ5MmVlYTA1YzhhNgorCistIFtQYXRyaWNrIFZhbHNlY2NoaSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5OiByZXR1cm4gYSBhcmVzX3R4dF9yZXBseSBub2RlIGZvciBlYWNoIHN1Yi1zdHJpbmcKKyAgCisgIFByZXZpb3VzbHksIHRoZSBmdW5jdGlvbiB3b3VsZCB3cm9uZ2x5IHJldHVybiBhbGwgc3Vic3RyaW5ncyBtZXJnZWQgaW50bworICBvbmUuCisKKy0gW0FsZXhhbmRlciBLbGF1ZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBsaWJyYXJ5IGluaXQ6IGRvY3VtZW50YXRpb24gdXBkYXRlCisgIAorICBUaGlzIGNvbW1pdCB1cGRhdGVzIHRoZSBkb2N1bWVudGF0aW9uIG9mIGFyZXNfbGlicmFyeV9pbml0KCkgYW5kCisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCkgd2l0aCByZWdhcmQgdG8gdGhlIG5ld2x5IGludHJvZHVjZWQgcmVmZXJlbmNlCisgIGNvdW50aW5nIG9mIGluaXRpYWxpemF0aW9ucyBhbmQgZGVpbml0aWFsaXphdGlvbnMuCisKKy0gW0FsZXhhbmRlciBLbGF1ZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBsaWJyYXJ5IGluaXQ6IGJlIHJlY3Vyc2l2ZQorICAKKyAgUHJldmlvdXNseSwgYSBzaW5nbGUgY2FsbCB0byBhcmVzX2xpYnJhcnlfY2xlYW51cCgpIHdvdWxkIGRlaW5pdGlhbGlzZQorICB0aGUgYy1hcmVzIGxpYnJhcnksIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdGltZXMgYXJlc19saWJyYXJ5X2luaXQoKSB3YXMKKyAgY2FsbGVkLiBUaGlzIGJlaGF2aW91ciBtYXkgY2F1c2UgcHJvYmxlbXMgaW4gcHJvZ3JhbXMgbGlua2luZyB0d28gb3IKKyAgbW9yZSBsaWJyYXJpZXMgd2hpY2gsIGluIHR1cm4sIHVzZSBjLWFyZXMuIFRoZSBwcmVzZW50IGNvbW1pdCBmaXhlcyB0aGlzCisgIHByb2JsZW0sIGRlaW5pdGlhbGl6aW5nIHRoZSBsaWJyYXJ5IG9ubHkgYWZ0ZXIgYSBudW1iZXIgb2YgY2FsbHMgdG8KKyAgYXJlc19saWJyYXJ5X2NsZWFudXAoKSBtYXRjaGluZyB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvCisgIGFyZXNfbGlicmFyeV9pbml0KCkuCisKKy0gW1BhdHJpY2sgVmFsc2VjY2hpIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgcHJvdG9jb2wgcGFyc2luZzogY2hlY2sgaW5wdXQgZGF0YSBzdHJpY3RlcgorICAKKyAgLi4uIHNvIHRoYXQgYmFkIGxlbmd0aCBmaWVsZHMgYXJlbid0IGJsaW5kbHkgYWNjZXB0ZWQKKyAgCisgIEJ1ZzogaHR0cDovL2MtYXJlcy5oYXh4LnNlL21haWwvYy1hcmVzLWFyY2hpdmUtMjAxMy0wNC8wMDE2LnNodG1sCisKK0d1ZW50ZXIgS25hdWYgKDExIEFwciAyMDEzKQorLSBDcmVhdGUgYXJlc19idWlsZC5oIHdoZW4gYnVpZGxpbmcgZnJvbSBHaXQuCisKKy0gQWRkZWQgLURDQVJFU19TVEFUSUNMSUIgdG8gQ0ZMQUdTLgorICAKKyAgQ3VycmVudGx5IHRoaXMgc3RhdGljIG1ha2VmaWxlIGRvZXMgb25seSBzdXBwb3J0IGJ1aWxkaW5nIHRoZQorICBzdGF0aWMgbGlicmFyeSBsaWJjYXJlcy5hLgorCitEYW5pZWwgU3RlbmJlcmcgKDggQXByIDIwMTMpCistIFtBbGV4YW5kZXIgS2xhdWVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgLmdpdGlnbm9yZTogaWdub3JlIHBhdGNoIGZpbGVzCisgIAorICBUaGlzIGNvbW1pdCBhZGRzIGEgbGluZSB0byAuZ2l0aWdub3JlIHRvIHRoZSBlZmZlY3QgdGhhdCBwYXRjaCBmaWxlcworICBnZW5lcmF0ZWQgYnkgJ2dpdCBmb3JtYXQtcGF0Y2gnIGFyZSBleGNsdWRlZCBmcm9tIHRoZSByZXBvc2l0b3J5LgorCistIFtBbGV4YW5kZXIgS2xhdWVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgYXJlc19kZXN0cm95KCkgZG9jdW1lbnRhdGlvbjogbm8gbmV3IHJlcXVlc3RzCisgIAorICBDbGFyaWZ5IHRoYXQgbm8gbmV3IHJlcXVlc3RzIG1heSBiZSBhZGRlZCB0byBhIHJlc29sdmVyIGNoYW5uZWwgdGhhdCBpcworICBjdXJyZW50bHkgYmVpbmcgZGVzdHJveWVkLgorCistIFtBbGV4YW5kZXIgS2xhdWVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRG9jdW1lbnRhdGlvbjogcHJvcGVybHkgZG9jdW1lbnQgQVJFU19FQ0FOQ0VMTEVECisgIAorICBUaGlzIGNvbW1pdCBjbGFyaWZpZXMgdGhlIGJlaGF2aW91ciBvZiBhcmVzX2NhbmNlbCgpIHdpdGggcmVzcGVjdCB0bworICBjYWxsYmFja3MgYW5kIGFkZHMgbWlzc2luZyBkb2N1bWVudGF0aW9uIG9mIEFSRVNfRUNBTkNFTExFRCB0byB0aGUgbWFuCisgIHBhZ2VzIG9mIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuCisKKy0gW0FsZXhhbmRlciBLbGF1ZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhcmVzX2NhbmNlbCgpOiBjYW5jZWwgcmVxdWVzdHMgc2FmZWx5CisgIAorICBBbiBpbnZvY2F0aW9uIG9mIGFyZXNfY2FuY2VsKCkgd2Fsa3MgdGhyb3VnaCB0aGUgcmVxdWVzdCBsaXN0LCBjYWxsaW5nCisgIHRoZSBjYWxsYmFja3Mgb2YgYWxsIHBlbmRpbmcgcmVxdWVzdHMgb24gYSBjaGFubmVsLiBQcmV2aW91c2x5LCBpZiBzdWNoCisgIGEgY2FsbGJhY2sgYWRkZWQgYSBuZXcgcmVxdWVzdCB0byB0aGUgY2hhbm5lbCwgdGhlIHJlcXVlc3QgbGlzdCBtaWdodAorICBub3QgZW5kIHVwIGVtcHR5LCBjYXVzaW5nIGFuIGFib3J0IGJ5IGFzc2VydGlvbiBmYWlsdXJlLiBUaGUgcHJlc2VudAorICBjb21taXQgZW5zdXJlcyB0aGF0IHByZWNpc2VseSBhbGwgcmVxdWVzdHMgcHJlc2VudCB1cG9uIGVudHJ5IG9mCisgIGFyZXNfY2FuY2VsKCkgYXJlIGNhbmNlbGxlZCwgYW5kIHRoYXQgYWRkaW5nIG5ldyByZXF1ZXN0cyB0aHJvdWdoCisgIGNhbGxiYWNrcyBpcyBzYWZlLgorCitZYW5nIFRzZSAoMTAgTWFyIDIwMTMpCistIGFyZXMuaDogc3RyaWN0ZXIgQ0FSRVNfRVhURVJOIGxpbmthZ2UgZGVjb3JhdGlvbnMgbG9naWMKKyAgCisgIE5vIEFQSSBjaGFuZ2UgaW52b2x2ZWQuCisKKy0gYXJlc19idWlsZC5oLmRpc3Q6IGVuaGFuY2Ugbm9uLWNvbmZpZ3VyZSBHQ0MgQUJJIGRldGVjdGlvbiBsb2dpYworICAKKyAgR0NDIHNwZWNpZmljIGFkanVzdG1lbnRzOgorICAKKyAgLSBjaGVjayBfX0lMUDMyX18gYmVmb3JlIDMyIGFuZCA2NGJpdCBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlcyBpbgorICAgIG9yZGVyIHRvIGRldGVjdCBJTFAzMiBwcm9ncmFtbWluZyBtb2RlbCBvbiA2NCBiaXQgcHJvY2Vzc29ycworICAgIHdoaWNoLCBvZiBjb3Vyc2UsIGFsc28gc3VwcG9ydCBMUDY0IHByb2dyYW1taW5nIG1vZGVsLCB3aGVuIHVzaW5nCisgICAgZ2NjIDQuNyBvciBuZXdlci4KKyAgCisgIC0ga2VlcCAzMmJpdCBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIGNoZWNrcyBpbiBvcmRlciB0byBzdXBwb3J0IGdjYworICAgIHZlcnNpb25zIG9sZGVyIHRoYW4gNC43IHdoaWNoIGRvbid0IGRlZmluZSBfX0lMUDMyX18KKyAgCisgIC0gY2hlY2sgX19MUDY0X18gZm9yIGdjYyAzLjMgYW5kIG5ld2VyLCB3aGlsZSBrZWVwaW5nIDY0Yml0IHByb2Nlc3NvcgorICAgIGFyY2hpdGVjdHVyZSBjaGVja3MgZm9yIG9sZGVyIHZlcnNpb25zIHdoaWNoIGRvbid0IGRlZmluZSBfX0xQNjRfXworCitEYW5pZWwgU3RlbmJlcmcgKDkgTWFyIDIwMTMpCistIGFyZXMuaDogdGhlcmUgaXMgbm8gYXJlc19mcmVlX3NvYSBmdW5jdGlvbgorCitZYW5nIFRzZSAoOSBNYXIgMjAxMykKKy0gTWFrZWZpbGUuYW06IGVtcHR5IEFNX0xERkxBR1MgZGVmaW5pdGlvbiBmb3IgYXV0b21ha2UgMS43IGNvbXBhdGliaWxpdHkKKworLSBhcmVzX2luZXRfbnRvcC4zOiBzL3NvY2tsZW5fdC9hcmVzX3NvY2tsZW5fdAorCistIGNvbmZpZ3VyZTogdXNlIFhDX0xJQlRPT0wgZm9yIHBvcnRhYmlsaXR5IGFjcm9zcyBsaWJ0b29sIHZlcnNpb25zCisKKy0geGMtbHQtaWZhY2UubTQ6IHByb3ZpZGUgWENfTElCVE9PTCBtYWNybworCistIE1ha2VmaWxlLmFtOiB1c2UgQU1fQ1BQRkxBR1MgaW5zdGVhZCBvZiBJTkNMVURFUworCistIGluZXRfbnRvcC5jOiBzL3NvY2tsZW5fdC9hcmVzX3NvY2tsZW5fdAorCistIGluZXRfbnRvcC5jOiBzL3NvY2tsZW5fdC9hcmVzX3NvY2tsZW5fdCBmb3IgcG9ydGFiaWxpdHkKKworRGFuaWVsIFN0ZW5iZXJnICgxOSBGZWIgMjAxMykKKy0gYXJlcy5oOiBzL3NvY2tsZW5fdC9hcmVzX3NvY2tsZW5fdCBmb3IgcG9ydGFiaWxpdHkKKworLSBhcmVzX2luZXRfbnRvcC4zOiA0dGggYXJndW1lbnQgaXMgc29ja2xlbl90IQorCistIHNwZWxsIGluZXQgY29ycmVjdGx5IQorCistIGFyZXNfaW5ldF9wdG9uL250b3A6IGNsZWFudXAKKyAgCisgIE1ha2Ugc3VyZSB0aGF0IHRoZSBzeW1ib2xzIGFyZSBhbHdheXMgZXhwb3J0ZWQgYW5kIHByZXNlbnQgaW4gYy1hcmVzLgorICAKKyAgTWFrZSB0aGUgaGVhZGVycyBwcmVmaXhlZCB3aXRoICdhcmVzJy4KKyAgCisgIFJlbW92ZWQgdGhlIGluZXRfbnRvcC5oIHZlcnNpb24gYXMgaXQgbm8gbG9uZ2VyIGZlYXR1cmVzIGFueSBjb250ZW50LgorCistIGFyZXNfaW5ldF9udG9wL2FyZXNfaW5ldF9wdG9uOiBhZGRlZCBtYW4gcGFnZXMKKworWWFuZyBUc2UgKDE1IEZlYiAyMDEzKQorLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBjdXJsX3NldHVwX29uY2UuaDogZGVmaW5pdGlvbiBvZiBIQVZFX0NMT1NFX1MgZGVmaW5lcyBzY2xvc2UoKSB0byBjbG9zZV9zKCkKKworLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBjb25maWctZG9zLmg6IGRlZmluZSBIQVZFX0NMT1NFX1MgZm9yIE1TRE9TL1dhdHQtMzIKKworLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBjb25maWctZG9zLmg6IGRlZmluZSBzdHJlcnJvcigpIHRvIHN0cmVycm9yX3NfKCkgZm9yIEhpZ2gtQworCitEYW5pZWwgU3RlbmJlcmcgKDEzIEZlYiAyMDEzKQorLSBhcmVzX2dldF9kYXRhdHlwZTogcmVtb3ZlZCB1bnVzZWQgZnVuY3Rpb24KKyAgCisgIGl0IHdhcyBhbHNvIHdyb25nbHkgbmFtZWQgYXMgaW50ZXJuYWwgZnVuY3Rpb25zIHJlcXVpcmUgdHdvIHVuZGVyc2NvcmVzCisKKy0gYXJlc19fYml0bmNtcDogdXNlIHR3byB1bmRlcnNjb3JlcyBmb3IgcHJpdmF0ZSBmdW5jdGlvbnMKKyAgCisgIEl0IHVzZWQgYSBzaW5nbGUgb25lIHByZXZpb3VzbHkgbWFraW5nIGl0IGxvb2sgbGlrZSBhIHB1YmxpYyBvbmUKKworLSBhcmVzX19nZW5lcmF0ZV9uZXdfaWQ6IG1vdmVkIHRvIGFyZXNfcXVlcnkuYworICAKKyAgLi4uIGFuZCBhcmVzX19yYzQgaXMgdHVybmVkIGludG8gYSBsb2NhbCBzdGF0aWMgZnVuY3Rpb24uCisKKy0gYXJlc19fc3dhcF9saXN0czogbWFrZSBwcml2YXRlIGFuZCBzdGF0aWMKKyAgCisgIC4uLiBzaW5jZSB0aGVyZSdzIG9ubHkgb25lIHVzZXIsIG1ha2UgaXQgc3RhdGljIHdpdGhpbiBhcmVzX3Byb2Nlc3MuYworCitZYW5nIFRzZSAoMTMgRmViIDIwMTMpCistIE1ha2VmaWxlLm1zdmM6IGFkZCBmb3VyIFZTIHZlcnNpb24gc3RyaW5ncworCitEYW5pZWwgU3RlbmJlcmcgKDEzIEZlYiAyMDEzKQorLSBhcmVzX2V4cGFuZF9uYW1lLjM6IGNsYXJpZnkgaG93IHRvIGZyZWUgdGhlIGRhdGEKKworWWFuZyBUc2UgKDMwIEphbiAyMDEzKQorLSB6ejQwLXhjLW92ci5tNDogZml4ICd3YycgZGV0ZWN0aW9uIC0gZm9sbG93LXVwIDIKKyAgCisgIC0gRml4IGEgcGFpciBvZiBzaW5nbGUgcXVvdGVzIHRvIGRvdWJsZSBxdW90ZXMuCisgIAorICBVUkw6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMy0wMS8wMzU1Lmh0bWwKKyAgUmVwb3J0ZWQgYnk6IFRvciBBcm50c2VuCisKKy0geno0MC14Yy1vdnIubTQ6IGZpeCAnd2MnIGRldGVjdGlvbiAtIGZvbGxvdy11cAorICAKKyAgLSBUYWtlIGludG8gYWNjb3VudCB0aGF0ICd3YycgbWF5IHJldHVybiBsZWFkaW5nIHNwYWNlcyBhbmQvb3IgdGFicy4KKyAgCisgIC0gU2V0IGluaXRpYWwgSUZTIHRvIHNwYWNlLCB0YWIgYW5kIG5ld2xpbmUuCisKKy0geno0MC14Yy1vdnIubTQ6IGZpeCAnd2MnIGRldGVjdGlvbgorICAKKyAgLSBUYWtlIGludG8gYWNjb3VudCB0aGF0ICd3YycgbWF5IHJldHVybiBsZWFkaW5nIHNwYWNlcy4KKyAgCisgIC0gU2V0IGludGVybmF0aW9uYWxpemF0aW9uIGJlaGF2aW9yIHZhcmlhYmxlcy4KKyAgCisgIFRvciBBcm50c2VuIGFuYWx5emVkIGFuZCByZXBvcnRlZCB0aGUgaXNzdWUuCisgIAorICBVUkw6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMy0wMS8wMzUxLmh0bWwKKworLSB6ejQwLXhjLW92ci5tNDogY2hlY2sgYW5vdGhlciB0aHJlZSBiYXNpYyB1dGlsaXRpZXMKKworLSB6ejQwLXhjLW92ci5tNDogMS4wIGludGVyZmFjZSBzdGFiaWxpemF0aW9uCisgIAorICAtIFN0YWJpbGl6YXRpb24gcmVzdWx0cyBpbiA0IHB1YmxpYyBpbnRlcmZhY2UgbTQgbWFjcm9zOgorICAgIFhDX0NPTkZJR1VSRV9QUkVBTUJMRQorICAgIFhDX0NPTkZJR1VSRV9QUkVBTUJMRV9WRVJfTUFKT1IKKyAgICBYQ19DT05GSUdVUkVfUFJFQU1CTEVfVkVSX01JTk9SCisgICAgWENfQ0hFQ0tfUEFUSF9TRVBBUkFUT1IKKyAgLSBBdm9pZCBvbmUgbGV2ZWwgb2YgaW50ZXJuYWwgaW5kaXJlY3Rpb24KKyAgLSBVcGRhdGUgY29tbWVudHMKKyAgLSBEcm9wIFhDX09WUl9aWjQwIG1hY3JvCisKKy0geno0MC14Yy1vdnIubTQ6IGVtaXQgd2l0bmVzcyBtZXNzYWdlIGluIGNvbmZpZ3VyZSBCT0RZCisgIAorICBUaGlzIGF2b2lkcyB3aXRuZXNzIG1lc3NhZ2UgaW4gb3V0cHV0IHdoZW4gcnVubmluZyBjb25maWd1cmUgLS1oZWxwLAorICB3aGlsZSBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIGNvbmZpZy5sb2cgZm9yIG90aGVyIGNvbmZpZ3VyZSBydW5zLgorCistIHp6NDAteGMtb3ZyLm00OiB0cnVseSBkbyB2ZXJzaW9uIGNvbmRpdGlvbmFsIG92ZXJyaWRpbmcKKyAgCisgIC0gdmVyc2lvbiBjb25kaXRpb25hbCBvdmVycmlkaW5nCisgIC0gY2F0Y2ggdW5leHBhbmRlZCBYQyBtYWNyb3MKKyAgLSBmaXggZG91YmxlIHdvcmRzIGluIGNvbW1lbnRzCisKKy0geno0MC14Yy1vdnIubTQ6IGZpeCB2YXJpYWJsZSBhc3NpZ25tZW50IG9mIHN1YnNoZWxsIG91dHB1dCBiYXNoaXNtCisgIAorICBUb3IgQXJudHNlbiBhbmFseXplZCBhbmQgcmVwb3J0ZWQgdGhlIGlzc3VlLgorICAKKyAgVVJMOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTMtMDEvMDMwNi5odG1sCisKKy0geno0MC14Yy1vdnIubTQ6IHJlaW5zdGF0ZSBzdHJpY3QgQUNfUkVRVUlSRSBtYWNybyBkZXBlbmRlbmNpZXMKKworLSB6ejQwLXhjLW92ci5tNDogYXZvaWQgZG91YmxlIHNpbmdsZS1xdW90ZSB1c2FnZQorCistIHp6NDAteGMtb3ZyLm00OiBwYXJlbnRoZXNlcyBiYWxhbmNpbmcgb2YgJ2Nhc2UnIHN0YXRlbWVudHMKKyAgCisgIG00IHF1YWRyaWdyYXBoIHNoZWxsIGNvbW1lbnQgdGVjaG5pcXVlIGFsbG93cyBwcm9wZXIgYXV0b2NvbmYKKyAgcGFyZW50aGVzZXMgYmFsYW5jaW5nIGluIHNoZWxsICdjYXNlJyBzdGF0ZW1lbnRzLiBUaGUgcHJlc2VuY2UKKyAgb2YgdW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBtYXkgb3RoZXJ3aXNlIHRyaWdnZXIgZXhwYW5zaW9uIGJ1Z3MuCisKKy0geno0MC14Yy1vdnIubTQ6IGludGVybmFscyBvdmVyaGF1bGluZworICAKKyAgLSBVcGRhdGUgY29tbWVudHMKKyAgLSBFeGVjdXRlIGNvbW1hbmRzIGluIHN1YnNoZWxscworICAtIEZhc3RlciBwYXRoIHNlcGFyYXRvciBjaGVjaworICAtIEZpeCBtaXNzaW5nICd0ZXN0JyBjb21tYW5kCisgIC0gUmVuYW1lIHByaXZhdGUgbWFjcm9zCisgIC0gTWluaW1pemUgQUNfUkVRVUlSRSB1c2FnZQorCistIHp6NDAteGMtb3ZyLm00OiByZWRpcmVjdCBlcnJvcnMgYW5kIHdhcm5pbmdzIHRvIHN0ZGVycgorCistIGNvbmZpZ3VyZTogdXNlIFhDX0NPTkZJR1VSRV9QUkVBTUJMRSBlYXJseSBjaGVja3MKKyAgCisgIFNvbWUgYmFzaWMgY2hlY2tzIHdlIG1ha2Ugd2VyZSBwbGFjZWQgZWFybHkgZW5vdWdoIGluIGdlbmVyYXRlZAorICBjb25maWd1cmUgc2NyaXB0IHdoZW4gdXNpbmcgYXV0b2NvbmYgMi41WCB2ZXJzaW9ucy4gTmV3ZXIgYXV0b2NvbmYKKyAgdmVyc2lvbnMgZXhwYW5kIHRoZXNlIGNoZWNrcyBtdWNoIGZ1cnRoZXIgaW50byB0aGUgY29uZmlndXJlIHNjcmlwdCwKKyAgcmVuZGVyaW5nIHRoZW0gdXNlbGVzcy4gVXNpbmcgWENfQ09ORklHVVJFX1BSRUFNQkxFIGZpeGVzIHBsYWNlbWVudAorICBvZiBlYXJseSBpbnRlbmRlZCBjaGVja3MgYWNyb3NzIGFsbCBvdXIgYXV0b2NvbmYgc3VwcG9ydGVkIHZlcnNpb25zLgorCistIHp6NDAteGMtb3ZyLm00OiBwcm92aWRlIFhDX0NPTkZJR1VSRV9QUkVBTUJMRSBtYWNybworCistIGNvbmZpZ3VyZTogYXV0b3Rvb2xzIGNvbXBhdGliaWxpdHkgZml4ZXMgLSBzdGVwIEkKKyAgCisgIEZpeCBwcm9wZXIgbWFjcm8gZXhwYW5zaW9uIG9yZGVyIGFjcm9zcyBhdXRvdG9vbHMgdmVyc2lvbnMgZm9yCisgIEMgY29tcGlsZXIgYW5kIHByZXByb2Nlc3NvciBwcm9ncmFtIGNoZWNrcy4KKworLSBjb25maWd1cmU6IGZpeCBhdXRvbWFrZSAxLjEzIGNvbXBhdGliaWxpdHkKKyAgCisgIFRlc3RlZCB3aXRoOgorICAKKyAgYnVpbGRjb25mOiBhdXRvY29uZiB2ZXJzaW9uIDIuNjkKKyAgYnVpbGRjb25mOiBhdXRvbTR0ZSB2ZXJzaW9uIDIuNjkKKyAgYnVpbGRjb25mOiBhdXRvaGVhZGVyIHZlcnNpb24gMi42OQorICBidWlsZGNvbmY6IGF1dG9tYWtlIHZlcnNpb24gMS4xMy4xCisgIGJ1aWxkY29uZjogYWNsb2NhbCB2ZXJzaW9uIDEuMTMuMQorICBidWlsZGNvbmY6IGxpYnRvb2wgdmVyc2lvbiAyLjQKKyAgYnVpbGRjb25mOiBHTlUgbTQgdmVyc2lvbiAxLjQuMTYKKworLSBhcmVzX3ByaXZhdGUuaDogdXNlIGFnYWluIG1lbWRlYnVnLmggaW5zdGVhZCBvZiBjdXJsX21lbWRlYnVnLmgKKworLSBjb25maWd1cmUuYWM6IHJlcGxhY2UgQU1fQ09ORklHX0hFQURFUiB3aXRoIEFDX0NPTkZJR19IRUFERVJTCisgIAorICBhdXRvbWFrZSAxLjEzIGVycm9ycyBpZiBBTV9DT05GSUdfSEVBREVSIGlzIHVzZWQgaW4gY29uZmlndXJlIHNjcmlwdC4KKworLSBjYXJlcy1vdmVycmlkZS5tNDogcHJvdmlkZSBBQ19DT05GSUdfTUFDUk9fRElSIGRlZmluaXRpb24gY29uZGl0aW9uYWxseQorICAKKyAgUHJvdmlkZSBhICd0cmFjZWFibGUnIEFDX0NPTkZJR19NQUNST19ESVIgZGVmaW5pdGlvbiBvbmx5IHdoZW4gdXNpbmcKKyAgYW4gYXV0b2NvbmYgdmVyc2lvbiB0aGF0IGRvZXMgbm90IHByb3ZpZGUgaXQsIGluc3RlYWQgb2Ygd2hhdCB3ZSB3ZXJlCisgIGRvaW5nIHVwIHRvIG5vdyBvZiBwcm92aWRpbmcgYW5kIG92ZXJyaWRpbmcgQUNfQ09ORklHX01BQ1JPX0RJUiBmb3IKKyAgYWxsIGF1dG9jb25mIHZlcnNpb25zLgorCistIGFyZXNfcHJpdmF0ZS5oOiB1c2UgY3VybF9tZW1kZWJ1Zy5oIGluc3RlYWQgb2YgbWVtZGVidWcuaAorCistIHZjNmNhcmVzLmRzcDogYWRkIGFyZXNfY3JlYXRlX3F1ZXJ5LmMgYW5kIGFyZXNfcGFyc2Vfc29hX3JlcGx5LmMKKworLSBjYXJlcy1mdW5jdGlvbnMubTQ6IGltcHJvdmUgZ2V0aG9zdG5hbWUgYXJnIDIgZGF0YSB0eXBlIGNoZWNrCisKKy0gc2V0dXBfb25jZS5oOiBIUC1VWCBzcGVjaWZpYyAnYm9vbCcsICdmYWxzZScgYW5kICd0cnVlJyBkZWZpbml0aW9ucy4KKyAgCisgIEFsc28gcmV2ZXJ0cyBjb21taXQgYmNlYjQwMDk1YQorCistIGNvbmZpZ3VyZTogY2hlY2sgaWYgY29tcGlsZXIgaGFsdHMgb24gZnVuY3Rpb24gcHJvdG90eXBlIG1pc21hdGNoCisKKy0gY2FyZXMtZnVuY3Rpb25zLm00OiBhZGQgZ2V0aG9zdG5hbWUgYXJnIDIgZGF0YSB0eXBlIGNoZWNrIGFuZCBkZWZpbml0aW9uCisKKy0gY2FyZXMtZnVuY3Rpb25zLm00OiB1cGRhdGUgdGhyZWFkLXNhZmVuZXNzIGRldGVjdGlvbiBvZiBnZXRhZGRyaW5mbygpCisgIAorICBUYWtlIGluIGFjY291bnQgdGhhdCBQT1NJWCBzdGFuZGFyZCBJc3N1ZSA3IGRyb3BzIGhfZXJybm8gc3VwcG9ydC4gTm93LCB3ZSBhbHNvCisgIGNvbnNpZGVyIGdldGFkZHJpbmZvKCkgdG8gYmUgdGhyZWFkLXNhZmUgd2hlbiAoX1BPU0lYX0NfU09VUkNFID49IDIwMDgwOUwpIG9yCisgIChfWE9QRU5fU09VUkNFID49IDcwMCkgaW5kZXBlbmRlbnRseSBvZiB3aGV0aGVyIGhfZXJybm8gZXhpc3RzIG9yIG5vdC4KKyAgCisgIFRha2UgaW4gYWNjb3VudCB0aGF0IGhfZXJybm8gbWlnaHQgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZSBub3QgZGVmaW5lZCBhcworICBhIEMgcHJlcHJvY2Vzc29yIG1hY3JvLgorCistIHNldHVwX29uY2UuaDogSFAtVVggPHN5cy9zb2NrZXQuaD4gaXNzdWUgd29ya2Fyb3VuZAorICAKKyAgSXNzdWU6IFdoZW4gYnVpbGRpbmcgYSAzMmJpdCB0YXJnZXQgd2l0aCBsYXJnZSBmaWxlIHN1cHBvcnQgSFAtVVgKKyAgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUgbWF5IHNpbXVsdGFuZW91c2x5IHByb3ZpZGUgdHdvIGRpZmZlcmVudAorICBzZXRzIG9mIGRlY2xhcmF0aW9ucyBmb3Igc2VuZGZpbGUgYW5kIHNlbmRwYXRoIGZ1bmN0aW9ucywgb25lIHdpdGgKKyAgc3RhdGljIGFuZCBhbm90aGVyIHdpdGggZXh0ZXJuYWwgbGlua2FnZS4gR2l2ZW4gdGhhdCB3ZSBkbyBub3QgdXNlCisgIG1lbnRpb25lZCBmdW5jdGlvbnMgd2UgcmVhbGx5IGRvbid0IGNhcmUgd2hpY2ggbGlua2FnZSBpcyB0aGUKKyAgYXBwcm9wcmlhdGUgb25lLCBidXQgb24gdGhlIG90aGVyIGhhbmQsIHRoZSBkb3VibGUgZGVjbGFyYXRpb24gZW1taXRzCisgIHdhcm5pbmdzIHdoZW4gdXNpbmcgdGhlIEhQLVVYIGNvbXBpbGVyIGFuZCBlcnJvcnMgd2hlbiB1c2luZyBtb2Rlcm4KKyAgZ2NjIHZlcnNpb25zIHJlc3VsdGluZyBpbiBmYXRhbCBjb21waWxhdGlvbiBlcnJvcnMuCisgIAorICBNZW50aW9uZWQgaXNzdWUgaXMgbm93IGZpeGVkIGFzIGxvbmcgYXMgd2UgZG9uJ3QgdXNlIHNlbmRmaWxlIG5vcgorICBzZW5kcGF0aCBmdW5jdGlvbnMuCisKKy0gc2V0dXBfb25jZS5oOiByZWZhY3RvciBpbmNsdXNpb24gb2YgPHVuaXN0ZC5oPiBhbmQgPHN5cy9zb2NrZXQuaD4KKyAgCisgIEluY2x1c2lvbiBvZiB0aGVzZSB0d28gaGVhZGVyIGZpbGVzIG5vdyBkb25lIGluIHNldHVwX29uY2UuaAorCistIEhlYWRlciBpbmNsdXNpb24gY2xlYW4tdXAKKyAgCisgIFJlbW92ZSBoZWFkZXIgaW5jbHVzaW9ucyBhbHJlYWR5IGRvbmUgaW4gc2V0dXBfb25jZS5oCisKKy0gc2V0dXBfb25jZS5oOiBIUC1VWCBzcGVjaWZpYyBUUlVFIGFuZCBGQUxTRSBkZWZpbml0aW9ucworICAKKyAgU29tZSBIUC1VWCBzeXN0ZW0gaGVhZGVycyByZXF1aXJlIFRSVUUgZGVmaW5lZCB0byAxIGFuZCBGQUxTRSB0byAwLgorCistIGFyZXNfdGltZW91dC5jOiBmaXggY29tcGlsZXIgd2FybmluZworCistIGFyZXNfY3JlYXRlX3F1ZXJ5LmM6IElSSVggY29tcGlsYXRpb24gZml4CisKKy0gYy1hcmVzL25hbWVzZXIuaDogYWRkIHNvbWUgVF8qIGRlZmluZXMgZm9yIG5zX3RfKiB2YWx1ZXMKKworRGFuaWVsIFN0ZW5iZXJnICg3IE5vdiAyMDEyKQorLSBSZXZlcnQgImFyZXNfcGFyc2VfYWFhYV9yZXBseTogZml4IG1lbW9yeSBsZWFrIgorICAKKyAgVGhpcyByZXZlcnRzIGNvbW1pdCA1MGYyNWQ4YTRiMmQxNmY0YzVlMGVmNjIwMjM4Njg4YjdhMzE1YzdhLgorCistIGFyZXNfcGFyc2VfYWFhYV9yZXBseTogZml4IG1lbW9yeSBsZWFrCisgIAorICBhbiBhbGxvY2F0ZWQgYnVmZmVyIHdhcyBub3QgZnJlZWQgaW4gdGhlIHN1Y2Nlc3NmdWwgY2FzZS4KKworLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhZGlnOiBwZXJyb3IoKSBkb2Vzbid0IHdvcmsgZm9yIHNvY2tldCBlcnJvcnMgb24gd2luZG93cworICAKKyAgLi4uIHNvIHByaW50IHRoZSBTT0NLRVJSTk8gaW5zdGVhZAorCistIGdldF9ETlNfQWRhcHRlcnNBZGRyZXNzZXM6IGZpeCBJUHY2IHBhcnNpbmcKKyAgCisgIFVzZSBvZiB0aGUgd3JvbmcgZGVmaW5lIG1hZGUgdGhlIGZ1bmN0aW9uIG5vdCBwYXJzZSBJUHY2IGFkZHJlc3NlcworICBwcm9wZXJseS4KKyAgCisgIEJ1ZzogaHR0cDovL2MtYXJlcy5oYXh4LnNlL21haWwvYy1hcmVzLWFyY2hpdmUtMjAxMi0wNi8wMDI4LnNodG1sCisgIFJlcG9ydGVkIGJ5OiBTYcO6bCBJYmFycmEgQ29ycmV0Z8OpCisKKy0gdmVyc2lvbjogYnVtcGVkIHRvIDEuMTAuMAorICAKKyAgRHVlIHRvIHRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbjogYXJlc19jcmVhdGVfcXVlcnkoKQorCistIEFVVEhPUlM6IHN5bmNlZCB3aXRoIDgzMDkzYWM0NTAKKyAgCisgIEFkZGVkIDIxIGF1dGhvcnMgc2luY2UgdGhpcyBkb2N1bWVudCB3YXMgbGFzdCB1cGRhdGVkCisKKy0gYXJlc19jcmVhdGVfcXVlcnkuMzogbWVudGlvbiB3aGVuIHRoaXMgaXMgYWRkZWQKKworLSBbaHBvcGVzY3VAaXhpYWNvbS5jb20gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBBZGRlZCBuZXcgZmVhdHVyZSAocmZjMjY3MSkKKworLSBjb2RlIHBvbGljZTogZml4IGluZGVudHMsIDwgODAgY29sdW1ucywgcmVmbG93ZWQgY29tbWVudHMKKworR3VlbnRlciBLbmF1ZiAoMTEgSnVsIDIwMTIpCistIENsZWFuZWQgdXAgdmVyc2lvbiBhd2sgc2NyaXB0LgorCitEYW5pZWwgU3RlbmJlcmcgKDMwIEp1biAyMDEyKQorLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICByZWFkX3VkcF9wYWNrZXRzOiBiYWlsIG91dCBsb29wIG9uIGJhZCBzb2NrZXRzCisgIAorICBJIGNhbiBzZWUgdGhhdCByZWN2ZnJvbSgpIGluIGFyZXNfcHJvY2Vzcy5jIG1hbnkgdGltZXMgaXMgY2FsbGVkIHdpdGgKKyAgJ3VkcF9zb2NrZXQnID09IEFSRVNfU09DS0VUX0JBRC4gVGhlIGNvZGUgdGFrZXMgY2FyZSBub3QgdG8gY2FsbAorICByZWN2L3JlY3Zmcm9tIHdpdGggQVJFU19TT0NLRVRfQkFEIGluIHRoZSBvdXRlci1sb29wLiBTbyBzaG91bGQgdGhlCisgIGlubmVyLWxvb3AuCisKK1lhbmcgVHNlICgyOSBKdW4gMjAxMikKKy0gY2FyZXMtY29tcGlsZXJzLm00OiByZW1vdmUgLVdzdHJpY3QtYWxpYXNpbmc9MyBmcm9tIGNsYW5nCisgIAorICBDdXJyZW50bHkgaXQgaXMgdW5rbm93biBpZiB0aGVyZSBpcyBhbnkgdmVyc2lvbiBvZiBjbGFuZyB0aGF0CisgIGFjdHVhbGx5IHN1cHBvcnRzIC1Xc3RyaWN0LWFsaWFzaW5nLiBXaGF0IGlzIGtub3duIGlzIHRoYXQgdGhlcmUKKyAgYXJlIHNldmVyYWwgdGhhdCBkb24ndCBzdXBwb3J0IGl0LgorCistIGNhcmVzLWNvbXBpbGVycy5tNDogLVdzdHJpY3QtYWxpYXNpbmc9MyBmb3Igd2FybmluZyBlbmFibGVkIGdjYyBhbmQgY2xhbmcgYnVpbGRzCisKK0RhbmllbCBTdGVuYmVyZyAoMTggSnVuIDIwMTIpCistIHZlcnNpb246IHdvcmsgdG93YXJkcyAxLjkuMiAoYXQgbGVhc3QpCisKK1ZlcnNpb24gMS45LjEgKDE4IEp1biAyMDEyKQorCitEYW5pZWwgU3RlbmJlcmcgKDE4IEp1biAyMDEyKQorLSBSRUxFQVNFLU5PVEVTOiAxLjkuMSBjb21pbmcgdXAKKworVmVyc2lvbiAxLjkuMCAoMTYgSnVuIDIwMTIpCisKK0RhbmllbCBTdGVuYmVyZyAoMTYgSnVuIDIwMTIpCistIGFyZXNfdmVyc2lvbi5oOiBuZXh0IHZlcnNpb24gaXMgMS45LjAKKworLSBbTWFya28gS3JlZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhcmVzX2RhdGEuaDogQVJFU19EQVRBVFlQRV9TT0FfUkVQTFkgaXMgYWRkZWQgaW4gMS45LjAKKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCA5NzliZjk1MWQKKyAgCisgIE5leHQgcmVsZWFzZSBkZWVtZWQgdG8gYmVjb21lIDEuOS4wIGR1ZSB0byB0aGUgbmV3IGZ1bmN0aW9uCisKKy0gW01hcmtvIEtyZWVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgU09BIHBhcnNlciBhZGRlZAorICAKKyAgSSBuZWVkIHRvIGRvIFNPQSBxdWVyaWVzLCBzbyBoZXJlIGlzIGEgcGFyc2VyIGZvciB0aGVtLgorICAKKyAgLSBhcmVzX3NvYV9yZXBseTogbmV3IHN0cnVjdAorICAtIGFyZXNfbWFsbG9jX2RhdGEvYXJlc19mcmVlX3NvYTogQVJFU19EQVRBVFlQRV9TT0FfUkVQTFkKKyAgLSBhcmVzX3BhcnNlX3NvYV9yZXBseTogYWN0dWFsIGZ1bmN0aW9uCisKK1lhbmcgVHNlICgxNCBKdW4gMjAxMikKKy0gS2lsbCBjb21waWxlciB3YXJuaW5nCisKKy0gRml4IGxpYmNhcmVzLnBjIGdlbmVyYXRpb24gZm9yIHN0YXRpYyBNaW5nVyogY3Jvc3MgYnVpbGRzCisKK0RhbmllbCBTdGVuYmVyZyAoMjEgTWF5IDIwMTIpCistIFtOaWNrIEFsY29jayBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEZpeCBVRFAgYW5kIFRDUCBwb3J0IGJ5dGUgb3JkZXIgaW4gc2F2ZWQgb3B0aW9ucy4KKyAgCisgIFRoZSBVRFAgYW5kIFRDUCBwb3J0IGFyZSBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyIGluIHRoZQorICBhcmVzX2NoYW5uZWxkYXRhLCBidXQgYXJlIHBhc3NlZCBpbiB0byBhcmVzX2luaXRfb3B0aW9ucygpIGluIGhvc3QgYnl0ZQorICBvcmRlci4gIFRodXMgd2UgbXVzdCByZXR1cm4gdGhlbSBmcm9tIGFyZXNfc2F2ZV9vcHRpb25zKCkgaW4gaG9zdCBieXRlCisgIG9yZGVyIHRvbywgb3IgYSBkdXBsaWNhdGVkIGNoYW5uZWwgd2lsbCBjb252ZXJ0IHRoZW0gYWdhaW4sIGxlYWRpbmcgdG8gYQorICBub25mdW5jdGlvbmFsIGNoYW5uZWwgYW5kIGEgbXlzdGVyaW91cyBjb25uZWN0aW9uIHJlZnVzZWQgZXJyb3IgZnJvbQorICBhcmVzX2dldGhvc3RieW5hbWUoKS4gIFRoaXMgYnJlYWtzIGFyZXNfZHVwKCksIHRodXMgdGhlIGN1cmwgZWFzeSBBUEkKKyAgd2hlbiBjLWFyZXMgaXMgdXNlZCBieSBjdXJsLCBhbmQgdGh1cyBhbGwgdGhlIGN1cmwgZWFzeSBBUEkncyB1c2Vycy4KKworWWFuZyBUc2UgKDI4IEFwciAyMDEyKQorLSB2ZXJzaW9uOiBzdGFydCB3b3JraW5nIG9uIDEuOC4xLURFVgorCitWZXJzaW9uIDEuOC4wICgyNyBBcHIgMjAxMikKKworRGFuaWVsIFN0ZW5iZXJnICgyNyBBcHIgMjAxMikKKy0gUkVMRUFTRS1OT1RFUzogY2FsbCBuZXh0IDEuOCBpbnN0ZWFkCisgIAorICBTaW5jZSB3ZSBhZGRlZCBhIGZ1bmN0aW9uLCBsZXQncyB1c2UgYSBzdHJpY3RlciBidW1waW5nIHNjaGVtZQorCitZYW5nIFRzZSAoMjUgQXByIDIwMTIpCistIElOU1RBTEw6IHNvbWUgYWRqdXN0bWVudHMKKworRGFuaWVsIFN0ZW5iZXJnICgyNSBBcHIgMjAxMikKKy0gR0lULUlORk86IG1lbnRpb24gYnVpbGRjb25mCisKK1lhbmcgVHNlICgyNSBBcHIgMjAxMikKKy0gSU5TVEFMTDogcmVtb3ZlIG1vcmUgc2VjdGlvbnMgdGhhdCBkb24ndCBhcHBseSB0byBjLWFyZXMKKworLSBhcmVzX3RpbWVvdXQuYzogZml4IGNvbXBpbGVyIHdhcm5pbmcKKworRGFuaWVsIFN0ZW5iZXJnICgyNSBBcHIgMjAxMikKKy0gW0JlbiBOb29yZGh1aXMgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBNYWtlZmlsZS5tMzI6IGZpeCBtaW5ndzMyIGJ1aWxkCisgIAorICAqIGFkZCAuIHRvIGluY2x1ZGUgcGF0aCBzbyBhcmVzX2J1aWxkLmggaXMgcGlja2VkIHVwCisgICogbWFrZSBhciBjb25maWd1cmFibGUgdG8gZWFzZSBjcm9zcy1jb21waWxpbmcKKworLSBSRUxFQVNFLU5PVEVTOiBhZGRlZCB3aGF0J3MgaGFwcGVuZWQgc2luY2UgMS43LjUKKworR3VlbnRlciBLbmF1ZiAoMjIgQXByIDIwMTIpCistIFVwZGF0ZWQgY29weXJpZ2h0IHllYXIuCisKK1lhbmcgVHNlICgyMSBBcHIgMjAxMikKKy0gYXJlc19pbml0LmM6IEZ1cnRoZXIgcmVmYWN0b3Jpbmcgb2YgV2luZG93cyBzeXN0ZW0ncyBETlMgZmV0Y2hpbmcgY29kZQorCitHdWVudGVyIEtuYXVmICgyMCBBcHIgMjAxMikKKy0gQW5kcm9pZDogc21hbGwgY2hhbmdlcyB0byBkbnMgcHJvcGVydHkgcGFydC4KKyAgCisgIFByZWZpeCBwcm9wIHZhcnM7IGtpbGwgdmFyOyB1c2UgRE5TX1BST1BfTkFNRV9QUkVGSVggbWFjcm8uCisKKy0gSGFuZGxlIENOQU1FLW9ubHkgaW4gYXJlc19wYXJzZV9hYWFhX3JlcGx5KCkuCisgIAorICBwb3N0ZWQgdG8gdGhlIGMtYXJlcyBsaXN0IGJ5IFBldGVyIEdyaWVzcyA8cGdAc3RkLmluPi4KKworLSBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgRE5TIHNlcnZlcnMgb24gQW5kcm9pZC4KKyAgCisgIEJlZm9yZSwgYy1hcmVzIGFsd2F5cyB1c2VkIHRoZSBmaXJzdCBETlMgc2VydmVyIG9uIEFuZHJvaWQsIGNhdXNpbmcKKyAgbmV0d29yayBwcm9ibGVtcyBpZiB0aGlzIEROUyBzZXJ2ZXIgd2FzIG5vdCBhdmFpbGFibGUuCisgIAorICBTaWduZWQtb2ZmLWJ5OiBHZWVydCBVeXR0ZXJob2V2ZW4gPEdlZXJ0LlV5dHRlcmhvZXZlbkBzb255Y29tLmNvbT4KKworLSBBZGRlZCBJTlNUQUxMIHNvIGl0IGdldHMgaW50byB0YXJiYWxscy4KKworLSBBZGRlZCBzb21lIG1vcmUgaWZkZWZzIHRvIHNpbGVudCBjb21waWxlciB3YXJuaW5ncy4KKworWWFuZyBUc2UgKDE3IEFwciAyMDEyKQorLSBJTlNUQUxMOiByZW1vdmUgYSBub24gYy1hcmVzIHNlY3Rpb24KKworLSBjYXJlcy1jb21waWxlcnMubTQ6IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IGZvciBXaW5kb3dzIGdjYyA0LjUgYnVpbGRzCisgIAorICBXaGVuIGJ1aWxkaW5nIGEgV2luZG93cyB0YXJnZXQgd2l0aCBnY2MgNC41IG9yIG5ld2VyIGFuZCBzdHJpY3QgY29tcGlsZXIKKyAgd2FybmluZ3MgZW5hYmxlZCB1c2UgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQgaW4gYWRkaXRpb24gdG8gb3RoZXIgZmxhZ3MuCisKKy0gc2V0dXBfb25jZS5oOiB0aWdodGVuIHJlcXVpcmVtZW50cyBmb3Igc3RkYm9vbC5oIGhlYWRlciBpbmNsdXNpb24KKyAgCisgIEluY2x1ZGUgc3RkYm9vbC5oIG9ubHkgd2hlbiBpdCBpcyBhdmFpbGFibGUgYW5kIGNvbmZpZ3VyZSBpcyBjYXBhYmxlIG9mCisgIGRldGVjdGluZyBhIHByb3BlciAnYm9vbCcgZGF0YSB0eXBlIHdoZW4gdGhlIGhlYWRlciBpcyBpbmNsdWRlZC4KKworLSBjb25maWd1cmU6IE5BVElWRV9XSU5ET1dTIG5vIGxvbmdlciBkZWZpbmVkIGluIGNvbmZpZyBmaWxlCisKKy0gY2FyZXMtY29tcGlsZXJzLm00OiBkb3VibGUgdW5kZXJzY29yZSBkZWNvcmF0aW9uIGZvciB2aXNpYmlsaXR5IGF0dHJpYnV0ZQorCistIGJ1aWxkIGFkanVzdG1lbnRzOiBDQVJFU19TWU1CT0xfSElESU5HIG5vIGxvbmdlciBkZWZpbmVkIGluIGNvbmZpZyBmaWxlcworICAKKyAgY29uZmlndXJlIHNjcmlwdCBub3cgcHJvdmlkZXMgY29uZGl0aW9uYWwgZGVmaW5pdGlvbnMgZm9yIE1ha2VmaWxlLmFtCisgIHRoYXQgcmVzdWx0IGluIENBUkVTX1NZTUJPTF9ISURJTkcgYmVpbmcgZGVmaW5lZCBieSByZXN1bHRpbmcgbWFrZWZpbGVzCisgIHdoZW4gYXBwcm9wcmlhdGUuCisKKy0gY29uZmlndXJlOiBXaW5kb3dzIGNyb3NzLWNvbXBpbGF0aW9uIGZpeGVzCisgIAorICBDQVJFU19CVUlMRElOR19MSUJSQVJZIGFuZCBDQVJFU19TVEFUSUNMSUIgbm8gbG9uZ2VyIGRlZmluZWQgaW4gYXJlc19jb25maWcuaCwKKyAgY29uZmlndXJlIHdpbGwgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29uZGl0aW9uYWxzIHNvIHRoYXQgbWVudGlvbmVkIHN5bWJvbHMKKyAgZ2V0IGRlZmluZWQgYW5kIHVzZWQgaW4gTWFrZWZpbGUgZGVyaXZlZCBmcm9tIE1ha2VmaWxlLmFtIGF0IGNvbXBpbGF0aW9uIHRpbWUuCisKK0d1ZW50ZXIgS25hdWYgKDE3IEFwciAyMDEyKQorLSBBZGRlZCBJTlNUQUxMIGZpbGUgYWRhcHRlZCBmcm9tIGxpYmN1cmwuCisgIAorICBOb3QgeWV0IHJlYWR5LCBhbmQgbmVlZHMgZnVydGhlciBlZGl0cy4KKworWWFuZyBUc2UgKDE2IEFwciAyMDEyKQorLSBhcmVzX2luaXQuYzogZ2V0X2lwaGxwYXBpX2Ruc19pbmZvKCkgcmVmYWN0b3JpbmcKKworR3VlbnRlciBLbmF1ZiAoMTYgQXByIDIwMTIpCistIEtpbGwgc29tZSBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzLgorCistIEtpbGwgY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnVzZWQgdmFyLgorCistIEZpeGVkIG15IGxhc3QgY29tbWl0OiB3cm9uZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLgorCistIENoZWNrIGZvciBfX0FORFJPSURfXyBpbiBhZGRpdGlvbiB0byBBTkRST0lEIG1hY3JvLgorCistIENoZWNrIGZvciBfX0FORFJPSURfXyBpbiBhZGRpdGlvbiB0byBBTkRST0lEIG1hY3JvLgorICAKKyAgUG9zdGVkIHRvIGMtYXJlcyBsaXN0IGJ5IFdheW5lLgorCistIEZpeCBmb3IgQW5kcm9pZCB0byBkaXNhYmxlIHVzZWxlc3MgYXJwYS9uYW1lc2VyLmguCisKKy0gRml4IGZvciBBbmRyb2lkIHRvIGluY2x1ZGUgc3lzL3NlbGVjdC5oIGZvciBmZF9zZXQuCisKK1lhbmcgVHNlICgxNyBNYXIgMjAxMikKKy0gYXJlc19kYXRhLmM6IHNvbWUgTkFQVFIgcmVsYXRlZCBmaXhlcworCitEYW5pZWwgU3RlbmJlcmcgKDE2IE1hciAyMDEyKQorLSBwb3J0IG51bWJlcnM6IGNvbnZlcnQgdGhlbSB0byBuZXR3b3JrIG9yZGVyIQorICAKKyAgV2hlbiB0aGUgY29uZmlnIG9wdGlvbnMgQVJFU19PUFRfVURQX1BPUlQgb3IgQVJFU19PUFRfVENQX1BPUlQgYXJlIHVzZWQsCisgIG1ha2Ugc3VyZSB0byBjb252ZXJ0IHRoZW0gdG8gbmV0d29yayBieXRlIG9yZGVyIQorICAKKyAgQnVnOiBodHRwOi8vYy1hcmVzLmhheHguc2UvbWFpbC9jLWFyZXMtYXJjaGl2ZS0yMDEyLTAyLzAwMDQuc2h0bWwKKworLSB3aGl0ZSBzcGFjZSBjbGVhbnVwCisgIAorICAtIEtlZXAgY29kZSB3aXRoaW4gODAgY29sdW1ucworICAKKyAgLSBSZW1vdmVkIGZ1bm55IHNwYWNlcyBhZnRlciBvcGVuIHBhcmVuIGFuZCBiZWZvcmUgY2xvc2luZyBwYXJlbgorCistIFtQb3VsIFRob21hcyBMb21ob2x0IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgZ2V0X2lwaGxwYXBpX2Ruc19pbmZvOiBmaXggYnVmZmVyIG92ZXJydW4KKyAgCisgIEkgZXhwZXJpZW5jZWQgYSBidWZmZXIgb3ZlcnJ1biBleGNlcHRpb24gaW4gYy1hcmVzIG9uIFdpbmRvd3MgYW5kCisgIHRyYWNrZWQgaXQgZG93biB0byBiZSBhbiBlcnJvciBpbiB0aGUgY2FsY3VsYXRpb24gb2YgdGhlICdsZWZ0JyB2YXJpYWJsZQorICBpbiBnZXRfaXBobHBhcGlfZG5zX2luZm8oKS4KKyAgCisgIEkgY2hhbmdlZCB0aGUgdmFyaWFibGUgdHlwZSBvZiAnbGVmdCcgdG8gYSBfc2lnbmVkXyB0eXBlIGJlY2F1c2Ugb2YgdGhlCisgIHN1YnRyYWN0aW9uIGFyaXRobWV0aWM7IG5vdCBzdXJlIGlmIGEgbG9uZyBpcyB0aGUgYmVzdCBjaG9pY2UKKworLSBNZXJnZSBwdWxsIHJlcXVlc3QgIzcgZnJvbSBzYWdodWwvbmFwdHIKKyAgCisgIEFkZGVkIHN1cHBvcnQgZm9yIHBhcnNpbmcgTkFQVFIgcmVjb3JkcworCitzYWdodWwgKDIzIEZlYiAyMDEyKQorLSBBZGRlZCBzdXBwb3J0IGZvciBwYXJzaW5nIE5BUFRSIHJlY29yZHMKKworWWFuZyBUc2UgKDE5IEphbiAyMDEyKQorLSBhcmVzX2luaXQuYzogZml4IGNvbXBpbGVyIHdhcm5pbmcgb24gd2luc29jayBidWlsZHMKKworLSBjb25maWd1cmU6IGxpYnRvb2wgMS41IHR3ZWFrcworCitEYW5pZWwgU3RlbmJlcmcgKDE5IERlYyAyMDExKQorLSBhcmVzX3RpbWVvdXQuMzogZml4IHRoZSBOQU1FIHNlY3Rpb24KKyAgCisgIEl0IHdhcyBjbGVhcmx5IGEgY29weSBuJyBwYXN0ZSBlcnJvcgorCitZYW5nIFRzZSAoMjcgU2VwIDIwMTEpCistIFtBbGJlcnQgQ2hpbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGNvbmZpZ3VyZSAtIG00OiBtYWtlIENVUkxfQ0hFQ0tfREVGIGlnbm9yZSBsZWFkaW5nIHdoaXRlc3BhY2Ugb24gc3ltYm9sIGRlZgorICAKKyAgV2hlbiB1c2luZyBTdW4gQyBjb21waWxlciB0aGUgcHJlcHJvY2Vzc29yIHNvbWVob3cgaW5zZXJ0cyBhbiBleHRyYSBzcGFjZQorICBpbiBmcm9udCBvZiByZXBsYWNlZCBzeW1ib2wsIGJyZWFraW5nIENVUkxfQ0hFQ0tfREVGIG1hY3JvLiBUbyB3b3JrYXJvdW5kCisgIHRoaXMsIG1hY3JvIENVUkxfQ0hFQ0tfREVGIG5vdyBpZ25vcmVzIGFsbCBsZWFkaW5nIHdoaXRlc3BhY2UgaW4gZnJvbnQgb2YKKyAgc3ltYm9sIHN1YnN0aXR1dGlvbiByZXN1bHQuCisKKy0gYXJlc19pbml0LmM6IGZpeCBzZWdmYXVsdCB0cmlnZ2VyZWQgaW4gYXJlc19pbml0X29wdGlvbnMoKSB1cG9uIHByZXZpb3VzCisgICAgICAgICAgICAgICBmYWlsdXJlIG9mIGluaXRfYnlfZGVmYXVsdHMoKSBhbmQgaW5jb21wbGV0ZSBjbGVhbnVwIHRoZXJlLgorCistIGFyZXNfcHJvY2Vzcy5jOiBmaXggY29tcGlsZXIgd2FybmluZworCistIGZpeCBNU1ZDIGNvbXBpbGVyIHdhcm5pbmcgJ2NvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQnCisKKy0gc2V0dXBfb25jZS5oIGNsZWFudXAgYW5kIHN5bmMKKworLSBbRGVuaXMgQmlsZW5rbyBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXNfZ2V0bmFtZWluZm86IGZpeCByYW5kb20gcmVzdWx0cyB3aXRoIGMtYXJlcyAxLjcuNQorICAKKyAgSW4gYXJlc19nZXRuYW1laW5mbyBtZW1jcHkgZGlkIG5vdCBjb3B5IGVub3VnaCBieXRlcywgY2F1c2luZworICBpdCB0byByZXR1cm4gYXJiaXRyYXJ5IG1lbW9yeSBjb250ZW50cyBhcyBhIHJlc3VsdC4KKworLSB3YXJuaW5nczogZml4IGFub3RoZXIgJ2NvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cycgY29tcGlsZXIgd2FybmluZworCistIGFyZXNfZG5zLmg6IGFkanVzdCBETlNfXzE2QklUIGFuZCBETlNfXzMyQklUIG1hY3JvIGRlZmluaXRpb25zCisgIAorICBGaXhpbmcgY29tcGlsZXIgd2FybmluZ3MgZXhpc3RpbmcgZGVmaW5pdGlvbnMgdHJpZ2dlcmVkIG9uIHRoZXNlLgorCistIGFyZXNfZGVzdHJveS5jOiBmaXggc2VnZmF1bHQgaW4gYXJlc19kZXN0cm95X29wdGlvbnMoKQorCitEYW5pZWwgU3RlbmJlcmcgKDIxIEF1ZyAyMDExKQorLSBhcmVzX3BhcnNlX3Nydl9yZXBseTogc2lsZW5jZSBjb21waWxlciB3YXJuaW5ncworICAKKyAgLi4uIGJ5IGFkZGluZyB1Z2x5IHR5cGVjYXN0cy4KKworLSBDSEFOR0VTOiBnZW5lcmF0ZSBmcm9tIHNjcmlwdAorICAKKyAgVGhlIENIQU5HRVMgZmlsZSBpcyBub3cgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgd2l0aCAnZ2l0MmNoYW5nZXMucGwnLAorICBpbnZva2VkIGJ5IHRoZSBtYWtldGd6IHNjcmlwdCB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHJlbGVhc2UgYXJjaGl2ZXMuCisgIAorICBUaGUgZm9ybWVyIGh1bWFuIGVkaXRlZCBDSEFOR0VTIGZpbGUgd2FzIHJlbmFtZWQgdG8gQ0hBTkdFUy4wIGluIGdpdC4KKworWWFuZyBUc2UgKDIxIEF1ZyAyMDExKQorLSBNYWtlZmlsZS5uZXR3YXJlOiBTSVpFT0ZfU0hPUlQgZGVmaW5pdGlvbgorCistIHdhcm5pbmdzOiBmaXggc29tZSAnY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzJyBjb21waWxlciB3YXJuaW5ncworCistIGNvbmZpZ3VyZTogZml4IHN5bWJvbCBoaWRpbmcgdXNhYmlsaXR5IGNoZWNrCisgIAorICBBIG1vcmUgdGhvcm91Z2ggdGVzdCBpcyBkb25lIG5vdyBpbiBvcmRlciB0byBkZXRlcm1pbmUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUKKyAgdXNhYmlsaXR5LCBnaXZlbiB0aGF0IHNvbWUgY29tcGlsZXJzIGRvbid0IHN1cHBvcnQgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgb24KKyAgYWxsIGNvbmZpZ3VyYXRpb25zLgorCitEYW5pZWwgU3RlbmJlcmcgKDE2IEF1ZyAyMDExKQorLSAxLjcuNjogc3RhcnQgd29ya2luZy4uLgorCitWZXJzaW9uIDEuNy41ICgxNiBBdWcgMjAxMSkKKworRGFuaWVsIFN0ZW5iZXJnICgxNiBBdWcgMjAxMSkKKy0gQ0hBTkdFUzogc3luY2VkIGZvciAxLjcuNSByZWxlYXNlCisKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggYmI0MDk2ZWZmZWY3ZjAwMAorCitKYWt1YiBIcm96ZWsgKDE1IEF1ZyAyMDExKQorLSBPbmx5IGZhbGwgYmFjayB0byBBRl9JTkVUIHNlYXJjaGVzIHdoZW4gbG9va2luZyBmb3IgQUZfVU5TUEVDIGFkZHJlc3NlcworCitZYW5nIFRzZSAoMTAgQXVnIDIwMTEpCistIFtHaXNsZSBWYW5lbSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXNfaXBobHBhcGkuaDogV2F0Y29tIEMgZml4CisgIAorICAgIEFkZGVkICIhZGVmaW5lZChfV1MyREVGXykiIHNpbmNlIFdhdGNvbSBkb2Vzbid0IGhhdmUKKyAgICBhIHBlciB0eXBlIGd1YXJkIGZvciB0aGUgdHlwZWRlZnMgJ0NTQUREUl9JTkZPJyAodGhhdCBNaW5nVyBoYXMpIG9yCisgICAgJ1NPQ0tFVF9BRERSRVNTJyAodGhhdCBNU1ZDIGhhcykuIEJ1dCB3ZSBjYW4gdXNlIHRoZSBoZWFkZXItZ3VhcmQgZm9yCisgICAgPHdzMmRlZi5oPiBpbnN0ZWFkLgorCistIFtHaXNsZSBWYW5lbSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIE1ha2VmaWxlLldhdGNvbToKKyAgICAqIFRoZSAnTlRERElfVkVSU0lPTicgbmVlZHMgdG8gYmUgcmFpc2VkIHRvIDB4MDUwMTAwMDAKKyAgICAgIGluIG9yZGVyIGZvciBTT0NLQUREUl9TVE9SQUdFIGV0Yy4gdG8gYmUgdHlwZWRlZmVkLgorICAgICogUmVwbGFjZWQgJy1kVVNFX1dBVFQzMicgd2l0aCAnLWRXQVRUMzInLgorICAgICogQWRkZWQgJChERU1PUykgdG8gdGhlICdhbGwnIHRhcmdldCBhbmQgcmVtb3ZlZCB0aGUgJ2RlbW9zJworICAgICAgdGFyZ2V0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBlLmcuIE1ha2VmaWxlLm1zdmMgZXRjLgorICAgICogJ0VOQUJMRV9JUFY2JyBpcyBubyBsb25nZXIgdXNlZC4gSGVuY2UgcmVtb3ZlZCB0aGUgJyV1c2VfaXB2NicgY29uc3RydWN0LgorICAgICogb2JqZWN0LWZpbGUgb3JkZXIgc2VlbXMgdG8gYmUgaW1wb3J0YW50IChXYXRjb20gdi4xOSkuIEhlbmNlCisgICAgICAnYXJlc19nZXRvcHQub2JqJyBtdXN0IGJlIHB1dCBhZnRlciB0aGUgLm9iaiB0aGF0IHJlZmVyZW5jZXMgZ2V0b3B0KCkuCisKKy0gY2FyZXMtY29tcGlsZXJzLm00OiBDQVJFU19DT05WRVJUX0lOQ0xVREVfVE9fSVNZU1RFTSBhZGp1c3RtZW50cworICAKKyAgQWRkIENBUkVTX0NIRUNLX0NPTVBJTEVSIGFzIGEgcmVxdWlyZW1lbnQuCisgIAorICBFbnN1cmUgbWFjcm8gZG9lcyBub3RoaW5nIHVubGVzcyBHTlVfQyBvciBDTEFORyBjb21waWxlciBpcyB1c2VkLgorICAKKyAgVGhpcyBzaG91bGQgYWxsb3cgdXNhZ2Ugb2YgdGhpcyBtYWNybyBpbiB1bmZvcmVzZWVuIHBsYWNlbWVudHMuCisKKy0gY29uZmlnLXdpbjMyLmg6IGNvbW1lbnRzIGFkanVzdG1lbnRzIC0gZm9sbG93dXAKKworLSBjb25maWctd2luMzIuaDogY29tbWVudHMgYWRqdXN0bWVudHMKKworRGFuaWVsIFN0ZW5iZXJnICg1IEF1ZyAyMDExKQorLSBbVG9tIEh1Z2hlcyBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXNfcGFyc2VfYV9yZXBseTogZml4IG1lbWxlYWsKKworWWFuZyBUc2UgKDI5IEp1bCAyMDExKQorLSBjYXJlcy1mdW5jdGlvbnMubTQgc2VyaWFsICMgYnVtcAorCistIFJldmVydCAiY29uZmlndXJlOiBhZGRpdGlvbmFsIGZsYWcgY2hlY2tzIGZvciBmY250bCgpIGFuZCBzb2NrZXQoKSIKKyAgCisgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNWYyYTNiMGU0OGYyNmQyNGNiMWZlZmVhMGRjY2I5MmQ0MTdkY2JmNy4KKworLSBjb25maWd1cmU6IGFkZGl0aW9uYWwgZmxhZyBjaGVja3MgZm9yIGZjbnRsKCkgYW5kIHNvY2tldCgpCisKKy0geGMtdHJhbnNsaXQubTQgZml4IHF1b3RpbmcKKworLSBjb25maWd1cmU6IGF2b2lkIGRpcmVjdCB1c2FnZSBvZiBBU19UUl8qIG1hY3JvcworCistIHhjLXRyYW5zbGl0Lm00IHByb3ZpZGVzIHRyYW5zbGl0ZXJhdGlvbiBtYWNyb3Mgd2l0aCB3ZWxsIGRlZmluZWQgYmVoYXZpb3IuCisKK0pha3ViIEhyb3playAoMTUgSnVuIDIwMTEpCistIFJldmVydCAiT25seSBmYWxsIGJhY2sgdG8gQUZfSU5FVCBzZWFyY2hlcyB3aGVuIGxvb2tpbmcgZm9yIEFGX1VOU1BFQyBhZGRyZXNzZXMiCisgIAorICBUaGlzIHJldmVydHMgY29tbWl0IGI1ODIzZDY1NzA2YWY2ODdjMGU1MTEwYWY4ZjBjZmRjZDA2ODk5N2QuCisgIAorICBUaGlzIHBhdGNoIHdhcyBub3QgcmV2aWV3ZWQgcHJvcGVybHkgYmVmb3JlIHB1c2hpbmcKKworLSBSZXZlcnQgIkRvIG5vdCB1c2Ugc2l6ZWQgY29uc3RhbnRzIGluIHB1YmxpYyBoZWFkZXJzIgorICAKKyAgVGhpcyByZXZlcnRzIGNvbW1pdCAyMmMwMWU5NmY3YjJhZTk5MjNlMWJhYTUwYmZlM2MwZDIyMjk3YTdkLgorICAKKyAgVGhpcyBpcyBhIFJlZCBIYXQgc3BlY2lmaWMgcGF0Y2ggdGhhdCBkb2VzIG5vdCBiZWxvbmcgaW50byB1cHN0cmVhbQorCistIFVzZSBjb3JyZWN0IHNpemVvZiBpbiBhcmVzX2dldG5hbWVpbmZvKCkKKworLSBEbyBub3QgbGVhayBycl9uYW1lIG9uIGZhaWx1cmVzIGluc2lkZSBhcmVzX3BhcnNlX3B0cl9yZXBseQorCistIERvIG5vdCBsZWFrIHJyX25hbWUgb24gZmFpbHVyZXMgaW5zaWRlIGFyZXNfcGFyc2VfYV9yZXBseQorCistIERvIG5vdCBsZWFrIHJyX25hbWUgb24gZmFpbHVyZXMgaW5zaWRlIGFyZXNfcGFyc2VfYWFhYV9yZXBseQorCistIERvIG5vdCBsZWFrIHJyX25hbWUgb24gZmFpbHVyZXMgaW5zaWRlIGFyZXNfcGFyc2VfbnNfcmVwbHkKKworLSBGaXggaW5jb3JyZWN0IHNpemVvZigpIGluIGFyZXNfc2F2ZV9vcHRpb25zCisKKy0gRml4IGluY29ycmVjdCBhbGxvY2F0aW9uIGluIGFyZXNfcGFyc2VfcHRyX3JlcGx5KCkKKworLSBPbmx5IGZhbGwgYmFjayB0byBBRl9JTkVUIHNlYXJjaGVzIHdoZW4gbG9va2luZyBmb3IgQUZfVU5TUEVDIGFkZHJlc3NlcworCistIERvIG5vdCB1c2Ugc2l6ZWQgY29uc3RhbnRzIGluIHB1YmxpYyBoZWFkZXJzCisKK0RhbmllbCBTdGVuYmVyZyAoMTMgSnVuIDIwMTEpCistIFtKYWt1YiBIcm96ZWsgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhcmVzX2ZyZWVfaG9zdGVudChOVUxMKSBzaG91bGQgYmUgYSBub29wCisKK1lhbmcgVHNlICg4IEp1biAyMDExKQorLSBjb25maWd1cmU6IGZpeCByZWN2ZnJvbSA1dGggYXJnIHR5cGUgcXVhbGlmaWVyIGRldGVjdGlvbiAoZm9sbG93dXApCisKKy0gY29uZmlndXJlOiBmaXggcmVjdmZyb20gNXRoIGFyZyB0eXBlIHF1YWxpZmllciBkZXRlY3Rpb24KKyAgCisgIEFkZGl0aW9uYWxseSByZW1vdmUgd2hpdGVzcGFjZSBmcm9tIEVPTAorCitEYW5pZWwgU3RlbmJlcmcgKDQgSnVuIDIwMTEpCistIHN0cmxlbjogdXNlIHNpemVfdCB0byByZWNlaXZlIHRoZSByZXR1cm4KKworWWFuZyBUc2UgKDQgSnVuIDIwMTEpCistIHhsYzogYXZvaWQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gdXNhZ2Ugd2hlbiBsaW5raW5nCisKKy0gYXJlc19ub3dhcm46IGljYyA5LjEgd29ya2Fyb3VuZAorCistIGFyZXNfbm93YXJuOiBoZWFkZXIgaW5jbHVzaW9uIGZpeAorCistIGFyZXNfaW5pdDogbWFrZSBhcmVzX3ByaXZhdGUuaCBsYXN0IGluY2x1ZGVkIGhlYWRlciBhZ2FpbgorCistIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cworCistIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IHZhcmlhYmxlIHdhcyBzZXQgYnV0IG5ldmVyIHVzZWQKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBjbG9iYmVyIGlnbm9yZWQKKworLSBhcmVzX2lwaGxwYXBpOiBmaXggY29tcGlsZXIgd2FybmluZ3MKKworLSB3aW5zb2NrOiBjb21waWxhdGlvbiBmaXhlcworICAKKyAgUHJvdmlkZSB3aW5zb2NrIGlwaGxwYXBpIGFsdGVybmF0aXZlIGRlZmluaXRpb25zIHRvIHByZXZlbnQgY29tcGlsYXRpb24KKyAgZmFpbHVyZXMgd2hlbiB1c2luZyBhIHZhcmlldHkgb2Ygd2luc29jayBoZWFkZXIgaW1wbGVtZW50YXRpb25zLgorCitEYW5pZWwgU3RlbmJlcmcgKDE3IE1heSAyMDExKQorLSBbRGF2aWQgU3R1YXJ0IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgSVB2Ni1vbi13aW5kb3dzOiBmaW5kIEROUyBzZXJ2ZXJzIGNvcnJlY3RseQorCistIG1hbiBwYWdlczogZG9jcyBmb3IgdGhlIGMtYXJlcyB1dGlsaXR5IHByb2dyYW1zCisKKy0gYXJlc19wYXJzZV9uc19yZXBseS5jOiByZW1vdmUgQ1ZTaXNtCisKK1lhbmcgVHNlICgyNyBNYXIgMjAxMSkKKy0gYnVpbGQ6IGZpeCBoZWFkZXIgaW5jbHVzaW9uCisKKy0gZ2V0c2VydmJ5cG9ydCByZXBsYWNlbWVudCBmb3IgV2luIENFCisKKy0gcmVuYW1lZCBnZXRwbGF0Zm9ybSgpIHRvIGFyZXNfX2dldHBsYXRmb3JtKCkgdG8gYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbgorCistIGNvbmZpZ3VyZTogZml4IGxpYnRvb2wgd2FybmluZworICAKKyAgUmVjZW50IHZlcnNpb25zIG9mIGxpYnRvb2wgYXJlIG5vdyB0cmFjaW5nIHVzYWdlIG9mIEFDX0NPTkZJR19NQUNST19ESVIKKyAgbWFjcm8gYW5kIHdhcm4gaGVhdmlseSB3aGVuIG5vdCB1c2VkIGluIGNvbmZpZ3VyZSBzY3JpcHQgYWxvbmcgd2l0aAorICBBQ0xPQ0FMX0FNRkxBR1MgaW4gTWFrZWZpbGUuYW0uICBTbyBpbiBvcmRlciB0byBtYWtlIGxpYnRvb2wgaGFwcHkKKyAgd2hpbGUga2VlcGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0aGlzIGlzIGFkZGVkLgorCistIGFkaWc6IFJGQzQwMzQgcmVzb3VyY2UgcmVjb3JkIHR5cGUgZGV0ZWN0aW9uCisgIAorICBDYW4gYmUgdGVzdGVkIHdpdGg6IGFkaWcgLXMgOC44LjguOCAtdCBBTlkgZXhhbXBsZS5jb20KKworLSBuYW1lc2VyLmg6IFJGQzQwMzQgcmVzb3VyY2UgcmVjb3JkIHR5cGUgZGVmaW5pdGlvbnMKKworLSBidWlsZDogbW92ZSBwbGF0Zm9ybSBzdHVmZiB0byBhcmVzX3BsYXRmb3JtLmMgYW5kIGFyZXNfcGxhdGZvcm0uaAorCistIGJ1aWxkOiBmaW5kIG91dCB3aW5kb3dzIHBsYXRmb3JtIHVzaW5nIEdldFZlcnNpb25FeCgpCisKKy0gYnVpbGQ6IHVzZSBnZXRlbnYoKSByZXBsYWNlbWVudCBmdW5jdGlvbiBmb3Igc3lzdGVtcyB3aGljaCBsYWNrIGl0CisKKy0gc2V0dXBfb25jZTogc3lzdGVtIGVycm9yIGNvZGVzIGZvciBXaW5kb3dzIENFCisKKy0gYXJlc19zZWFyY2g6IHVzZSBFUlJOTyBtYWNybyBmb3IgcG9ydGFiaWxpdHkgc2FrZQorCistIFN5c3RlbSdzIGVycm5vLmggaW5jbHVzaW9uIGNsZWFudXAgZm9sbG93LXVwLgorICAKKyAgU3lzdGVtJ3MgZXJybm8uaCBpcyBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGZyb20gc2V0dXBfb25jZS5oCisKKy0gV2luZG93cyBDRSBzcGVjaWZpYyBhZGp1c3RtZW50CisgIAorICBBbGwgdmVyc2lvbnMgb2YgV2luZG93cyBDRSBzdXBwb3J0IFdpbnNvY2sgMS4xCisKKy0gU3lzdGVtJ3MgZXJybm8uaCBpbmNsdXNpb24gY2xlYW51cC4KKyAgCisgIFN5c3RlbSdzIGVycm5vLmggaXMgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBmcm9tIHNldHVwX29uY2UuaAorCistIGFyZXNfaW5pdDogZml4IGdldGhvc3RuYW1lIGVycm9yIGRldGVjdGlvbiBvbiB3aW5zb2NrIHBsYXRmb3JtcworCistIGNvbmZpZ3VyZTogci1lbmFibGUgdGVtcG9yYXJpbHkgZGlzYWJsZWQgZGV0ZWN0aW9uIG9mIHN5c3RlbSdzIGluZXRfbnRvcCgpCisgIAorICBEZXRlY3Rpb24gd2FzIHRlbXBvcmFyaWx5IGRpc2FibGVkIGluIGNvbW1pdCA2NzRlMDQ0Y2NiMjFmMmY2MzUzN2RhNTM1NjVmY2U4NjhmCisKK0RhbmllbCBTdGVuYmVyZyAoMTUgTWFyIDIwMTEpCistIGNvbmZpZ3VyZTogc3RvcCB1c2luZyB0aGUgZGVwcmVjYXRlZCBBTV9JTklUX0FVVE9NQUtFIHN5bnRheAorCistIFtHaXNsZSBWYW5lbSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIFdhdHQtMzI6IHVzZSBlcnJubworICAKKyAgTWFrZSBzdXJlIFdhdHQtMzIgcHJvZ3JhbXMgdXNlICdlcnJubycgZXZlbiBvbiBXaW4zMiB0YXJnZXRzCisKK0d1ZW50ZXIgS25hdWYgKDE4IEZlYiAyMDExKQorLSBSZW1vdmVkIGNvbW1lbnRlZCBDTEZBR1Mgbm8gbG9uZ2VyIG5lZWRlZC4KKworLSBGaXhlZCBDRkxBR1MgZm9yIE5ldFdhcmUuCisgIAorICBBZGRlZCAtbTMyIHRvIGVuYWJsZSBjb21waWxhdGlvbiB3aXRoIHg4Nl82NCBjb21waWxlcnM7CisgIGFkZGVkIGNvbmRpdGlvbmFsIHRvIHNldCAtZnBjYy1zdHJ1Y3QtcmV0dXJuIG9ubHkgZm9yIGdjYyBjb21waWxlci4KKworRGFuaWVsIFN0ZW5iZXJnICgxOCBGZWIgMjAxMSkKKy0gW0dpc2xlIFZhbmVtIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgV2F0dDMyOiBmaXggc2VydmVyIGluaXQKKyAgCisgIFNvbWV3aGVyZSBpbiB0aGUgcHJvY2VzcywgcHJvZ3JhbXMgdXNpbmcgdGhlIFdhdHQtMzIgdGNwL2lwIHN0YWNrCisgIHN0b3BwZWQgd29ya2luZy4KKworLSBbRGltYSBUaXNuZWsgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBjb25maWdfc29ydGxpc3Q6ICh3aW4zMikgbWlzc2luZyBlbHNlCisgIAorICBXaXRob3V0IGFuIGVsc2UgdGhlcmUsIGNvbnRlbnRzIG9mICJwYXQiIHRoYXQgY291bGQgaGF2ZSBiZWVuCisgIHN1Y2Nlc3NmdWxseSBzZXQganVzdCBhYm92ZSwgbWF5IGJlIGNsb2JiZXJlZCBieSBzdWNjZXNzaXZlIHVuc3VjY2Vzc2Z1bAorICBjYWxscyB0byAieHh4X3B0b24iIG9yICJpcF9hZGRyIi4KKworWWFuZyBUc2UgKDE3IEphbiAyMDExKQorLSBNYWtlZmlsZS5tc3ZjOiBhZGQgYSBjb3VwbGUgb2YgVlMgdmVyc2lvbiBzdHJpbmdzCisKKy0gTWFrZWZpbGUubXN2YzogYWRkIGEgY291cGxlIG9mIFZTIHZlcnNpb24gc3RyaW5ncworCistIGJ1aWxkOiBhZGQgaW5zdGFsbCB0YXJnZXQgdG8gTWFrZWZpbGUubXN2YworCitEYW5pZWwgU3RlbmJlcmcgKDI3IERlYyAyMDEwKQorLSBhcmVzX3NldF9zZXJ2ZXJzX2NzdjogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKKworLSBpbml0X2J5X3Jlc29sdl9jb25mOiBmaXggY29tcGlsZXIgd2FybmluZ3MKKyAgCisgIFRoZSBjb2RlIHJlY2VpdmVkIHRoZSByZXR1cm4gY29kZXMgaW4gdGhlICdzdGF0dXMnIHZhcmlhYmxlIHdpdGhvdXQKKyAgdXNpbmcgaXQuIEluc3RlYWQgd2UganVzdCBpZ25vcmUgdGhvc2UgcGFydGljdWxhciBlcnJvcnMuCisKKy0gZ2V0djQ6IFZhbHVlIHN0b3JlZCB0byAnZHN0JyBpcyBuZXZlciByZWFkCisKKy0gYWR2YW5jZV90Y3Bfc2VuZF9xdWV1ZTogYXZvaWQgTlVMTCBwdHIgZGVyZWZlcmVuY2UKKyAgCisgIElmIGdpdmVuIGEgdG9vIGxhcmdlICdudW1fYnl0ZXMnIHZhbHVlLCBpdCB3b3VsZCBjYXVzZSBhIE5VTEwgcHRyCisgIGRlcmVmZXJlbmNlLiBJbnN0ZWFkIHRoZSBjb2RlIHdpbGwgbm93IGJyZWFrIG91dCBvZiB0aGUgbG9vcCBhdCB0aGUgZW5kCisgIG9mIHRoZSBsaXN0LgorCistIFtQZXRlciBQZW50Y2hldiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGNvbmZpZ3VyZTogZml4IGEgYmFzaGlzbQorCistIGNsZWFudXA6IGF2b2lkIHVuc2FmZSB0eXBlY2FzdHMKKyAgCisgIEF2b2lkIHRoZSByaXNrIG9mIHJlYWRpbmcgMTZiaXQgZGF0YSBmcm9tIGFuIHVuYWxpZ25lZCBhZGRyZXNzIGJ5IHVzaW5nCisgIGEgbWFjcm8gdGhhdCBpcyBhZGFwdGVkIGZvciB0aGlzLgorCistIFtTdGVmYW4gQsO8aGxlciBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXNfZXhwYW5kX25hbWU6IEZpeCBlbmNvZGVkIGxlbmd0aCBmb3IgaW5kaXJlY3Qgcm9vdAorCitZYW5nIFRzZSAoMTggRGVjIDIwMTApCistIGJ1aWxkOiBhZGQgc29tZSBleHBsaWNpdCBmaWxlIHJlZmVyZW5jZXMgdG8gVlMgcHJvamVjdCBmaWxlcworCistIGNvbmZpZy13aW4zMjogcHJvdmlkZSBIQVZFX0FTU0VSVF9IIGRlZmluaXRpb24KKworLSBidWlsZDogaW5jbHVkZSBhcmVzX25vd2FybiBpbiBzYW1wbGUgcHJvZ3JhbSBWUyBwcm9qZWN0IGZpbGVzCisKKy0gYnVpbGQ6IGluY2x1ZGUgYXJlc19ub3dhcm4gYW1vbmcgU0FNUExFU09VUkNFUyBhbmQgU0FNUExFSEVBREVSUworCistIGNvbmZpZ3VyZTogdGVtcG9yYXJpbHkgZGlzYWJsZSBkZXRlY3Rpb24gb2Ygc3lzdGVtJ3MgaW5ldF9udG9wKCkKKyAgCisgIFRoaXMgaXMgZG9uZSB0byBhbGxvdyBjb21waWxhdGlvbiBvZiBhcmVzX2luZXRfbnRvcCgpIGJ5IHNvbWUgZGFpbHkKKyAgYnVpbGRzIHBpY2t5IGNvbXBpbGVycyB0aGF0IG90aGVyd2lzZSBkbyBub3QgbmVlZCB0aGlzIGZ1bmN0aW9uLgorCistIGNoYW5nZXM6IG1lbnRpb24gbGFzdCBmaXgKKworLSBhcmVzX2luZXRfbnRvcDogcmVtb3ZlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIG1hY3JvIFNQUklOVEYKKyAgCisgIEV4aXN0aW5nIGRlZmluaXRpb24gb2YgU1BSSU5URiBhbHdheXMgcmVzdWx0ZWQgaW4gc3ByaW50ZigpIGJlaW5nIHVzZWQsCisgIGFuZCBzcHJpbnRmKCkgcmV0dXJuaW5nICdpbnQnIGlzIGFscmVhZHkgdXNlZCB0aHJvdWdob3V0IHRoZSBsaWJyYXJ5LgorCistIGFyZXNfaW5ldF9udG9wOiByZWFwcGx5IGNoYW5nZXMgZnJvbSBwcmV2aW91cyBjLWFyZXMgdmVyc2lvbiAoSUlJKQorICAKKyAgLSBSZXBsYWNlICd1X2NoYXInIHdpdGggJ3Vuc2lnbmVkIGNoYXInLgorICAtIFJlcGxhY2UgJ3VfaW50JyB3aXRoICd1bnNpZ25lZCBpbnQnLgorICAtIHVzZSBtYWNyb3MgRVJSTk8gYW5kIFNFVF9FUlJOTygpIGZvciBlcnJubyBoYW5kbGluZy4KKworLSBhcmVzX2luZXRfbnRvcDogcmVhcHBseSBjaGFuZ2VzIGZyb20gcHJldmlvdXMgYy1hcmVzIHZlcnNpb24gKElJKQorICAKKyAgLSBSZW1vdmUgcmNzaWQuCisgIC0gQWRqdXN0IGhlYWRlciBmaWxlIGluY2x1c2lvbnMuCisgIC0gYXJlc19pbmV0X250b3AgdXNlZCBvbmx5IG9uIHN5c3RlbXMgd2l0aG91dCBhIHByb3BlciBpbmV0X250b3AgZnVuY3Rpb24uCisKKy0gYXJlc19pbmV0X250b3A6IHJlYXBwbHkgY2hhbmdlcyBmcm9tIHByZXZpb3VzIGMtYXJlcyB2ZXJzaW9uIChJKQorICAKKyAgLSBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMuCisgIC0gVXNlIEFOU0kgQyBzdHlsZSBmb3IgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucy4KKyAgLSBVc2Ugc2l6ZW9mIHdpdGggcGFyZW50aGVzZXMuCisKKy0gYXJlc19pbmV0X250b3A6IGZpeCBvZmYgYnkgb25lIGVycm9yIHRyaWdnZXJpbmcgb3V0IG9mIGJvdW5kcyB3cml0ZQorICAKKyAgYXJlc19pbmV0X250b3Agd291bGQgdHJpZ2dlciBhbiBvdXQgb2YgYm91bmRzIHdyaXRlIHdoZW4gdGhlIHJlcHJlc2VudGF0aW9uCisgIG9mIHRoZSBhZGRyZXNzIHJlcXVpcmVkIDE1IGNoYXJhY3RlcnMsIGR1ZSB0byBub3QgdGFraW5nIGluIGFjY291bnQgbnVsbAorICB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisgIAorICBGdWxsIGltcG9ydCBvZiBpbmV0X250b3AuYyBmcm9tIGJpbmQtOS41LjNyYzEgdG8gcHVsbCBhZGRpdGlvbmFsIGZpeGVzLgorCistIGFyZXNfbm93YXJuOiBhZGQgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG9mIGFzc2VydC5oIGhlYWRlcgorCistIGZpeCBjb21waWxlciB3YXJuaW5nOiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMKKworLSBhcmVzX2luZXRfbmV0X3B0b246IGZpeCBub24tcmVqZWN0aW9uIG9mIHNvbWUgbWFsZm9ybWVkIGxpdGVyYWxzCisgIAorICBhcmVzX2luZXRfbmV0X3B0b24gd291bGQgcmV0dXJuIHdyb25nIHZhbHVlcyB3aGVuIGV4Y2Vzc2l2ZWx5IGxhcmdlLAorICBhbmQgaW52YWxpZCwgbmV0bWFza3MgYXJlIHVzZWQuIEZpeGVzIGFyZSBmcm9tIGJpbmQtOS41LjNyYzEsCisgIGlzc3VlIGFsc28gZGVzY3JpYmVkIGluIHRoZSBXTEItMjAwODA4MDA2NCBhZHZpc29yeS4KKworLSBzZXR1cF9vbmNlOiBwcm92aWRlIElTQVNDSUkgbWFjcm8KKworLSBjb25maWd1cmU6IGluZXRfbmV0X3B0b24gZnVuY3Rpb24gY2hlY2sgYWRqdXN0bWVudHMKKyAgCisgIERlZmluZSBIQVZFX0lORVRfTkVUX1BUT04gb25seSB3aGVuIHN5c3RlbSdzIGluZXRfbmV0X3B0b24gZnVuY3Rpb24gaXMgSVB2NgorICBjYXBhYmxlIGFuZCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIFdMQi0yMDA4MDgwMDY0IGFkdmlzb3J5LgorICAKKyAgSEFWRV9JTkVUX05FVF9QVE9OX0lQVjYgaXMgbm8gbG9uZ2VyIGRlZmluZWQgbm9yIHVzZWQuCisKKy0gYXJlc19pbml0OiBmaXggZGV0ZWN0aW9uIG9mIHNlbWljb2xvbiBjb21tZW50cyBpbiByZXNvbHYuY29uZgorICAKKyAgRmlsZSByZXNvbHYuY29uZiBtYXkgZWl0aGVyIHVzZSBhIGhhc2ggJyMnIG9yIGEgc2VtaWNvbG9uICc7JyBjaGFyYWN0ZXIgYXMgYW4KKyAgaW5kaWNhdGlvbiB0aGF0IHRoZSByZXN0IG9mIHRoZSBsaW5lIGlzIGEgY29tbWVudC4gIFRoaXMgZml4ZXMgbm90IHJlY29nbml6aW5nCisgIHRoZSBzZW1pY29sb24gYXMgYSB2YWxpZCBjb21tZW50IGluZGljYXRvciBpbiByZXNvbHYuY29uZi4KKworLSB2ZXJzaW9uOiBzdGFydCB3b3JraW5nIG9uIDEuNy41CisKK1ZlcnNpb24gMS43LjQgKDggRGVjIDIwMTApCisKK0RhbmllbCBTdGVuYmVyZyAoOCBEZWMgMjAxMCkKKy0gcmVsZWFzZS1wcmVwczogQ0hBTkdFUyBhbmQgUkVMRUFTRS1OT1RFUyBzeW5jZWQKKworLSBhcmVzX3NldF9sb2NhbF8qOiBhZGRlZCBpbiAxLjcuNCwgbm90IGJlZm9yZQorCitZYW5nIFRzZSAoMyBEZWMgMjAxMCkKKy0gYnVpbGQ6IHByb3ZpZGUgU0laRU9GX1NJWkVfVCBkZWZpbml0aW9uIGZvciBub24tY29uZmlndXJlIGJ1aWxkcworCistIGJ1aWxkOiBjb25maWcuZG9zIHJlbmFtZWQgdG8gY29uZmlnLWRvcy5oCisKKy0gYnVpbGQ6IHByb3ZpZGUgU0laRU9GX1NJWkVfVCBuZXR3YXJlIGRlZmluaXRpb24KKworLSBhcmVzX2dldGhvc3RieWFkZHI6IGZpeCBjb21waWxlciB3YXJuaW5nOiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMKKworLSBjb25maWd1cmU6IHVuZG8gdXNpbmcgYXV0b2J1aWxkcyB0byB0ZW1wb3JhcmlseSB2ZXJpZnkgc3RyaWN0IGFsaWFzaW5nIHdhcm5pbmdzLgorCistIGZpeCBjb21waWxlciB3YXJuaW5nOiByb3VuZGluZywgc2lnbiBleHRlbnNpb24sIG9yIGxvc3Mgb2YgYWNjdXJhY3kgbWF5IHJlc3VsdAorCitEYW5pZWwgU3RlbmJlcmcgKDIgRGVjIDIwMTApCistIFtCZW4gTm9vcmRodWlzIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgYXJlc19wYXJzZV9hX3JlcGx5OiBmaXggQ05BTUUgcmVzcG9uc2UgcGFyc2luZworICAKKyAgUmVwbHkgdG8gYSBDTkFNRSBxdWVyeSBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzc2VzLCBjYXVzaW5nCisgIGFyZXNfcGFyc2VfYV9yZXBseSgpIHRvIGJhaWwgb3V0IHdpdGggQVJFU19FTk9EQVRBCisgIAorICBCdWc6IGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9ub2RlanMvYnJvd3NlX3RocmVhZC90aHJlYWQvYTEyNjhjOWVhNWU5YWQ5YgorCitZYW5nIFRzZSAoMSBEZWMgMjAxMCkKKy0gZml4IGNvbXBpbGVyIHdhcm5pbmc6IGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cworCistIGF0b2k6IHJlbW92ZSBhdG9pIHVzYWdlCisKKy0gYXJlc19pbml0OiBmaXggY29tcGlsZXIgd2FybmluZzogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzCisKKy0gY29uZmlndXJlOiBmaXggYXV0b2NvbmYgd2FybmluZworCistIGluZXRfcHRvbjogZml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSBjb25maWd1cmU6IHVzZSBhdXRvYnVpbGRzIHRvIHRlbXBvcmFyaWx5IHZlcmlmeSBzdHJpY3QgYWxpYXNpbmcgd2FybmluZ3MuCisgIAorICBUZW1wb3JhcmlseSwgV2hlbiBjcm9zcy1jb21waWxpbmcgd2l0aCBnY2MgMy4wIG9yIGxhdGVyLCBlbmFibGUgc3RyaWN0IGFsaWFzaW5nCisgIHJ1bGVzIGFuZCB3YXJuaW5ncy4gR2l2ZW4gdGhhdCBjcm9zcy1jb21waWxlZCB0YXJnZXRzIGF1dG9idWlsZHMgZG8gbm90IHJ1biB0aGUKKyAgdGVzdC1zdWl0ZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBydW5uaW5nIGNvZGUgdGhhdCB2aW9sYXRlcyBzdHJpY3QgYWxpYXNpbmcgcnVsZXMKKworLSBhcmVzX2dldG5hbWVpbmZvOiBQYXJ0aWFsbHkgcmV2ZXJ0IGNvbW1pdCA4NTUyMGQ2NmUwYWM3YWM3MzQxMWJjMjVlOTg3NjlhODhiMmYKKyAgCisgIFVwb24gc29ja2V0IGFkZHJlc3MgZmFtaWx5IGFuZCBsZW5ndGggdmFsaWRhdGlvbiBmYWlsdXJlIHJldHVybiBBUkVTX0VOT1RJTVAKKyAgaW4gY2FsbGJhY2sgYWdhaW4sIHRoaXMgaXMgdGhlIGVycm9yIGNvZGUgZG9jdW1lbnRlZCBpbiBtYW4gcGFnZSBhbmQgdXNlZAorICBtb3N0bHkgYWxsIG92ZXIgdGhlIGxpYnJhcnkuCisKKy0gYXJlc19nZXRuYW1laW5mbzogVmFsaWRhdGUgc29ja2V0IGFkZHJlc3MgZmFtaWx5IGFuZCBsZW5ndGguCisgIAorICBWYWxpZGF0ZSBzb2NrZXQgYWRkcmVzcyBmYW1pbHkgYW5kIHRoYXQgdGhlIHNvY2tldCBhZGRyZXNzIGxlbmd0aCBpcyBhcHByb3ByaWF0ZQorICBmb3IgdGhlIHNwZWNpZmllZCBmYW1pbHkuIEZhaWx1cmUgaXMgcmVwb3J0ZWQgd2l0aCBBUkVTX0VCQURGQU1JTFkgaW4gY2FsbGJhY2suCisKKy0gYXJlc19nZXRuYW1laW5mbzogZml4IHR3byBjb21waWxlciB3YXJuaW5ncworCistIEFkZGVkIGFub3RoZXIgVlMxMCB2ZXJzaW9uIHN0cmluZworCistIEZpeCBHQ0MgNCBjb21waWxlciB3YXJuaW5nICdkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgbWlnaHQgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzJy4KKworLSBSZXZlcnQgY29tbWl0IDQ5NDI3NGU2NTM5MzYzMzVjMjU1YTQ3NTk5OTcwZGUzZGYyMWU3YzQKKworLSBjb25maWd1cmU6IGZpeCBhdXRvY29uZiAyLjY4IHdhcm5pbmc6IG5vIEFDX0xBTkdfU09VUkNFIGNhbGwgZGV0ZWN0ZWQgaW4gYm9keQorCistIEZpeCBjb21waWxlciB3YXJuaW5nOiBhcnJheSBzdWJzY3JpcHQgaGFzIHR5cGUgJ2NoYXInCisKKy0gRml4IEdDQyA0IGNvbXBpbGVyIHdhcm5pbmcgJ2RlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciBtaWdodCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMnLgorCistIFJldmVydCBmb2xsb3dpbmcgY29tbWl0czoKKyAgICAwN2JjN2VhNzk1MDliY2M5ZWY2ZTA5MTUxZTgxNzY2ZWQwMGQzMzkyCisgICAgMzM5MmE1MGVhM2Y4NTczZWE0YjdhOWQ4MmI5ODMzZGFiNjBjYjBlOQorICAgIDk5MTI2MzdkMzJjOTk4NzcxOWExZWExMmRiNTkxYWVlMjk0MTg5MWMKKyAgCisgIFRoZSBwdXJwb3NlIG9mIHRoZSB3aG9sZSBwYXRjaCB3YXMgdG8gc2lsZW5jZSBhIGNvbXBpbGVyIHdhcm5pbmcgdHJpZ2dlcmVkCisgIHdpdGggR0NDIDQgb24gZmlsZSBhcmVzX3Byb2Nlc3MuYyAgVGhlIHNwZWNpZmljIGNvbXBpbGVyIHdhcm5pbmcgd2FzCisgICdkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgbWlnaHQgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzJy4KKyAgCisgIEEgc2ltcGxlciBwYXRjaCB3aWxsIGZvbGxvdyB0byBlcXVhbGx5IHNpbGVuY2UgdGhlIHdhcm5pbmcuCisKKy0gYXJlc19vcHRpb25zOiByZW9yZGVyIGhlYWRlciBpbmNsdXNpb25zIHRvIG1ha2UgaW5jbHVzaW9uIG9mCisgIGFyZXNfcHJpdmF0ZS5oIHRoZSBsYXN0IGluY2x1ZGVkIG9uZSBhZ2Fpbi4KKworRGFuaWVsIFN0ZW5iZXJnICgxMiBOb3YgMjAxMCkKKy0gW1BhdHJpayBUaHVuc3Ryb20gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBhZGlnOiBmaXggTkFQVFIgcGFyc2luZworICAKKyAgSSByYW4gYWNyb3NzIGEgc21hbGwgImlzc3VlIiBpbiB5b3VyIGFkaWcgZXhhbXBsZS4KKyAgCisgIEl0IGlzIHNpbXBseSB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBOQVBUUiByZWNvcmQsIHRoZSByZXBsYWNlbWVudCBlbGVtZW50LAorICB3aGljaCBpcyBub3QgYSBzdHJpbmcsIGFzIGN1cnJlbnRseSBoYW5kbGVkIGluIGFkaWcsIGJ1dCBhIGRvbWFpbiBuYW1lLgorCistIGFyZXNfc2F2ZV9vcHRpb25zOiBhc3NpZ25tZW50cyBpbnN0ZWFkIG9mIG1lbWNweQorCistIGluaXRfYnlfb3B0aW9uczogZG9uJ3QgY29weSBhbiBlbXB0eSBzb3J0bGlzdAorICAKKyAgSWYgdGhlcmUgYXJlbid0IGFueSBzb3J0IGl0ZW1zIHRvIGNvcHksIGRvbid0IGJvdGhlci4gV2l0aG91dCB0aGlzCisgIGxpdHRsZSBwcmVjYXV0aW9uIGl0IHdvdWxkIGRvIGEgbWFsbG9jKDApIHdoaWNoIGNhdXNlcyB1bmRlZmluZWQKKyAgYmVoYXZpb3JzIGFuZCBpcyBmcm93bmVkIHVwb24gYnkgY3VybCdzIG1lbWRlYnVnLXN5c3RlbS4KKworR3VlbnRlciBLbmF1ZiAoMyBPY3QgMjAxMCkKKy0gTWlub3IgV2F0Y29tIG1ha2VmaWxlIHR3ZWFrcy4KKworRGFuaWVsIFN0ZW5iZXJnICgzMCBTZXAgMjAxMCkKKy0gW01pa2UgQ3Jvd2UgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGaXggbG9va3VwIHdpdGggSE9TVEFMSUFTRVMgc2V0LgorICAKKyAgYXJlc19fcmVhZF9saW5lIHJldHVybnMgQVJFU19FT0Ygd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlCisgIGZpbGUuIFRoaXMgd2lsbCBoYXBwZW4gZXZlcnkgdGltZSB3aGVuIHJlYWRpbmcgdG8gdGhlIGVuZCBvZiB0aGUKKyAgSE9TVEFMSUFTRVMgZmlsZS4gVW5mb3J0dW5hdGVseSBzaW5nbGVfZG9tYWluIHRyZWF0cyB0aGlzIGVycm9yIGFzCisgIGJlaW5nIGZhdGFsLgorICAKKyAgU2lnbmVkLW9mZi1ieTogTWlrZSBDcm93ZSA8bWFjQG1jcm93ZS5jb20+CisKK0JlbiBHcmVlYXIgKDI0IEF1ZyAyMDEwKQorLSBBZGQgbWlzc2luZyBicmVhayB0aGF0IGNhdXNlZCBnZXRfYXJlc19zZXJ2ZXJzIHRvIGZhaWwuCisgIAorICBSZXBvcnRlZC1ieTogTmluZyBEb25nIDxmbGludG5pbmdAMTYzLmNvbT4KKyAgU2lnbmVkLW9mZi1ieTogQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisKK1lhbmcgVHNlICgxMSBBdWcgMjAxMCkKKy0gY29uZmlndXJlOiB3ZXJyb3IgcmVsYXRlZCBhZGp1c3RtZW50cworCitHdWVudGVyIEtuYXVmICg4IEF1ZyAyMDEwKQorLSBBZGRlZCBjb3B5cmlnaHQgc3RyaW5nIHRvIGFyZXNfdmVyc2lvbi5oIGFuZCBtYWtlIHVzZSBvZiBpdCBpbiBvdGhlciBmaWxlcy4KKworLSBCbG9jayBjcmVhdGVkIGFyZXNfYnVpbGQuaCBmb3IgTmV0V2FyZSB0byBhdm9pZCB1c2FnZSBmcm9tIG90aGVyIHBsYXRmb3Jtcy4KKworLSBGaXggdG8gb3ZlcndyaXRlIGRlZmF1bHQgbGlibmFtZS4KKworLSBTb21lIG1vcmUgV2F0Y29tIG1ha2VmaWxlIG1hc3NhZ2UgLi4uCisKKy0gU29tZSBtb3JlIFdhdGNvbSBtYWtlZmlsZSBtYXNzYWdlIC4uLgorCitCZW4gR3JlZWFyICg0IEF1ZyAyMDEwKQorLSBzb2NrLWFkZHItc3RvcmFnZTogIERldGVjdCBhbmQgZGVhbCB3aXRoIGxhY2sgb2YgLnNzX2ZhbWlseSBtZW1iZXIuCisgIAorICBBSVgsIGF0IGxlYXN0LCBkb2VzIG5vdCBoYXZlIHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5IG1lbWJlci4KKyAgRGV0ZWN0IHRoaXMgaW4gdGhlIGNvbmZpZ3VyZSBsb2dpYyBhbmQgdXNlIHByb3BlciAjaWZkZWZzIGluIHRoZQorICBhcmVzX3Byb2Nlc3MgbG9naWMuCisgIAorICBTaWduZWQtb2ZmLWJ5OiBCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNoLmNvbT4KKyAgVGVzdGVkLWJ5OiBUb3IgQXJudHNlbiA8dG9yQHNwYWNldGVjLm5vPgorCitHdWVudGVyIEtuYXVmICgzIEF1ZyAyMDEwKQorLSBBZGRlZCBXYXRjb20gbWFrZWZpbGUgYmFzZWQgb24gbGliY3VybCdzIE1ha2VmaWxlLldhdGNvbS4KKworQmVuIEdyZWVhciAoMzEgSnVsIDIwMTApCistIHR5cG86ICBGaXggY29tcGlsZSBidWcgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgc29ja2FkZHJfc3RvcmFnZS4KKyAgCisgIEJ1ZyB3YXMgaW50cm9kdWNlZCBieSBtZSBpbiBwcmV2aW91cyBjb21taXQuCisgIAorICBTaWduZWQtb2ZmLWJ5OiBCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNoLmNvbT4KKworLSBGaXggYWxpYXNpbmcgd2FybmluZyBpbiBnY2MgNC40LjQgKGF0IGxlYXN0KS4KKyAgCisgIFNob3VsZCBiZSBubyBmdW5jdGlvbmFsIGNoYW5nZSwgdGhvdWdoIHRoZSBjb2RlIGdldHMgYSBiaXQKKyAgdWdnbGllci4KKyAgCisgIFNpZ25lZC1vZmYtYnk6IEJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPgorCitEYW5pZWwgU3RlbmJlcmcgKDMxIEp1bCAyMDEwKQorLSBhcmVzX3NldF9zZXJ2ZXJzX2NzdjogdXNlIElTRElHSVQKKyAgCisgIFRoZSBJUyooKSBzZXQgb2YgbWFjcm9zIGFyZSBwcmVmZXJyZWQgdG8gdGhlIHJlZ3VsYXIgaXMqKCkgZnVuY3Rpb25zIGFzCisgIHRoZXkgaGVscCB1cyBhdm9pZCB0aGUgbW9zdCBjb21tb24gcGl0ZmFsbHMuCisKK0JlbiBHcmVlYXIgKDMwIEp1bCAyMDEwKQorLSBjYXN0IGFyZyB0byBpc2RpZ2l0IHRvIGludAorICAKKyAgTG9va3MgbGlrZSBpdCBtaWdodCBzaWxlbmNlIGEgd2FybmluZyBvbiBOZXR3YXJlIGJ1aWxkLgorICAKKyAgU2lnbmVkLW9mZi1ieTogQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisKKy0gcmVtb3ZlIGFsbCB1c2VzIG9mIHVpbnQzMl90CisgIAorICBQcmV2aW91cyBmaXggZm9yZ290IGEgZmV3LgorICAKKyAgU2lnbmVkLW9mZi1ieTogQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisKKy0gZml4IHNpZ25lZCB2L3MgdW5zaWduZWQgY2FzdHMgd2FybmluZyBpbiBhcmVzX2dldGhvc3RieWFkZHIuYworICAKKyAgU2lnbmVkLW9mZi1ieTogQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisKKy0gbG9jYWwtYmluZC1maXh1cDogIEZpeCBpbmV0X3B0b24gd2FybmluZy4KKyAgCisgIENvbmRpdGlvbmFsbHkgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+IGZvciBpbmV0X3B0b24KKyAgaGVhZGVycy4KKyAgCisgIFNpZ25lZC1vZmYtYnk6IEJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPgorCistIGJ1aWxkOiAgRW5hYmxlIGNvbXBpbGluZyB3aXRoIC1XZXJyb3IuCisgIAorICBUaGlzIGhlbHBzIGZpbmQgY29tcGlsZSB3YXJuaW5ncyBiZWNhdXNlIHRoZXkgc2ltcGx5IGJyZWFrCisgIHRoZSBidWlsZC4KKyAgCisgIFRvIHVzZToKKyAgLi9jb25maWd1cmUgLS1lbmFibGUtd2FybmluZ3MgLS1lbmFibGUtd2Vycm9yCisgIAorICBTaWduZWQtb2ZmLWJ5OiBCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNoLmNvbT4KKworLSBpcHY2OiBGaXggc29tZSBidWlsZCBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgbG9jYWwtYmluZCBmZWF0dXJlLgorICAKKyAgU2lnbmVkLW9mZi1ieTogQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisKK0d1ZW50ZXIgS25hdWYgKDI5IEp1bCAyMDEwKQorLSBSZXBsYWNlZCB1aW50MzJfdCB3aXRoIHVuc2lnbmVkIGludCB0byBmaXggYnJva2VuIGJ1aWxkcyBvbiBhIGNvdXBsZSBvZiBwbGF0Zm9ybXMuCisKK0RhbmllbCBTdGVuYmVyZyAoMTggSnVsIDIwMTApCistIFtCZW4gR3JlZWFyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgbG9jYWwtYmluZDogIFN1cHBvcnQgYmluZGluZyB0byBsb2NhbCBpbnRlcmZhY2UvSVBzCisgIAorICBBZGQgMyBuZXcgZnVuY3Rpb25zIHRvIHNldCB0aGUgbG9jYWwgYmluZGluZyBmb3IgdGhlIG91dC1nb2luZworICBzb2NrZXQgY29ubmVjdGlvbiwgYW5kIGFkZCBhcmVzX3NldF9zZXJ2ZXJzX2NzdigpIHRvIHNldCBhCisgIGxpc3Qgb2Ygc2VydmVycyBhdCBvbmNlIGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy4KKyAgCisgIFNpZ25lZC1vZmYtYnk6IEJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPgorCistIHZlcnNpb246IG5vdyBzdGFydCBvbiAxLjcuNAorCistIFtBbmRyZXcgQy4gTW9ycm93IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgZml4IG1lbW9yeSBsZWFrIGluIGFyZXNfZ2V0bmFtZWluZm8KKworVmVyc2lvbiAxLjcuMyAoMTEgSnVuIDIwMTApCisKK0RhbmllbCBTdGVuYmVyZyAoMTEgSnVuIDIwMTApCistIGNoYW5nZWxvZ3M6IHVwZGF0ZWQgZm9yIDEuNy4zCisKKy0gW0JvZ0RhbiBWYXRyYSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGluaXQ6IGFsbG93IGMtYXJlcyB0byB3b3JrIG9uIEFuZHJvaWQgT1MKKworLSBjaGFuZ2Vsb2c6IGZpbGwgaW4gdGhlIDEuNy4yIGNoYW5nZXMKKworLSBhZGRlZCBhbm90aGVyIHBkZiB0byBpZ25vcmUKKworWWFuZyBUc2UgKDExIEp1biAyMDEwKQorLSBhZGQgYXJlc19wYXJzZV9teF9yZXBseS5jIHRvIFZTIGRzcCBmaWxlCisKK0RhbmllbCBTdGVuYmVyZyAoMTAgSnVuIDIwMTApCistIHRhcmJhbGw6IGFkZCAkKENTT1VSQ0VTKSAkKEhIRUFERVJTKSB0byBFWFRSQV9ESVNUCisgIAorICBJdCdzIG5vdCBjbGVhciB0byBtZSB3aHkgd2UgbmVlZCB0aGlzLCBidXQgd2UgYXBwYXJlbnRseSBtYXkKKyAgb3RoZXJ3aXNlIG5vdCBnZXQgYWxsIGZpbGVzIGJ1bmRsZWQgaW4gdGhlIGRpc3QgdGFyYmFsbC4KKworLSB2ZXJzaW9uOiBzdGFydCB3b3JraW5nIG9uIDEuNy4zCisKK1ZlcnNpb24gMS43LjIgKDEwIEp1biAyMDEwKQorCitEYW5pZWwgU3RlbmJlcmcgKDEwIEp1biAyMDEwKQorLSBSRUxFQVNFLU5PVEVTOiAxLjcuMiBkZXRhaWxzIGFkZGVkCisKKy0gW0pha3ViIEhyb3playBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFyZXNfaW5pdDogTGFzdCwgbm90IGZpcnN0IGluc3RhbmNlIG9mIGRvbWFpbiBvciBzZWFyY2ggc2hvdWxkIHdpbgorCistIHN0eWxlOiBtYWtlIGNvZGUgbGVzcyB0aGFuIDgwIGNvbHVtbnMgd2lkZQorCitZYW5nIFRzZSAoMzEgTWF5IDIwMTApCistIFtUb3IgQXJudHNlbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGltcHJvdmUgYWx0ZXJuYXRpdmUgZGVmaW5pdGlvbiBvZiBib29sIHRvIHVzZSBlbnVtIGluc3RlYWQgb2YgdW5zaWduZWQgY2hhcgorCistIGZpeCBWUzIwMTAgY29tcGlsZXIgd2FybmluZ3MKKworRGFuaWVsIFN0ZW5iZXJnICgxOCBBcHIgMjAxMCkKKy0gW0rDqXLDqW15IExhbCBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFkZGVkIGFyZXNfcGFyc2VfbXhfcmVwbHkKKworLSByZXBhaXIgdGhlIGZpbGUgbW9kZQorCistIHJlbW92ZSBhbGwgJElkJCBsaW5lcworCistIHJlbW92ZSBhbGwgLmN2c2lnbm9yZSBmaWxlcworCistIHNwZWxsIGZpeAorICAKKyAgcmVwb3J0ZWQgYnkgR3JlZ29yIEphc255IG9uIHRoZSBtYWlsaW5nIGxpc3QKKworLSBbUGV0ZXIgUGVudGNoZXYgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGaXggYSBjb3VwbGUgb2YgdHlwb3MgYW5kIGdyYW1tYXIgbml0cy4KKworLSBpZ25vcmUgdGhlIEdQRyBzaWduYXR1cmUgZmlsZXMgdG9vCisKKy0gc3RhcnQgdGhlIGpvdXJuZXkgdG93YXJkcyAxLjcuMgorCistIG5vIGxvbmdlciBDVlMgdGFnZ2luZworCistIGlnbm9yZSBnZW5lcmF0ZWQgUERGcworCitWZXJzaW9uIDEuNy4xICgyMyBNYXIgMjAxMCkKKworRGFuaWVsIFN0ZW5iZXJnICgyMyBNYXIgMjAxMCkKKy0gMS43LjEKKworLSBtYWRlIFJFQURNRSB0aGUgcHJpbWFyeSByZWFkbWUgZmlsZQorICAKKyAgLi4uIGFuZCBkaWQgUkVBRE1FLmNhcmVzIHRvIGNvbnRhaW4gYSBoaXN0b3JpYyByZWFzb24gZXRjLgorCistIHMvQ1ZTL2dpdAorCistIGdpdCBub3csIG5vdCBDVlMKKworLSBpZ25vcmUgbG90cyBvZiBnZW5lcmF0ZWQgZmlsZXMKKworLSBbRGFuaWVsIEpvaG5zb24gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGaXggd2FybmluZ3MgZm9yIGNsYW5nCisKK1lhbmcgVHNlICgxNyBNYXIgMjAxMCkKKy0gcmVwbGFjZWQgaW50ZWwgY29tcGlsZXIgb3B0aW9uIC1uby1hbnNpLWFsaWFzIHdpdGggLWZuby1zdHJpY3QtYWxpYXNpbmcKKworLSB1cGRhdGUgb3V0ZGF0ZWQgc2VyaWFsIG51bWJlcgorCistIGZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gd2F0dDMyIGNvbXBpbGF0aW9uIGZpeAorCistIEFkZGVkIGFub3RoZXIgVlMxMCB2ZXJzaW9uIHN0cmluZworCistIGZpeCBsaW5lIGJyZWFrCisKKy0gcmVtb3ZlZCB1c2FnZSBvZiAnczZfYWRkcicsIGZpeGluZyBjb21waWxhdGlvbiBpc3N1ZSB0cmlnZ2VyZWQgd2l0aCBubworICBsb25nZXIgdXNpbmcgJ2luNl9hZGRyJyBidXQgb25seSBvdXIgJ2FyZXNfaW42X2FkZHInIHN0cnVjdAorCitEYW5pZWwgU3RlbmJlcmcgKDUgTWFyIDIwMTApCistIERhbmllbCBKb2huc29uIHByb3ZpZGVkIGZpeGVzIGZvciBidWlsZGluZyB3aXRoIHRoZSBjbGFuZyBjb21waWxlcgorCitZYW5nIFRzZSAoNSBNYXIgMjAxMCkKKy0gQWRkZWQgSVB2NiBuYW1lIHNlcnZlcnMgc3VwcG9ydAorCitHaXNsZSBWYW5lbSAoNSBNYXIgMjAxMCkKKy0gT3BzIS4gUmVhZGRlZCBhcmVzX25vd2Fybi5oLgorCistIEFkZGVkIGFyZXNfbm93YXJuLmMuCisKK1lhbmcgVHNlICgyOCBGZWIgMjAxMCkKKy0gQWRkZWQgU0laRU9GX0lOVCBhbmQgU0laRU9GX1NIT1JUIGRlZmluaXRpb25zIGZvciBub24tY29uZmlndXJlIHN5c3RlbXMKKworLSBBZGRlZCBhcmVzX25vd2Fybi4qIHRvIFZDNiBwcm9qZWN0IGZpbGUKKworLSBBZGRlZCBTSVpFT0ZfSU5UIGRlZmluaXRpb24KKworLSBmaXggY29tcGlsZXIgd2FybmluZworCistIGZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gZml4IGNvbXBpbGVyIHdhcm5pbmcKKworRGFuaWVsIFN0ZW5iZXJnICgxNyBGZWIgMjAxMCkKKy0gYXJlc19yZWluaXQoKQorICAKKyAgLSBUbyBhbGxvdyBhbiBhcHAgdG8gZm9yY2UgYSByZS1yZWFkIG9mIC9ldGMvcmVzb2x2LmNvbmYgZXRjLCBwcmV0dHkgbXVjaAorICAgIGxpa2UgdGhlIHJlc19pbml0KCkgcmVzb2x2ZXIgZnVuY3Rpb24gb2ZmZXJzCisKKy0gLSBUb21taWUgR2FubmVydCBwb2ludGVkIG91dCBhIHNpbGx5IGJ1ZyBpbiBhcmVzX3Byb2Nlc3NfZmQoKSBzaW5jZSBpdCBkaWRuJ3QKKyAgICBjaGVjayBmb3IgYnJva2VuIGNvbm5lY3Rpb25zIGxpa2UgYXJlc19wcm9jZXNzKCkgZGlkLiBCYXNlZCBvbiB0aGF0LCBJCisgICAgbWVyZ2VkIHRoZSB0d28gZnVuY3Rpb25zIGludG8gYSBzaW5nbGUgZ2VuZXJpYyBvbmUgd2l0aCB0d28gZnJvbnQtZW5kcy4KKworWWFuZyBUc2UgKDMwIERlYyAyMDA5KQorLSBWTVMgc3BlY2lmaWMgcHJlcHJvY2Vzc29yIHN5bWJvbCBjaGVja2luZyBhZGp1c3RtZW50cworCistIE1lbnRpb24gbGFzdCBjaGFuZ2VzCisKKy0gLSBGaXggY29uZmlndXJlX3NvY2tldCgpIHRvIHVzZSBhcmVzX3NvY2tldF90IGluc3RlYWQgb2YgaW50IGRhdGEgdHlwZS4KKworLSAtIFdoZXJlIHJ1bi10aW1lIGVycm9yIGNoZWNrcyBlbmFibGluZyBjb21waWxlciBvcHRpb24gL0daIHdhcyB1c2VkIGl0IGlzIG5vdworICAgIHJlcGxhY2VkIHdpdGggZXF1aXZhbGVudCAvUlRDc3UgZm9yIFZpc3VhbCBTdHVkaW8gMjAwMyBhbmQgbmV3ZXIgdmVyc2lvbnMuCisgIAorICAtIENvbXBpbGVyIG9wdGlvbiAvR1ggaXMgbm93IHJlcGxhY2VkIHdpdGggZXF1aXZhbGVudCAvRUhzYyBmb3IgYWxsIHZlcnNpb25zLgorCistIC0gSW5nbWFyIFJ1bmdlIG5vdGljZWQgdGhhdCBXaW5kb3dzIGNvbmZpZy13aW4zMi5oIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgIGRpZCBub3QgaW5jbHVkZSBhIGRlZmluaXRpb24gZm9yIEhBVkVfQ0xPU0VTT0NLRVQgd2hpY2ggcmVzdWx0ZWQgaW4KKyAgICBmdW5jdGlvbiBjbG9zZSgpIGJlaW5nIGluYXBwcm9wcmlhdGVseSB1c2VkIHRvIGNsb3NlIHNvY2tldHMuCisKK0RhbmllbCBTdGVuYmVyZyAoMzAgTm92IDIwMDkpCistIHN0YXJ0IHdvcmtpbmcgb24gMS43LjEKKworVmVyc2lvbiAxLjcuMCAoMjcgTm92IDIwMDkpCisKK1lhbmcgVHNlICgyNyBOb3YgMjAwOSkKKy0gUHJlc2VydmUgZW1wdHkgbGluZSBmb2xsb3dpbmcgbGFzdCB0YXJnZXQKKworLSAtIExhcnJ5IExhbnNpbmcgZml4ZWQgYXJlc19wYXJzZV9zcnZfcmVwbHkgdG8gcHJvcGVybHkgcGFyc2UgcmVwbGllcworICAgIHdoaWNoIG1pZ2h0IGNvbnRhaW4gbm9uLVNSViBhbnN3ZXJzLCBza2lwcGluZyBvdmVyIHBvdGVudGlhbCBub24tU1JWCisgICAgb25lcyBzdWNoIGFzIENOQU1Fcy4KKworLSBXaGVuIHVzaW5nIGljYywgY29tcGlsZSB3aXRoIC1mcGljIGFuZCBsaW5rIHdpdGggaW50ZWwgZHluYW1pYyBsaWJyYXJpZXMuCisKKy0gQWRkZWQgJ2N1cnJlbnRseScgaW4gaXRhbGljcyB0byBpbnNpc3Qgb24gdHJhbnNpZW50IHNpdHVhdGlvbi4KKworLSBGaXggbGFuZ3VhZ2UKKworLSBEYW5pZWwgd2FudHMgdXBjb21pbmcgcmVsZWFzZSB0byBiZSAxLjcuMAorCistIE1lbnRpb24gbGFzdCBjaGFuZ2VzCisKKy0gLSBSZW1vdmVkIGZyb20gZXh0ZXJuYWwgaW50ZXJmYWNlIHByZXByb2Nlc3NvciBzeW1ib2wgZGVmaW5pdGlvbiBmb3IKKyAgICBDQVJFU19IQVZFX0FSRVNfRlJFRV9EQVRBLiBDdXJyZW50IGZ1bmN0aW9uYWxpdHkgb2YgYXJlc19mcmVlX2RhdGEoKQorICAgIG1ha2VzIGl0IHVubmVjZXNzYXJ5LgorCistIEFkZGVkIFJFQURNRS5tc3ZjCisKKy0gQ2hhbmdlZCBjLWFyZXMgbmFtaW5nIGNvbnZlbnRpb25zIHdoZW4gdXNpbmcgTVNWQyBhcyBkZXNjcmliZWQgaW4gUkVBRE1FLm1zdmMKKworLSAtIE1lbnRpb24gb3RoZXIgcmVjZW50IGNoYW5nZXMKKworLSAtIEpha3ViIEhyb3playByZW5hbWVkIGFkZHJ0dGwgYW5kIGFkZHI2dHRsIHN0cnVjdHMgdG8gYXJlc19hZGRydHRsIGFuZAorICAgIGFyZXNfYWRkcjZ0dGwgaW4gb3JkZXIgdG8gcHJldmVudCBuYW1lIHNwYWNlIHBvbGx1dGlvbiwgYWxvbmcgd2l0aAorICAgIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvIGNvZGUgYmFzZSBhbmQgbWFuIHBhZ2VzLlRoaXMgY2hhbmdlIGRvZXMgbm90IGJyZWFrCisgICAgQUJJLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlY29tcGlsZSBleGlzdGluZyBhcHBsaWNhdGlvbnMuIEJ1dCBleGlzdGluZworICAgIGFwcGxpY2F0aW9ucyB1c2luZyB0aGVzZSBzdHJ1Y3RzIHdpdGggdGhlIG9sZCBuYW1lIHdpbGwgbmVlZCBzb3VyY2UgY29kZQorICAgIGFkanVzdG1lbnRzIHdoZW4gcmVjb21waWxlZCB1c2luZyBjLWFyZXMgMS42LjEuCisKKy0gLSBKYWt1YiBIcm96ZWsgZml4ZWQgbW9yZSBmdW5jdGlvbiBwcm90b3R5cGVzIGluIG1hbiBwYWdlcyB0byBzeW5jIHRoZW0KKyAgICB3aXRoIHRoZSBvbmVzIGRlY2xhcmVkIGluIGFyZXMuaAorCistIE1ha2UgY29uZmlndXJlIHJlbW92ZSB0aGUgYXJlc19idWlsZC5oIGZpbGUgaW5jbHVkZWQgaW4gZGlzdHJpYnV0aW9uIHRhcmJhbGxzLgorCistIEZpeCBtYWNybyByZWRlZmluaXRpb24uCisKKy0gRml4IG5hbWUgc3BhY2UgcG9sbHV0aW9uLgorCistIEFsbG93IHVzaW5nIGRpZmZlcmVudCBleHRyYSBpbXBvcnQgbGlicmFyaWVzIGZvciBkZWJ1ZyBhbmQgcmVsZWFzZSBidWlsZHMuCisKKy0gQWRkIG1hbmlmZXN0IHN0dWZmIHRvIG1zdmMgbWFrZWZpbGUKKworLSBTeW5jIG1hbiBwYWdlIHdpdGggcmVhbGl0eQorCistIEFkZCBtaXNzaW5nIGV4dGVybmFsIEFQSSBkZWNvcmF0aW9uIGZvciBhcmVzX3NldF9zb2NrZXRfY2FsbGJhY2soKQorCistIEFkZCBhcmVzX2ZyZWVfZGF0YSgpIG1hbiBwYWdlLgorCistIC0gUHJvdmlkZSBpbiBleHRlcm5hbCBpbnRlcmZhY2UgcHJlcHJvY2Vzc29yIHN5bWJvbCBkZWZpbml0aW9ucyBmb3IKKyAgICBDQVJFU19IQVZFX0FSRVNfRlJFRV9EQVRBIGFzIGFuIGluZGljYXRpb24gb2YgZnVuY3Rpb24gYXZhaWxhYmlsaXR5LgorCistIFJlbW92ZSB0eXBlY2FzdAorCistIEZpeCBjb21tZW50CisKKy0gQWRkIGFyZXNfZGF0YS5jIGFuZCBhcmVzX2RhdGEuaAorCistIEpha3ViIEhyb3playBtb2RpZmllZCBhcmVzX3BhcnNlX3Nydl9yZXBseSgpIGFuZCBhcmVzX3BhcnNlX3R4dF9yZXBseSgpIEFQSQorICB0byByZXR1cm4gYSBsaW5rZWQgbGlzdHMgb2YgcmVzdWx0cy4gVGhlc2Ugd2VyZSBhbHNvIG1vZGlmaWVkIHRvIGludGVybmFsbHkKKyAgdXNlIHRoZSBhcmVzX2RhdGEgbWVtb3J5IHN0cnVjdCBhbmQgYXMgc3VjaCBpdHMgcmVzdWx0IG11c3QgYmUgZnJlZSdlZCB3aXRoCisgIGFyZXNfZnJlZV9kYXRhKCkuCisKKy0gSW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgZ2VuZXJpYyBhcmVzX2ZyZWVfZGF0YSgpIGZ1bmN0aW9uIHRoYXQgd2lsbCBhbGxvdworICBhcHBsaWNhdGlvbnMgdG8gZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGFuZCByZXR1cm5lZCBieSBzb21lIGMtYXJlcyBmdW50aW9ucy4KKworLSBNYWtlIHVzYWdlIG9mIGNhbGxvYygpJ3MgYXJndW1lbnRzIGNvbnNpc3RlbnQgd2l0aCByZXN0IG9mIGNvZGUgYmFzZQorCistIHdvcmthcm91bmQgaWNjIDkuMSBvcHRpbWl6ZXIgaXNzdWUKKworLSBBZGQgaWNjIGZ2aXNpYmlsaXR5IGJ1ZyB0ZXN0CisKKy0gRml4IGljYyA5LjAgY29tcGlsZXIgd2FybmluZzogZXh0ZXJuYWwgZGVmaW5pdGlvbiB3aXRoIG5vIHByaW9yIGRlY2xhcmF0aW9uCisKKy0gRml4IHRocmVlIHZhciBuYW1lcworCistIEFkZCBjaGVjayBmb3IgYXNzZXJ0LmggaGVhZGVyIGZpbGUKKworLSBnZXRhZGRyaW5mbyBpcyBmdWxseSB0aHJlYWQgc2FmZSBvbiBzb2xhcmlzIHZlcnNpb25zIHdoaWNoCisgIGltcGxlbWVudCB0aGUgZnVuY3Rpb24gZXZlbiB3aGVuIGhfZXJybm8gaXMgbm90IGEgbWFjcm8uCisgIAorICBUaGUgaF9lcnJubyBtYWNybyB0ZXN0IG5vdyBvbmx5IGRvbmUgb24gc3lzdGVtcyBmb3Igd2hpY2ggdGhlcmUKKyAgaXMgbm8gaGFyZCBjb2RlZCBrbm93bGVkZ2UgYWJvdXQgZ2V0YWRkcmluZm8ncyB0aHJlYWQgc2FmZW5lc3MuCisKKy0gUmVtb3ZlIGZpbGVzIGdlbmVyYXRlZCBvbiBwcmV2aW91cyBidWlsZGNvbmYvY29uZmlndXJlIHJ1bgorCistIFJlbW92ZSBlbmFibGUtdGhyZWFkIC8gZGlzYWJsZS10aHJlYWQgY29uZmlndXJlIG9wdGlvbi4gVGhlc2Ugd2VyZSBvbmx5IHBsYWNlYm8KKyAgb3B0aW9ucy4gVGhlIGxpYnJhcnkgaXMgYWx3YXlzIGJ1aWx0IGFzIHRocmVhZCBzYWZlIGFzIHBvc3NpYmxlIG9uIGV2ZXJ5IHN5c3RlbS4KKworLSBSZWZhY3RvciBob3cgcHJlcHJvY2Vzc29yIHN5bWJvbCBfVEhSRUFEX1NBRkUgZGVmaW5pdGlvbiBpcyBkb25lLgorCistIEFzc3VtZSB0aGF0IGdldGFkZHJpbmZvIGlzIHRocmVhZCBzYWZlLCB1bmxlc3MgaGFyZCBjb2RlZAorICBrbm93bGVkZ2Ugc2F5cyB0aGUgY29udHJhcnkgb3IgaF9lcnJubyBpcyBub3QgZGVmaW5lZC4KKworLSBSZWxhdGVkIHdpdGggdGhlIHRocmVhZHNhZmUgY2FwYWJpbGl0eSBvZiBnZXRhZGRyaW5mbzoKKyAgCisgIC0gQ29uc3RhbnRpbmUgU2FwdW50emFraXMgcmVwb3J0ZWQgdGhhdCBEYXJ3aW4gNi4wIGEuay5hLiBNQUMgT1MgWCAxMC4yCisgICAgYW5kIG5ld2VyIGhhdmUgYSB0aHJlYWRzYWZlIGdldGFkZHJpbmZvLgorICAKKyAgLSBGaXggRHJhZ29uZmx5IEJTRCB0cmlwbGV0IGRldGVjdGlvbi4KKyAgCisgIC0gSW4gY2FzZSB0aGUgaGFyZC1jb2RlZCBrbm93bGVkZ2Ugc2F5cyB0aGF0IGdldGFkZHJpbmZvIGlzIHRocmVhZHNhZmUsCisgICAgYW4gYWRkaXRpb25hbCBjaGVjayBpcyBkb25lIHRvIHZlcmlmeSB0aGF0IGhfZXJybm8gaXMgYWxzbyBkZWZpbmVkLgorICAgIElmIGhfZXJybm8gaXNuJ3QgZGVmaW5lZCwgd2UgZmluYWxseSBhc3N1bWUgdGhhdCBpdCBpc24ndCB0aHJlYWRzYWZlLgorICAgIEphbWllIExva2llciBwcm92aWRlZCB0aGUgaW5zcGlyYXRpb24gZm9yIHRoaXMgZXh0cmEgY2hlY2suCisKKy0gQUlYIDUuMiBhbmQgbmV3ZXIgaGF2ZSB0aHJlYWRzYWZlIGdldGFkZHJpbmZvLgorICAKKyAgQWRkIHNvbWUgY29tbWVudHMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCB0aGUgcmVnZXgncyBwcmV0ZW5kIHRvIGFjaGlldmUuCisKKy0gSFAtVVggMTEuMTEgYW5kIGxhdGVyIGhhdmUgdGhyZWFkc2FmZSBnZXRhZGRyaW5mbworCistIENoZWNrIGlmIGdldGFkZHJpbmZvIGlzIHRocmVhZHNhZmUgd2hlbiBmdW5jdGlvbiBjaGVjayBhbGxvd3MgaXQgdG8gYmUgdXNlZAorCistIFJlbmFtZWQgZnBHZXROZXR3b3JrUGFyYW1zIGFuZCBmcFN5c3RlbUZ1bmN0aW9uMDM2IHRvIGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gd2l0aCBzdGF0aWMgbGlicmFyeQorCistIEFkZCBrZXJuZWwzMi5saWIKKworLSBNZW50aW9uIGxhc3QgY2hhbmdlcworCistIFJlaW5zdGF0ZSBjb3B5cmlnaHQgc3ltYm9sIGxvc3QgaW4gcHJldmlvdXMgY29tbWl0CisKKy0gTWFrZSBzb21lIHN0cmluZ3MgZGlmZmVyZW50IGluIHJlc291cmNlIGZpbGUgZm9yIGRlYnVnIG9yIHJlbGVhc2UgYnVpbGRzCisKKy0gSWdub3JlIG1vcmUgc3ViZGlycworCistIEZpeCBjb21waWxlciB3YXJuaW5nOiBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50CisKKy0gU3luYyBsaW5rZXIgYW5kIHJlc291cmNlIGNvbXBpbGVyIG9wdGlvbnMgd2l0aCBNYWtlZmlsZS5tc3ZjCisKKy0gRm9sbG93IE1ha2VmaWxlLm1zdmMgc3ViZGlyZWN0b3J5IG5hbWluZyBzY2hlbWUsIGFuZCBzeW5jIGNvbXBpbGVyIG9wdGlvbnMKKworLSBVcGRhdGVkIE1TVkMgbWFrZWZpbGUgdGhhdCBhbGxvd3MgYnVpbGRpbmcgZHluYW1pYyBhbmQgc3RhdGljCisgIGMtYXJlcyBsaWJyYXJpZXMgaW4gZGVidWcgYW5kIHJlbGVhc2UgZmxhdm91cnMuCisgIAorICBBZGRpdGlvbmFsbHkgZWFjaCBvZiB0aGUgdGhyZWUgc2FtcGxlIHByb2dyYW1zIGlzIGJ1aWx0IGFnYWluc3QKKyAgZWFjaCBvZiB0aGUgZm91ciBwb3NzaWJsZSBjLWFyZXMgbGlicmFyaWVzLCBnZW5lcmF0aW5nIGFsbCB0aGlzCisgIGEgdG90YWwgbnVtYmVyIG9mIDEyIGV4ZWN1dGFibGVzIGFuZCA0IGxpYnJhcmllcy4KKworLSBUZXN0IGZvciBVU0VfV0lOU09DSyBzaW5jZSBpdCBpcyBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gV0lOMzIKKworLSBNYWtlIGhlYWRlciBpbmNsdXNpb24gZGVwZW5kIG9uIEhBVkVfKl9IIGRlZmluaXRpb24KKworLSBSZW1vdmUgdW5uZWVkZWQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMKKworLSBBZGp1c3QgYy1hcmVzIGluY2x1ZGUgcGF0aHMgZm9yIG1lbW9yeSB0cmFja2luZyBlbmFibGVkICgtLWVuYWJsZS1jdXJsZGVidWcpIGJ1aWxkcworCistIHNvdXJjZSBmaWxlcyB1c2VkIGJ5IHNhbXBsZSBwcm9ncmFtcworCistIFJlbmFtZWQgYy1hcmVzIHNldHVwLmggdG8gYXJlc19zZXR1cC5oCisKKy0gQWRqdXN0IGluY2x1ZGUgcGF0aHMgdG8gdGFrZSBpbiBhY2NvdW50IHRoYXQgY3VycmVudGx5OgorICAKKyAgYy1hcmVzIHdpdGggLS1lbmFibGUtY3VybGRlYnVnIHVzZXMgbWVtZGVidWcuaCBmcm9tIGxpYmN1cmwncyBsaWIgc3ViZGlyZWN0b3J5LgorICAKKyAgbWVtZGVidWcuaCBuZWVkcyBhY2Nlc3MgdG8gbGliY3VybCdzIHNldHVwLmggZnJvbSBsaWJjdXJsJ3MgbGliIHN1YmRpcmVjdG9yeQorICBhbmQgYWxzbyBuZWVkcyBhY2Nlc3MgdG8gbGliY3VybCdzIGdlbmVyYXRlZCBjdXJsX2NvbmZpZy5oCisKKy0gVW5kbyBvbGQgdGVtcG9yYXJ5IGNoYW5nZSBvbmNlIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMKKworLSBNZW50aW9uIG1hbnkgY2hhbmdlcworCistIE1lbnRpb24gLS1lbmFibGUtc3ltYm9sLWhpZGluZyBjb25maWd1cmUgb3B0aW9uCisKKy0gU3ltYm9sIGhpZGluZyBjb25maWd1cmUgb3B0aW9ucyByZW5hbWVkIHRvIHRoZSBob3BlZnVsbHkgbGVzcyBhbWJpZ3VvdXMKKyAgLS1lbmFibGUtc3ltYm9sLWhpZGluZyBhbmQgLS1kaXNhYmxlLXN5bWJvbC1oaWRpbmcgYXMgd2VsbCBhcyByZWxhdGVkCisgIG1hY3JvIG5hbWVzIGFuZCBzb21lIGludGVybmFsIHZhcmlhYmxlcyB1c2VkIGZvciB0aGVtLgorICAKKyAgUmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGUgcHJlcHJvY2Vzc29yIHN5bWJvbHMgbmFtZWQgdG8KKyAgQ0FSRVNfU1lNQk9MX0hJRElORyBhbmQgQ0FSRVNfU1lNQk9MX1NDT1BFX0VYVEVSTi4KKworLSBIZWFkZXIgaW5jbHVzaW9uIGRlcGVuZGluZyBvbiBIQVZFXyogc3ltYm9sLgorICBGaXggdHdvIHR5cG9zLgorCistIENvbXBhcmlzb24gb2YgdGhlIEluaXRpYWwgcmV2aXNpb24gb2YgdGhpcyBmaWxlIHdpdGggYXJlc19wYXJzZV9hX3JlcGx5LmMKKyAgc2hvd3MgdGhhdCB0aGlzIG9uZSBpcyBhY3R1YWxseSBhIG1vZGlmaWVkIGNvcHkgb2YgYXJlc19wYXJzZV9hX3JlcGx5LmMuCisgIAorICBJbiBvcmRlciB0byBjb21wbHkgd2l0aCBhcmVzX3BhcnNlX2FfcmVwbHkuYydzIE0uSS5ULiBsaWNlbnNlLCB0aGUgb2xkCisgIDE5OTggTS5JLlQuIGNvcHlyaWdodCBub3RpY2UgaXMgbm93IGFsc28gcHJlc2VydmVkIGluIHRoaXMgZmlsZSB0aGUgc2FtZQorICBhcyBpdCBpcyBkb25lIGluIG90aGVyIGFyZXNfcGFyc2VfKi5jIGZpbGVzLgorCistIEFkZCBDVlMgSWQgdGFnLgorICBGaXggaWRlbnRhdGlvbiBvZiBzb21lIGxpY2Vuc2UgbGluZXMuCisKKy0gQWRkIENWUyBJZCB0YWcuCisKKy0gRml4IGNvbW1lbnQKKworLSBJbiBubyBwYXJ0aWN1bGFyIG9yZGVyLCBjaGFuZ2VkL2ZpeGVkIGFsbCBvZiB0aGUgZm9sbG93aW5nIGluCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5KCkgY3VycmVudCB2ZXJzaW9uOgorICAKKyAgLSBGaXhlZCBhIGNvdXBsZSBvZiBwb3RlbnRpYWwgZG91YmxlIGZyZWUncy4KKyAgCisgIC0gRml4ZWQgbWVtb3J5IGxlYWtzIHVwb24gb3V0IG9mIG1lbW9yeSBjb25kaXRpb24uCisgIAorICAtIEZpeGVkIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgCisgIC0gU2V0dGluZyBudHh0cmVwbHkgdG8gemVybyB1cG9uIGVudHJ5IGZvciBhbGwgZmFpbHVyZSBjYXNlcy4KKyAgCisgIC0gQ2hhbmdlZCBkYXRhIHR5cGUgdG8gc2l6ZV90IGZvciB2YXJpYWJsZXMgc3Vic3RyX2xlbiwgc3RyX2xlbiBhbmQKKyAgICB0aGUgbGVuZ3RoIG1lbWJlciBvZiBhcmVzX3R4dF9yZXBseSBzdHJ1Y3QuCisgIAorICAtIEF2b2lkZWQgYSBjb3VwbGUgb2YgbWVtY3B5KCkgY2FsbHMuCisgIAorICAtIENoYW5nZWQgaSBkYXRhIHR5cGUgdG8gdW5zaWduZWQgaW50IHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MuCisgIAorICAtIEFkanVzdGVkIGEgY29tbWVudC4KKyAgCisgIC0gVXNlIEFSRVNfU1VDQ0VTUyBsaXRlcmFsIGZvciBzdWNjZXNzZnVsbCBjb21wbGV0aW9uLgorICAKKyAgLSBBZGRlZCBDVlMgSWQgdGFnLgorCistIEFkZCBjLWFyZXMgRExMIHJlc291cmNlIGZpbGUgdG8gZGlzdHJpYnV0aW9uIGFyY2hpdmUKKworLSBpZ25vcmUgZmlsZXMKKworLSBFbXB0eSBzdWJkaXIKKworLSBVcGRhdGVkIE1TVkMgNi4wIHdvcmtzcGFjZSBhbmQgcHJvamVjdCBmaWxlcyB0aGF0IGFsbG93cyBidWlsZGluZworICBkeW5hbWljIGFuZCBzdGF0aWMgYy1hcmVzIGxpYnJhcmllcyBpbiBkZWJ1ZyBhbmQgcmVsZWFzZSBmbGF2b3Vycy4KKyAgCisgIEFkZGl0aW9uYWxseSBlYWNoIG9mIHRoZSB0aHJlZSBzYW1wbGUgcHJvZ3JhbXMgaXMgYnVpbHQgYWdhaW5zdAorICBlYWNoIG9mIHRoZSBmb3VyIHBvc3NpYmxlIGMtYXJlcyBsaWJyYXJpZXMsIGdlbmVyYXRpbmcgYWxsIHRoaXMKKyAgYSB0b3RhbCBudW1iZXIgb2YgMTIgZXhlY3V0YWJsZXMgYW5kIDQgbGlicmFyaWVzLgorCitEYW5pZWwgU3RlbmJlcmcgKDI5IE9jdCAyMDA5KQorLSBubyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHBvaW50ZXJzIGJlZm9yZSBkZXJlZmVyZW5jaW5nLCBhcyB0aGUgcG9pbnRlcnMKKyAgTVVTVCBiZSB2YWxpZCBhbmQgdGhleSBhcmUgZGVyZWZlcmVuY2VkIGZ1cnRoZXIgZG93biBpbiB0aGUgZnVuY3Rpb24KKyAgdW5jb25kaXRpb25hbGx5IQorCistIHNob3J0ZW4gdGhlIGRlc2NyaXB0aW9ucyBzb21ld2hhdAorCistIHVwZGF0ZSB0byB0aGUgbmV3IHN0cnVjdCBuYW1lCisKKy0gSmFrdWIgSHJvemVrIGFkZGVkIGFyZXNfcGFyc2VfdHh0X3JlcGx5KCkgZm9yIFRYVCBwYXJzaW5nCisKKy0gdXNlICdhcmVzX3Nydl9yZXBseScgZm9yIHByb3BlciBuYW1lLXNwYWNpbmcKKworWWFuZyBUc2UgKDI5IE9jdCAyMDA5KQorLSBBZGQgcmVmZXJlbmNlIGZvciBhcmVzX3BhcnNlX3Nydl9yZXBseS5wZGYKKworLSBBZGQgcmVmZXJlbmNlIGZvciBhcmVzX3BhcnNlX3Nydl9yZXBseSBkb2NzCisKKy0gRXh0ZXJuYWwgQVBJIGZ1bmN0aW9uIGxpbmthZ2UgZGVjb3JhdGlvbiBhZGp1c3RtZW50CisKKy0gRXh0ZXJuYWwgQVBJIGZ1bmN0aW9uIGxpbmthZ2UgZGVjb3JhdGlvbiBhZGp1c3RtZW50CisKKy0gSW5pdGlhbCBzdGVwIHRvd2FyZHMgdGhlIGFiaWxpdHkgdG8gcmVkdWNlIGMtYXJlcyBleHBvcnRlZCBzeW1ib2xzCisgIGJhc2VkIG9uIHRoZSAndmlzaWJpbGl0eScgYXR0cmlidXRlIGZvciBHTlVDIGFuZCBfX2dsb2JhbCBmb3IgU3VuCisgIGNvbXBpbGVycywgdGFraW5nIGFsc28gaW4gYWNjb3VudCBfX2RlY2xzcGVjIGZ1bmN0aW9uIGRlY29yYXRpb24KKyAgZm9yIFdpbjMyIGFuZCBTeW1iaWFuIERMTCdzLgorICAKKyAgSW50cm9kdWNpbmcgY29uZmlndXJlIG9wdGlvbnMgLS1lbmFibGUtaGlkZGVuLXN5bWJvbHMgYW5kCisgIC0tZGlzYWJsZS1oaWRkZW4tc3ltYm9scyBmb2xsb3dpbmcgbGliY3VybCdzIG5hbWluZy4KKworLSBGaXggY29tbWVudAorCistIEZpeCBzcGVsbGluZworCistIEZpeCBQZWxsZXMgQyBXaW4zMiB0YXJnZXQgY29tcGlsYXRpb24gaXNzdWVzCisKKy0gSm9obiBFbmdlbGhhcnQgbm90aWNlZCBhbiB1bnJlbGVhc2VkIHByb2JsZW0gcmVsYXRpdmUgdG8gYSBkdXBsaWNhdGUKKyAgQVJFU19FQ0FOQ0VMTEVEIGVycm9yIGNvZGUgdmFsdWUgYW5kIG1pc3NpbmcgZXJyb3IgY29kZSBkZXNjcmlwdGlvbi4KKworLSBGaXggY29tcGlsZXIgd2FybmluZzogbG9jYWwgdmFyaWFibGUgbWF5IGJlIHVzZWQgd2l0aG91dCBoYXZpbmcgYmVlbiBpbml0aWFsaXplZAorCistIFVzZSAqX0NIRUNLX1BBVEhfU0VQQVJBVE9SX1JFUVVJUkVEIHRvIGVuc3VyZSB0aGF0ICpfQ0hFQ0tfUEFUSF9TRVBBUkFUT1IKKyAgaXMgb25seSBleHBhbmRlZCBhbmQgaW5jbHVkZWQgb25jZSBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKworLSBPdXIgX0FTX1BBVEhfU0VQQVJBVE9SX1BSRVBBUkUgb3ZlcnJpZGUgaXMgbm93IG00X2RlZnVuJ2QgaW5zdGVhZCBvZiBtNF9kZWZpbmUnZAorICBkdWUgdG8gYXV0b2NvbmYgMi42NCBtNF9yZXF1aXJlJ2luZyBpdCBpbiBfQVNfU0hFTExfU0FOSVRJWkUgaW5kaXJlY3RseSB0aHJvdWdoCisgIF9BU19QQVRIX1dBTEsuCisKKy0gRml4IGNvbXBpbGVyIHdhcm5pbmc6IGFyZ3VtZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvcnJlc3BvbmRpbmcgZm9ybWF0IHN0cmluZyBjb252ZXJzaW9uCisKKy0gRml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQKKworLSBGaXggY29tcGlsZXIgd2FybmluZzogbG9vcCB3aXRob3V0IGJvZHkKKworLSBGaXggY29tcGlsZXIgd2FybmluZworCistIEZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gRml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSBGaXggY29tcGlsZXIgd2FybmluZzogYWRkaXRpb24gcmVzdWx0IGNvdWxkIGJlIHRydW5jYXRlZCBiZWZvcmUgY2FzdCB0byBiaWdnZXIgc2l6ZWQgdHlwZQorCistIE92ZXJoYXVsZWQgYXJlc19fZ2V0X2hvc3RlbnQoKQorICAKKyAgLSBGaXhpbmcgb3V0IG9mIGJvdW5kcyBtZW1vcnkgb3ZlcndyaXRlIHRyaWdnZXJlZCB3aXRoIG1hbGZvcm1lZCAvZXRjL2hvc3RzIGZpbGUuCisgIC0gSW1wcm92aW5nIHBhcnNpbmcgb2YgL2V0Yy9ob3N0cyBmaWxlLgorICAtIFZhbGlkYXRpbmcgcmVxdWVzdGVkIGFkZHJlc3MgZmFtaWx5LgorICAtIEVuc3VyaW5nIHRoYXQgZmFpbHVyZXMgYWx3YXlzIHJldHVybiBhIE5VTEwgcG9pbnRlci4KKyAgLSBBZGp1c3RpbmcgaGVhZGVyIGluY2x1c2lvbnMuCisKKy0gRml4IHNzaXplX3QgcmVkZWZpbml0aW9uIGVycm9ycyBvbiBXSU42NCByZXBvcnRlZCBieSBBbGV4ZXkgU2ltYWsKKworLSBtb3JlIGZpbGVzIHRvIGlnbm9yZQorCistIENoZWNrIGlmIF9SRUVOVFJBTlQgZGVmaW5pdGlvbiBpcyByZXF1aXJlZCB0bworICBtYWtlIGVycm5vIGF2YWlsYWJsZSBhcyBhIHByZXByb2Nlc3NvciBtYWNyby4KKworLSBBdHRlbXB0IHRvIHNpbGVuY2UgYm9ndXMgY29tcGlsZXIgd2FybmluZzogIlBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UiCisKKy0gaWdub3JlIG1vcmUgZmlsZXMKKworR2lzbGUgVmFuZW0gKDcgU2VwIDIwMDkpCistIFN1cHByZXNzIHdhcm5pbmdzIGFib3V0IHVudXNlZCBwcm90b3R5cGVzIGluIFdhdHQzMiBhbmQgV2luMzIgcHJvZ3JhbXMuCisKKy0gVXBkYXRlIGVtYWlsIGFkZHJlc3MuCisKKy0gVXBkYXRlIG15IGVtYWlsIGFkZHJlc3MuIEFkZCBhcmVzX2NvbmZpZy5oIGFzIGRlcGVuZGVuY3kgZm9yICdtYWtlIGRlcGVuZCcuCisKK1lhbmcgVHNlICg2IFNlcCAyMDA5KQorLSBUX1NSViBwb3J0YWJpbGl0eSBjaGVjaworCitHdW50ZXIgS25hdWYgKDUgU2VwIDIwMDkpCistIGNoYW5nZWQgaW5jbHVkZXMgdG8gbWF0Y2ggc3R5bGUgaG93IHdlIGRvIHdpdGggYWxsIG90aGVyICouYyBmaWxlcy4KKworLSBjaGFuZ2VkIHVfaW50MTZfdCB0byB1bnNpZ25lZCBzaG9ydCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHBsYWNlIHdpdGhpbiBhcmVzIGFuZCBjdXJsIHdoZXJlIHN1Y2ggYSB0eXBlIHdvdWxkIGJlIHVzZWQ7CisgIGFsc28gaXQgYnJva2UgbWFueSBhdXRvYnVpbGRzLiBXZSBzaG91bGQgcHJvYmFibHkgaW50cm9kdWNlIGFuIGFyZXNfcG9ydF90IGlmIHdlIHdhbnQgdG8gdXNlIGEgdHlwZSBoZXJlLgorCitHaXNsZSBWYW5lbSAoNSBTZXAgMjAwOSkKKy0gUmVwbGFjZSAndWludDE2X3QnIHdpdGggJ3VfaW50MTZfdCcgc2luY2UgdGhlIGxhdHRlciBpcyB1c2VkIGluIGFyZXMuaC4KKworLSBBZGRlZCAnYXJlc19wYXJzZV9zcnZfcmVwbHkub2JqJy4gQWRkZWQgZGVmaW5pdGlvbiBvZiAndV9pbnQxNl90Jy4gVGhpcyBpcyBJIGRvbid0IGxpa2U7IHdlIHNob3VsZCBub3QgZGVwZW5kIG9uIHN1Y2ggbm9uLXVuaXZlcnNhbCB0eXBlcyBpbiBhIHB1YmxpYyBoZWFkZXIuIEJ1dCB0aGlzIGlzIGp1c3QgYSBxdWljayBmaXguCisKK0RhbmllbCBTdGVuYmVyZyAoNCBTZXAgMjAwOSkKKy0gLSBKYWt1YiBIcm96ZWsgYWRkZWQgYXJlc19wYXJzZV9zcnZfcmVwbHkoKSBmb3IgU1JWIHBhcnNpbmcKKworU3RlaW5hciBILiBHdW5kZXJzb24gKDI3IEF1ZyAyMDA5KQorLSBTdXBwb3J0IGxvb2t1cCBvZiBJUHY0IGxpdGVyYWxzIGluIGFyZXNfZ2V0aG9zdGJ5bmFtZSgpLCBldmVuIHdoZW4gdGhlIGFkZHJlc3MgZmFtaWx5IGlzIHNldCB0byBBRl9JTkVUNi4KKworR2lzbGUgVmFuZW0gKDMgQXVnIDIwMDkpCistIFJlbW92ZSBjYWxsIHRvIExvYWRMaWJyYXJ5KCkuIChsZWZ0b3ZlciBmcm9tIGRlYnVnZ2luZykuCisKKy0gRml4IGJhZCBzZW50ZW5jZS4KKworRGFuaWVsIFN0ZW5iZXJnICgzIEF1ZyAyMDA5KQorLSAtIFRpbW8gVGVyYXMgY2hhbmdlZCB0aGUgcmVhc29uIGNvZGUgdXNlZCBpbiB0aGUgcmVzb2x2ZSBjYWxsYmFjayBkb25lIHdoZW4KKyAgICBhcmVzX2NhbmNlbCgpIGlzIHVzZWQsIHRvIGJlIEFSRVNfRUNBTkNFTExFRCBpbnN0ZWFkIG9mIEFSRVNfRVRJTUVPVVQgdG8KKyAgICBiZXR0ZXIgYWxsb3cgdGhlIGNhbGxiYWNrIHRvIGtub3cgd2hhdCdzIGhhcHBlbmluZy4KKworLSAtIEpvc2h1YSBLd2FuIGZpeGVkIHRoZSBpbml0IHJvdXRpbmUgdG8gZmlsbCBpbiB0aGUgZGVmYXVsdHMgZm9yIHN0dWZmIHRoYXQKKyAgICBmYWlscyB0byBnZXQgaW5pdGVkIGJ5IG90aGVyIG1lYW5zLiBUaGlzIGZpeGVzIGEgY2FzZSBvZiB3aGVuIHRoZSBjLWFyZXMKKyAgICBpbml0IGZhaWxzIHdoZW4gaW50ZXJuZXQgYWNjZXNzIGlzIGZvbmUuCisKK0d1bnRlciBLbmF1ZiAoMTYgSnVsIDIwMDkpCistIHRlc3QgaWYgYWRkaW5nIC4uL2xpYiB0byBpbmNsdWRlcyBjYW4gZml4IHRoZSBjdXJyZW50IGJyZWFrIC4uLgorCistIHJlbmFtZWQgZ2VuZXJhdGVkIGNvbmZpZy5oIHRvIGFyZXNfY29uZmlnLmggaW4gb3JkZXIgdG8gYXZvaWQgY2xhc2hlcyB3aGVuIGxpYmN1cmwgaXMgdXNlZCB3aXRoIG90aGVyIHByb2plY3RzIHdoaWNoIGFsc28gaGF2ZSBhIGNvbmZpZy5oLgorCitZYW5nIFRzZSAoMjEgSnVuIDIwMDkpCistIFJlZmFjdG9yIGhvdyBsaWJyYXJpZXMgYXJlIGNoZWNrZWQgZm9yIGNvbm5lY3QoKSBmdW5jdGlvbiwgZm9sbG93LXVwLgorCistIFJlZmFjdG9yIGhvdyBsaWJyYXJpZXMgYXJlIGNoZWNrZWQgZm9yIGNvbm5lY3QoKSBmdW5jdGlvbiwKKyAgYW5kIGNoZWNrIGZvciBjb25uZWN0KCkgYXMgaXQgaXMgZG9uZSBmb3Igb3RoZXIgZnVuY3Rpb25zLgorCitHaXNsZSBWYW5lbSAoMjAgSnVuIDIwMDkpCistIFJlbW92ZSB1bm5lZWRlZCBkZWZpbmVzLgorCistIFVzZSBzZWxlY3RfcygpIGFuZCBub3Qgc2VsZWN0KCkuCisKK1lhbmcgVHNlICgxOSBKdW4gMjAwOSkKKy0gc2Nsb3NlKCkgZnVuY3Rpb24tbGlrZSBtYWNybyBkZWZpbml0aW9uIHVzZWQgdG8gY2xvc2UgYSBzb2NrZXQsCisgIG5vdyBzb2xlbHkgYmFzZWQgb24gSEFWRV9DTE9TRVNPQ0tFVCBhbmQgSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTAorICBjb25maWcgZmlsZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuCisKKy0gYWRkIENsb3NlU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24gY2hlY2sKKworLSBjaGVjayBmb3Igc29ja2V0KCkgYW5kIGNsb3Nlc29ja2V0KCkgYXMgaXQgaXMgZG9uZSBmb3Igb3RoZXIgZnVuY3Rpb25zCisKKy0gUmVtb3ZlIEhBVkVfQ09ORklHX0ggZGVmaW5pdGlvbiBmcm9tIGhlcmUsCisgIENGTEFHUyBmcm9tIGNvbW1vbi5kaiBhbHJlYWR5IGRlZmluZXMgaXQuCisKKy0gaW5pdGlhbCBzdGVwIHRvd2FyZHMgZGVjb3VwbGluZyBjLWFyZXMgZnJvbSBsaWJjdXJsIGZvciBET1MKKworLSBkb24ndCBpZ25vcmUgdGhlc2Ugc3ViZGlycywgdGhleSBtdXN0IGJlIHJlbW92ZWQgZmlyc3QKKworLSBSZW1vdmUgREVCVUdCVUlMRCBzeW1ib2wgZGVmaW5pdGlvbiwgaXMgbm90IHJlcXVpcmVkIGZvciBwcm9ncmFtcyB1c2luZyB0aGUgbGlicmFyeS4KKworLSBERUJVR0JVSUxEIHN5bWJvbCBkZWZpbml0aW9uIGZvciBkZWJ1ZyBidWlsZHMKKworLSBpZ25vcmUgc29tZSBzdWJkaXJzCisKKy0gZml4IGNvbW1lbnQKKworLSBUcnkgdG8gbWFrZSBtb3JlIGNsZWFyIHRoYXQgLS1lbmFibGUtY3VybGRlYnVnIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggLS1lbmFibGUtZGVidWcgZm9yIHRoaXMgbGlicmFyeS4KKworLSBSZXZlcnQgbGFzdCBjaGFuZ2UsIGl0IGlzIGluYXBwcm9wcmlhdGUuCisKK0dpc2xlIFZhbmVtICgxMiBKdW4gMjAwOSkKKy0gUmVwbGFjZSBDVVJMREVCVUcgd2l0aCBERUJVR0JVSUxELgorCitZYW5nIFRzZSAoMTEgSnVuIDIwMDkpCistIHdoZW4gcnVubmluZyBhdXRvbWFrZSBjb3B5IG1pc3NpbmcgZmlsZXMgaW5zdGVhZCBvZiBzeW1saW5raW5nIHRoZW0KKworLSBBZGp1c3RlZCB0byB0YWtlIGluIGFjY291bnQgdGhhdC4uLgorICAKKyAgV2l0aCB0aGUgY3VybCBtZW1vcnkgdHJhY2tpbmcgZmVhdHVyZSBkZWNvdXBsZWQgZnJvbSB0aGUgZGVidWcgYnVpbGQgZmVhdHVyZSwKKyAgQ1VSTERFQlVHIGFuZCBERUJVR0JVSUxEIHByZXByb2Nlc3NvciBzeW1ib2wgZGVmaW5pdGlvbnMgYXJlIHVzZWQgYXMgZm9sbG93czoKKyAgCisgIENVUkxERUJVRyB1c2VkIGZvciBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyBzcGVjaWZpYyBjb2RlICgtLWVuYWJsZS1jdXJsZGVidWcpCisgIAorICBERUJVR0JVSUxEIHVzZWQgZm9yIGRlYnVnIGVuYWJsZWQgc3BlY2lmaWMgY29kZSAoLS1lbmFibGUtZGVidWcpCisKKy0gYy1hcmVzJyAtLWVuYWJsZS1kZWJ1ZyAtLWVuYWJsZS1jdXJsZGVidWcgZGVjb3VwbGluZyBmb2xsb3ctdXAKKworLSBtZW50aW9uIGxhc3QgY2hhbmdlcworCistIFJlbW92ZSBidWlsZGNvbmYuYmF0IGZyb20gcmVsZWFzZSBhbmQgZGFpbHkgc25hcHNob3QgYXJjaGl2ZXMuCisgIAorICBidWlsZGNvbmYuYmF0IGlzIG9ubHkgZm9yIENWUyB0cmVlIGJ1aWxkcy4KKworLSBFbnN1cmUgdGhhdCBidWlsZGNvbmYuYmF0IGRvZXMgbm90aGluZyB1bmxlc3MgaXQgaXMgdXNlZCB3aXRoIGEgQ1ZTIGNoZWNrb3V0LgorCistIENWUy1JTkZPIGZpbGUgb25seSBwcmVzZW50IGluIENWUyB0cmVlLCBuZXZlciBpbiByZWxlYXNlIG5vciBkYWlseSBzbmFwc2hvdAorICBhcmNoaXZlcy4gVXNlZCBhcyBhIHNlbnRpbmVsIGZpbGUgaW4gYnVpbGRjb25mLmJhdCB0byBkaWZmZXJlbnRpYXRlIENWUyBidWlsZHMuCisKK0dpc2xlIFZhbmVtICg4IEp1biAyMDA5KQorLSBVcGRhdGUgY29tbWVudCBhYm91dCAiTUwiLiBSZW1vdmVkICItRF9VU0VfMzJCSVRfVElNRV9UIiAobm90IGEgcmVxdWlyZW1lbnQpLgorCitZYW5nIFRzZSAoOCBKdW4gMjAwOSkKKy0ganVzdCBjb21tZW50IGl0IG91dAorCistIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuLi4KKyAgCisgIERpc2FibGUgdGhlICctZXhwb3J0LXN5bWJvbHMtcmVnZXgnIHRvIGRpc2NhcmQgdGhpcyBhcyB0aGUgb3JpZ2luCisgIG9mIGxpbmsgZmFpbHVyZXMgcmVsYXRlZCB3aXRoIHNoYXJlZCBsaWJyYXJpZXMgYW5kIG5vbi1HTlUgbGlua2Vycy4KKworLSBjLWFyZXMgTWFrZWZpbGUuYW0gYmFjayB0byB1c2luZyAkKHRvcF9idWlsZGRpcikgZm9yICpfTERBREQKKworLSBjLWFyZXMnIC1uby11bmRlZmluZWQgYW5kIC0tZW5hYmxlLWN1cmxkZWJ1ZyBhZGp1c3RtZW50cworCistIFVzZSByZWxhdGl2ZSBwYXRoIHRvIGJ1aWx0IGMtYXJlcyB0cmVlIGxpYnRvb2wgbGlicmFyeQorCistIEpvaG4gRS4gTWFsbWJlcmcgbm90aWNlZCB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IHdhcyBmYWlsaW5nIHRvIGRldGVjdCB0aGUKKyAgdGltZXZhbCBzdHJ1Y3Qgb24gVk1TIHdoZW4gYnVpbGRpbmcgd2l0aCBfWE9QRU5fU09VUkNFX0VYVEVOREVEIHVuZGVmaW5lZCBkdWUKKyAgdG8gZGVmaW5pdGlvbiB0YWtpbmcgcGxhY2UgaW4gc29ja2V0LmggaW5zdGVhZCBvZiB0aW1lLmgKKworLSBGaXggY29tcGlsZXIgd2FybmluZzogb3V0IG9mIGJvdW5kIGFjY2VzcworCistIGZpeCBjb21waWxhdGlvbiBvbiBBSVgKKworLSBjLWFyZXMnIC0tZW5hYmxlLWN1cmxkZWJ1ZyBhZGp1c3RtZW50cworCistIFJlbW92ZSB0ZW1wb3JhcmlseSBpbnRyb2R1Y2VkIG1lbW9yeSBsZWFrLgorCistIFRlbXBvcmFyaWx5IGludHJvZHVjZSBhIG1lbW9yeSBsZWFrIHRvIHZlcmlmeSBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyB3b3Jrcy4KKworLSBBbGxvdyBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgb24KKyAgc3lzdGVtcyB3aGljaCBzdXBwb3J0IGV4dGVybmFsLCB1bmRlZmluZWQsIHN5bWJvbHMgaW4gc2hhcmVkIGxpYnJhcmllcy4KKworRGFuaWVsIFN0ZW5iZXJnICgyNiBNYXkgMjAwOSkKKy0gbGFuZ3VhZ2UgZml4CisKK1lhbmcgVHNlICgyNiBNYXkgMjAwOSkKKy0gTWFrZSBhcmVzX2luaXQoKSwgYXJlc19kdXAoKSBhbmQgYXJlc19pbml0X29wdGlvbnMoKSByZXR1cm4gQVJFU19FTk9USU5JVElBTElaRUQKKyAgaWYgbGlicmFyeSBpbml0aWFsaXphdGlvbiBoYXMgbm90IGJlZW4gcGVyZm9ybWVkIGNhbGxpbmcgYXJlc19saWJyYXJ5X2luaXQoKS4KKworLSBjLWFyZXMncyAtLWVuYWJsZS1jdXJsZGVidWcgY29uZmlndXJlIG9wdGlvbiBkZWNvdXBsZWQgZnJvbSBjLWFyZXMncyAtLWVuYWJsZS1kZWJ1ZworCistIFByZXZlbnQgY29weWluZyAnc291cmNlZCcgbWFucGFnZXMgZm9yIGJ1aWxkIHRhcmdldHMgdGhhdCBkb24ndCB1c2UgdGhlbS4KKworRGFuaWVsIFN0ZW5iZXJnICgyMyBNYXkgMjAwOSkKKy0gbWlub3IgZWRpdHMKKworWWFuZyBUc2UgKDIxIE1heSAyMDA5KQorLSBJbmNsdWRlIC5wZGYgdmVyc2lvbnMgb2YgYy1hcmVzIG1hbiBwYWdlcyBpbiBkaXN0cmlidXRpb24gdGFyYmFsbC4KKworLSBBbGxvdyBnZW5lcmF0aW9uIG9mIC5odG1sIGFuZCAucGRmIHZlcnNpb25zIG9mIGMtYXJlcyBtYW4gcGFnZXMuCisKK0dpc2xlIFZhbmVtICgyMSBNYXkgMjAwOSkKKy0gJChPQkpfRElSKS9hcmVzX2dldG9wdC5vIG11c3QgYmUgY2xlYW5lZCBleHBsaWNpdGx5LgorCitZYW5nIFRzZSAoMjAgTWF5IDIwMDkpCistIE1lbnRpb24gbGFzdCBjaGFuZ2VzCisKKy0gSW5pdGlhbCBhcmVzX2xpYnJhcnlfY2xlYW51cCgzKSBtYW4gcGFnZQorCistIFVwZGF0ZSBtYW4gcGFnZQorCistIFVwZGF0ZSBtYW4gcGFnZQorCistIEluaXRpYWwgYXJlc19saWJyYXJ5X2luaXQoMykgbWFuIHBhZ2UgYXR0ZW1wdAorCistIEZvcmNlIHJldmlzaW9uIHVwZGF0ZSwgdG8gZm9yY2UgQ1ZTIHRvIHVwZGF0ZSB0aGUgJElkIGRhdGUgc3RyaW5nIGZvcm1hdAorCistIEFkZCBzYW1lIGNvcHlyaWdodCBub3RpY2UgYXMgb3RoZXIgYy1hcmVzIGZpbGVzCisKKy0gRml4IGNhc2UKKworLSBSZW1vdmUgcnVuLXRpbWUgcmVxdWlyZW1lbnQgZm9yIGFkdmFwaTMyLmRsbCBzaW5jZQorICBjLWFyZXMgY2FuIHdvcmsgZXZlbiB3aXRoIG5vIGFkdmFwaTMyLmRsbCBhdCBhbGwuCisKKy0gSW50ZW50aW9uYWxseSBhdm9pZCBjaGVja2luZyBpZiB0aGUgYWRkcmVzcyBvZiBTeXN0ZW1GdW5jdGlvbjAzNiwgYS5rLmEuCisgIFJ0bEdlblJhbmRvbSwgaGFzIGJlZW4gbG9jYXRlZCBvciBub3QuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgb24KKyAgV2luWFAgYW5kIGxhdGVyLiBXaGVuIHVuYXZhaWxhYmxlIGMtYXJlcyB1c2VzIHBvcnRhYmxlIHJhbmQoKSBmdW5jdGlvbi4KKworLSAtIFByb3ZpZGUgaW4gZXh0ZXJuYWwgaW50ZXJmYWNlIHByZXByb2Nlc3NvciBzeW1ib2wgZGVmaW5pdGlvbnMgZm9yCisgICAgQ0FSRVNfSEFWRV9BUkVTX0xJQlJBUllfSU5JVCBhbmQgQ0FSRVNfSEFWRV9BUkVTX0xJQlJBUllfQ0xFQU5VUAorICAgIHRvIGVhc2UgdGhlIHVzZSBvZiBuZXcgY2FwYWJpbGl0aWVzLgorICAKKyAgLSBNb3ZlIGFyZXNfdmVyc2lvbigpIHByb3RvdHlwZSB0byBhcmVzLmgKKworLSBJbnRyb2R1Y3Rpb24gb2YgYXJlc19saWJyYXJ5X2luaXQoKSBhbmQgYXJlc19saWJyYXJ5X2NsZWFudXAoKQorCistIEludHJvZHVjdGlvbiBvZiBhcmVzX2xpYnJhcnlfaW5pdCgpIGFuZCBhcmVzX2xpYnJhcnlfY2xlYW51cCgpCisKKy0gcmVtb3ZlIG91dGRhdGVkIGNvbW1lbnQKKworLSBGaXggcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KKworLSBmaVggKl9fU09DS0xFTl9UIGRlZmluaXRpb25zIGZvciByZW1haW5pbmcgdGFyZ2V0cworCistICpfX1NPQ0tMRU5fVCBkZWZpbml0aW9ucyBmb3IgT1M0MDAgYWxyZWFkeSBmaXhlZAorCistIGZJWCAqX19TT0NLTEVOX1QgZGVmaW5pdGlvbnMgZm9yIFNZTUJJQU4zMiBhbmQgVk1TIHRhcmdldHMKKworRGFuaWVsIFN0ZW5iZXJnICgxMSBNYXkgMjAwOSkKKy0gLSBHcmVnb3IgSmFzbnkgbWFkZSBjLWFyZXMgbGluayB3aXRoIGxpYnRvb2wgJ3MgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IG9wdGlvbiB0bworICAgIG9ubHkgZXhwb3NlIGZ1bmN0aW9ucyBzdGFydGluZyB3aXRoIGFyZXNfLgorCitZYW5nIFRzZSAoMTEgTWF5IDIwMDkpCistIFJlbW92ZSBleHBlcmltZW50YWwgY2hlY2suIEN1cnJlbnRseSB0aGVyZSdzIG5vIG5lZWQgZm9yIGl0LgorCistIEZpeCBhbiBtNCBvdmVycXVvdGluZyB0cmlnZ2VyaW5nIGEgc3B1cmlvdXMgJ0FTX1RSX0NQUCcgc3ltYm9sIGRlZmluaXRpb24KKyAgYXR0ZW1wdCBpbiBnZW5lcmF0ZWQgY29uZmlnLmgKKworLSBQcm9wZXIgbmFtaW5nIGZvciB0aGUgZXhwZXJpbWVudGFsIGNvbXBpbGVyIHRlc3QgYW5kIG1vdmVkIHRvICotY29tcGlsZXJzLm00CisKKy0gTW92ZWQgKl9DSEVDS19DT01QSUxFUl9IQUxUX09OX0VSUk9SIGFuZCAqX0NIRUNLX0NPTVBJTEVSX0FSUkFZX1NJWkVfTkVHQVRJVkUgdG8gKi1jb21waWxlcnMubTQgYWxvbmcgd2l0aCBvdGhlciAqX0NIRUNLX0NPTVBJTEVSXyoKKworLSBmSVggKl9fU09DS0xFTl9UIGRlZmluaXRpb25zIGZvciBPUzQwMCBhbmQgZ2VuZXJpYyBHQ0MgdGFyZ2V0cworCistIGZJWCAqX19TT0NLTEVOX1QgZGVmaW5pdGlvbnMgZm9yIE1WUyBhbmQgMzcwIHRhcmdldHMKKworLSBmSVggKl9fU09DS0xFTl9UIGRlZmluaXRpb25zIGZvciBzZXZlcmFsIFdpbmRvd3MgdGFyZ2V0IHRvb2wtY2hhaW5zCisKKy0gSFAtVVgncyBYL09wZW4gbmV0d29yayBsaWJyYXJ5IHJlcXVpcmVtZW50IGNoZWNrIGZvbGxvdy11cAorCistIEhQLVVYJ3MgWC9PcGVuIG5ldHdvcmsgbGlicmFyeSByZXF1aXJlbWVudCBjaGVjayBmb2xsb3ctdXAKKworLSBVc2UgYnVpbGQtdGltZSBjb25maWd1cmVkIGFyZXNfc29ja2xlbl90IGluc3RlYWQgb2Ygc29ja2xlbl90CisKKy0gRGF2aWQgTWNDcmVlZHkncyAiVFBGLXBsYXRmb3JtIHNwZWNpZmljIGNoYW5nZXMgdG8gdmFyaW91cyBmaWxlcyIgcGF0Y2ggZm9sbG93LXVwCisKK0RhbmllbCBTdGVuYmVyZyAoMSBNYXkgMjAwOSkKKy0gcy9saWJjdXJsL2MtYXJlcworCistIHZlcnNpb24gbnVtYmVyIHR5cG8gZml4CisKK1lhbmcgVHNlICgxIE1heSAyMDA5KQorLSBEYXZpZCBNY0NyZWVkeSdzICJUUEYtcGxhdGZvcm0gc3BlY2lmaWMgY2hhbmdlcyB0byB2YXJpb3VzIGZpbGVzIiBwYXRjaAorCistIENoZWNrIGRlZmluaXRpb24gb2YgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCB3aXRoIHRoZSBjb21waWxlcgorCistIENoZWNrIGlmIFgvT3BlbiBuZXR3b3JrIGxpYnJhcnkgaXMgcmVxdWlyZWQKKworLSBjb3BlIHdpdGggYXJlc19idWlsZC5oIGFuZCBhcmVzX3J1bGVzLmggZm9sbG93LXVwCisKKy0gQWRkZWQgc29tZSBub3RlcyByZWdhcmRpbmcgYXJlc19idWlsZC5oCisKKy0gZml4IEVPTAorCistIGZpeCBFT0wKKworLSBjb3BlIHdpdGggYXJlc19idWlsZC5oIGFuZCBhcmVzX3J1bGVzLmgKKworLSBidWlsZGNvbmYuYmF0IGZvciBDVlMtdHJlZSBjLWFyZXMKKworLSBVc2UgJ3Vuc2lnbmVkIGludCcgaW5zdGVhZCBvZiBzaXplX3QgYXR0ZW1wdGluZyB0byBhdm9pZCBoZWFkZXIgaW5jbHVzaW9uCisKKy0gTmV0V2FyZSBMaWJDJ3MgZ2V0cGVlcm5hbWUoKSB0aGlyZCBhcmd1bWVudCBkYXRhIHR5cGUgaXMgc2l6ZV90CisKKy0gUmVtb3ZlIHRlbXBvcmFyeSBkZWJ1ZyB0cmFjaW5nIGZvciBhcmVzX3NvY2tsZW5fdCBXaW5kb3dzIHRhcmdldHMKKworLSBhcmVzX3NvY2tsZW5fdCBmb2xsb3ctdXAKKworLSBhcmVzX2J1aWxkLmggV2luZG93cyBmb2xsb3ctdXAKKworLSBBZGQgdGVtcG9yYXJ5IGRlYnVnIHRyYWNpbmcgZm9yIGFyZXNfc29ja2xlbl90IFdpbmRvd3MgdGFyZ2V0cworCistIGFyZXNfYnVpbGQuaCBOZXRXYXJlIGZvbGxvdy11cAorCistIGFyZXNfYnVpbGQuaCBOZXRXYXJlIGF0dGVtcHQKKworLSBJbml0aWFsIHN0ZXAgdG93YXJkcyBhIGNvbmZpZ3VyZSB0aW1lIGFyZXNfc29ja2xlbl90IGRlZmluaXRpb24KKworLSBpZ25vcmUgc3RhbXAtaCoKKworLSBBZGRlZCBDQVJFU19JTkNMVURFU19TWVNfVFlQRVMKKworLSBJbml0aWFsIHN0ZXAgdG93YXJkcyBhIGNvbmZpZ3VyZSB0aW1lIGN1cmxfc29ja2xlbl90IGRlZmluaXRpb24KKworLSBhdm9pZCB1c2Ugb2YgYWxsb2NhKCkKKworLSBNb3ZlZCBwb3RlbnRpYWwgaW5jbHVzaW9uIG9mIHN5c3RlbSdzIG1hbGxvYy5oIGFuZCBtZW1vcnkuaCBoZWFkZXIgZmlsZXMgdG8KKyAgc2V0dXBfb25jZS5oLiAgSW5jbHVzaW9uIG9mIGVhY2ggaGVhZGVyIGZpbGUgaXMgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YKKyAgTkVFRF9NQUxMT0NfSCBhbmQgTkVFRF9NRU1PUllfSCByZXNwZWN0aXZlbHkuCisKKy0gaWdub3JlCisKK0dpc2xlIFZhbmVtICgxOCBBcHIgMjAwOSkKKy0gQWRkZWQgJy1ESEFWRV9MSU1JVFNfSCcuCisKK1lhbmcgVHNlICgxNyBBcHIgMjAwOSkKKy0gcmVtb3ZlIGNvbXBpbGVyIG9wdGlvbnMgdXNlZCB3aGlsZSBkZWJ1Z2dpbmcgdGhlIGljYyA5LjEgb3B0aW1pemVyIGlzc3VlCisKKy0gbW92ZWQgSEFWRV9MSU1JVFNfSCB0byBjb21tb24gZGVmaW5lcworCistIFNldCBIUC1VWCBjb21waWxlciB3YXJuaW5nIGxldmVsIGJhY2sgdG8gdGhlIG9uZSB0aGF0IGV4cG9zZXMKKyAgdGhlIHNvY2tsZW5fdCBpc3N1ZSBvbiB0aGlzIHBsYXRmb3JtLgorCistIEhBVkVfTElNSVRTX0ggZGVmaW5pdGlvbiBmb3IgTmV0V2FyZSBDTElCCisKKy0gdXNlIEhBVkVfTElNSVRTX0ggc3ltYm9sIHRvIHByb3RlY3QgbGltaXRzLmggaW5jbHVzaW9uCisKKy0gZml4IGNvbXBpbGVyIHdhcm5pbmc6IGltcGxpY2l0IGNvbnZlcnNpb24gc2hvcnRlbnMgNjQtYml0IHZhbHVlIGludG8gYSAzMi1iaXQgdmFsdWUKKworLSBzL3VfbG9uZy91bnNpZ25lZCBsb25nLworCistIERvIG5vdCBoYWx0IGNvbXBpbGF0aW9uIHdoZW4gdXNpbmcgVlMyMDA4IHRvIGJ1aWxkIGEgV2luZG93cyAyMDAwIHRhcmdldAorCistIGlnbm9yZQorCitQaGlsIEJsdW5kZWxsICgzIEZlYiAyMDA5KQorLSAqIEZlYnJ1YXJ5IDMgMjAwOSAoUGhpbCBCbHVuZGVsbCkKKyAgLSBJZiB0aGUgc2VydmVyIHJldHVybnMgZ2FyYmFnZSBvciBub3RoaW5nIGF0IGFsbCBpbiByZXNwb25zZSB0byBhbiBBQUFBIHF1ZXJ5LAorICAgIGdvIG9uIGFuZCBhc2sgZm9yIEEgcmVjb3JkcyBhbnl3YXkuCisKK0RhbmllbCBTdGVuYmVyZyAoMzEgSmFuIDIwMDkpCistIC0gYXJlc19nZXRob3N0YnluYW1lKCkgbm93IGFjY2VwdHMgJ0FGX1VOU1BFQycgYXMgYSBmYW1pbHkgZm9yIHJlc29sdmluZworICAgIGVpdGhlciBBRl9JTkVUNiBvciBBRl9JTkVULiBJdCB3b3JrcyBieSBhY2NlcHRpbmcgYW55IG9mIHRoZSBsb29rc3VwcyBpbiB0aGUKKyAgICBob3N0cyBmaWxlLCBhbmQgaXQgcmVzb2x2ZXMgdGhlIEFBQUEgZmllbGQgd2l0aCBhIGZhbGxiYWNrIHRvIEEuCisKK0dpc2xlIFZhbmVtICgxOCBKYW4gMjAwOSkKKy0gZm9wZW4oKSByZXR1cm5zIGVycm9yIGluICdlcnJubycgZXZlbiBvbiBXaW5kb3dzLgorICBTbyBkb24ndCB1c2UgRVJSTk8gKEdldExhc3RFcnJvcigpKS4gVHJpbW1lZCB0cmFpbGluZworICBibGFua3MuCisKKy0gQ29uc3RpZmllZCBzb21lIGFyZ3VtZW50cyBpbiBsb2NhbCBmdW5jdGlvbnMuCisKK0RhbmllbCBTdGVuYmVyZyAoMTQgSmFuIDIwMDkpCistIC0gYXJlcy5oIG5vIGxvbmdlciB1c2VzIHRoZSBIQVZFX1NUUlVDVF9JTjZfQUREUiBkZWZpbmUgY2hlY2ssIGJ1dCBpbnN0ZWFkIGl0CisgICAgbm93IGRlY2xhcmVzIHRoZSBwcml2YXRlIHN0cnVjdCBhcmVzX2luNl9hZGRyIGZvciBhbGwgc3lzdGVtcyBpbnN0ZWFkIG9mCisgICAgcmVseWluZyBvbiBvbmUgcG9zc2libHkgbm90IHByZXNlbnQgaW4gdGhlIHN5c3RlbS4KKworUGhpbCBCbHVuZGVsbCAoMTMgSmFuIDIwMDkpCistIC0gYXJlc19fc2VuZF9xdWVyeSgpIG5vdyB2YXJpZXMgdGhlIHJldHJ5IHRpbWVvdXQgcHNldWRvLXJhbmRvbWx5IHRvIGF2b2lkCisgICAgcGFja2V0IHN0b3JtcyB3aGVuIHNldmVyYWwgcXVlcmllcyB3ZXJlIHN0YXJ0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKworRGFuaWVsIFN0ZW5iZXJnICgxMSBKYW4gMjAwOSkKKy0gLSBQaGlsIEJsdW5kZWxsIGFkZGVkIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBhcmVzX19leHBhbmRfbmFtZV9mb3JfcmVzcG9uc2UoKQorICAgIHRoYXQgaXMgbm93IHVzZWQgYnkgdGhlIGFyZXNfcGFyc2VfKl9yZXBseSgpIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZQorICAgIGFyZXNfZXhwYW5kX25hbWUoKSBzaW1wbHkgdG8gZWFzaWVyIHJldHVybiBBUkVTX0VCQURSRVNQIGZvciB0aGUgY2FzZXMgd2hlcmUKKyAgICB0aGUgbmFtZSBleHBhbnNpb24gZmFpbHMgYXMgaW4gcmVzcG9uc2VzIHRoYXQgcmVhbGx5IGlzbid0IGV4cGVjdGVkLgorCitHdW50ZXIgS25hdWYgKDMwIERlYyAyMDA4KQorLSBhZGRlZCBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIHRvIGFyZXMgTWFrZWZpbGUubmV0d2FyZSBhbmQgc3luYydkIHdpdGggb3RoZXIgTWFrZWZpbGUubmV0d2FyZS4KKworRGFuaWVsIFN0ZW5iZXJnICg5IERlYyAyMDA4KQorLSB1c2UgdGhlIG5ldyBVUkwKKworLSBzdGFydCBvdmVyIG9uIHRoZSAxLjYuMSByZWxlYXNlLi4uCisKK1ZlcnNpb24gMS42LjAgKDkgRGVjIDIwMDgpCisKK0RhbmllbCBTdGVuYmVyZyAoOSBEZWMgMjAwOCkKKy0gYWRkIHNwYWNlCisKK0dpc2xlIFZhbmVtICg5IERlYyAyMDA4KQorLSBGaXggZm9yIFdpbjMyIHRhcmdldHMgdXNpbmcgV2F0dC0zMi4KKworRGFuIEZhbmRyaWNoICg5IERlYyAyMDA4KQorLSBDODkgY29tcGlsZXJzIChsaWtlIE1pbml4JyBBQ0spIG9ubHkgbmVlZCB0byBoYW5kbGUgMzEgZnVuY3Rpb25zIGFyZ3VtZW50cworICBzbyBzcGxpdCBhIGxvbmcgc3ByaW50ZiBpbnRvIHR3byBjYWxscyB0byBnZXQgYmVsb3cgdGhhdCBudW1iZXIuCisKK0dpc2xlIFZhbmVtICg4IERlYyAyMDA4KQorLSBBZGRlZCBuZWVkZWQgZGVmaW5lcyBmb3IgV2F0dC0zMiBvbiBXaW5kb3dzLgorCistIFVuZGVmaW5lICdvcHRhcmcnLCAnb3B0aW5kJyBhbmQgJ29wdGVycicgd2hlbiB1c2luZyBXYXR0LTMyCisgICh0byBnZXQgY29ycmVjdCBsaW5rYWdlIG9uIFdpbmRvd3MpLgorCistIGFyZXNfd3JpdGV2KCkgc2hhbGwgbm90IGJlIGV4cG9ydGVkIHdoZW4gdXNpbmcgV2F0dC0zMiAoaGFzIHdyaXRldikuCisgIEFkZGVkIF9VU0VfMzJCSVRfVElNRV9UIHRvIGF2b2lkIHJ1bnRpbWUgd2FybmluZy4gQXBwbGllcyB0bworICBWQy0yMDA4KyBvbmx5LgorCistIFJlbW92ZWQgdW5uZWVkZWQgZGVmaW5lcyBIQVZFX1NJR05BTF9ILCBIQVZFX1NJR19BVE9NSUNfVCwKKyAgUkVUU0lHVFlQRSBhbmQgSEFWRV9QUk9DRVNTX0guCisKK0RhbmllbCBTdGVuYmVyZyAoNCBEZWMgMjAwOCkKKy0gdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrIG1hbiBwYWdlCisKKy0gR3JlZ29yIEphc255IHByb3ZpZGVkIHRoZSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrKCksCisgIGFuZCBJIGVkaXRlZCBpdCB0byBhbHNvIGdldCBkdXBlZCBieSBhcmVzX2R1cCgpLgorCitEYW4gRmFuZHJpY2ggKDQgRGVjIDIwMDgpCistIEJyaW5nIHRoZSBzeXMvaW5jbHVkZS5oIGluY2x1ZGUgdGVzdCBpbiBsaW5lIHdpdGggY3VybCdzLgorCitEYW5pZWwgU3RlbmJlcmcgKDMgRGVjIDIwMDgpCistIExldCdzIG5vdCBjYWxsIGFyZXNfc2F2ZV9vcHRpb25zKCkgZGVwcmVjYXRlZCBqdXN0IHlldAorCistIEludHJvZHVjZSBhcmVzX2R1cCgzKSBhbmQgbmV3IHRob3VnaHRzIGFib3V0IEFQSS9BQkkgYW5kIGhvdyB0byBtb3ZlIGZvcndhcmRzLgorICBBbHNvIGRpc2N1c3NlZCBvbiB0aGUgbWwuCisKK0RhbiBGYW5kcmljaCAoMiBEZWMgMjAwOCkKKy0gTWFrZSBzdXJlIHN5cy9zb2NrZXQuaCBpcyBpbmNsdWRlZCBiZWZvcmUgbmV0aW5ldC9pbi5oIChyZXF1aXJlZCBieQorICBPcGVuV2F0Y29tIEMsIGFuZCBjb25kb25lZCBieSBTVVMpCisKK0RhbmllbCBTdGVuYmVyZyAoMSBEZWMgMjAwOCkKKy0gbWlub3IgaW5kZW50IGZpeAorCistIENvbnZlcnQgdGhlIHB1YmxpYyBjb25maWcgc3RydWN0IHRvIHRoZSBzYW1lIGJpbmFyeSBzaXplL2NvbnN0cnVjdCBhcyBpbiB0aGUKKyAgbGF0ZXN0IHJlbGVhc2VzIHRvIHJlbWFpbiBBQkkgY29tcGF0aWJsZS4KKworR2lzbGUgVmFuZW0gKDI5IE5vdiAyMDA4KQorLSBBZGRlZCAnLURIQVZFX0dFVEhPU1ROQU1FJy4KKworRGFuIEZhbmRyaWNoICgyOSBOb3YgMjAwOCkKKy0gTWFrZSBzdXJlIHN5cy9zb2NrZXQuaCBpcyBpbmNsdWRlZCBiZWZvcmUgbmV0aW5ldC9pbi5oIChyZXF1aXJlZCBieQorICBPcGVuV2F0Y29tIEMpCisKKy0gTmV0d2FyZSBoYXMgZ2V0aG9zdG5hbWUoKQorCistIEZpeGVkIGEgY291cGxlIG9mIHR5cG9zCisKKy0gRG9uJ3QgdHdlYWsgdGhlIEhBVkVfKiBtYWNyb3Mgd2hlbiB1c2luZyBhdXRvY29uZgorCistIE1ha2UgdXNlIG9mIGdldGhvc3RuYW1lKCkgY29uZGl0aW9uYWwgb24gaXQgYmVpbmcgYXZhaWxhYmxlCisKKy0gT25seSBzZXQgVENQX05PREVMQVkgd2hlbiBpdCBleGlzdHMKKworRGFuaWVsIFN0ZW5iZXJnICgyOCBOb3YgMjAwOCkKKy0gdXBkYXRlZCB3aXRoIGNoYW5nZXMsIHByZXBhcmluZyBmb3IgYSByZWxlYXNlIHNvb24KKworWWFuZyBUc2UgKDI2IE5vdiAyMDA4KQorLSBHZXJhbGQgQ29tYnMgZml4ZWQgYSBidWcgaW4gYXJlc19wYXJzZV9wdHJfcmVwbHkoKSB3aGljaCB3b3VsZCBjYXVzZSBhCisgIGJ1ZmZlciB0byBzaHJpbmsgaW5zdGVhZCBvZiBleHBhbmQgaWYgYSByZXBseSBjb250YWluZWQgOCBvciBtb3JlIHJlY29yZHMuCisKKy0gQnJhZCBTcGVuY2VyIHByb3ZpZGVkIGNoYW5nZXMgdG8gYWxsb3cgYnVpbGRjb25mIHRvIHdvcmsgb24gT1MgWC4KKworLSBJbiBwcmVwYXJhdGlvbiBmb3IgdGhlIHVwY29tbWluZyBJUHY2IG5hbWVzZXJ2ZXJzIHBhdGNoLCB0aGUgaW50ZXJuYWwKKyAgYXJlc19hZGRyIHVuaW9uIGlzIG5vdyBjaGFuZ2VkIGludG8gYW4gaW50ZXJuYWwgc3RydWN0IHdoaWNoIGFsc28gaG9sZHMKKyAgdGhlIGFkZHJlc3MgZmFtaWx5LgorCitEYW4gRmFuZHJpY2ggKDIwIE5vdiAyMDA4KQorLSBNYWtlIGNoZWNraW5nIGZvciBzdHJ1Y3QgaWZyZXEgYSBwcmVyZXF1aXNpdGUgZm9yIHNldHRpbmcKKyAgSEFWRV9JT0NUTF9TSU9DR0lGQUREUiBzaW5jZSBpdCdzIG5lZWRlZCB0byB1c2UgU0lPQ0dJRkFERFIgYW5kIFdhdGNvbSBDCisgIGRvZXNuJ3QgY3VycmVudGx5IGRlZmluZSBpdC4KKworRGFuaWVsIFN0ZW5iZXJnICgyMCBOb3YgMjAwOCkKKy0gdXNlIHVuc2lnbmVkIHNob3J0IGJldHRlciBpbnRlYWQgb2YgbWl4aW5nIHdpdGggaW50cyB0byBwcmV2ZW50IGNvbXBpbGVyCisgIHdhcm5pbmdzCisKKy0gcGxlYXNlIHRoZSBwaWNreSBjb21waWxlcnMgYnkgc3RheWluZyB3aXRoIHNob3J0IGFzIHRoZSBkYXRhIHdlIGdldCBpcyBzaG9ydAorICBvbmx5CisKKy0gLSBCcmFkIFNwZW5jZXIgYnJvdWdodCB0aGUgbmV3IGZ1bmN0aW9uIGFyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlKCkgd2hpY2ggc2ltcGx5CisgICAgcmVzb2x2ZXMgYSBob3N0IG5hbWUgZnJvbSB0aGUgZ2l2ZW4gZmlsZSwgdXNpbmcgdGhlIHJlZ3VsYXIgaG9zdHMgc3ludGF4LgorCitZYW5nIFRzZSAoMTkgTm92IDIwMDgpCistIHVzZXIgcHJvdmlkZWQgUEFUSF9TRVBBUkFUT1IgYWx3YXlzIG92ZXJyaWRlcyBhdXRvLWRldGVjdGVkIG9uZQorCistIGF0dGVtcHRpbmcgdG8ga2VlcCBsaW5lcyBiZWxvdyA4MCBjaGFycworCistIHByb3ZpZGUgYSBjb21tb24gUEFUSF9TRVBBUkFUT1IgY2hlY2sgbWV0aG9kIHdoaWNoIGlzIHJlcXVpcmVkIGJ5CisgIHVwY29tbWluZyB3b3JrIHRvIHN1cHBvcnQgdGhlIGJyb2FkZXN0IHJhbmdlIG9mIEF1dG9jb25mIHZlcnNpb25zCisKKy0gY2hlY2sgZm9yIGdldGhvc3RieWFkZHIgYW5kIGdldGhvc3RieW5hbWUgYXMgaXQgaXMgZG9uZSBmb3Igb3RoZXIgZnVuY3Rpb25zCisKKy0gTWFrZSBjb25maWd1cmUgc2NyaXB0IGNoZWNrIGlmIGlvY3RsIHdpdGggdGhlIFNJT0NHSUZBRERSIGNvbW1hbmQgY2FuIGJlCisgIHVzZWQsIGFuZCBkZWZpbmUgSEFWRV9JT0NUTF9TSU9DR0lGQUREUiBpZiBhcHByb3ByaWF0ZS4KKworLSBmaXggbGVmdG92ZXIgZnJvbSBwcmV2aW91cyBjb21taXQKKworLSBmaXggaW5ldF9wdG9uKCkgcnVudGltZSBjb25maWd1cmUgY2hlY2sKKworLSB0cmltIGRvd24gY29uZmlndXJlIHNjcmlwdCBzaXplCisKK0RhbmllbCBTdGVuYmVyZyAoMTUgTm92IDIwMDgpCistIEZpeGVkIGFuIE9PTSBjb25kaXRpb24gcmVwb3J0ZWQgYnkgSmltIE1leWVyaW5nCisKK1lhbmcgVHNlICgxNCBOb3YgMjAwOCkKKy0gZml4IHR5cG8gYWZmZWN0aW5nIGluY2x1c2lvbiBvZiA8YXJwYS9pbmV0Lmg+IGluIGNvbmZpZ3VyZQorICBjaGVja3MgZm9yIGluZXRfbnRvYV9yKCkgaW5ldF9udG9wKCkgYW5kIGluZXRfcHRvbigpCisKKy0gI2luY2x1ZGUgPHN0cmluZy5oPiBpbiB0aGUgZ2V0YWRkcmluZm8oKSBydW50aW1lIGNoZWNrIGZvciB0aGUgbWVtc2V0KCkgcHJvdG90eXBlCisKKy0gZml4IHN5bWJvbCBkZWZpbml0aW9uIGNoZWNrIGZvciBmY250bC5oIGluY2x1c2lvbgorCistIFJlZmFjdG9yIGNvbmZpZ3VyZSBzY3JpcHQgZGV0ZWN0aW9uIG9mIGZ1bmN0aW9ucyB1c2VkIHRvIHNldCBzb2NrZXRzIGludG8KKyAgbm9uLWJsb2NraW5nIG1vZGUsIGFuZCBkZWNvdXBsZSBmdW5jdGlvbiBkZXRlY3Rpb24gZnJvbSBmdW5jdGlvbiBjYXBhYmlsaXR5LgorCitEYW5pZWwgU3RlbmJlcmcgKDEgTm92IDIwMDgpCistIEFkZGVkIGEgVE9ETyBmaWxlIHRvIGxpc3QgdGhpbmdzIHdlIHdhbnQgY2hhbmdlZCwgYWRkZWQgb3IgZml4ZWQuCisKKy0gLSBDYXJsbyBDb250YXZhbGxpIGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBnbGliYyAicm90YXRlIiBvcHRpb24sIGFzIGRvY3VtZW50ZWQKKyAgICBpbiBtYW4gcmVzb2x2LmNvbmY6CisgIAorICAgIGNhdXNlcyByb3VuZCByb2JpbiBzZWxlY3Rpb24gb2YgbmFtZXNlcnZlcnMgZnJvbSBhbW9uZyB0aG9zZSBsaXN0ZWQuICBUaGlzCisgICAgaGFzIHRoZSBlZmZlY3Qgb2Ygc3ByZWFkaW5nIHRoZSBxdWVyeSBsb2FkIGFtb25nIGFsbCBsaXN0ZWQgc2VydmVycywgcmF0aGVyCisgICAgdGhhbiBoYXZpbmcgYWxsIGNsaWVudHMgdHJ5IHRoZSBmaXJzdCBsaXN0ZWQgc2VydmVyIGZpcnN0IGV2ZXJ5IHRpbWUuCisgIAorICAgIFlvdSBjYW4gZW5hYmxlIGl0IHdpdGggQVJFU19PUFRfUk9UQVRFCisKK1lhbmcgVHNlICgxIE5vdiAyMDA4KQorLSBBZGp1c3QgV0lOMzIgZnJlZWFkZHJpbmZvLCBnZXRhZGRyaW5mbyBhbmQgZ2V0bmFtZWluZm8gYXZhaWxhYmlsaXR5CisKKy0gV0lOMzIgYXZhaWxhYmlsaXR5IG9mIGZyZWVhZGRyaW5mbywgZ2V0YWRkcmluZm8gYW5kIGdldG5hbWVpbmZvIGZ1bmN0aW9ucyBpcyBxdWl0ZQorICBjb252b2x1dGVkLCBjb21waWxlciBkZXBlbmRhbnQgYW5kIGluIHNvbWUgY2FzZXMgZXZlbiBidWlsZCB0YXJnZXQgZGVwZW5kYXQuCisKKy0gY2hlY2sgZm9yIGZyZWVhZGRyaW5mbygpIGF0IGNvbmZpZ3VyYXRpb24gcGhhc2UKKworLSB1cGRhdGUgYWNsb2NhbCBmaWxlIHNlcmlhbCBudW1iZXIKKworLSByZW1vdmUgdmVyaWZpY2F0aW9uIG9mIHRoZSBmcmVlYWJpbGl0eSBvZiB0aGUgYWRkcmluZm8gc3RydWN0IHBvaW50ZXIgbWVtYmVycworCistIGZpeCBjb21tZW50CisKKy0gbWFrZSBDSEVDS19GVU5DX0dFVEFERFJJTkZPX1VORlJFRUFCTEVfQUlfQUREUgorICAgYW5kIENIRUNLX0ZVTkNfR0VUQUREUklORk9fVU5GUkVFQUJMRV9BSV9DQU5PTk5BTUUKKyAgaW50ZXJuYWwgdG8gQ0hFQ0tfRlVOQ19HRVRBRERSSU5GTworCistIGZpeCBsZWZ0b3ZlcgorCistIEluaXRpYWwgYXR0ZW1wdCB0byBkZXRlY3QgYXQgY29uZmlndXJhdGlvbiB0aW1lIGlmIHRoZSBnZXRhZGRyaW5mbygpCisgIGZ1bmN0aW9uIHJldHVybnMgYW4gYWRkcmluZm8gd2l0aCBhbiB1bmZyZWVhYmxlIGFpX2Nhbm9ubmFtZSBtZW1iZXIgcHRyLgorCistIEluaXRpYWwgYXR0ZW1wdCB0byBkZXRlY3QgYXQgY29uZmlndXJhdGlvbiB0aW1lIGlmIHRoZSBnZXRhZGRyaW5mbygpCisgIGZ1bmN0aW9uIHJldHVybnMgYW4gYWRkcmluZm8gd2l0aCBhbiB1bmZyZWVhYmxlIGFpX2FkZHIgbWVtYmVyIHB0ci4KKworLSBpY2MgYWRqdXN0bWVudHM6CisgIAorICAgIFNlbGVjdCBBTlNJIEM4OSBkaWFsZWN0IHBsdXMgR05VIGV4dGVuc2lvbnMsIGFnYWluLgorCistIHNvbWUgbW9yZSB0ZW1wb3JhcnkgbWFnaWMgZm9yIHRoZSBpY2Mgc2VnLWZhdWx0IGlzc3VlCisKKy0gaWNjIHBlcm1hbmVudCBhZGp1c3RtZW50OgorICAKKyAgICBTZWxlY3QgcHJlY2lzZSBmbG9hdGluZy1wb2ludCBtb2RlbCwgb3RoZXJ3aXNlIGRvdWJsZXMgYXJlIGxlc3MgdGhhbiA2NC1iaXQgd2lkZQorICAKKyAgaWNjIHRlc3QgYWRqdXN0bWVudDoKKyAgCisgICAgU2VsZWN0IGM4OSBkaWFsZWN0CisKKy0gaWNjIGFkanVzdG1lbnRzOgorICAKKyAgICBFbmFibGUgbW9yZSBpY2Mgd2FybmluZ3MuCisgIAorICAgIE9wdGltaXphdGlvbiBkaXNhYmxpbmcgb3B0aW9ucyB1c2VkIG9ubHkgZm9yIGljYyA5LjEKKworLSAjaW5jbHVkZSA8c3RkbGliLmg+IGZvciBleGl0KCkgcHJvdG90eXBlCisKKy0gc29tZSBtb3JlIHRlbXBvcmFyeSBtYWdpYyBmb3IgdGhlIGljYyBzZWctZmF1bHQgaXNzdWUKKworLSByZW1vdmUgZnJvbSBjb25maWd1cmUuYWMgdGVtcG9yYXJ5IG1hZ2ljIGZvciB0aGUgaWNjIHNlZy1mYXVsdCBpc3N1ZQorCistIHNvbWUgbW9yZSB0ZW1wb3JhcnkgbWFnaWMgZm9yIHRoZSBpY2Mgc2VnLWZhdWx0IGlzc3VlCisKKy0gQ2hhcmxlcyBIYXJkaW4gcGF0Y2g6CisgIAorICAtIGhhbmRsZXMgdGhlIEVJTlBST0dSRVNTIGZvciBVRFAgY29ubmVjdHMKKyAgLSB1c2VzIGNsb3Nlc29ja2V0IGluc3RlYWQgb2YgY2xvc2Ugb24gc29tZSBwYXRocyB0aGF0IHdlcmUgbm90aWNlZAorCistIHNvbWUgbW9yZSB0ZW1wb3JhcnkgbWFnaWMgZm9yIHRoZSBpY2Mgc2VnLWZhdWx0IGlzc3VlCisKKy0gbWVzc2FnZXMgaW5pdGlhbGx5IGludGVuZGVkIG9ubHkgZm9yIGRlYnVnIHB1cnBvc2VzLCBub3cgYmVjb21lIHBlcm1hbmVudAorICBzaW5jZSB0aGVzZSBhcmUgZXh0cmVtZWx5IHVzZWZ1bCB3aGVuIGNvbXBpbGVyIHJlamVjdHMgYSBzZXQgb2Ygb3B0aW9ucy4KKworLSBmaXggY29tcGlsZXIgd2FybmluZworCistIGZpeCBtaXNzaW5nIGRvdWJsZS1xdW90ZXMKKworRGFuaWVsIFN0ZW5iZXJnICgxNyBPY3QgMjAwOCkKKy0gQ2hhcmxlcyBIYXJkaW4gbWFkZSBhZGlnIHN1cHBvcnQgYSByZWd1bGFyIG51bWVyaWNhbCBkb3R0ZWQgSVAgYWRkcmVzcyBmb3IgdGhlCisgIC1zIG9wdGlvbiBhcyB3ZWxsLgorCitZYW5nIFRzZSAoMTYgT2N0IDIwMDgpCistIHNvbWUgbW9yZSB0ZW1wb3JhcnkgbWFnaWMgZm9yIHRoZSBpY2Mgc2VnLWZhdWx0IGlzc3VlCisKKy0gRW5zdXJlIHRoYXQgc2hlbGwgdmFyaWFibGUgY29udGVudHMgd2hpY2ggaGF2ZSBhY3RpdmUgbWVhbmluZworICB0byB0aGUgc2hlbGwgZWNobyBjb21tYW5kIGFyZSBub3QgaW50ZXJwcmV0ZWQgd2hlbiB0cnlpbmcgdG8KKyAgcmVtb3ZlIGV4dHJhIHdoaXRlc3BhY2UgZnJvbSBzaGVsbCB2YXJpYWJsZSBjb250ZW50LgorCistIEFkanVzdCBXYXRjb20gQyB3YXJuaW5nczoKKyAgCisgICAgRGlzYWJsZSB3YXJuaW5ncyBvbiBzdHJ1Y3R1cmUgbWVtYmVycyBwYWRkaW5nLgorCistIFdpdGggdGhpcyBjaGFuZ2UgU29sYXJpcyB0YXJnZXQgYnVpbGRzIHdpbGwgbm93IGJlIGRvbmUgd2l0aCBfUkVFTlRSQU5UIGRlZmluZWQuCisKKy0gQWRqdXN0IFRpbnkgQyBiYXNpYyBvcHRpb25zOgorICAKKyAgICBSZW1vdmUgLWIgZnJvbSBkZWJ1Zy1lbmFibGVkIGNvbmZpZ3VyYXRpb24sIGFzIFRpbnkgQyBtaWdodCBoYXZlCisgICAgYmVlbiBidWlsdCB3aXRob3V0IHRoZSBtZW1vcnkgYW5kIGJvdW5kcyBjaGVja2VyIHN1cHBvcnQuCisKKy0gQWRqdXN0IEdDQyB3YXJuaW5nczoKKyAgCisgICAgQmV0dGVyIGRpc2FibGUgZm9sbG93aW5nIHdhcm5pbmdzIHdoZW4gY3Jvc3MtY29tcGlsaW5nIHdpdGggYSBnY2Mgb2xkZXIKKyAgICB0aGFuIDMuMCwgdG8gYXZvaWQgd2FybmluZ3MgZnJvbSB0aGlyZCBwYXJ0eSBzeXN0ZW0gaGVhZGVyczoKKyAgCisgICAgICAtV21pc3NpbmctZGVjbGFyYXRpb25zCisgICAgICAtV21pc3NpbmctcHJvdG90eXBlcworICAgICAgLVd1bnVzZWQKKyAgICAgIC1Xc2hhZG93CisKKy0gZml4IHN5bnRheCBlcnJvcgorCistIEluaXRpYWwgYXR0ZW1wdCB0byBkZXRlY3QgV2F0Y29tIEMgY29tcGlsZXIKKworLSBtYWtlIG5hbWluZyBzY2hlbWUgbW9yZSBjb25zaXN0ZW50IGFjcm9zcyB3aG9sZSBmaWxlCisKKy0gQWRqdXN0IEdDQyB3YXJuaW5nczoKKyAgCisgICAgRGlzYWJsZSBmb2xsb3dpbmcgd2FybmluZ3Mgd2hlbiBjcm9zcy1jb21waWxpbmcgd2l0aCBhIGdjYyBvbGRlcgorICAgIHRoYW4gMy4wLCB0byBhdm9pZCB3YXJuaW5ncyBmcm9tIHRoaXJkIHBhcnR5IHN5c3RlbSBoZWFkZXJzOgorICAKKyAgICAgIC1XbWlzc2luZy1wcm90b3R5cGVzCisgICAgICAtV3VudXNlZAorICAgICAgLVdzaGFkb3cKKworLSBBZGp1c3QgR0NDIC0tZW5hYmxlLXdhcm5pbmdzOgorICAKKyAgICBEbyBub3QgZW5hYmxlIC1wZWRhbnRpYyB3aGVuIGNyb3NzLWNvbXBpbGluZyB3aXRoIGEgZ2NjIG9sZGVyCisgICAgdGhhbiAzLjAsIHRvIGF2b2lkIHdhcm5pbmdzIGZyb20gdGhpcmQgcGFydHkgc3lzdGVtIGhlYWRlcnMuCisKKy0gYWRqdXN0IFNHSSBNSVBTcHJvIEMgZGV0ZWN0aW9uCisKKy0gTENDIGNvbXBpbGVyIGFkanVzdG1lbnRzOgorICAKKyAgICBIaWdoZXN0IHdhcm5pbmcgbGV2ZWwgaXMgZG91YmxlIC1BLCBuZXh0IGlzIHNpbmdsZSAtQS4KKyAgICBEdWUgdG8gdGhlIGJpZyBudW1iZXIgb2Ygd2FybmluZ3MgdGhlc2UgdHJpZ2dlciBvbiB0aGlyZAorICAgIHBhcnR5IGhlYWRlciBmaWxlcyBpdCBpcyBpbXByYXRpY2FsIGZvciB1cyB0byB1c2UgYW55IG9mCisgICAgdGhlbSBoZXJlLiBJZiB5b3Ugd2FudCB0aGVtIHNpbXBseSBkZWZpbmUgaXQgaW4gQ1BQRkxBR1MuCisKKy0gcmVtb3ZlIGV4dHJhIHNwYWNlCisKKy0gc3BsaXQgU0dJIGNvbXBpbGVyIGNoZWNrLiBPbmUgZm9yIE1JUFMgQyBhbmQgYW5vdGhlciBmb3IgTUlQU3BybyBDCisKKy0gTENDIGNvbXBpbGVyIGFkanVzdG1lbnRzOgorICAKKyAgICBXYXJuaW5nIGxldmVsIHJlZHVjZWQgZnJvbSBkb3VibGUgLUEgdG8gc2luZ2xlIC1BCisKKy0gSW5pdGlhbCBhdHRlbXB0IHRvIGRldGVjdCBUaW55IEMgY29tcGlsZXIKKworLSBJbml0aWFsIGF0dGVtcHQgdG8gZGV0ZWN0IExDQyBjb21waWxlcgorCistIDEpIGZpeCBidWcgaW4gQ09OVkVSVF9JTkNMVURFX1RPX0lTWVNURU0KKyAgCisgIDIpIERpc2FibGUgU0dJIHJlbWFyazogY29udHJvbGxpbmcgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorCistIHNpbXBsaWZ5IFNHSSBDIGNvbXBpbGVyIGNoZWNrCisKKy0gSFAgQyBhZGp1c3RtZW50czoKKyAgCisgICAgRHVlIHRvIHRoZSBIUC1VWCBzb2NrbGVuX3QgaXNzdWUgaXQgaXMgaW5zYW5lIHRvIHVzZSB0aGUgK3cxIHdhcm5pbmcgbGV2ZWwuCisgICAgSXQgZ2VuZXJhdGVzIG1vcmUgdGhhbiAxMTAwIHdhcm5pbmdzIG9uIHNvY2tsZW5fdCByZWxhdGVkIHN0YXRlbWVudHMuCisgIAorICAgIFVudGlsIHRoZSBpc3N1ZSBpcyBzb21laG93IGZpeGVkIHdlIHdpbGwganVzdCB1c2UgdGhlICt3MiB3YXJuaW5nIGxldmVsLgorCistIEFkZCBkZWJ1ZyB0cmFjaW5nIGZvciBDT01QSUxFUl9XT1JLU19JRkVMU0UKKworLSBjb25maWd1cmUgd2lsbCBhbHNvIHdhcm4gb24gJ3N0cmljdCBjb21waWxlciB3YXJuaW5nJyByZWplY3RlZCBvcHRpb25zCisKKy0gY29udmVydCByZWplY3RlZCBjb21waWxlciBvcHRpb25zIG1lc3NhZ2VzIGludG8gYSB3YXJuaW5ncworCistIHJlbW92ZSBleHRyYSB3aGl0ZXNwYWNlIGZyb20gc3RyaW5nIGluIFNHSSBDIGNoZWNrCisKKy0gb29wcworCistIEluaXRpYWwgYXR0ZW1wdCB0byBkZXRlY3QgU0dJIEMgY29tcGlsZXIKKworLSBIUCBDIGFkanVzdG1lbnRzOgorICAKKyAgICBEaXNhbGxvdyBydW4tdGltZSBkZXJlZmVyZW5jaW5nIG9mIG51bGwgcG9pbnRlcnMuCisgIAorICAgIERpc2FibGUgc29tZSByZW1hcmtzOgorICAKKyAgICAgICM0MjI3OiBwYWRkaW5nIHN0cnVjdCB3aXRoIG4gYnl0ZXMgdG8gYWxpZ24gbWVtYmVyLgorICAKKyAgICAgICM0MjU1OiBwYWRkaW5nIHNpemUgb2Ygc3RydWN0IHdpdGggbiBieXRlcyB0byBhbGlnbm1lbnQgYm91bmRhcnkuCisKKy0gaW1wcm92ZSBwcmVzZW50YXRpb24gb2YgYWNjZXB0ZWQvcmVqZWN0ZWQgZGVidWcvb3B0aW1pemVyIG9wdGlvbnMKKworLSByZWZhY3RvcmluZyBvZiBDT01QSUxFUl9CQVNJQ19PUFRTCisKKy0gSW5pdGlhbCBhdHRlbXB0IHRvIGRldGVjdCBTVU4gQyBjb21waWxlcgorCistIEluaXRpYWwgYXR0ZW1wdCB0byBkZXRlY3QgSFAgQyBjb21waWxlcgorCistIGZpeCBjb21waWxlciB3YXJuaW5nOiAnZG90XzQnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbgorCistIGFkanVzdCBJQ0Nfd2luZG93cyBzZXR0aW5ncworCistIGZpeCBWQVJfU1RSSVAKKworLSBTeW5jIHVwIHdpdGggcmVhbGl0eQorCistIEluaXRpYWwgYXR0ZW1wdCB0byBzdXBwb3J0IGNvbmZpZ3VyZSdzIC0tKGRpc3xlbilhYmxlLW9wdGltaXplCisgIG9wdGlvbiB0byBzcGVjaWZ5IGRpcyhhY3RpdmF0aW9uKSBvZiBjb21waWxlciBvcHRpbWl6YXRpb25zLgorICAKKyAgSWYgb3B0aW9uIGlzIHNwZWNpZmllZCwgaXQgd2lsbCBiZSBob25vcmVkIGluZGVwZW5kYW50IG9mIHRoZQorICAtLShkaXN8ZW4pYWJsZS1kZWJ1ZyBvcHRpb24uCisKKy0gZml4IGNvbW1lbnQKKworLSBJbml0aWFsIGF0dGVtcHQgdG8gc3VwcG9ydCBjb25maWd1cmUncyAtLShkaXN8ZW4pYWJsZS13YXJuaW5ncworICBvcHRpb24gdG8gc3BlY2lmeSBkaXMoYWN0aXZhdGlvbikgb2YgcGlja3kgY29tcGlsZXIgd2FybmluZ3MuCisgIAorICBJZiBvcHRpb24gaXMgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIGhvbm9yZWQgaW5kZXBlbmRhbnQgb2YgdGhlCisgIC0tKGRpc3xlbilhYmxlLWRlYnVnIG9wdGlvbi4KKyAgCisgIElmIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGZvbGxvdyAtLShkaXN8ZW4pYWJsZS1kZWJ1ZworICBzZXR0aW5nLCB3aG9zZSBkZWZhdWx0IGlzIGRpc2FibGVkIGlmIG5vdCBzcGVjaWZpZWQuCisKKy0gZml4IGNvbXBpbGVyIHdhcm5pbmc6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcworCistIG5vdyBjb21waWxlciB3YXJuaW5ncyBhcmUgYWN0aXZhdGVkIGZvciBhbGwgZ2NjIGJ1aWxkcywgbm90IG9ubHkgZGVidWcgb25lcy4KKworLSBVc2UgQ0ZMQUdTIGZvciBpY2MgbGlua2VyIG9wdGlvbnMgaW5zdGVhZCBvZiBMREZMQUdTLAorICBvdGhlcndpc2UgZ2V0aG9zdGJ5bmFtZSgpIGlzIG5vdCBkZXRlY3RlZC4KKworLSB1c2UgYWNfY3ZfY29tcGlsZXIgYW5kIGFjX2N2X2NvbXBpbGVyX251bSB0byBrZWVwIGNvbXBpbGVyIElEIGFuZCB2ZXJzaW9uIG51bWJlcgorCistIFRlbXBvcmFyeSBpY2MgYWRqdXN0bWVudDoKKyAgCisgICAgRGlzYWJsZSBmbG9hdGluZyBwb2ludCBvcHRpbWl6YXRpb25zCisKKy0gSEFWRV9JTkVUX1BUT04gd2lsbCBvbmx5IGJlIGRlZmluZWQgd2hlbiBhbiBJUHY2IGNhcGFibGUgd29ya2luZworICBpbmV0X3B0b24gZnVuY3Rpb24gaXMgYXZhaWxhYmxlLgorCistIEhBVkVfSU5FVF9OVE9QIHdpbGwgb25seSBiZSBkZWZpbmVkIHdoZW4gYW4gSVB2NiBjYXBhYmxlIHdvcmtpbmcKKyAgaW5ldF9udG9wIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZS4KKworLSBudG9hKCkgYW5kIGluZXRfbnRvYV9yKCkgbm8gbG9uZ2VyIHVzZWQKKworLSBpY2MgYWRqdXN0bWVudHMgZm9yIGljYyA5LjAgYW5kIHByaW9yIHZlcnNpb25zOgorICAKKyAgICBEaXNhYmxlIHJlbWFyayAjMjc5OiBjb250cm9sbGluZyBleHByZXNzaW9uIGlzIGNvbnN0YW50CisgIAorICAgICAgICBSZW1hcmsgdHJpZ2dlcmVkIG1vc3RseSBvbiB2YV9hcmcoKSBhbmQgRkRfWkVSTygpIG1hY3Jvcy4KKworLSBhdHRlbXB0IHRvIG1ha2Ugd29yayB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24KKyAgY2hlY2sgZm9yIHdpbnNvY2sgYnVpbGQgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zCisKK0dpc2xlIFZhbmVtICgyMSBTZXAgMjAwOCkKKy0gQWRkZWQgSEFWRV9ORVREQl9ILCBIQVZFX0FSUEFfSU5FVF9ILCBIQVZFX1NUUkNBU0VDTVAKKyAgYW5kIEhBVkVfU1RSTkNBU0VDTVAuCisKK1lhbmcgVHNlICgxOSBTZXAgMjAwOCkKKy0gaWNjIGFkanVzdG1lbnRzOgorICAKKyAgICBEaXNhYmxlIHJlbWFyayAjOTgxOiBvcGVyYW5kcyBhcmUgZXZhbHVhdGVkIGluIHVuc3BlY2lmaWVkIG9yZGVyCisgIAorICAgICAgICBGdW5jdGlvbiBjYWxscyB3aGljaCBhcmUgdHJpZ2dlcmluZyB0aGlzIHJlbWFyaywgdG9kYXksIGRvIG5vdCBkZXBlbmQKKyAgICAgICAgb24gdGhlIG9yZGVyIG9mIGV2YWx1YXRpb24gb2YgaXRzIGFyZ3VtZW50cy4KKyAgCisgICAgRGlzYWJsZSByZW1hcmsgIzE0Njk6ICJjYyIgY2xvYmJlciBpZ25vcmVkCisgIAorICAgICAgICBSZW1hcmsgdHJpZ2dlcmVkIG9uIGh0b25zKCkgYW5kIG50b2hzKCkgZHVlIHRvIGdsaWJjIGhlYWRlciBmaWxlcy4KKworLSBpY2MgYWRqdXN0bWVudHMKKworLSBmaXggbmV0ZGIuaCBwcmVyZXF1aXNpdGUgaW5jbHVzaW9uCisKKy0gaW1wcm92ZSBkZXRlY3Rpb24gb2YgZ2V0c2VydmJ5cG9ydF9yKCkKKworLSBPbiBMaW51eCBJbnRlbCdzIGljYyB1c2VzIGdjYydzIGhlYWRlciBmaWxlcywgc28KKyAgd2Ugc2VsZWN0IEFOU0kgQzg5IGRpYWxlY3QgcGx1cyBHTlUgZXh0ZW5zaW9ucy4KKworLSBpbXByb3ZlIGRldGVjdGlvbiBvZiBnZXRob3N0bmFtZSgpCisKKy0gTmV0V2FyZSBidWlsZHMgaW5jbHVkZSAibmFtZXNlci5oIiBmcm9tIHRoZSBjLWFyZXMgc3ViZGlyCisKKy0gaW5jbHVkZSA8c3RyaW5ncy5oPgorCistIFN5bmMgdXAgd2l0aCByZWFsaXR5CisKKy0gYWRqdXN0IGluY2x1c2lvbiBvZiAibmFtZXNlci5oIgorCistIHJlb3JkZXIgc29tZSBsaW5lcyBpbiBmaWxlCisKKy0gY29kZSBjbGVhbnVwCisKKy0gTmV0V2FyZSBzZWVtcyB0byBoYXZlIHdyaXRldigpCisKKy0gcmVhcnJhbmdlIHRvIGFsbG93IGludGVybmFsL3ByaXZhdGUgdXNlIG9mIGFyZXNfd3JpdGV2IHRvIGFueSBzeXN0ZW0KKyAgdGhhdCBsYWNrcyB0aGUgd3JpdGV2IGZ1bmN0aW9uLgorCistIE5ldFdhcmUgQ0xJQiB0YXJnZXQgaGFzIHN0cmljbXAoKSBhbmQgc3RybmljbXAoKQorCistIGluY2x1ZGUgaGVhZGVyIGZpbGUgb25seSB3aGVuIGF2YWlsYWJsZQorCistIHJlYXJyYW5nZSB0byBhbGxvdyBpbnRlcm5hbC9wcml2YXRlIHVzZSBvZiBhcmVzX3N0cmNhc2VjbXAgdG8gYW55IHN5c3RlbSB0aGF0CisgIGxhY2tzIHRoZSBzdHJjYXNlY21wIGZ1bmN0aW9uLgorCistIGltcHJvdmUgZGV0ZWN0aW9uIG9mOgorICAgIHN0cmNhc2VjbXAoKQorICAgIHN0cmNtcGkoKQorICAgIHN0cmljbXAoKQorICAgIHN0cm5jYXNlY21wKCkKKyAgICBzdHJuY21waSgpCisgICAgc3RybmljbXAoKQorCistICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioKKworR2lzbGUgVmFuZW0gKDEyIFNlcCAyMDA4KQorLSBkamdwcCBkb2VzIGhhdmUgc3RyZHVwKCkuCisKK1lhbmcgVHNlICgxMiBTZXAgMjAwOCkKKy0gY2hhbmdlIENSTEYgaW50byBMRiBsaW5lIGVuZGluZ3MKKworLSBzdHJkdXAoKSBjbG9uZSBmb3Igc3lzdGVtcy9jb25maWd1cmF0aW9ucyB3aGljaCBsYWNrIGl0CisKKy0gbW92ZSBpbmNsdXNpb24gb2YgYXJlc19wcml2YXRlLmggbGFzdAorCistIGljYyBhZGp1c3RtZW50cworCistIGljYyBhZGp1c3RtZW50cworCistIFNlbGVjdCBzdHJpY3QgQU5TSSBDODkgY29uZm9ybWFuY2UgZm9yIGljYworCistIHJlbW92ZSB1bm5lY2Vzc2FyeSB0eXBlY2FzdGluZyBvZiBtYWxsb2MoKQorCistIHJlbW92ZSB1bm5lY2Vzc2FyeSB0eXBlY2FzdGluZyBvZiByZWFsbG9jKCkKKworRGFuaWVsIFN0ZW5iZXJnICgyOSBBdWcgMjAwOCkKKy0gd2Ugc3RhcnQgb3ZlciB3b3JraW5nIHRvd2FyZHMgMS41LjQKKworVmVyc2lvbiAxLjUuMyAoMjkgQXVnIDIwMDgpCisKK0RhbmllbCBTdGVuYmVyZyAoMjkgQXVnIDIwMDgpCistIFZlcnNpb24gMS41LjMKKworLSBhZGRlZCB0aGUgdGhyZWUgcGVvcGxlIGZyb20gUkVMRUFTRS1OT1RFUyBhbmQgc29ydGVkIHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5CisKK1lhbmcgVHNlICgyNyBBdWcgMjAwOCkKKy0gRG9uJ3QgYWJvcnQgY29uZmlndXJhdGlvbiBpZiByZWN2ZnJvbSgpIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gRnVuY3Rpb25hbGl0eSBvbmx5IHBvc3NpYmxlIGlmIHJlY3Zmcm9tKCkgaXMgYXZhaWxhYmxlLgorCistIEdlb3JnZSBOZWlsbCdzIGZpeCBhY291bnRyeSBzYW1wbGUgYXBwbGljYXRpb24gY29tcGlsYXRpb24gZmFpbHVyZS4KKworLSBCcmFkIEhvdXNlJ3MgdmFsaWRhdGlvbiB0aGF0IEROUyByZXNwb25zZSBhZGRyZXNzIG1hdGNoZXMgdGhlIHJlcXVlc3QgYWRkcmVzcworCistIGZpeCB0aGUgb3V0cHV0IG5hbWUKKworLSBHZXQgcmlkIG9mIEVOQUJMRV82NEJJVCBzeW1ib2wgZGVmaW5pdGlvbiBhbmQgdXNhZ2UuCisgIAorICBJbXByb3ZlIEhBVkVfTE9OR0xPTkcgc3ltYm9sIGRlc2NyaXB0aW9uLgorCistIEV4cG9ydCAnYXJlc19wcm9jZXNzX2ZkJyB0b28uCisKK0dpc2xlIFZhbmVtICgxNiBBdWcgMjAwOCkKKy0gT3BzLCByZW1vdmUgJ3VzZV92YycuCisKKy0gU3VwcG9ydCBXYXR0LTMyIHVuZGVyIFdpbjMyLgorCitZYW5nIFRzZSAoMTAgQXVnIDIwMDgpCistIEZpeDogUmVtb3ZlIG5vdyB0aGlzIFNJWkVPRl9DVVJMX09GRl9UIHN5bWJvbCBkZWZpbml0aW9uLgorICAKKyAgVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgd2l0aCB0aGUgaW5pdGlhbCA2NC1iaXQgY3VybF9vZmZfdCBwYXRjaC4KKworLSBJbXByb3ZlIENVUkxfQ0hFQ0tfREVGCisKKy0gRml4IElCTSBDIGFuZCBERUMvQ29tcGFxIEMgY29tcGlsZXIgZGV0ZWN0aW9uCisKKy0gSW5pdGlhbCBzdXBwb3J0IG9mIGN1cmxidWlsZC5oIGFuZCBjdXJscnVsZXMuaCB3aGljaCBhbGxvd3MKKyAgdG8gaGF2ZSBhIGN1cmxfb2ZmX3QgZGF0YSB0eXBlIG5vIGxvbmdlciBnYXRlZCB0byBvZmZfdC4KKworLSBUaGUgbWluaW11bSBhdXRvY29uZiB2ZXJzaW9uIHJlcXVpcmVkIGZvciB0aGlzIGZpbGUgaXMgMi41MAorICAKKyAgQXZvaWQgZG90IG5vdGF0aW9uIGluIGFjbG9jYWwgc2VyaWFsIGZpbGUgbnVtYmVyLCB1c2UgYSBzaW5nbGUgbnVtYmVyIG5vdy4KKworRGFuaWVsIFN0ZW5iZXJnICg0IEF1ZyAyMDA4KQorLSAtIEZpeCBieSBUb2Z1IExpbmRlbjoKKyAgCisgICAgVGhlIHN5bXB0b206CisgICAgKiBVc2VycyAodXN1YWxseSwgYnV0IG5vdCBhbHdheXMpIG9uIDItV2lyZSByb3V0ZXJzIGFuZCB0aGUgQ29tY2FzdCBzZXJ2aWNlCisgICAgYW5kIGEgd2lyZWQgY29ubmVjdGlvbiB0byB0aGVpciByb3V0ZXIgd291bGQgZmluZCB0aGF0IHRoZSBzZWNvbmQgYW5kCisgICAgc3Vic2VxdWVudCBETlMgbG9va3VwcyBmcm9tIGZyZXNoIHByb2Nlc3NlcyB1c2luZyBjLWFyZXMgdG8gcmVzb2x2ZSB0aGUgc2FtZQorICAgIGFkZHJlc3Mgd291bGQgY2F1c2UgdGhlIHByb2Nlc3MgdG8gbmV2ZXIgc2VlIGEgcmVwbHkgKGl0IGtlZXBzIHBvbGxpbmcgZm9yCisgICAgYXJvdW5kIDFtMTVzIGJlZm9yZSBnaXZpbmcgdXApLgorICAKKyAgICBUaGUgcmVwcm86CisgICAgKiBPbiBzdWNoIGEgbWFjaGluZSAoYW5kIHllYWgsIGl0IHRvb2sgdXMgYSBsb3Qgb2YgUUEgdG8gZmluZCB0aGUgc3lzdGVtcworICAgIHRoYXQgcmVwcm9kdWNlIHN1Y2ggYSBzcGVjaWZpYyBwcm9ibGVtISksIGRvICdhaG9zdCB3d3cuc2Vjb25kbGlmZS5jb20nLAorICAgIHRoZW4gZG8gaXQgYWdhaW4uICBUaGUgZmlyc3QgcHJvY2VzcydzIGxvb2t1cCB3aWxsIHdvcmssIHN1YnNlcXVlbnQgbG9va3VwcworICAgIHdpbGwgdGltZS1vdXQgYW5kIGZhaWwuCisgIAorICAgIFRoZSBjYXVzZToKKyAgICAqIGluaXRfaWRfa2V5KCkgd2FzIGNhbGxpbmcgcmFuZG9taXplX2tleSgpICpiZWZvcmUqIGl0IGluaXRpYWxpemVkCisgICAga2V5LT5zdGF0ZSwgbWVhbmluZyB0aGF0IHRoZSByYW5kb21uZXNzIGdlbmVyYXRlZCBieSByYW5kb21pemVfa2V5KCkgaXMKKyAgICBpbW1lZGlhdGVseSBvdmVyd3JpdHRlbiB3aXRoIGRldGVybWluaXN0aWMgdmFsdWVzLiAoL2Rldi91cmFuZG9tIHdhcyBhbHNvCisgICAgYmVpbmcgcmVhZCBpbmNvcnJlY3RseSBpbiB0aGUgYy1hcmVzIHZlcnNpb24gd2Ugd2VyZSB1c2luZywgYnV0IHRoaXMgd2FzCisgICAgZml4ZWQgaW4gYSBsYXRlciB2ZXJzaW9uLikKKyAgICAqIFRoaXMgbWFrZXMgdGhlIHN0cmVhbSBvZiBnZW5lcmF0ZWQgcXVlcnktSURzIGZyb20gYW55IG5ldyBjLWFyZXMgcHJvY2VzcworICAgIGJlIGFuIGlkZW50aWNhbCBhbmQgcHJlZGljdGFibGUgc2VxdWVuY2Ugb2YgSURzLgorICAgICogVGhpcyBtYWtlcyB0aGUgMi1XaXJlJ3MgZGVmYXVsdCBidWlsdC1pbiBETlMgc2VydmVyIGRldGVjdCB0aGVzZSBxdWVyaWVzCisgICAgYXMgcHJvYmFibGUtZHVwbGljYXRlcyBhbmQgKGVycm9uZW91c2x5KSBub3QgcmVzcG9uZCBhdCBhbGwuCisKK1lhbmcgVHNlICg0IEF1ZyAyMDA4KQorLSBBdXRvY29uZiAyLjYyIGhhcyBjaGFuZ2VkIHRoZSBiZWhhdmlvdXIgb2YgdGhlIEFDX0FJWCBtYWNybyB3aGljaCB3ZSB1c2UuCisgIFByaW9yIHZlcnNpb25zIG9mIGF1dG9jb25mIGRlZmluZWQgX0FMTF9TT1VSQ0UgaWYgX0FJWCB3YXMgZGVmaW5lZC4gQnV0LAorICBhdXRvY29uZiAyLjYyIHZlcnNpb24gb2YgQUNfQUlYIGRlZmluZXMgX0FMTF9TT1VSQ0UgYWxvbmcgd2l0aCBvdGhlciBmb3VyCisgIHByZXByb2Nlc3NvciBzeW1ib2xzIG5vIG1hdHRlciBpZiB0aGUgc3lzdGVtIGlzIEFJWCBvciBub3QuIFRvIGtlZXAgdGhlCisgIHRyYWRpdGlvbmFsIGJlaGF2aW91ciwgYXMgd2VsbCBhcyBhbiB1bmlmb3JtIG9uZSwgYWNyb3NzIGF1dG9jb25mIHZlcnNpb25zCisgIEFDX0FJWCBpcyByZXBsYWNlZCB3aXRoIG91ciBvd24gaW50ZXJuYWwgbWFjcm8uCisKKy0gQWRqdXN0IERFQy9Db21wYXEgQyBjb21waWxlciBzZXR0aW5ncy4KKworLSBBbm90aGVyIEFDX1RSWV9MSU5LIGNvbnZlcnNpb24gdG8gQUNfTElOS19JRkVMU0UuCisgIFByb3BlciBkZWZpbml0aW9uIG9mIEhBVkVfZnVuY3Rpb24gaWYgZnVuY3Rpb24gaXMgZm91bmQgZGVlcGVyLgorCistIFN5bmMgdXAgd2l0aCByZWFsaXR5CisKKy0gUmVuYW1lIHJlZW50cmFudC5tNCB0byBhdm9pZCBmaWxlbmFtZSBjbGFzaC4KKworLSBBZGQgZmlsZSB2ZXJzaW9uIHNlcmlhbCBudW1iZXIgdGhhdCBtaWdodCBiZSB1c2VkIGJ5ICdhY2xvY2FsJyBhbmQgb3RoZXJzLgorICAKKyAgS2VlcCB0aGUgJyMnIGNoYXJhY3RlciBhcyB0aGUgZmlyc3Qgb25lIG9uIHRoZSBsaW5lLgorCistIFVwZGF0ZSBjb3B5cmlnaHQgeWVhci4KKworLSBTeW5jIGNvbW1lbnQgd2l0aCByZWFsaXR5LgorCistIFJlaW5zdGF0ZSB0aGUgJ2FjbG9jYWwgLUkgbTQnIGluIGJ1aWxkY29uZiBhbmQgJ0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00JyB3YXkgb2YKKyAgaW5jbHVkaW5nIG91ciBsb2NhbCBtNC9yZWVudHJhbnQubTQgZmlsZS4gVGhpcyBldmVuIHRha2VzIGNhcmUgb2YgaW5jbHVkaW5nIHRoZQorICBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gdGFyYmFsbC4KKworLSBBZGQgcXVvdGluZyBmb3IgdGhlIEFDX0RFRklORSBhcmd1bWVudHMuCisKKy0gQWxzbyByZW1vdmUgdGhlIHdoaXRlc3BhY2UuCisKKy0gQWxzbyByZW1vdmUgdGhlIGV4dHJhIHF1b3RpbmcuCisKKy0gUmVwbGFjZSBzb21lICdAJTpAJyBxdWFkaWdyYXBocyBieSBpdHMgYWN0dWFsIHJlcHJlc2VudGF0aW9uICcjJy4KKyAgCisgIFRoaXMgcXVhZGlncmFwaCB1c2VkIGJlZm9yZSBhIEMgcHJlcHJvY2Vzc29yICdkZWZpbmUnIGRpcmVjdGl2ZSBjb3VsZAorICBiZSBmb29saW5nIE00LCB3aGVuIHByb2Nlc3NpbmcgdGhpcyBmaWxlLCBhbmQgbWFrZSBpdCB0aGluayB0aGF0IHRoZQorICBsaW5lIGNvbnRhaW5zIGEgcHVyZSBNNCAnZGVmaW5lJyBtYWNyby4KKworLSBUZXN0cyBkb25lIHVzaW5nICdhY2xvY2FsIC1JIG00JyBpbiBidWlsZGNvbmYgYW5kICdBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorICBpbiB0b3AgTWFrZWZpbGUuYW0gdHJpZ2dlcmVkIGEgcHJvYmxlbSB0aGF0IHByZXZlbnRlZCBhY2xvY2FsIGZyb20gcnVubmluZworICBzdWNjZXNzZnVsbHkgb24gU3VuT1MgNS4xMCB3aXRoIEdOVSBtNCAxLjQuNSBhbmQgR05VIEF1dG9jb25mIDIuNjEKKyAgCisgIEEgdGFyYmFsbCB3aGljaCByZXByb2R1Y2VzIG1lbnRpb25lZCBwcm9ibGVtIGlzIHRoZSBvbmUgZGF0ZWQgSnVseS0yOC0yMDA4CisgIGh0dHA6Ly9jb29sLmhheHguc2UvY3VybC1kYWlseS9jdXJsLTcuMTkuMC0yMDA4MDcyOC50YXIuZ3oKKyAgCisgIFdlIGFjdHVhbGx5IGRvbid0IG5lZWQgYWxsIHRoZSBiZWxscyBhbmQgd2hpc3RsZXMgdGhhdCB0aGUgYWJvdmUgbWVjaGFuaXNtCisgIHByb3ZpZGVzLiBXZSBvbmx5IG5lZWQgdG8gaW5jbHVkZSBvdXIgbTQvcmVlbnRyYW50Lm00IGZpbGUgaW4gYWNpbmNsdWRlLm00CisgIHNvIGhlcmUgd2UgZ28gd2l0aCB0aGlzIHNpbXBsZXIgbWVjaGFuaXNtLgorCistIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgc2hvdyBBQ0xPQ0FMX0ZMQUdTCisKKy0gVGhlc2UgbGluZXMgd2VyZSB1bmludGVudGlvbmFsbHkgcmVtb3ZlZCBpbiBwcmV2aW91cyBjb21taXQKKworLSBQYXJ0aWFsbHkgdW5kbyBjaGFuZ2UgdGhhdCBwcmV2ZW50ZWQgU0VELCBHUkVQLCBFR1JFUCBhbmQgQVIgZnJvbSBiZWluZyBjaGFuZ2VkIGJ5IGxpYnRvb2wgb3IgYXV0b2NvbmYuCisKKy0gQXNzZXJ0IHRoYXQgU0VEIGFuZCBHUkVQIGFyZSBzZXQKKworLSBSZXF1aXJlIGF1dG9jb25mIDIuNTcgb3IgbmV3ZXIKKworLSBXaGVuIGNhbGxpbmcgYWNsb2NhbCwgdXNlciBkZWZpbmVkIEFDTE9DQUxfRkxBR1Mgd2lsbCBub3cgcHJlY2VkZSBvdXJzLgorCistIG1vdmUgQUNMT0NBTF9BTUZMQUdTIGFmdGVyIEFVVE9NQUtFX09QVElPTlMKKworLSBzZXR1cC5oIGhhbmRsZXMgZGVmaW5pdGlvbiBvZiBfUkVFTlRSQU5UIGJhc2VkIG9uIE5FRURfUkVFTlRSQU5UCisgIGRlZmluaXRpb24gd2hpY2ggbWlnaHQgYmUgZGVmaW5lZCBpbiBjb25maWcuaCBvciBjb25maWctKi5oIGZpbGVzCisKKy0gUmVtb3ZlIGV4cGxpY2l0IGluY2x1c2lvbiBvZiBvdXIgbTQgZmlsZXMgZmlyc3QuIEl0IHdhcyBpbnRlcmVzdGluZyBhcyBhIHRlc3QsCisgIGJ1dCBpdCBicmVha3MgYWNsb2NhbCBleGVjdXRpb24gb24gc29tZSBzeXN0ZW1zLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3I6CisgIAorICBDYW4ndCBsb2NhdGUgb2JqZWN0IG1ldGhvZCAicmVsMmFicyIgdmlhIHBhY2thZ2UgIkZpbGU6OlNwZWMiIGF0IC91c3IvbG9jYWwvYmluL2FjbG9jYWwgbGluZSAyNTYuCisKKy0gQW5vdGhlciBzdGVwIHRvd2FyZHMgZGV0ZWN0aW5nIGlmIF9SRUVOVFJBTlQgaXMgYWxyZWFkeSBkZWZpbmVkIG9yIGFjdHVhbGx5CisgIG5lZWRlZCwgYW5kIGJlaW5nIGFibGUgdG8gZGVmaW5lIGl0IGlmIGFwcHJvcHJpYXRlIGZvciBmdXJ0aGVyIGNvbmZpZ3VyZSB0ZXN0cworICBhcyB3ZWxsIGFzIGZvciB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlLgorCistIEV4cGxpY2l0bHkgaW5jbHVkZSBvdXIgbTQgZmlsZXMgZmlyc3QuIFRoaXMgbWlnaHQgbWluaW1pemUgdGhlIGltcGFjdAorICB0aGF0IG90aGVyIHBhY2thZ2UncyB1bmRlcnF1b3RlZCBtNCBmdW5jdGlvbiBkZWZpbml0aW9ucyBoYXZlIG9uIG91cnMuCisKKy0gQWRkIGEgMyBhcmd1bWVudCBjaGVjayBmb3IgZ2V0cHJvdG9ieW5hbWVfcgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvSU5TVEFMTCBiL2FwL2FwcC9jLWFyZXMvc3JjL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4NDg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL0lOU1RBTEwKQEAgLTAsMCArMSwzMjggQEAKKyoqIFRoaXMgZmlsZSBpcyBhZGFwdGVkIGZyb20gbGliY3VybCBhbmQgbm90IHlldCBmdWxseSByZXdyaXR0ZW4gZm9yIGMtYXJlcyEgKioKKworICAgICAgICAgICAgICAgICAgICAgICAgICBfX18gICAgICAgX18gXyBfIF9fIF9fXyAgX19fIAorICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IF9fXyAvIF9gIHwgJ19fLyBfIFwvIF9ffAorICAgICAgICAgICAgICAgICAgICAgICAgfCAoXyAgfF9fX3wgKF98IHwgfCB8ICBfXy9cX18gXAorICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198ICAgICBcX18sX3xffCAgXF9fX3x8X19fLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBUbyBDb21waWxlCisKK0luc3RhbGxpbmcgQmluYXJ5IFBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBMb3RzIG9mIHBlb3BsZSBkb3dubG9hZCBiaW5hcnkgZGlzdHJpYnV0aW9ucyBvZiBjLWFyZXMuIFRoaXMgZG9jdW1lbnQKKyAgIGRvZXMgbm90IGRlc2NyaWJlIGhvdyB0byBpbnN0YWxsIGMtYXJlcyB1c2luZyBzdWNoIGEgYmluYXJ5IHBhY2thZ2UuCisgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gY29tcGlsZSwgYnVpbGQgYW5kIGluc3RhbGwgYy1hcmVzIGZyb20KKyAgIHNvdXJjZSBjb2RlLgorCitCdWlsZGluZyBmcm9tIGdpdAorPT09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IGdldCB5b3VyIGNvZGUgb2ZmIGEgZ2l0IHJlcG9zaXRvcnksIHNlZSB0aGUgR0lULUlORk8gZmlsZSBpbiB0aGUKKyAgIHJvb3QgZGlyZWN0b3J5IGZvciBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHByb2NlZWQuCisKK1VOSVgKKz09PT0KKyAgIEEgbm9ybWFsIHVuaXggaW5zdGFsbGF0aW9uIGlzIG1hZGUgaW4gdGhyZWUgb3IgZm91ciBzdGVwcyAoYWZ0ZXIgeW91J3ZlCisgICB1bnBhY2tlZCB0aGUgc291cmNlIGFyY2hpdmUpOgorCisgICAgICAgIC4vY29uZmlndXJlCisgICAgICAgIG1ha2UKKyAgICAgICAgbWFrZSBhaG9zdCBhZGlnIGFjb3VudHJ5IChvcHRpb25hbCkKKyAgICAgICAgbWFrZSBpbnN0YWxsCisKKyAgIFlvdSBwcm9iYWJseSBuZWVkIHRvIGJlIHJvb3Qgd2hlbiBkb2luZyB0aGUgbGFzdCBjb21tYW5kLgorCisgICBJZiB5b3UgaGF2ZSBjaGVja2VkIG91dCB0aGUgc291cmNlcyBmcm9tIHRoZSBnaXQgcmVwb3NpdG9yeSwgcmVhZCB0aGUKKyAgIEdJVC1JTkZPIG9uIGhvdyB0byBwcm9jZWVkLgorCisgICBHZXQgYSBmdWxsIGxpc3Rpbmcgb2YgYWxsIGF2YWlsYWJsZSBjb25maWd1cmUgb3B0aW9ucyBieSBpbnZva2luZyBpdCBsaWtlOgorCisgICAgICAgIC4vY29uZmlndXJlIC0taGVscAorCisgICBJZiB5b3Ugd2FudCB0byBpbnN0YWxsIGMtYXJlcyBpbiBhIGRpZmZlcmVudCBmaWxlIGhpZXJhcmNoeSB0aGFuIC91c3IvbG9jYWwsCisgICB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoYXQgYWxyZWFkeSB3aGVuIHJ1bm5pbmcgY29uZmlndXJlOgorCisgICAgICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS9wYXRoL3RvL2MtYXJlcy90cmVlCisKKyAgIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSB3cml0ZSBwZXJtaXNzaW9uIGluIHRoYXQgZGlyZWN0b3J5LCB5b3UgY2FuIGRvICdtYWtlCisgICBpbnN0YWxsJyB3aXRob3V0IGJlaW5nIHJvb3QuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSB0byBtYWtlIGEgbG9jYWwKKyAgIGluc3RhbGwgaW4geW91ciBvd24gaG9tZSBkaXJlY3Rvcnk6CisKKyAgICAgICAgLi9jb25maWd1cmUgLS1wcmVmaXg9JEhPTUUKKyAgICAgICAgbWFrZQorICAgICAgICBtYWtlIGluc3RhbGwKKworICAgTU9SRSBPUFRJT05TCisgICAtLS0tLS0tLS0tLS0KKworICAgICBUbyBmb3JjZSBjb25maWd1cmUgdG8gdXNlIHRoZSBzdGFuZGFyZCBjYyBjb21waWxlciBpZiBib3RoIGNjIGFuZCBnY2MgYXJlCisgICAgIHByZXNlbnQsIHJ1biBjb25maWd1cmUgbGlrZQorCisgICAgICAgQ0M9Y2MgLi9jb25maWd1cmUKKyAgICAgICAgIG9yCisgICAgICAgZW52IENDPWNjIC4vY29uZmlndXJlCisKKyAgICAgVG8gZm9yY2UgYSBzdGF0aWMgbGlicmFyeSBjb21waWxlLCBkaXNhYmxlIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICBieSBydW5uaW5nIGNvbmZpZ3VyZSBsaWtlOgorCisgICAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLXNoYXJlZAorCisgICAgIElmIHlvdSdyZSBhIGMtYXJlcyBkZXZlbG9wZXIgYW5kIHVzZSBnY2MsIHlvdSBtaWdodCB3YW50IHRvIGVuYWJsZSBtb3JlCisgICAgIGRlYnVnIG9wdGlvbnMgd2l0aCB0aGUgLS1lbmFibGUtZGVidWcgb3B0aW9uLgorCisgICBTUEVDSUFMIENBU0VTCisgICAtLS0tLS0tLS0tLS0tCisgICBTb21lIHZlcnNpb25zIG9mIHVDbGliYyByZXF1aXJlIGNvbmZpZ3VyaW5nIHdpdGggQ1BQRkxBR1M9LURfR05VX1NPVVJDRT0xCisgICB0byBnZXQgY29ycmVjdCBsYXJnZSBmaWxlIHN1cHBvcnQuCisKKyAgIFRoZSBPcGVuIFdhdGNvbSBDIGNvbXBpbGVyIG9uIExpbnV4IHJlcXVpcmVzIGNvbmZpZ3VyaW5nIHdpdGggdGhlIHZhcmlhYmxlczoKKworICAgICAgIC4vY29uZmlndXJlIENDPW93Y2MgQVI9IiRXQVRDT00vYmlubC93bGliIiBBUl9GTEFHUz0tcSBcCisgICAgICAgICAgIFJBTkxJQj0vYmluL3RydWUgU1RSSVA9IiRXQVRDT00vYmlubC93c3RyaXAiIENGTEFHUz0tV2V4dHJhCisKKworV2luMzIKKz09PT09CisKKyAgIEJ1aWxkaW5nIFdpbmRvd3MgRExMcyBhbmQgQyBydW4tdGltZSAoQ1JUKSBsaW5rYWdlIGlzc3VlcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEFzIGEgZ2VuZXJhbCBydWxlLCBidWlsZGluZyBhIERMTCB3aXRoIHN0YXRpYyBDUlQgbGlua2FnZSBpcyBoaWdobHkKKyAgIGRpc2NvdXJhZ2VkLCBhbmQgaW50ZXJtaXhpbmcgQ1JUcyBpbiB0aGUgc2FtZSBhcHAgaXMgc29tZXRoaW5nIHRvCisgICBhdm9pZCBhdCBhbnkgY29zdC4KKworICAgUmVhZGluZyBhbmQgY29tcHJlaGVuc2lvbiBvZiBNaWNyb3NvZnQgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZXMKKyAgIEtCOTQyNDggYW5kIEtCMTQwNTg0IGlzIGEgbXVzdCBmb3IgYW55IFdpbmRvd3MgZGV2ZWxvcGVyLiBFc3BlY2lhbGx5CisgICBpbXBvcnRhbnQgaXMgZnVsbCB1bmRlcnN0YW5kaW5nIGlmIHlvdSBhcmUgbm90IGdvaW5nIHRvIGZvbGxvdyB0aGUKKyAgIGFkdmljZSBnaXZlbiBhYm92ZS4KKworICAgS0I5NDI0OCAgLSBIb3cgVG8gVXNlIHRoZSBDIFJ1bi1UaW1lCisgICAgICAgICAgICAgIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvOTQyNDgvZW4tdXMKKworICAgS0IxNDA1ODQgLSBIb3cgdG8gbGluayB3aXRoIHRoZSBjb3JyZWN0IEMgUnVuLVRpbWUgKENSVCkgbGlicmFyeQorICAgICAgICAgICAgICBodHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzE0MDU4NC9lbi11cworCisgICBLQjE5MDc5OSAtIFBvdGVudGlhbCBFcnJvcnMgUGFzc2luZyBDUlQgT2JqZWN0cyBBY3Jvc3MgRExMIEJvdW5kYXJpZXMKKyAgICAgICAgICAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMjM1NDYwCisKKyAgIElmIHlvdXIgYXBwIGlzIG1pc2JlaGF2aW5nIGluIHNvbWUgc3RyYW5nZSB3YXksIG9yIGl0IGlzIHN1ZmZlcmluZworICAgZnJvbSBtZW1vcnkgY29ycnVwdGlvbiwgYmVmb3JlIGFza2luZyBmb3IgZnVydGhlciBoZWxwLCBwbGVhc2UgdHJ5CisgICBmaXJzdCB0byByZWJ1aWxkIGV2ZXJ5IHNpbmdsZSBsaWJyYXJ5IHlvdXIgYXBwIHVzZXMgYXMgd2VsbCBhcyB5b3VyCisgICBhcHAgdXNpbmcgdGhlIGRlYnVnIG11bHRpdGhyZWFkZWQgZHluYW1pYyBDIHJ1bnRpbWUuCisKKyAgIE1pbmdXMzIKKyAgIC0tLS0tLS0KKworICAgTWFrZSBzdXJlIHRoYXQgTWluR1czMidzIGJpbiBkaXIgaXMgaW4gdGhlIHNlYXJjaCBwYXRoLCBmb3IgZXhhbXBsZToKKworICAgICBzZXQgUEFUSD1jOlxtaW5ndzMyXGJpbjslUEFUSCUKKworICAgdGhlbiBydW4gJ21ha2UgLWYgTWFrZWZpbGUubTMyJyBpbiB0aGUgcm9vdCBkaXIuCisKKyAgIEN5Z3dpbgorICAgLS0tLS0tCisKKyAgIEFsbW9zdCBpZGVudGljYWwgdG8gdGhlIHVuaXggaW5zdGFsbGF0aW9uLiBSdW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaW4gdGhlCisgICBjLWFyZXMgcm9vdCB3aXRoICdzaCBjb25maWd1cmUnLiBNYWtlIHN1cmUgeW91IGhhdmUgdGhlIHNoIGV4ZWN1dGFibGUgaW4KKyAgIC9iaW4vIG9yIHlvdSdsbCBzZWUgdGhlIGNvbmZpZ3VyZSBmYWlsIHRvd2FyZCB0aGUgZW5kLgorCisgICBSdW4gJ21ha2UnCisKKyAgIERldi1DcHAKKyAgIC0tLS0tLS0KKworICAgU2VlIHRoZSBzZXBhcmF0ZSBJTlNUQUxMLmRldmNwcCBmaWxlIGZvciBkZXRhaWxzLgorCisgICBNU1ZDIDYgY2F2ZWF0cworICAgLS0tLS0tLS0tLS0tLS0KKworICAgSWYgeW91IHVzZSBNU1ZDIDYgaXQgaXMgcmVxdWlyZWQgdGhhdCB5b3UgdXNlIHRoZSBGZWJydWFyeSAyMDAzIGVkaXRpb24gUFNESzoKKyAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tc2Rvd25sb2FkL3BsYXRmb3Jtc2RrL3Nka3VwZGF0ZS9wc2RrLWZ1bGwuaHRtCisKKyAgIE1TVkMgZnJvbSBjb21tYW5kIGxpbmUKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgUnVuIHRoZSAndmN2YXJzMzIuYmF0JyBmaWxlIHRvIGdldCBhIHByb3BlciBlbnZpcm9ubWVudC4gVGhlCisgICB2Y3ZhcnMzMi5iYXQgZmlsZSBpcyBwYXJ0IG9mIHRoZSBNaWNyb3NvZnQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgYW5kCisgICB5b3UgbWF5IGZpbmQgaXQgaW4gJ0M6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9cdmM5OFxiaW4nCisgICBwcm92aWRlZCB0aGF0IHlvdSBpbnN0YWxsZWQgVmlzdWFsIEMvQysrIDYgaW4gdGhlIGRlZmF1bHQgZGlyZWN0b3J5LgorCisgICBGdXJ0aGVyIGRldGFpbHMgaW4gUkVBRE1FLm1zdmMKKworICAgTVNWQyBJREVTCisgICAtLS0tLS0tLS0KKworICAgRGV0YWlscyBpbiBSRUFETUUubXN2YworCisgICBJbXBvcnRhbnQgc3RhdGljIGMtYXJlcyB1c2FnZSBub3RlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIFdoZW4gYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBzdGF0aWMgYy1hcmVzIGxpYnJhcnksIHlvdSBtdXN0CisgICBhZGQgJy1EQ0FSRVNfU1RBVElDTElCJyB0byB5b3VyIENGTEFHUy4gIE90aGVyd2lzZSB0aGUgbGlua2VyIHdpbGwgbG9vayBmb3IKKyAgIGR5bmFtaWMgaW1wb3J0IHN5bWJvbHMuCisKKworSUJNIE9TLzIKKz09PT09PT09CisgICBCdWlsZGluZyB1bmRlciBPUy8yIGlzIG5vdCBtdWNoIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nIHVuZGVyIHVuaXguCisgICBZb3UgbmVlZDoKKworICAgICAgLSBlbXggMC45ZAorICAgICAgLSBHTlUgbWFrZQorICAgICAgLSBHTlUgcGF0Y2gKKyAgICAgIC0ga3NoCisgICAgICAtIEdOVSBiaXNvbgorICAgICAgLSBHTlUgZmlsZSB1dGlsaXRpZXMKKyAgICAgIC0gR05VIHNlZAorICAgICAgLSBhdXRvY29uZiAyLjEzCisKKyAgIElmIGR1cmluZyB0aGUgbGlua2luZyB5b3UgZ2V0IGFuIGVycm9yIGFib3V0IF9lcnJubyBiZWluZyBhbiB1bmRlZmluZWQKKyAgIHN5bWJvbCByZWZlcmVuY2VkIGZyb20gdGhlIHRleHQgc2VnbWVudCwgeW91IG5lZWQgdG8gYWRkIC1EX19TVF9NVF9FUlJOT19fCisgICBpbiB5b3VyIGRlZmluaXRpb25zLgorCisgICBJZiB5b3UncmUgZ2V0dGluZyBodWdlIGJpbmFyaWVzLCBwcm9iYWJseSB5b3VyIG1ha2VmaWxlcyBoYXZlIHRoZSAtZyBpbgorICAgQ0ZMQUdTLgorCisKK1FOWAorPT09CisgICAoVGhpcyBzZWN0aW9uIHdhcyBncmFjaW91c2x5IGJyb3VnaHQgdG8gdXMgYnkgRGF2aWQgQmVudGhhbSkKKworICAgQXMgUU5YIGlzIHRhcmdldGVkIGZvciByZXNvdXJjZSBjb25zdHJhaW5lZCBlbnZpcm9ubWVudHMsIHRoZSBRTlggaGVhZGVycworICAgc2V0IGNvbnNlcnZhdGl2ZSBsaW1pdHMuIFRoaXMgaW5jbHVkZXMgdGhlIEZEX1NFVFNJWkUgbWFjcm8sIHNldCBieSBkZWZhdWx0CisgICB0byAzMi4gU29ja2V0IGRlc2NyaXB0b3JzIHJldHVybmVkIHdpdGhpbiB0aGUgYy1hcmVzIGxpYnJhcnkgbWF5IGV4Y2VlZCB0aGlzLAorICAgcmVzdWx0aW5nIGluIG1lbW9yeSBmYXVsdHMvU0lHU0VHViBjcmFzaGVzIHdoZW4gcGFzc2VkIGludG8gc2VsZWN0KC4uKQorICAgY2FsbHMgdXNpbmcgZmRfc2V0IG1hY3Jvcy4KKworICAgQSBnb29kIGFsbC1yb3VuZCBzb2x1dGlvbiB0byB0aGlzIGlzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHdoZW4gYnVpbGRpbmcKKyAgIGMtYXJlcywgYnkgb3ZlcnJpZGluZyBDRkxBR1MgZHVyaW5nIGNvbmZpZ3VyZSwgZXhhbXBsZQorICAgIyAgY29uZmlndXJlIENGTEFHUz0nLURGRF9TRVRTSVpFPTY0IC1nIC1PMicKKworCitSSVNDIE9TCis9PT09PT09CisgICBUaGUgbGlicmFyeSBjYW4gYmUgY3Jvc3MtY29tcGlsZWQgdXNpbmcgZ2Njc2RrIGFzIGZvbGxvd3M6CisKKyAgICAgICAgQ0M9cmlzY29zLWdjYyBBUj1yaXNjb3MtYXIgUkFOTElCPSdyaXNjb3MtYXIgLXMnIC4vY29uZmlndXJlIFwKKyAgICAgICAgICAgICAtLWhvc3Q9YXJtLXJpc2Nvcy1hb2YgLS13aXRob3V0LXJhbmRvbSAtLWRpc2FibGUtc2hhcmVkCisgICAgICAgIG1ha2UKKworICAgd2hlcmUgcmlzY29zLWdjYyBhbmQgcmlzY29zLWFyIGFyZSBsaW5rcyB0byB0aGUgZ2Njc2RrIHRvb2xzLgorICAgWW91IGNhbiB0aGVuIGxpbmsgeW91ciBwcm9ncmFtIHdpdGggYy1hcmVzL2xpYi8ubGlicy9saWJjYXJlcy5hCisKKworTmV0V2FyZQorPT09PT09PQorICAgVG8gY29tcGlsZSBsaWJjYXJlcy5hIC8gbGliY2FyZXMubGliIHlvdSBuZWVkOgorICAgLSBlaXRoZXIgYW55IGdjYyAvIG5sbWNvbnYsIG9yIENvZGVXYXJyaW9yIDcgUERLIDQgb3IgbGF0ZXIuCisgICAtIGdudSBtYWtlIGFuZCBhd2sgcnVubmluZyBvbiB0aGUgcGxhdGZvcm0geW91IGNvbXBpbGUgb247CisgICAgIG5hdGl2ZSBXaW4zMiB2ZXJzaW9ucyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOgorICAgICBodHRwOi8vd3d3LmdrbncubmV0L2RldmVsb3BtZW50L3ByZ3Rvb2xzLworICAgLSByZWNlbnQgTm92ZWxsIExpYkMgU0RLIGF2YWlsYWJsZSBmcm9tOgorICAgICBodHRwOi8vZGV2ZWxvcGVyLm5vdmVsbC5jb20vbmRrL2xpYmMuaHRtCisgICAtIG9yIHJlY2VudCBOb3ZlbGwgQ0xpYiBTREsgYXZhaWxhYmxlIGZyb206CisgICAgIGh0dHA6Ly9kZXZlbG9wZXIubm92ZWxsLmNvbS9uZGsvY2xpYi5odG0KKworICAgU2V0IGEgc2VhcmNoIHBhdGggdG8geW91ciBjb21waWxlciwgbGlua2VyIGFuZCB0b29sczsgb24gTGludXggbWFrZQorICAgc3VyZSB0aGF0IHRoZSB2YXIgT1NUWVBFIGNvbnRhaW5zIHRoZSBzdHJpbmcgJ2xpbnV4Jzsgc2V0IHRoZSB2YXIKKyAgIE5ES0JBU0UgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBOb3ZlbGwgTkRLOyBhbmQgdGhlbiB0eXBlCisgICAnbWFrZSAtZiBNYWtlZmlsZS5uZXR3YXJlJyBmcm9tIHRoZSB0b3Agc291cmNlIGRpcmVjdG9yeTsKKworCitBbmRyb2lkCis9PT09PT09CisgICBNZXRob2QgdXNpbmcgYSBjb25maWd1cmUgY3Jvc3MtY29tcGlsZSAodGVzdGVkIHdpdGggQW5kcm9pZCBOREsgcjdiKToKKyAgICAgIC0gcHJlcGFyZSB0aGUgdG9vbGNoYWluIG9mIHRoZSBBbmRyb2lkIE5ESyBmb3Igc3RhbmRhbG9uZSB1c2U7IHRoaXMgY2FuCisgICAgICAgIGJlIGRvbmUgYnkgaW52b2tpbmcgdGhlIHNjcmlwdDoKKyAgICAgICAgLi90b29scy9tYWtlLXN0YW5kYWxvbmUtdG9vbGNoYWluLnNoCisgICAgICAgIHdoaWNoIGNyZWF0ZXMgYSB1c3VhbCBjcm9zcy1jb21waWxlIHRvb2xjaGFpbi4gTGV0cyBhc3N1bWUgdGhhdCB5b3UgcHV0CisgICAgICAgIHRoaXMgdG9vbGNoYWluIGJlbG93IC9vcHQgdGhlbiBpbnZva2UgY29uZmlndXJlIHdpdGggc29tZXRoaW5nIGxpa2U6CisgICAgICAgIGV4cG9ydCBQQVRIPS9vcHQvYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuNC4zL2JpbjokUEFUSAorICAgICAgICAuL2NvbmZpZ3VyZSAtLWhvc3Q9YXJtLWxpbnV4LWFuZHJvaWRlYWJpIFttb3JlIGNvbmZpZ3VyZSBvcHRpb25zXQorICAgICAgICBtYWtlCisgICAgICAtIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgZGlyZWN0bHkgZnJvbSBvdXIgR0lUIHJlcG8geW91IG1pZ2h0IHJ1biBpbnRvCisgICAgICAgIHRoaXMgaXNzdWUgd2l0aCBvbGRlciBhdXRvbWFrZSBzdHVmZjoKKyAgICAgICAgY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLgorICAgICAgICBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gYGFybS1saW51eC1hbmRyb2lkZWFiaSc6CisgICAgICAgIHN5c3RlbSBgYW5kcm9pZGVhYmknIG5vdCByZWNvZ25pemVkCisgICAgICAgIGNvbmZpZ3VyZTogZXJyb3I6IC9iaW4vc2ggLi9jb25maWcuc3ViIGFybS1saW51eC1hbmRyb2lkZWFiaSBmYWlsZWQKKyAgICAgICAgdGhpcyBpc3N1ZSBjYW4gYmUgZml4ZWQgd2l0aCB1c2luZyBtb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBjb25maWcuc3ViCisgICAgICAgIGFuZCBjb25maWcuZ3Vlc3Mgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGhlcmU6CisgICAgICAgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPXRyZWUKKyAgICAgICAgeW91IG5lZWQgdG8gcmVwbGFjZSB5b3VyIHN5c3RlbS1vd24gdmVyc2lvbnMgd2hpY2ggdXN1YWxseSBjYW4gYmUKKyAgICAgICAgZm91bmQgaW4geW91ciBhdXRvbWFrZSBmb2xkZXI6CisgICAgICAgIGZpbmQgL3VzciAtbmFtZSBjb25maWcuc3ViCisKKworQ1JPU1MgQ09NUElMRQorPT09PT09PT09PT09PQorICAgKFRoaXMgc2VjdGlvbiB3YXMgZ3JhY2lvdXNseSBicm91Z2h0IHRvIHVzIGJ5IEppbSBEdWV5LCB3aXRoIGFkZGl0aW9ucyBieQorICAgRGFuIEZhbmRyaWNoKQorCisgICBEb3dubG9hZCBhbmQgdW5wYWNrIHRoZSBjLWFyZXMgcGFja2FnZS4KKworICAgJ2NkJyB0byB0aGUgbmV3IGRpcmVjdG9yeS4gKGUuZy4gY2QgYy1hcmVzLTEuNy42KQorCisgICBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBvaW50IHRvIHRoZSBjcm9zcy1jb21waWxlIHRvb2xjaGFpbiBhbmQgY2FsbAorICAgY29uZmlndXJlIHdpdGggYW55IG9wdGlvbnMgeW91IG5lZWQuICBCZSBzdXJlIGFuZCBzcGVjaWZ5IHRoZSAnLS1ob3N0JyBhbmQKKyAgICctLWJ1aWxkJyBwYXJhbWV0ZXJzIGF0IGNvbmZpZ3VyYXRpb24gdGltZS4gIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGFuCisgICBleGFtcGxlIG9mIGNyb3NzLWNvbXBpbGluZyBmb3IgdGhlIElCTSA0MDVHUCBQb3dlclBDIHByb2Nlc3NvciB1c2luZyB0aGUKKyAgIHRvb2xjaGFpbiBmcm9tIE1vbnRlVmlzdGEgZm9yIEhhcmRoYXQgTGludXguCisKKyAgIChiZWdpbiBzY3JpcHQpCisKKyAgICMhIC9iaW4vc2gKKworICAgZXhwb3J0IFBBVEg9JFBBVEg6L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1L2JpbgorICAgZXhwb3J0IENQUEZMQUdTPSItSS9vcHQvaGFyZGhhdC9kZXZraXQvcHBjLzQwNS90YXJnZXQvdXNyL2luY2x1ZGUiCisgICBleHBvcnQgQVI9cHBjXzQwNS1hcgorICAgZXhwb3J0IEFTPXBwY180MDUtYXMKKyAgIGV4cG9ydCBMRD1wcGNfNDA1LWxkCisgICBleHBvcnQgUkFOTElCPXBwY180MDUtcmFubGliCisgICBleHBvcnQgQ0M9cHBjXzQwNS1nY2MKKyAgIGV4cG9ydCBOTT1wcGNfNDA1LW5tCisKKyAgIC4vY29uZmlndXJlIC0tdGFyZ2V0PXBvd2VycGMtaGFyZGhhdC1saW51eCBcCisgICAgICAgIC0taG9zdD1wb3dlcnBjLWhhcmRoYXQtbGludXggXAorICAgICAgICAtLWJ1aWxkPWk1ODYtcGMtbGludXgtZ251IFwKKyAgICAgICAgLS1wcmVmaXg9L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1L3RhcmdldC91c3IvbG9jYWwgXAorICAgICAgICAtLWV4ZWMtcHJlZml4PS91c3IvbG9jYWwKKworICAgKGVuZCBzY3JpcHQpCisKKyAgIFlvdSBtYXkgYWxzbyBuZWVkIHRvIHByb3ZpZGUgYSBwYXJhbWV0ZXIgbGlrZSAnLS13aXRoLXJhbmRvbT0vZGV2L3VyYW5kb20nCisgICB0byBjb25maWd1cmUgYXMgaXQgY2Fubm90IGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYSByYW5kb20gbnVtYmVyCisgICBnZW5lcmF0aW5nIGRldmljZSBmb3IgYSB0YXJnZXQgc3lzdGVtLiAgVGhlICctLXByZWZpeCcgcGFyYW1ldGVyCisgICBzcGVjaWZpZXMgd2hlcmUgYy1hcmVzIHdpbGwgYmUgaW5zdGFsbGVkLiAgSWYgJ2NvbmZpZ3VyZScgY29tcGxldGVzCisgICBzdWNjZXNzZnVsbHksIGRvICdtYWtlJyBhbmQgJ21ha2UgaW5zdGFsbCcgYXMgdXN1YWwuCisKKyAgIEluIHNvbWUgY2FzZXMsIHlvdSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGUgYWJvdmUgY29tbWFuZHMgdG8gYXMKKyAgIGxpdHRsZSBhczoKKworICAgICAgIC4vY29uZmlndXJlIC0taG9zdD1BUkNILU9TCisKKworUE9SVFMKKz09PT09CisgICBUaGlzIGlzIGEgcHJvYmFibHkgaW5jb21wbGV0ZSBsaXN0IG9mIGtub3duIGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtcworICAgdGhhdCBjLWFyZXMgaGFzIGJlZW4gY29tcGlsZWQgZm9yLiBJZiB5b3Uga25vdyBhIHN5c3RlbSBjLWFyZXMgY29tcGlsZXMgYW5kCisgICBydW5zIG9uLCB0aGF0IGlzbid0IGxpc3RlZCwgcGxlYXNlIGxldCB1cyBrbm93IQorCisgICAgICAgIC0gQWxwaGEgVHJ1NjQgdjUuMCA1LjEKKyAgICAgICAgLSBBUk0gQW5kcm9pZCAxLjUsIDIuMSwgMi4zCisgICAgICAgIC0gTUlQUyBJUklYIDYuMiwgNi41CisgICAgICAgIC0gUG93ZXIgQUlYIDMuMi41LCA0LjIsIDQuMy4xLCA0LjMuMiwgNS4xLCA1LjIKKyAgICAgICAgLSBpMzg2IExpbnV4IDEuMywgMi4wLCAyLjIsIDIuMywgMi40LCAyLjYKKyAgICAgICAgLSBpMzg2IE5vdmVsbCBOZXRXYXJlCisgICAgICAgIC0gaTM4NiBXaW5kb3dzIDk1LCA5OCwgTUUsIE5ULCAyMDAwLCBYUCwgMjAwMworICAgICAgICAtIHg4Nl82NCBMaW51eAorCitVc2VmdWwgVVJMcworPT09PT09PT09PT0KKworYy1hcmVzICAgICAgIGh0dHBzOi8vYy1hcmVzLmhheHguc2UvCisKK01pbmdXICAgICAgICBodHRwOi8vd3d3Lm1pbmd3Lm9yZy8KK01pbkdXLXc2NCAgICBodHRwOi8vbWluZ3ctdzY0LnNvdXJjZWZvcmdlLm5ldC8KK09wZW5XYXRjb20gICBodHRwOi8vd3d3Lm9wZW53YXRjb20ub3JnLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvTElDRU5TRS5tZCBiL2FwL2FwcC9jLWFyZXMvc3JjL0xJQ0VOU0UubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiNTIwYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL0xJQ0VOU0UubWQKQEAgLTAsMCArMSwxNSBAQAorIyBjLWFyZXMgbGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcgd2l0aCBtYW55IGNvbnRyaWJ1dG9ycywgc2VlIEFVVEhPUlMKK2ZpbGUuCisKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAordGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0Cit0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLldhdGNvbSBiL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLldhdGNvbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ1MGEwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvTWFrZWZpbGUuV2F0Y29tCkBAIC0wLDAgKzEsMTY0IEBACisjCisjICBXYXRjb20gLyBPcGVuV2F0Y29tIC8gV2luMzIgbWFrZWZpbGUgZm9yIGNhcmVzLgorIyAgUXVpY2sgaGFjayBieSBHdWVudGVyOyBjb21tZW50cyB0bzogL2Rldi9udWwKKyMKKworIWlmbmRlZiAld2F0Y29tCishZXJyb3IgV0FUQ09NIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBzZXQhCishZWxzZQorU1lTX0lOQ0wgPSAtSSQoJXdhdGNvbSlcaFxudCAtSSQoJXdhdGNvbSlcaAorU1lTX0xJQlMgPSAkKCV3YXRjb20pXGxpYjM4NlxudDskKCV3YXRjb20pXGxpYjM4NgorIWVuZGlmCisKKyFpZmRlZiAlbGlibmFtZQorTElCTkFNRSA9ICQoJWxpYm5hbWUpCishZWxzZQorTElCTkFNRQk9IGNhcmVzCishZW5kaWYKK1RBUkdFVFMgPSAkKExJQk5BTUUpLmRsbCAkKExJQk5BTUUpX2ltcC5saWIgJChMSUJOQU1FKS5saWIKK0RFTU9TICAgPSBhZGlnLmV4ZSBhaG9zdC5leGUgYWNvdW50cnkuZXhlCisKK0NDID0gd2NjMzg2CitMRCA9IHdsaW5rCitBUiA9IHdsaWIKK1JDID0gd3JjCisKKyFpZmRlZiBfX0xPQURETExfXworISAgbG9hZGRsbCB3Y2MzODYgIHdjY2QzODYKKyEgIGxvYWRkbGwgd3BwMzg2ICB3cHBkMzg2CishICBsb2FkZGxsIHdsaWIgICAgd2xpYmQKKyFlbmRpZgorCishaWYgJChfX1ZFUlNJT05fXykgPCAxMjUwCitSTSA9IGRlbCAvcSAvZiAyPk5VTAorIWVsc2UKK1JNID0gcm0gLWYKKyFlbmRpZgorTUQgPSBta2RpcgorUkQgPSBybWRpciAvcSAvcyAyPk5VTAorQ1AgPSBjb3B5CisKK0NGTEFHUyA9IC0zciAtbWYgLWhjIC16ZmYgLXpnZiAtenEgLXptIC16YyAtcyAtZnI9Y29uIC13MiAtZnBpIC1vaWxydGZtICYKKyAgICAgICAgIC13Y2Q9MjAxIC1idD1udCAtZCsgLWRXSU4zMiAtZENBUkVTX0JVSUxESU5HX0xJQlJBUlkgICAgICAgICAgICYKKyAgICAgICAgIC1kTlRERElfVkVSU0lPTj0weDA1MDEwMDAwIC1JLiAkKFNZU19JTkNMKQorCitMRkxBR1MgPSBvcHRpb24gcXVpZXQsIG1hcCwgY2FzZWV4YWN0LCBlbGltaW5hdGUKKworIWlmZGVmICVkZWJ1ZworREVCVUcgID0gLWRERUJVRz0xIC1kREVCVUdCVUlMRAorQ0ZMQUdTICs9IC1kMyAkKERFQlVHKQorTEZMQUdTICs9IGRlYnVnIGFsbAorIWVsc2UKK0NGTEFHUyArPSAtZDAKKyFlbmRpZgorCitDRkxBR1MgKz0gLWRfV0lOMzJfV0lOTlQ9MHgwNTAxCisKKyMKKyMgQ2hhbmdlIHRvIHN1aXRlLgorIworIWlmZGVmICV1c2Vfd2F0dDMyCitDRkxBR1MgKz0gLWRXQVRUMzIgLUkkKCV3YXR0X3Jvb3QpXGluYworIWVuZGlmCisKK09CSl9CQVNFID0gV0NfV2luMzIub2JqCitMSU5LX0FSRyA9ICQoT0JKX0JBU0UpXGR5blx3bGluay5hcmcKK0xJQl9BUkcgID0gJChPQkpfQkFTRSlcc3RhdFx3bGliLmFyZworCisjIEluIG9yZGVyIHRvIHByb2Nlc3MgTWFrZWZpbGUuaW5jIHdtYWtlIG11c3QgYmUgY2FsbGVkIHdpdGggLXUgc3dpdGNoIQorIWlmbmVxIF9fTUFLRU9QVFNfXyAtdQorIWVycm9yIFlvdSBNVVNUIGNhbGwgd21ha2Ugd2l0aCB0aGUgLXUgc3dpdGNoIQorIWVsc2UKKyFpbmNsdWRlIE1ha2VmaWxlLmluYworIWVuZGlmCisKK09CSlMgPSAkKENTT1VSQ0VTOi5jPS5vYmopCitPQkpTID0gJE9CSl9ESVJcJChPQkpTOiA9ICRPQkpfRElSXCkKKworIworIyBVc2UgJChPQkpTKSBhcyBhIHRlbXBsYXRlIHRvIGdlbmVyYXRlICQoT0JKU19TVEFUKSBhbmQgJChPQkpTX0RZTikuCisjCitPQkpfRElSICAgID0gJChPQkpfQkFTRSlcc3RhdAorT0JKU19TVEFUICA9ICQrICQoT0JKUykgJC0KKworT0JKX0RJUiAgICA9ICQoT0JKX0JBU0UpXGR5bgorT0JKU19EWU4gICA9ICQrICQoT0JKUykgJC0KKworQVJFU0JVSUxESCA9IGFyZXNfYnVpbGQuaAorUkVTT1VSQ0UgICA9ICQoT0JKX0JBU0UpXGR5blxjYXJlcy5yZXMKKworYWxsOiAkKEFSRVNCVUlMREgpICQoT0JKX0JBU0UpICQoVEFSR0VUUykgJChERU1PUykgLlNZTUJPTElDCisJQGVjaG8gV2VsY29tZSB0byBjYXJlcworCiskKE9CSl9CQVNFKToKKwktJChNRCkgJF5ACisJLSQoTUQpICReQFxzdGF0CisJLSQoTUQpICReQFxkeW4KKwktJChNRCkgJF5AXGRlbW9zCisKKyQoQVJFU0JVSUxESCk6IC5FWElTVFNPTkxZCisJJChDUCkgJF5ALmRpc3QgJF5ACisKKyQoTElCTkFNRSkuZGxsOiAkKE9CSlNfRFlOKSAkKFJFU09VUkNFKSAkKExJTktfQVJHKQorCSQoTEQpIG5hbWUgJF5AIEAkXUAKKworJChMSUJOQU1FKS5saWI6ICQoT0JKU19TVEFUKSAkKExJQl9BUkcpCisJJChBUikgLXEgLWIgLWMgJF5AIEAkXUAKKworYWRpZy5leGU6ICQoT0JKX0JBU0UpXGRlbW9zXGFkaWcub2JqICQoT0JKX0JBU0UpXGRlbW9zXGFyZXNfZ2V0b3B0Lm9iaiAkKExJQk5BTUUpLmxpYgorCSQoTEQpIG5hbWUgJF5AIHN5c3RlbSBudCAkKExGTEFHUykgZmlsZSB7ICQoT0JKX0JBU0UpXGRlbW9zXGFyZXNfZ2V0b3B0Lm9iaiAkW0AgfSBsaWJyYXJ5ICRdQCwgd3MyXzMyLmxpYgorCithaG9zdC5leGU6ICQoT0JKX0JBU0UpXGRlbW9zXGFob3N0Lm9iaiAkKE9CSl9CQVNFKVxkZW1vc1xhcmVzX2dldG9wdC5vYmogJChMSUJOQU1FKS5saWIKKwkkKExEKSBuYW1lICReQCBzeXN0ZW0gbnQgJChMRkxBR1MpIGZpbGUgeyAkKE9CSl9CQVNFKVxkZW1vc1xhcmVzX2dldG9wdC5vYmogJFtAIH0gbGlicmFyeSAkXUAsIHdzMl8zMi5saWIKKworYWNvdW50cnkuZXhlOiAkKE9CSl9CQVNFKVxkZW1vc1xhY291bnRyeS5vYmogJChPQkpfQkFTRSlcZGVtb3NcYXJlc19nZXRvcHQub2JqICQoTElCTkFNRSkubGliCisJJChMRCkgbmFtZSAkXkAgc3lzdGVtIG50ICQoTEZMQUdTKSBmaWxlIHsgJChPQkpfQkFTRSlcZGVtb3NcYXJlc19nZXRvcHQub2JqICRbQCB9IGxpYnJhcnkgJF1ALCB3czJfMzIubGliCisKK2NsZWFuOiAuU1lNQk9MSUMKKwktJChSTSkgJChPQkpTX1NUQVQpCisJLSQoUk0pICQoT0JKU19EWU4pCisJLSQoUk0pICQoUkVTT1VSQ0UpICQoTElOS19BUkcpICQoTElCX0FSRykKKwordmNsZWFuIHJlYWxjbGVhbjogY2xlYW4gLlNZTUJPTElDCisJLSQoUk0pICQoVEFSR0VUUykgJChMSUJOQU1FKS5tYXAKKwktJChSTSkgJChERU1PUykgJChERU1PUzouZXhlPS5tYXApCisJLSQoUkQpICQoT0JKX0JBU0UpXHN0YXQKKwktJChSRCkgJChPQkpfQkFTRSlcZHluCisJLSQoUkQpICQoT0JKX0JBU0UpXGRlbW9zCisJLSQoUkQpICQoT0JKX0JBU0UpCisKKy5FUkFTRQorJChSRVNPVVJDRSk6IGNhcmVzLnJjIC5BVVRPREVQRU5ECisJJChSQykgJChERUJVRykgLXEgLXIgLXptIC1JLi5caW5jbHVkZSAkKFNZU19JTkNMKSAkW0AgLWZvPSReQAorCisuRVJBU0UKKy5jeyQoT0JKX0JBU0UpXGR5bn0ub2JqOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYmQgJFtAIC1mbz0kXkAKKworLkVSQVNFCisuY3skKE9CSl9CQVNFKVxzdGF0fS5vYmo6CisJJChDQykgJChDRkxBR1MpIC1EQ0FSRVNfU1RBVElDTElCICRbQCAtZm89JF5ACisKKy5FUkFTRQorLmN7JChPQkpfQkFTRSlcZGVtb3N9Lm9iajoKKwkkKENDKSAkKENGTEFHUykgLURDQVJFU19TVEFUSUNMSUIgJFtAIC1mbz0kXkAKKworJChMSU5LX0FSRyk6ICQoX19NQUtFRklMRVNfXykKKwklY3JlYXRlICReQAorCUAlYXBwZW5kICReQCBzeXN0ZW0gbnQgZGxsCisJQCVhcHBlbmQgJF5AIGZpbGUgeyAkKE9CSlNfRFlOKSB9CisJQCVhcHBlbmQgJF5AIG9wdGlvbiByZXM9JChSRVNPVVJDRSksIGltcGxpYj0kKExJQk5BTUUpX2ltcC5saWIgCisJQCVhcHBlbmQgJF5AICQoTEZMQUdTKQorCUAlYXBwZW5kICReQCBsaWJwYXRoICQoU1lTX0xJQlMpCisjCUAlYXBwZW5kICReQCBsaWJyYXJ5IGNsaWIzci5saWIKKyFpZmRlZiAldXNlX3dhdHQzMgorCUAlYXBwZW5kICReQCBsaWJyYXJ5ICQoJXdhdHRfcm9vdClcbGliXHdhdHRjcHdfaW1wLmxpYgorIWVsc2UKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSB3czJfMzIubGliCishZW5kaWYKKworJChMSUJfQVJHKTogJChfX01BS0VGSUxFU19fKQorCSVjcmVhdGUgJF5ACisJQGZvciAlZiBpbiAoJChPQkpTX1NUQVQpKSBkbyBAJWFwcGVuZCAkXkAgKy0gJWYKKworCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5hbSBiL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTQwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIxMyBAQAorQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKKworQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjIFdoZW4gdXNpbmcgdGhlIGxvdy1sZXZlbCBoYXJkLWhhY2tpbmcgbWVtb3J5IGxlYWsgdHJhY2tpbmcgY29kZSBmcm9tCisjIGxpYmN1cmwgdGhlIGdlbmVyYXRlZCBjdXJsL2N1cmxidWlsZC5oIGZpbGUgbXVzdCBhbHNvIGJlIHJlYWNoYWJsZS4KKyMgVXNpbmcgdGhlIGxpYmN1cmwgbG93bGV2ZWwgY29kZSBmcm9tIHdpdGhpbiBjLWFyZXMgbGlicmFyeSBpcyB1Z2x5IGFuZAorIyBvbmx5IHdvcmtzIHdoZW4gYy1hcmVzIGlzIGJ1aWx0IGFuZCBsaW5rZWQgd2l0aCBhIHNpbWlsYXJseSBkZWJ1Zy1idWlsZAorIyBsaWJjdXJsLCBidXQgd2UgZG8gdGhpcyBhbnl3YXkgZm9yIGNvbnZlbmllbmNlLgorIworIyAkKHRvcF9idWlsZGRpcikvLi4vaW5jbHVkZS9jdXJsIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBjdXJsLmgKKyMgJCh0b3BfYnVpbGRkaXIpLy4uL2luY2x1ZGUgaXMgZm9yIGxpYmN1cmwncyBnZW5lcmF0ZWQgY3VybC9jdXJsYnVpbGQuaCBmaWxlCisjICQodG9wX3NyY2RpcikvLi4vaW5jbHVkZSBpcyBmb3IgbGliY3VybCdzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKyMgJCh0b3BfYnVpbGRkaXIpLy4uL2xpYiBpcyBmb3IgbGliY3VybCdzIGdlbmVyYXRlZCBsaWIvY3VybF9jb25maWcuaCBmaWxlCisjICQodG9wX3NyY2RpcikvLi4vbGliIGlzIGZvciBsaWJjdXJsJ3MgbGliL3NldHVwLmggYW5kIG90aGVyICJwcml2YXRlIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikgaXMgZm9yIGMtYXJlcydzIGdlbmVyYXRlZCBhcmVzX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKSBpcyBmb3IgYy1hcmVzJ3MgYXJlc19zZXR1cC5oIGFuZCBvdGhlciAiYy1hcmVzLXByaXZhdGUiIGZpbGVzCisKK2lmIENVUkxERUJVRworQU1fQ1BQRkxBR1MgPSAtSSQodG9wX2J1aWxkZGlyKS8uLi9pbmNsdWRlL2N1cmwgXAorICAgICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS8uLi9pbmNsdWRlICAgICAgXAorICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvLi4vaW5jbHVkZSAgICAgICAgXAorICAgICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS8uLi9saWIgICAgICAgICAgXAorICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvLi4vbGliICAgICAgICAgICAgXAorICAgICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikKK2Vsc2UKK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9idWlsZGRpcikgXAorICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikKK2VuZGlmCisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmNhcmVzLmxhCisKK21hbl9NQU5TID0gJChNQU5QQUdFUykKKworTVNWQ0ZJTEVTID0gdmMvdmM2YXdzLmRzdyB2Yy9hY291bnRyeS92YzZhY291bnRyeS5kc3AgdmMvYWRpZy92YzZhZGlnLmRzcCBcCisgdmMvYWhvc3QvdmM2YWhvc3QuZHNwIHZjL2NhcmVzL3ZjNmNhcmVzLmRzcCB2Yy9jYXJlcy92YzZjYXJlcy5kc3cKKworaWYgQ1VSTERFQlVHCitQUk9HUyA9CitlbHNlCitQUk9HUyA9IGFob3N0IGFkaWcgYWNvdW50cnkKK2VuZGlmCisKK25vaW5zdF9QUk9HUkFNUyA9JChQUk9HUykKKworIyBhZGlnIGFuZCBhaG9zdCBhcmUganVzdCBzYW1wbGUgcHJvZ3JhbXMgYW5kIHRodXMgbm90IG1lbnRpb25lZCB3aXRoIHRoZQorIyByZWd1bGFyIHNvdXJjZXMgYW5kIGhlYWRlcnMKK0VYVFJBX0RJU1QgPSBBVVRIT1JTIENIQU5HRVMgUkVBRE1FLmNhcmVzIE1ha2VmaWxlLmluYyBNYWtlZmlsZS5kagkgICBcCisgTWFrZWZpbGUubTMyIE1ha2VmaWxlLm5ldHdhcmUgTWFrZWZpbGUubXN2YyBNYWtlZmlsZS5XYXRjb20gJChtYW5fTUFOUykgICBcCisgY29uZmlnLXdpbjMyLmggUkVMRUFTRS1OT1RFUyBsaWJjYXJlcy5wYy5pbiBidWlsZGNvbmYgZ2V0X3Zlci5hd2sgbWFrZXRneiBcCisgVE9ETyBhcmVzX2J1aWxkLmguaW4gJChQREZQQUdFUykgY2FyZXMucmMgUkVBRE1FLm1zdmMgJChNU1ZDRklMRVMpCSAgIFwKKyAkKENTT1VSQ0VTKSAkKEhIRUFERVJTKSBjb25maWctZG9zLmggYWNvdW50cnkuMSBhZGlnLjEgYWhvc3QuMSBJTlNUQUxMCSAgIFwKKyBSRUFETUUubWQgTElDRU5TRS5tZAorCitDTEVBTkZJTEVTID0gJChQREZQQUdFUykgJChIVE1MUEFHRVMpCisKK0RJU1RDTEVBTkZJTEVTID0gYXJlc19idWlsZC5oCisKK0RJU1RfU1VCRElSUyA9IHRlc3QKKworcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPSBsaWJjYXJlcy5wYworCitDQVJFU19WRVJTSU9OX0lORk8gPSAtdmVyc2lvbi1pbmZvIDQ6MDoyCisjIFRoaXMgZmxhZyBhY2NlcHRzIGFuIGFyZ3VtZW50IG9mIHRoZSBmb3JtIGN1cnJlbnRbOnJldmlzaW9uWzphZ2VdXS4gU28sCisjIHBhc3NpbmcgLXZlcnNpb24taW5mbyAzOjEyOjEgc2V0cyBjdXJyZW50IHRvIDMsIHJldmlzaW9uIHRvIDEyLCBhbmQgYWdlIHRvCisjIDEuCisjCisjIElmIGVpdGhlciByZXZpc2lvbiBvciBhZ2UgYXJlIG9taXR0ZWQsIHRoZXkgZGVmYXVsdCB0byAwLiBBbHNvIG5vdGUgdGhhdCBhZ2UKKyMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlci4KKyMKKyMgSGVyZSBhcmUgYSBzZXQgb2YgcnVsZXMgdG8gaGVscCB5b3UgdXBkYXRlIHlvdXIgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uOiAKKyMKKyMgMS5TdGFydCB3aXRoIHZlcnNpb24gaW5mb3JtYXRpb24gb2YgMDowOjAgZm9yIGVhY2ggbGlidG9vbCBsaWJyYXJ5LgorIworIyAyLlVwZGF0ZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbmx5IGltbWVkaWF0ZWx5IGJlZm9yZSBhIHB1YmxpYyByZWxlYXNlIG9mCisjIHlvdXIgc29mdHdhcmUuIE1vcmUgZnJlcXVlbnQgdXBkYXRlcyBhcmUgdW5uZWNlc3NhcnksIGFuZCBvbmx5IGd1YXJhbnRlZQorIyB0aGF0IHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgZ2V0cyBsYXJnZXIgZmFzdGVyLgorIworIyAzLklmIHRoZSBsaWJyYXJ5IHNvdXJjZSBjb2RlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUsIHRoZW4KKyMgaW5jcmVtZW50IHJldmlzaW9uIChjOnIrMTphKQorIworIyA0LklmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgb3IgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAorIyB1cGRhdGUsIGluY3JlbWVudCBjdXJyZW50LCBhbmQgc2V0IHJldmlzaW9uIHRvIDAuIChjKzE6cj0wOmEpCisjCisjIDUuSWYgYW55IGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHB1YmxpYyByZWxlYXNlLCB0aGVuCisjIGluY3JlbWVudCBhZ2UuIChjOnI6YSsxKQorIworIyA2LklmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIHRoZSBsYXN0IHB1YmxpYyByZWxlYXNlLCB0aGVuCisjIHNldCBhZ2UgdG8gMC4gKGM6cjphPTApCisjCisKK0FNX0xERkxBR1MgPQorCitsaWJjYXJlc19sYV9MREZMQUdTX0VYVFJBID0KKworaWYgQ0FSRVNfTFRfU0hMSUJfVVNFX1ZFUlNJT05fSU5GTworbGliY2FyZXNfbGFfTERGTEFHU19FWFRSQSArPSAkKENBUkVTX1ZFUlNJT05fSU5GTykKK2VuZGlmCisKK2lmIENBUkVTX0xUX1NITElCX1VTRV9OT19VTkRFRklORUQKK2xpYmNhcmVzX2xhX0xERkxBR1NfRVhUUkEgKz0gLW5vLXVuZGVmaW5lZAorZW5kaWYKKworaWYgQ0FSRVNfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVAorbGliY2FyZXNfbGFfTERGTEFHU19FWFRSQSArPSAtbWltcHVyZS10ZXh0CitlbmRpZgorCitsaWJjYXJlc19sYV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAkKGxpYmNhcmVzX2xhX0xERkxBR1NfRVhUUkEpCisKKyMgQWRkIC1XZXJyb3IgaWYgZGVmaW5lZAorQ0ZMQUdTICs9IEBDQVJFU19DRkxBR19FWFRSQVNACisKK2lmIFVTRV9DUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQgorQU1fQ1BQRkxBR1MgKz0gJChDUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQikKK2VuZGlmCisKK2xpYmNhcmVzX2xhX0NGTEFHU19FWFRSQSA9CisKK2xpYmNhcmVzX2xhX0NQUEZMQUdTX0VYVFJBID0gLURDQVJFU19CVUlMRElOR19MSUJSQVJZCisKK2lmIERPSU5HX0NBUkVTX1NZTUJPTF9ISURJTkcKK2xpYmNhcmVzX2xhX0NGTEFHU19FWFRSQSArPSAkKENGTEFHX0NBUkVTX1NZTUJPTF9ISURJTkcpCitsaWJjYXJlc19sYV9DUFBGTEFHU19FWFRSQSArPSAtRENBUkVTX1NZTUJPTF9ISURJTkcKK2VuZGlmCisKK0BDT0RFX0NPVkVSQUdFX1JVTEVTQAorbGliY2FyZXNfbGFfTERGTEFHUyArPSAkKENPREVfQ09WRVJBR0VfTERGTEFHUykKK2xpYmNhcmVzX2xhX0NGTEFHU19FWFRSQSArPSAkKENPREVfQ09WRVJBR0VfQ0ZMQUdTKQorCitsaWJjYXJlc19sYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1NfRVhUUkEpCisKK2xpYmNhcmVzX2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgJChsaWJjYXJlc19sYV9DUFBGTEFHU19FWFRSQSkKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIENTT1VSQ0VTIGFuZCBISEVBREVSUyBkZWZpbmVzCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitsaWJjYXJlc19sYV9TT1VSQ0VTID0gJChDU09VUkNFUykgJChISEVBREVSUykKKworIyB3aGVyZSB0byBpbnN0YWxsIHRoZSBjLWFyZXMgaGVhZGVycworbGliY2FyZXNfbGFkaXIgPSAkKGluY2x1ZGVkaXIpCisjIHdoYXQgaGVhZGVycyB0byBpbnN0YWxsIG9uICdtYWtlIGluc3RhbGwnOgorbGliY2FyZXNfbGFfSEVBREVSUyA9IGFyZXMuaCBhcmVzX3ZlcnNpb24uaCBhcmVzX2Rucy5oIFwKKwlhcmVzX2J1aWxkLmggYXJlc19ydWxlcy5oCisKK2Fob3N0X1NPVVJDRVMgPSBhaG9zdC5jICQoU0FNUExFU09VUkNFUykgJChTQU1QTEVIRUFERVJTKQorYWhvc3RfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliY2FyZXMubGEKK2Fob3N0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorYWhvc3RfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQorCithZGlnX1NPVVJDRVMgPSBhZGlnLmMgJChTQU1QTEVTT1VSQ0VTKSAkKFNBTVBMRUhFQURFUlMpCithZGlnX0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYmNhcmVzLmxhCithZGlnX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorYWRpZ19DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCisKK2Fjb3VudHJ5X1NPVVJDRVMgPSBhY291bnRyeS5jICQoU0FNUExFU09VUkNFUykgJChTQU1QTEVIRUFERVJTKQorYWNvdW50cnlfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliY2FyZXMubGEKK2Fjb3VudHJ5X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorYWNvdW50cnlfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQorCitTT1VSQ0VETUFORElSID0gbWFuMworU09VUkNFRE1BTlBBR0VTID0gYXJlc19pbml0LjMKKworY2xlYW4tbG9jYWw6IGNsZWFuLXNvdXJjZWQtbWFucGFnZXMKKworY2xlYW4tc291cmNlZC1tYW5wYWdlczoKKwlAc3JjZG1hbmRpcj0nJChTT1VSQ0VETUFORElSKSc7IFwKKwllY2hvICJybSAtcmYgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpciI7IFwKKwlybSAtcmYgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpcgorCitzb3VyY2VkLW1hbnBhZ2VzOiBjbGVhbi1zb3VyY2VkLW1hbnBhZ2VzCisJQHNyY2RtYW5kaXI9JyQoU09VUkNFRE1BTkRJUiknOyBcCisJc3JjZG1hbmZpbGVzPSckKFNPVVJDRURNQU5QQUdFUyknOyBcCisJbWtkaXIgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpcjsgXAorCWZvciBmaWxlIGluICQkc3JjZG1hbmZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQodG9wX3NyY2RpcikvJCRmaWxlOyB0aGVuIFwKKwkgICAgZWNobyAiY3AgJCh0b3Bfc3JjZGlyKS8kJGZpbGUgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpci8kJGZpbGUiOyBcCisJICAgIGNwICQodG9wX3NyY2RpcikvJCRmaWxlICQodG9wX2J1aWxkZGlyKS8kJHNyY2RtYW5kaXIvJCRmaWxlOyBcCisJICBmaTsgXAorCWRvbmUKKworTUFOMkhUTUwgPSByb2ZmaXQgLS1tYW5kaXI9LiA8ICQ8ID4kQAorCitTVUZGSVhFUyA9IC4zIC5odG1sCisKK2h0bWw6IHNvdXJjZWQtbWFucGFnZXMgJChIVE1MUEFHRVMpCisKKy4zLmh0bWw6CisJJChNQU4ySFRNTCkKKworcGRmOiBzb3VyY2VkLW1hbnBhZ2VzICQoUERGUEFHRVMpCisKKy4zLnBkZjoKKwlAKGZvbz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLlswLTldJCQvL2cnYDsgXAorCWdyb2ZmIC1UcHMgLW1hbiAkPCA+JCRmb28ucHM7IFwKKwlwczJwZGYgJCRmb28ucHMgJEA7IFwKKwlybSAkJGZvby5wczsgXAorCWVjaG8gImNvbnZlcnRlZCAkPCB0byAkQCIpCisKKyMgTWFrZSBmaWxlcyBuYW1lZCAqLmRpc3QgcmVwbGFjZSB0aGUgZmlsZSB3aXRob3V0IC5kaXN0IGV4dGVuc2lvbgorZGlzdC1ob29rOgorCWZpbmQgJChkaXN0ZGlyKSAtbmFtZSAiKi5kaXN0IiAtZXhlYyBybSB7fSBcOworCShkaXN0aXQ9YGZpbmQgJChzcmNkaXIpIC1uYW1lICIqLmRpc3QiYDsgXAorCWZvciBmaWxlIGluICQkZGlzdGl0OyBkbyBcCisJICBzdHJpcD1gZWNobyAkJGZpbGUgfCBzZWQgLWUgcy9eJChzcmNkaXIpLy8gLWUgcy9cLmRpc3QvL2A7IFwKKwkgIGNwICQkZmlsZSAkKGRpc3RkaXIpJCRzdHJpcDsgXAorCWRvbmUpCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5kaiBiL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLmRqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTFmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5kagpAQCAtMCwwICsxLDg1IEBACisjCisjIGMtYXJlcyBNYWtlZmlsZSBmb3IgZGpncHAvZ2NjL1dhdHQtMzIuCisjICAgQnkgR2lzbGUgVmFuZW0gPGd2YW5lbUB5YWhvby5ubz4gMjAwNC4KKyMKKworCitUT1BESVIgPSAuLgorCitERVBFTkRfUFJFUkVRID0gYXJlc19jb25maWcuaAorCitpbmNsdWRlIC4uL3BhY2thZ2VzL0RPUy9jb21tb24uZGoKK2luY2x1ZGUgTWFrZWZpbGUuaW5jCisKK0NGTEFHUyArPSAtRFdBVFQzMiAtRHNlbGVjdD1zZWxlY3RfcworCitMREZMQUdTID0gLXMKKworaWZlcSAoJChVU0VfQ1VSTERFQlVHKSwxKQorICBFWF9MSUJTICA9IC4uL2xpYi9saWJjdXJsLmEKKyAgT0JKX0hBQ0sgPSAkKE9CSkVDVFMpCitlbHNlCisgIE9CSl9IQUNLID0gbGliY2FyZXMuYQorZW5kaWYKKworaWZlcSAoJChVU0VfU1NMKSwxKQorICBFWF9MSUJTICs9ICQoT1BFTlNTTF9ST09UKS9saWIvbGlic3NsLmEgJChPUEVOU1NMX1JPT1QpL2xpYi9saWJjcnlwdC5hCitlbmRpZgorCitpZmVxICgkKFVTRV9aTElCKSwxKQorICBFWF9MSUJTICs9ICQoWkxJQl9ST09UKS9saWJ6LmEKK2VuZGlmCisKK2lmZXEgKCQoVVNFX0lETkEpLDEpCisgIEVYX0xJQlMgKz0gJChMSUJJRE5fUk9PVCkvbGliL2RqX29iai9saWJpZG4uYSAtbGljb252CitlbmRpZgorCitFWF9MSUJTICs9ICQoV0FUVDMyX1JPT1QpL2xpYi9saWJ3YXR0LmEKKworT0JKRUNUUyA9ICQoYWRkcHJlZml4ICQoT0JKX0RJUikvLCAkKENTT1VSQ0VTOi5jPS5vKSkKKworYWxsOiAkKE9CSl9ESVIpIGFyZXNfY29uZmlnLmggbGliY2FyZXMuYSBhaG9zdC5leGUgYWRpZy5leGUgYWNvdW50cnkuZXhlCisJQGVjaG8gV2VsY29tZSB0byBjLWFyZXMuCisKK2xpYmNhcmVzLmE6ICQoT0JKRUNUUykKKwlhciBycyAkQCAkPworCithcmVzX2NvbmZpZy5oOiBjb25maWctZG9zLmgKKwkkKENPUFkpICReICRACisKK2Fob3N0LmV4ZTogYWhvc3QuYyAkKE9CSl9ESVIpL2FyZXNfZ2V0b3B0Lm8gJChPQkpfSEFDSykKKwkkKENDKSAkKExERkxBR1MpICQoQ0ZMQUdTKSAtbyAkQCAkXiAkKEVYX0xJQlMpCisKK2FkaWcuZXhlOiBhZGlnLmMgJChPQkpfRElSKS9hcmVzX2dldG9wdC5vICQoT0JKX0hBQ0spCisJJChDQykgJChMREZMQUdTKSAkKENGTEFHUykgLW8gJEAgJF4gJChFWF9MSUJTKQorCithY291bnRyeS5leGU6IGFjb3VudHJ5LmMgJChPQkpfRElSKS9hcmVzX2dldG9wdC5vICQoT0JKX0hBQ0spCisJJChDQykgJChMREZMQUdTKSAkKENGTEFHUykgLW8gJEAgJF4gJChFWF9MSUJTKQorCisjIGNsZWFuIGdlbmVyYXRlZCBmaWxlcworIworZ2VuY2xlYW46CisJLSAkKERFTEVURSkgYXJlc19jb25maWcuaAorCisjIGNsZWFuIG9iamVjdCBmaWxlcyBhbmQgc3ViZGlyCisjCitvYmpjbGVhbjogZ2VuY2xlYW4KKwktICQoREVMRVRFKSAkKE9CSl9ESVIpJChEUykqLm8KKwktICQoUk1ESVIpICQoT0JKX0RJUikKKworIyBjbGVhbiB3aXRob3V0IHJlbW92aW5nIGJ1aWx0IGxpYnJhcnkgYW5kIHByb2dyYW1zCisjCitjbGVhbjogb2JqY2xlYW4KKwktICQoREVMRVRFKSBkZXBlbmQuZGoKKworIyBjbGVhbiBldmVyeXRoaW5nCisjCityZWFsY2xlYW4gdmNsZWFuOiBjbGVhbgorCS0gJChERUxFVEUpIGxpYmNhcmVzLmEKKwktICQoREVMRVRFKSBhY291bnRyeS5leGUKKwktICQoREVMRVRFKSBhZGlnLmV4ZQorCS0gJChERUxFVEUpIGFob3N0LmV4ZQorCS0gJChERUxFVEUpIGxpYmNhcmVzLmEKKworLWluY2x1ZGUgZGVwZW5kLmRqCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLmluIGIvYXAvYXBwL2MtYXJlcy9zcmMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNjE3YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjE1NSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKworCisKK1ZQQVRIID0gQHNyY2RpckAKK2FtX19pc19nbnVfbWFrZSA9IHsgXAorICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKKyAgICBmYWxzZTsgXAorICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAorICAgIHRydWU7IFwKKyAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAorICAgIHRydWU7IFwKKyAgZWxzZSBcCisgICAgZmFsc2U7IFwKKyAgZmk7IFwKK30KK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKyAgICAgID8pIDs7IFwKKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisgICAgICAgICBleGl0IDE7OyBcCisgIGVzYWM7IFwKKyAgaGFzX29wdD1ubzsgXAorICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisgIGVsc2UgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBicz1cXDsgXAorICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKyAgICBlc2FjOyBcCisgIGZpOyBcCisgIHNraXBfbmV4dD1ubzsgXAorICBzdHJpcF90cmFpbG9wdCAoKSBcCisgIHsgXAorICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisgIH07IFwKKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorICAgIGVzYWM7IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisgICAgZXNhYzsgXAorICBkb25lOyBcCisgIHRlc3QgJCRoYXNfb3B0ID0geWVzCithbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK25vaW5zdF9QUk9HUkFNUyA9ICQoYW1fX0VYRUVYVF8xKQorQENBUkVTX0xUX1NITElCX1VTRV9WRVJTSU9OX0lORk9fVFJVRUBhbV9fYXBwZW5kXzEgPSAkKENBUkVTX1ZFUlNJT05fSU5GTykKK0BDQVJFU19MVF9TSExJQl9VU0VfTk9fVU5ERUZJTkVEX1RSVUVAYW1fX2FwcGVuZF8yID0gLW5vLXVuZGVmaW5lZAorQENBUkVTX0xUX1NITElCX1VTRV9NSU1QVVJFX1RFWFRfVFJVRUBhbV9fYXBwZW5kXzMgPSAtbWltcHVyZS10ZXh0CitAVVNFX0NQUEZMQUdfQ0FSRVNfU1RBVElDTElCX1RSVUVAYW1fX2FwcGVuZF80ID0gJChDUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQikKK0BET0lOR19DQVJFU19TWU1CT0xfSElESU5HX1RSVUVAYW1fX2FwcGVuZF81ID0gJChDRkxBR19DQVJFU19TWU1CT0xfSElESU5HKQorQERPSU5HX0NBUkVTX1NZTUJPTF9ISURJTkdfVFJVRUBhbV9fYXBwZW5kXzYgPSAtRENBUkVTX1NZTUJPTF9ISURJTkcKK3N1YmRpciA9IC4KK1NVQkRJUlMgPQorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYXhfY29kZV9jb3ZlcmFnZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2FyZXMtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NhcmVzLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NhcmVzLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jYXJlcy1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jYXJlcy1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLWFtLWlmYWNlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLWNjLWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLWx0LWlmYWNlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXZhbC1mbGdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NDAteGMtb3ZyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NjAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBcCisJJChhbV9fY29uZmlndXJlX2RlcHMpICQobGliY2FyZXNfbGFfSEVBREVSUykgXAorCSQoYW1fX0RJU1RfQ09NTU9OKQorYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMgPSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIFwKKyBjb25maWd1cmUubGluZW5vIGNvbmZpZy5zdGF0dXMubGluZW5vCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gYXJlc19jb25maWcuaCBhcmVzX2J1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IGxpYmNhcmVzLnBjCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKG1hbjNkaXIpIiBcCisJIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiICIkKERFU1RESVIpJChsaWJjYXJlc19sYWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorbGliY2FyZXNfbGFfTElCQUREID0KK2FtX19vYmplY3RzXzEgPSBsaWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19fcmVhZF9saW5lLmxvIGxpYmNhcmVzX2xhLWFyZXNfX3RpbWV2YWwubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfY2FuY2VsLmxvIGxpYmNhcmVzX2xhLWFyZXNfZGF0YS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LmxvIGxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX3N0cmluZy5sbyBsaWJjYXJlc19sYS1hcmVzX2Zkcy5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcubG8gbGliY2FyZXNfbGEtYXJlc19nZXRlbnYubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5YWRkci5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnluYW1lLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX2dldG5hbWVpbmZvLmxvIGxpYmNhcmVzX2xhLWFyZXNfZ2V0c29jay5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19pbml0LmxvIGxpYmNhcmVzX2xhLWFyZXNfbGlicmFyeV9pbml0LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX2xsaXN0LmxvIGxpYmNhcmVzX2xhLWFyZXNfbWtxdWVyeS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19jcmVhdGVfcXVlcnkubG8gbGliY2FyZXNfbGEtYXJlc19ub3dhcm4ubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfb3B0aW9ucy5sbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wYXJzZV9teF9yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uc19yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wYXJzZV9wdHJfcmVwbHkubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wYXJzZV90eHRfcmVwbHkubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfcGxhdGZvcm0ubG8gbGliY2FyZXNfbGEtYXJlc19wcm9jZXNzLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3F1ZXJ5LmxvIGxpYmNhcmVzX2xhLWFyZXNfc2VhcmNoLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3NlbmQubG8gbGliY2FyZXNfbGEtYXJlc19zdHJjYXNlY21wLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3N0cmR1cC5sbyBsaWJjYXJlc19sYS1hcmVzX3N0cmVycm9yLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3RpbWVvdXQubG8gbGliY2FyZXNfbGEtYXJlc192ZXJzaW9uLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3dyaXRldi5sbyBsaWJjYXJlc19sYS1iaXRuY21wLmxvIFwKKwlsaWJjYXJlc19sYS1pbmV0X25ldF9wdG9uLmxvIGxpYmNhcmVzX2xhLWluZXRfbnRvcC5sbyBcCisJbGliY2FyZXNfbGEtd2luZG93c19wb3J0LmxvCithbV9fb2JqZWN0c18yID0KK2FtX2xpYmNhcmVzX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikKK2xpYmNhcmVzX2xhX09CSkVDVFMgPSAkKGFtX2xpYmNhcmVzX2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithbV9fdl9sdF8xID0gCitsaWJjYXJlc19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJjYXJlc19sYV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChsaWJjYXJlc19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitAQ1VSTERFQlVHX0ZBTFNFQGFtX19FWEVFWFRfMSA9IGFob3N0JChFWEVFWFQpIGFkaWckKEVYRUVYVCkgXAorQENVUkxERUJVR19GQUxTRUAJYWNvdW50cnkkKEVYRUVYVCkKK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCithbV9fb2JqZWN0c18zID0gYWNvdW50cnktYXJlc19nZXRvcHQuJChPQkpFWFQpIFwKKwlhY291bnRyeS1hcmVzX25vd2Fybi4kKE9CSkVYVCkgXAorCWFjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC4kKE9CSkVYVCkKK2FtX2Fjb3VudHJ5X09CSkVDVFMgPSBhY291bnRyeS1hY291bnRyeS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18zKSBcCisJJChhbV9fb2JqZWN0c18yKQorYWNvdW50cnlfT0JKRUNUUyA9ICQoYW1fYWNvdW50cnlfT0JKRUNUUykKK2Fjb3VudHJ5X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJjYXJlcy5sYQorYWNvdW50cnlfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoYWNvdW50cnlfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX29iamVjdHNfNCA9IGFkaWctYXJlc19nZXRvcHQuJChPQkpFWFQpIGFkaWctYXJlc19ub3dhcm4uJChPQkpFWFQpIFwKKwlhZGlnLWFyZXNfc3RyY2FzZWNtcC4kKE9CSkVYVCkKK2FtX2FkaWdfT0JKRUNUUyA9IGFkaWctYWRpZy4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c180KSBcCisJJChhbV9fb2JqZWN0c18yKQorYWRpZ19PQkpFQ1RTID0gJChhbV9hZGlnX09CSkVDVFMpCithZGlnX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJjYXJlcy5sYQorYWRpZ19MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX19vYmplY3RzXzUgPSBhaG9zdC1hcmVzX2dldG9wdC4kKE9CSkVYVCkgXAorCWFob3N0LWFyZXNfbm93YXJuLiQoT0JKRVhUKSBhaG9zdC1hcmVzX3N0cmNhc2VjbXAuJChPQkpFWFQpCithbV9haG9zdF9PQkpFQ1RTID0gYWhvc3QtYWhvc3QuJChPQkpFWFQpICQoYW1fX29iamVjdHNfNSkgXAorCSQoYW1fX29iamVjdHNfMikKK2Fob3N0X09CSkVDVFMgPSAkKGFtX2Fob3N0X09CSkVDVFMpCithaG9zdF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliY2FyZXMubGEKK2Fob3N0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAorREVGQVVMVF9JTkNMVURFUyA9IAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CithbV9fdl9DQ18xID0gCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKK2FtX192X0NDTERfMSA9IAorU09VUkNFUyA9ICQobGliY2FyZXNfbGFfU09VUkNFUykgJChhY291bnRyeV9TT1VSQ0VTKSAkKGFkaWdfU09VUkNFUykgXAorCSQoYWhvc3RfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGliY2FyZXNfbGFfU09VUkNFUykgJChhY291bnRyeV9TT1VSQ0VTKSBcCisJJChhZGlnX1NPVVJDRVMpICQoYWhvc3RfU09VUkNFUykKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAorCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKKwl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCithbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisgICAgbnxub3xOTykgZmFsc2U7OyBcCisgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKyAgZXNhYworbWFuM2RpciA9ICQobWFuZGlyKS9tYW4zCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChtYW5fTUFOUykKK0RBVEEgPSAkKHBrZ2NvbmZpZ19EQVRBKQorSEVBREVSUyA9ICQobGliY2FyZXNfbGFfSEVBREVSUykKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK2FtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKKyAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAorICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCisgICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCisJY3Njb3BlIGRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSBcCisJJChMSVNQKWFyZXNfY29uZmlnLmguaW4gYXJlc19idWlsZC5oLmluCisjIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKyMgKm5vdCogcHJlc2VydmVkLgorYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCisgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKyAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCisnCisjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisjIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCithbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworQ1NDT1BFID0gY3Njb3BlCithbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmluYyBcCisJJChzcmNkaXIpL2FyZXNfYnVpbGQuaC5pbiAkKHNyY2RpcikvYXJlc19jb25maWcuaC5pbiBcCisJJChzcmNkaXIpL2xpYmNhcmVzLnBjLmluIEFVVEhPUlMgSU5TVEFMTCBORVdTIFRPRE8gY29tcGlsZSBcCisJY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIGx0bWFpbi5zaCBtaXNzaW5nIFwKKwlta2luc3RhbGxkaXJzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorZGlzdGRpciA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQordG9wX2Rpc3RkaXIgPSAkKGRpc3RkaXIpCithbV9fcmVtb3ZlX2Rpc3RkaXIgPSBcCisgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikiOyB0aGVuIFwKKyAgICBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKKyAgICAgICYmIHJtIC1yZiAiJChkaXN0ZGlyKSIgXAorICAgICAgfHwgeyBzbGVlcCA1ICYmIHJtIC1yZiAiJChkaXN0ZGlyKSI7IH07IFwKKyAgZWxzZSA6OyBmaQorYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIgPSAkKGFtX19yZW1vdmVfZGlzdGRpcikKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6CitHWklQX0VOViA9IC0tYmVzdAorRElTVF9UQVJHRVRTID0gZGlzdC1nemlwCitkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CithbV9fZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9ICQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgXAorICB8IHNlZCAnc3xeXC4vfCQocHJlZml4KS98JyB8IGdyZXAgLXYgJyQoaW5mb2RpcikvZGlyJCQnCitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQVJFU19DRkxBR19FWFRSQVMgPSBAQ0FSRVNfQ0ZMQUdfRVhUUkFTQAorQ0FSRVNfUFJJVkFURV9MSUJTID0gQENBUkVTX1BSSVZBVEVfTElCU0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKKworIyBBZGQgLVdlcnJvciBpZiBkZWZpbmVkCitDRkxBR1MgPSBAQ0ZMQUdTQCBAQ0FSRVNfQ0ZMQUdfRVhUUkFTQAorQ0ZMQUdfQ0FSRVNfU1lNQk9MX0hJRElORyA9IEBDRkxBR19DQVJFU19TWU1CT0xfSElESU5HQAorQ09ERV9DT1ZFUkFHRV9DRkxBR1MgPSBAQ09ERV9DT1ZFUkFHRV9DRkxBR1NACitDT0RFX0NPVkVSQUdFX0VOQUJMRUQgPSBAQ09ERV9DT1ZFUkFHRV9FTkFCTEVEQAorQ09ERV9DT1ZFUkFHRV9MREZMQUdTID0gQENPREVfQ09WRVJBR0VfTERGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NQUEZMQUdfQ0FSRVNfU1RBVElDTElCID0gQENQUEZMQUdfQ0FSRVNfU1RBVElDTElCQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dDT1YgPSBAR0NPVkAKK0dFTkhUTUwgPSBAR0VOSFRNTEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfQ1hYMTEgPSBASEFWRV9DWFgxMUAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTENPViA9IEBMQ09WQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01LRElSX1AgPSBATUtESVJfUEAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIG5vc3RkaW5jCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorQENVUkxERUJVR19GQUxTRUBBTV9DUFBGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpIC1JJCh0b3Bfc3JjZGlyKSBcCitAQ1VSTERFQlVHX0ZBTFNFQAkkKGFtX19hcHBlbmRfNCkKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjIFdoZW4gdXNpbmcgdGhlIGxvdy1sZXZlbCBoYXJkLWhhY2tpbmcgbWVtb3J5IGxlYWsgdHJhY2tpbmcgY29kZSBmcm9tCisjIGxpYmN1cmwgdGhlIGdlbmVyYXRlZCBjdXJsL2N1cmxidWlsZC5oIGZpbGUgbXVzdCBhbHNvIGJlIHJlYWNoYWJsZS4KKyMgVXNpbmcgdGhlIGxpYmN1cmwgbG93bGV2ZWwgY29kZSBmcm9tIHdpdGhpbiBjLWFyZXMgbGlicmFyeSBpcyB1Z2x5IGFuZAorIyBvbmx5IHdvcmtzIHdoZW4gYy1hcmVzIGlzIGJ1aWx0IGFuZCBsaW5rZWQgd2l0aCBhIHNpbWlsYXJseSBkZWJ1Zy1idWlsZAorIyBsaWJjdXJsLCBidXQgd2UgZG8gdGhpcyBhbnl3YXkgZm9yIGNvbnZlbmllbmNlLgorIworIyAkKHRvcF9idWlsZGRpcikvLi4vaW5jbHVkZS9jdXJsIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBjdXJsLmgKKyMgJCh0b3BfYnVpbGRkaXIpLy4uL2luY2x1ZGUgaXMgZm9yIGxpYmN1cmwncyBnZW5lcmF0ZWQgY3VybC9jdXJsYnVpbGQuaCBmaWxlCisjICQodG9wX3NyY2RpcikvLi4vaW5jbHVkZSBpcyBmb3IgbGliY3VybCdzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKyMgJCh0b3BfYnVpbGRkaXIpLy4uL2xpYiBpcyBmb3IgbGliY3VybCdzIGdlbmVyYXRlZCBsaWIvY3VybF9jb25maWcuaCBmaWxlCisjICQodG9wX3NyY2RpcikvLi4vbGliIGlzIGZvciBsaWJjdXJsJ3MgbGliL3NldHVwLmggYW5kIG90aGVyICJwcml2YXRlIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikgaXMgZm9yIGMtYXJlcydzIGdlbmVyYXRlZCBhcmVzX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKSBpcyBmb3IgYy1hcmVzJ3MgYXJlc19zZXR1cC5oIGFuZCBvdGhlciAiYy1hcmVzLXByaXZhdGUiIGZpbGVzCitAQ1VSTERFQlVHX1RSVUVAQU1fQ1BQRkxBR1MgPSAtSSQodG9wX2J1aWxkZGlyKS8uLi9pbmNsdWRlL2N1cmwgXAorQENVUkxERUJVR19UUlVFQAktSSQodG9wX2J1aWxkZGlyKS8uLi9pbmNsdWRlIFwKK0BDVVJMREVCVUdfVFJVRUAJLUkkKHRvcF9zcmNkaXIpLy4uL2luY2x1ZGUgXAorQENVUkxERUJVR19UUlVFQAktSSQodG9wX2J1aWxkZGlyKS8uLi9saWIgXAorQENVUkxERUJVR19UUlVFQAktSSQodG9wX3NyY2RpcikvLi4vbGliIC1JJCh0b3BfYnVpbGRkaXIpIFwKK0BDVVJMREVCVUdfVFJVRUAJLUkkKHRvcF9zcmNkaXIpICQoYW1fX2FwcGVuZF80KQorbGliX0xUTElCUkFSSUVTID0gbGliY2FyZXMubGEKK21hbl9NQU5TID0gJChNQU5QQUdFUykKK01TVkNGSUxFUyA9IHZjL3ZjNmF3cy5kc3cgdmMvYWNvdW50cnkvdmM2YWNvdW50cnkuZHNwIHZjL2FkaWcvdmM2YWRpZy5kc3AgXAorIHZjL2Fob3N0L3ZjNmFob3N0LmRzcCB2Yy9jYXJlcy92YzZjYXJlcy5kc3AgdmMvY2FyZXMvdmM2Y2FyZXMuZHN3CisKK0BDVVJMREVCVUdfRkFMU0VAUFJPR1MgPSBhaG9zdCBhZGlnIGFjb3VudHJ5CitAQ1VSTERFQlVHX1RSVUVAUFJPR1MgPSAKKworIyBhZGlnIGFuZCBhaG9zdCBhcmUganVzdCBzYW1wbGUgcHJvZ3JhbXMgYW5kIHRodXMgbm90IG1lbnRpb25lZCB3aXRoIHRoZQorIyByZWd1bGFyIHNvdXJjZXMgYW5kIGhlYWRlcnMKK0VYVFJBX0RJU1QgPSBBVVRIT1JTIENIQU5HRVMgUkVBRE1FLmNhcmVzIE1ha2VmaWxlLmluYyBNYWtlZmlsZS5kagkgICBcCisgTWFrZWZpbGUubTMyIE1ha2VmaWxlLm5ldHdhcmUgTWFrZWZpbGUubXN2YyBNYWtlZmlsZS5XYXRjb20gJChtYW5fTUFOUykgICBcCisgY29uZmlnLXdpbjMyLmggUkVMRUFTRS1OT1RFUyBsaWJjYXJlcy5wYy5pbiBidWlsZGNvbmYgZ2V0X3Zlci5hd2sgbWFrZXRneiBcCisgVE9ETyBhcmVzX2J1aWxkLmguaW4gJChQREZQQUdFUykgY2FyZXMucmMgUkVBRE1FLm1zdmMgJChNU1ZDRklMRVMpCSAgIFwKKyAkKENTT1VSQ0VTKSAkKEhIRUFERVJTKSBjb25maWctZG9zLmggYWNvdW50cnkuMSBhZGlnLjEgYWhvc3QuMSBJTlNUQUxMCSAgIFwKKyBSRUFETUUubWQgTElDRU5TRS5tZAorCitDTEVBTkZJTEVTID0gJChQREZQQUdFUykgJChIVE1MUEFHRVMpCitESVNUQ0xFQU5GSUxFUyA9IGFyZXNfYnVpbGQuaAorRElTVF9TVUJESVJTID0gdGVzdAorcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPSBsaWJjYXJlcy5wYworQ0FSRVNfVkVSU0lPTl9JTkZPID0gLXZlcnNpb24taW5mbyA0OjA6MgorIyBUaGlzIGZsYWcgYWNjZXB0cyBhbiBhcmd1bWVudCBvZiB0aGUgZm9ybSBjdXJyZW50WzpyZXZpc2lvbls6YWdlXV0uIFNvLAorIyBwYXNzaW5nIC12ZXJzaW9uLWluZm8gMzoxMjoxIHNldHMgY3VycmVudCB0byAzLCByZXZpc2lvbiB0byAxMiwgYW5kIGFnZSB0bworIyAxLgorIworIyBJZiBlaXRoZXIgcmV2aXNpb24gb3IgYWdlIGFyZSBvbWl0dGVkLCB0aGV5IGRlZmF1bHQgdG8gMC4gQWxzbyBub3RlIHRoYXQgYWdlCisjIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIuCisjCisjIEhlcmUgYXJlIGEgc2V0IG9mIHJ1bGVzIHRvIGhlbHAgeW91IHVwZGF0ZSB5b3VyIGxpYnJhcnkgdmVyc2lvbiBpbmZvcm1hdGlvbjogCisjCisjIDEuU3RhcnQgd2l0aCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIDA6MDowIGZvciBlYWNoIGxpYnRvb2wgbGlicmFyeS4KKyMKKyMgMi5VcGRhdGUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gb25seSBpbW1lZGlhdGVseSBiZWZvcmUgYSBwdWJsaWMgcmVsZWFzZSBvZgorIyB5b3VyIHNvZnR3YXJlLiBNb3JlIGZyZXF1ZW50IHVwZGF0ZXMgYXJlIHVubmVjZXNzYXJ5LCBhbmQgb25seSBndWFyYW50ZWUKKyMgdGhhdCB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIGdldHMgbGFyZ2VyIGZhc3Rlci4KKyMKKyMgMy5JZiB0aGUgbGlicmFyeSBzb3VyY2UgY29kZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlIGxhc3QgdXBkYXRlLCB0aGVuCisjIGluY3JlbWVudCByZXZpc2lvbiAoYzpyKzE6YSkKKyMKKyMgNC5JZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQsIHJlbW92ZWQsIG9yIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QKKyMgdXBkYXRlLCBpbmNyZW1lbnQgY3VycmVudCwgYW5kIHNldCByZXZpc2lvbiB0byAwLiAoYysxOnI9MDphKQorIworIyA1LklmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbGFzdCBwdWJsaWMgcmVsZWFzZSwgdGhlbgorIyBpbmNyZW1lbnQgYWdlLiAoYzpyOmErMSkKKyMKKyMgNi5JZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSB0aGUgbGFzdCBwdWJsaWMgcmVsZWFzZSwgdGhlbgorIyBzZXQgYWdlIHRvIDAuIChjOnI6YT0wKQorIworQU1fTERGTEFHUyA9IAorbGliY2FyZXNfbGFfTERGTEFHU19FWFRSQSA9ICQoYW1fX2FwcGVuZF8xKSAkKGFtX19hcHBlbmRfMikgXAorCSQoYW1fX2FwcGVuZF8zKQorbGliY2FyZXNfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgJChsaWJjYXJlc19sYV9MREZMQUdTX0VYVFJBKSBcCisJJChDT0RFX0NPVkVSQUdFX0xERkxBR1MpCitsaWJjYXJlc19sYV9DRkxBR1NfRVhUUkEgPSAkKGFtX19hcHBlbmRfNSkgJChDT0RFX0NPVkVSQUdFX0NGTEFHUykKK2xpYmNhcmVzX2xhX0NQUEZMQUdTX0VYVFJBID0gLURDQVJFU19CVUlMRElOR19MSUJSQVJZICQoYW1fX2FwcGVuZF82KQorbGliY2FyZXNfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTX0VYVFJBKQorbGliY2FyZXNfbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTX0VYVFJBKQorQ1NPVVJDRVMgPSBhcmVzX19jbG9zZV9zb2NrZXRzLmMJXAorICBhcmVzX19nZXRfaG9zdGVudC5jCQkJXAorICBhcmVzX19yZWFkX2xpbmUuYwkJCVwKKyAgYXJlc19fdGltZXZhbC5jCQkJXAorICBhcmVzX2NhbmNlbC5jCQkJCVwKKyAgYXJlc19kYXRhLmMJCQkJXAorICBhcmVzX2Rlc3Ryb3kuYwkJCVwKKyAgYXJlc19leHBhbmRfbmFtZS5jCQkJXAorICBhcmVzX2V4cGFuZF9zdHJpbmcuYwkJCVwKKyAgYXJlc19mZHMuYwkJCQlcCisgIGFyZXNfZnJlZV9ob3N0ZW50LmMJCQlcCisgIGFyZXNfZnJlZV9zdHJpbmcuYwkJCVwKKyAgYXJlc19nZXRlbnYuYwkJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5YWRkci5jCQkJXAorICBhcmVzX2dldGhvc3RieW5hbWUuYwkJCVwKKyAgYXJlc19nZXRuYW1laW5mby5jCQkJXAorICBhcmVzX2dldHNvY2suYwkJCVwKKyAgYXJlc19pbml0LmMJCQkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC5jCQkJXAorICBhcmVzX2xsaXN0LmMJCQkJXAorICBhcmVzX21rcXVlcnkuYwkJCVwKKyAgYXJlc19jcmVhdGVfcXVlcnkuYwkJCVwKKyAgYXJlc19ub3dhcm4uYwkJCQlcCisgIGFyZXNfb3B0aW9ucy5jCQkJXAorICBhcmVzX3BhcnNlX2FfcmVwbHkuYwkJCVwKKyAgYXJlc19wYXJzZV9hYWFhX3JlcGx5LmMJCVwKKyAgYXJlc19wYXJzZV9teF9yZXBseS5jCQkJXAorICBhcmVzX3BhcnNlX25hcHRyX3JlcGx5LmMJCVwKKyAgYXJlc19wYXJzZV9uc19yZXBseS5jCQkJXAorICBhcmVzX3BhcnNlX3B0cl9yZXBseS5jCQlcCisgIGFyZXNfcGFyc2Vfc29hX3JlcGx5LmMJCVwKKyAgYXJlc19wYXJzZV9zcnZfcmVwbHkuYwkJXAorICBhcmVzX3BhcnNlX3R4dF9yZXBseS5jCQlcCisgIGFyZXNfcGxhdGZvcm0uYwkJCVwKKyAgYXJlc19wcm9jZXNzLmMJCQlcCisgIGFyZXNfcXVlcnkuYwkJCQlcCisgIGFyZXNfc2VhcmNoLmMJCQkJXAorICBhcmVzX3NlbmQuYwkJCQlcCisgIGFyZXNfc3RyY2FzZWNtcC5jCQkJXAorICBhcmVzX3N0cmR1cC5jCQkJCVwKKyAgYXJlc19zdHJlcnJvci5jCQkJXAorICBhcmVzX3RpbWVvdXQuYwkJCVwKKyAgYXJlc192ZXJzaW9uLmMJCQlcCisgIGFyZXNfd3JpdGV2LmMJCQkJXAorICBiaXRuY21wLmMJCQkJXAorICBpbmV0X25ldF9wdG9uLmMJCQlcCisgIGluZXRfbnRvcC5jCQkJCVwKKyAgd2luZG93c19wb3J0LmMKKworSEhFQURFUlMgPSBhcmVzLmgJCQlcCisgIGFyZXNfYnVpbGQuaAkJCQlcCisgIGFyZXNfZGF0YS5oCQkJCVwKKyAgYXJlc19kbnMuaAkJCQlcCisgIGFyZXNfZ2V0ZW52LmgJCQkJXAorICBhcmVzX2luZXRfbmV0X3B0b24uaAkJXAorICBhcmVzX2lwaGxwYXBpLmgJCQlcCisgIGFyZXNfaXB2Ni5oCQkJCVwKKyAgYXJlc19saWJyYXJ5X2luaXQuaAkJCVwKKyAgYXJlc19sbGlzdC5oCQkJCVwKKyAgYXJlc19ub3dhcm4uaAkJCQlcCisgIGFyZXNfcGxhdGZvcm0uaAkJCVwKKyAgYXJlc19wcml2YXRlLmgJCQlcCisgIGFyZXNfcnVsZXMuaAkJCQlcCisgIGFyZXNfc3RyY2FzZWNtcC5oCQkJXAorICBhcmVzX3N0cmR1cC5oCQkJCVwKKyAgYXJlc192ZXJzaW9uLmgJCQlcCisgIGFyZXNfd3JpdGV2LmgJCQkJXAorICBiaXRuY21wLmgJCQkJXAorICBuYW1lc2VyLmgJCQkJXAorICBhcmVzX3NldHVwLmgJCQkJXAorICBzZXR1cF9vbmNlLmgKKworTUFOUEFHRVMgPSBhcmVzX2NhbmNlbC4zCQlcCisgIGFyZXNfZGVzdHJveS4zCQkJXAorICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucy4zCQlcCisgIGFyZXNfZHVwLjMJCQkJXAorICBhcmVzX2V4cGFuZF9uYW1lLjMJCQlcCisgIGFyZXNfZXhwYW5kX3N0cmluZy4zCQkJXAorICBhcmVzX2Zkcy4zCQkJCVwKKyAgYXJlc19mcmVlX2RhdGEuMwkJCVwKKyAgYXJlc19mcmVlX2hvc3RlbnQuMwkJCVwKKyAgYXJlc19mcmVlX3N0cmluZy4zCQkJXAorICBhcmVzX2dldF9zZXJ2ZXJzLjMJCQlcCisgIGFyZXNfZ2V0X3NlcnZlcnNfcG9ydHMuMwkJCVwKKyAgYXJlc19nZXRob3N0YnlhZGRyLjMJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZS4zCQkJXAorICBhcmVzX2dldGhvc3RieW5hbWVfZmlsZS4zCQlcCisgIGFyZXNfZ2V0bmFtZWluZm8uMwkJCVwKKyAgYXJlc19nZXRzb2NrLjMJCQlcCisgIGFyZXNfaW5pdC4zCQkJCVwKKyAgYXJlc19pbml0X29wdGlvbnMuMwkJCVwKKyAgYXJlc19saWJyYXJ5X2NsZWFudXAuMwkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC4zCQkJXAorICBhcmVzX21rcXVlcnkuMwkJCVwKKyAgYXJlc19jcmVhdGVfcXVlcnkuMwkJCVwKKyAgYXJlc19wYXJzZV9hX3JlcGx5LjMJCQlcCisgIGFyZXNfcGFyc2VfYWFhYV9yZXBseS4zCQlcCisgIGFyZXNfcGFyc2VfbXhfcmVwbHkuMwkJCVwKKyAgYXJlc19wYXJzZV9uYXB0cl9yZXBseS4zCQlcCisgIGFyZXNfcGFyc2VfbnNfcmVwbHkuMwkJCVwKKyAgYXJlc19wYXJzZV9wdHJfcmVwbHkuMwkJXAorICBhcmVzX3BhcnNlX3NvYV9yZXBseS4zCQlcCisgIGFyZXNfcGFyc2Vfc3J2X3JlcGx5LjMJCVwKKyAgYXJlc19wYXJzZV90eHRfcmVwbHkuMwkJXAorICBhcmVzX3Byb2Nlc3MuMwkJCVwKKyAgYXJlc19xdWVyeS4zCQkJCVwKKyAgYXJlc19zYXZlX29wdGlvbnMuMwkJCVwKKyAgYXJlc19zZWFyY2guMwkJCQlcCisgIGFyZXNfc2VuZC4zCQkJCVwKKyAgYXJlc19zZXRfbG9jYWxfZGV2LjMJCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNC4zCQkJXAorICBhcmVzX3NldF9sb2NhbF9pcDYuMwkJCVwKKyAgYXJlc19zZXRfc2VydmVycy4zCQkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX2Nzdi4zCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMuMwkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2Nzdi4zCQlcCisgIGFyZXNfc2V0X3NvY2tldF9jYWxsYmFjay4zCQlcCisgIGFyZXNfc2V0X3NvY2tldF9jb25maWd1cmVfY2FsbGJhY2suMwlcCisgIGFyZXNfc2V0X3NvcnRsaXN0LjMJCQlcCisgIGFyZXNfc3RyZXJyb3IuMwkJCVwKKyAgYXJlc190aW1lb3V0LjMJCQlcCisgIGFyZXNfdmVyc2lvbi4zCQkgICAgICAgIFwKKyAgYXJlc19pbmV0X3B0b24uMyAgICAgICAgICAgICAgICAgICAgICBcCisgIGFyZXNfaW5ldF9udG9wLjMKKworSFRNTFBBR0VTID0gYXJlc19jYW5jZWwuaHRtbAkJXAorICBhcmVzX2Rlc3Ryb3kuaHRtbAkJCVwKKyAgYXJlc19kZXN0cm95X29wdGlvbnMuaHRtbAkJXAorICBhcmVzX2R1cC5odG1sCQkJCVwKKyAgYXJlc19leHBhbmRfbmFtZS5odG1sCQkJXAorICBhcmVzX2V4cGFuZF9zdHJpbmcuaHRtbAkJXAorICBhcmVzX2Zkcy5odG1sCQkJCVwKKyAgYXJlc19mcmVlX2RhdGEuaHRtbAkJCVwKKyAgYXJlc19mcmVlX2hvc3RlbnQuaHRtbAkJXAorICBhcmVzX2ZyZWVfc3RyaW5nLmh0bWwJCQlcCisgIGFyZXNfZ2V0X3NlcnZlcnMuaHRtbAkJCVwKKyAgYXJlc19nZXRfc2VydmVyc19wb3J0cy5odG1sCQkJXAorICBhcmVzX2dldGhvc3RieWFkZHIuaHRtbAkJXAorICBhcmVzX2dldGhvc3RieW5hbWUuaHRtbAkJXAorICBhcmVzX2dldGhvc3RieW5hbWVfZmlsZS5odG1sCQlcCisgIGFyZXNfZ2V0bmFtZWluZm8uaHRtbAkJCVwKKyAgYXJlc19nZXRzb2NrLmh0bWwJCQlcCisgIGFyZXNfaW5pdC5odG1sCQkJXAorICBhcmVzX2luaXRfb3B0aW9ucy5odG1sCQlcCisgIGFyZXNfbGlicmFyeV9jbGVhbnVwLmh0bWwJCVwKKyAgYXJlc19saWJyYXJ5X2luaXQuaHRtbAkJXAorICBhcmVzX21rcXVlcnkuaHRtbAkJCVwKKyAgYXJlc19jcmVhdGVfcXVlcnkuaHRtbAkJCVwKKyAgYXJlc19wYXJzZV9hX3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wYXJzZV9hYWFhX3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wYXJzZV9teF9yZXBseS5odG1sCQlcCisgIGFyZXNfcGFyc2VfbnNfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX3B0cl9yZXBseS5odG1sCQlcCisgIGFyZXNfcGFyc2Vfc29hX3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wYXJzZV9zcnZfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX3R4dF9yZXBseS5odG1sCQlcCisgIGFyZXNfcHJvY2Vzcy5odG1sCQkJXAorICBhcmVzX3F1ZXJ5Lmh0bWwJCQlcCisgIGFyZXNfc2F2ZV9vcHRpb25zLmh0bWwJCVwKKyAgYXJlc19zZWFyY2guaHRtbAkJCVwKKyAgYXJlc19zZW5kLmh0bWwJCQlcCisgIGFyZXNfc2V0X2xvY2FsX2Rldi5odG1sCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNC5odG1sCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNi5odG1sCQlcCisgIGFyZXNfc2V0X3NlcnZlcnMuaHRtbAkJCVwKKyAgYXJlc19zZXRfc2VydmVyc19jc3YuaHRtbAkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzLmh0bWwJCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2Lmh0bWwJCQlcCisgIGFyZXNfc2V0X3NvY2tldF9jYWxsYmFjay5odG1sCQlcCisgIGFyZXNfc2V0X3NvY2tldF9jb25maWd1cmVfY2FsbGJhY2suaHRtbAkJXAorICBhcmVzX3NldF9zb3J0bGlzdC5odG1sCQkJXAorICBhcmVzX3N0cmVycm9yLmh0bWwJCQlcCisgIGFyZXNfdGltZW91dC5odG1sCQkJXAorICBhcmVzX3ZlcnNpb24uaHRtbCAgICAgICAgICAgICAgICAgICAgIFwKKyAgYXJlc19pbmV0X3B0b24uaHRtbCAgICAgICAgICAgICAgICAgICBcCisgIGFyZXNfaW5ldF9udG9wLmh0bWwKKworUERGUEFHRVMgPSBhcmVzX2NhbmNlbC5wZGYJCVwKKyAgYXJlc19kZXN0cm95LnBkZgkJCVwKKyAgYXJlc19kZXN0cm95X29wdGlvbnMucGRmCQlcCisgIGFyZXNfZHVwLnBkZgkJCQlcCisgIGFyZXNfZXhwYW5kX25hbWUucGRmCQkJXAorICBhcmVzX2V4cGFuZF9zdHJpbmcucGRmCQlcCisgIGFyZXNfZmRzLnBkZgkJCQlcCisgIGFyZXNfZnJlZV9kYXRhLnBkZgkJCVwKKyAgYXJlc19mcmVlX2hvc3RlbnQucGRmCQkJXAorICBhcmVzX2ZyZWVfc3RyaW5nLnBkZgkJCVwKKyAgYXJlc19nZXRfc2VydmVycy5wZGYJCQlcCisgIGFyZXNfZ2V0X3NlcnZlcnNfcG9ydHMucGRmCQkJXAorICBhcmVzX2dldGhvc3RieWFkZHIucGRmCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZS5wZGYJCVwKKyAgYXJlc19nZXRob3N0YnluYW1lX2ZpbGUucGRmCQlcCisgIGFyZXNfZ2V0bmFtZWluZm8ucGRmCQkJXAorICBhcmVzX2dldHNvY2sucGRmCQkJXAorICBhcmVzX2luaXQucGRmCQkJCVwKKyAgYXJlc19pbml0X29wdGlvbnMucGRmCQkJXAorICBhcmVzX2xpYnJhcnlfY2xlYW51cC5wZGYJCVwKKyAgYXJlc19saWJyYXJ5X2luaXQucGRmCQkJXAorICBhcmVzX21rcXVlcnkucGRmCQkJXAorICBhcmVzX2NyZWF0ZV9xdWVyeS5wZGYJCQlcCisgIGFyZXNfcGFyc2VfYV9yZXBseS5wZGYJCVwKKyAgYXJlc19wYXJzZV9hYWFhX3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX214X3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX25zX3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX3B0cl9yZXBseS5wZGYJCVwKKyAgYXJlc19wYXJzZV9zb2FfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2Vfc3J2X3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX3R4dF9yZXBseS5wZGYJCVwKKyAgYXJlc19wcm9jZXNzLnBkZgkJCVwKKyAgYXJlc19xdWVyeS5wZGYJCQlcCisgIGFyZXNfc2F2ZV9vcHRpb25zLnBkZgkJCVwKKyAgYXJlc19zZWFyY2gucGRmCQkJXAorICBhcmVzX3NlbmQucGRmCQkJCVwKKyAgYXJlc19zZXRfbG9jYWxfZGV2LnBkZgkJXAorICBhcmVzX3NldF9sb2NhbF9pcDQucGRmCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNi5wZGYJCVwKKyAgYXJlc19zZXRfc2VydmVycy5wZGYJCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfY3N2LnBkZgkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzLnBkZgkJCVwKKyAgYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3YucGRmCQkJXAorICBhcmVzX3NldF9zb2NrZXRfY2FsbGJhY2sucGRmCQlcCisgIGFyZXNfc2V0X3NvY2tldF9jb25maWd1cmVfY2FsbGJhY2sucGRmCQlcCisgIGFyZXNfc2V0X3NvcnRsaXN0LnBkZgkJCVwKKyAgYXJlc19zdHJlcnJvci5wZGYJCQlcCisgIGFyZXNfdGltZW91dC5wZGYJCQlcCisgIGFyZXNfdmVyc2lvbi5wZGYgICAgICAgICAgICAgICAgICAgICAgXAorICBhcmVzX2luZXRfcHRvbi5wZGYgICAgICAgICAgICAgICAgICAgIFwKKyAgYXJlc19pbmV0X250b3AucGRmCisKK1NBTVBMRVNPVVJDRVMgPSBhcmVzX2dldG9wdC5jCQlcCisgIGFyZXNfbm93YXJuLmMJCQkJXAorICBhcmVzX3N0cmNhc2VjbXAuYworCitTQU1QTEVIRUFERVJTID0gYXJlc19nZXRvcHQuaAkJXAorICBhcmVzX25vd2Fybi5oCQkJCVwKKyAgYXJlc19zdHJjYXNlY21wLmgKKworCisjIE1ha2VmaWxlLmluYyBwcm92aWRlcyB0aGUgQ1NPVVJDRVMgYW5kIEhIRUFERVJTIGRlZmluZXMKK2xpYmNhcmVzX2xhX1NPVVJDRVMgPSAkKENTT1VSQ0VTKSAkKEhIRUFERVJTKQorCisjIHdoZXJlIHRvIGluc3RhbGwgdGhlIGMtYXJlcyBoZWFkZXJzCitsaWJjYXJlc19sYWRpciA9ICQoaW5jbHVkZWRpcikKKyMgd2hhdCBoZWFkZXJzIHRvIGluc3RhbGwgb24gJ21ha2UgaW5zdGFsbCc6CitsaWJjYXJlc19sYV9IRUFERVJTID0gYXJlcy5oIGFyZXNfdmVyc2lvbi5oIGFyZXNfZG5zLmggXAorCWFyZXNfYnVpbGQuaCBhcmVzX3J1bGVzLmgKKworYWhvc3RfU09VUkNFUyA9IGFob3N0LmMgJChTQU1QTEVTT1VSQ0VTKSAkKFNBTVBMRUhFQURFUlMpCithaG9zdF9MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJjYXJlcy5sYQorYWhvc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithaG9zdF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCithZGlnX1NPVVJDRVMgPSBhZGlnLmMgJChTQU1QTEVTT1VSQ0VTKSAkKFNBTVBMRUhFQURFUlMpCithZGlnX0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYmNhcmVzLmxhCithZGlnX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorYWRpZ19DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCithY291bnRyeV9TT1VSQ0VTID0gYWNvdW50cnkuYyAkKFNBTVBMRVNPVVJDRVMpICQoU0FNUExFSEVBREVSUykKK2Fjb3VudHJ5X0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYmNhcmVzLmxhCithY291bnRyeV9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK2Fjb3VudHJ5X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykKK1NPVVJDRURNQU5ESVIgPSBtYW4zCitTT1VSQ0VETUFOUEFHRVMgPSBhcmVzX2luaXQuMworTUFOMkhUTUwgPSByb2ZmaXQgLS1tYW5kaXI9LiA8ICQ8ID4kQAorU1VGRklYRVMgPSAuMyAuaHRtbAorYWxsOiBhcmVzX2NvbmZpZy5oIGFyZXNfYnVpbGQuaAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuMyAuaHRtbCAuYyAubG8gLm8gLm9iaiAucGRmCithbS0tcmVmcmVzaDogTWFrZWZpbGUKKwlAOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW5jICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduJzsgXAorCSAgICAgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgZWNobyAnICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyc7IFwKKwkgICAgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CiskKHNyY2RpcikvTWFrZWZpbGUuaW5jICQoYW1fX2VtcHR5KToKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjaworCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCithcmVzX2NvbmZpZy5oOiBzdGFtcC1oMQorCUB0ZXN0IC1mICRAIHx8IHJtIC1mIHN0YW1wLWgxCisJQHRlc3QgLWYgJEAgfHwgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgc3RhbXAtaDEKKworc3RhbXAtaDE6ICQoc3JjZGlyKS9hcmVzX2NvbmZpZy5oLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQHJtIC1mIHN0YW1wLWgxCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBhcmVzX2NvbmZpZy5oCiskKHNyY2RpcikvYXJlc19jb25maWcuaC5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykgCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisJcm0gLWYgc3RhbXAtaDEKKwl0b3VjaCAkQAorCithcmVzX2J1aWxkLmg6IHN0YW1wLWgyCisJQHRlc3QgLWYgJEAgfHwgcm0gLWYgc3RhbXAtaDIKKwlAdGVzdCAtZiAkQCB8fCAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBzdGFtcC1oMgorCitzdGFtcC1oMjogJChzcmNkaXIpL2FyZXNfYnVpbGQuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzdGFtcC1oMgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgYXJlc19idWlsZC5oCisKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mIGFyZXNfY29uZmlnLmggc3RhbXAtaDEgYXJlc19idWlsZC5oIHN0YW1wLWgyCitsaWJjYXJlcy5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2xpYmNhcmVzLnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorCitpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobGliZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIiB8fCBleGl0IDE7IFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQobGliZGlyKSciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQobGliZGlyKSI7IFwKKwl9CisKK3VuaW5zdGFsbC1saWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAorCWRvbmUKKworY2xlYW4tbGliTFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobGliX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChsaWJfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IFwKKwlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAorCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKKwkgICAgICBzb3J0IC11YDsgXAorCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCisJICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCisJICBybSAtZiAkJHtsb2NzfTsgXAorCX0KKworbGliY2FyZXMubGE6ICQobGliY2FyZXNfbGFfT0JKRUNUUykgJChsaWJjYXJlc19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliY2FyZXNfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmNhcmVzX2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJjYXJlc19sYV9PQkpFQ1RTKSAkKGxpYmNhcmVzX2xhX0xJQkFERCkgJChMSUJTKQorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CisKK2Fjb3VudHJ5JChFWEVFWFQpOiAkKGFjb3VudHJ5X09CSkVDVFMpICQoYWNvdW50cnlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2Fjb3VudHJ5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGFjb3VudHJ5JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhY291bnRyeV9MSU5LKSAkKGFjb3VudHJ5X09CSkVDVFMpICQoYWNvdW50cnlfTERBREQpICQoTElCUykKKworYWRpZyQoRVhFRVhUKTogJChhZGlnX09CSkVDVFMpICQoYWRpZ19ERVBFTkRFTkNJRVMpICQoRVhUUkFfYWRpZ19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhZGlnJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhZGlnX0xJTkspICQoYWRpZ19PQkpFQ1RTKSAkKGFkaWdfTERBREQpICQoTElCUykKKworYWhvc3QkKEVYRUVYVCk6ICQoYWhvc3RfT0JKRUNUUykgJChhaG9zdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYWhvc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYWhvc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGFob3N0X0xJTkspICQoYWhvc3RfT0JKRUNUUykgJChhaG9zdF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWNvdW50cnktYWNvdW50cnkuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfZ2V0b3B0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hY291bnRyeS1hcmVzX25vd2Fybi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWNvdW50cnktYXJlc19zdHJjYXNlY21wLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hZGlnLWFkaWcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FkaWctYXJlc19nZXRvcHQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FkaWctYXJlc19ub3dhcm4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FkaWctYXJlc19zdHJjYXNlY21wLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9haG9zdC1haG9zdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWhvc3QtYXJlc19nZXRvcHQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Fob3N0LWFyZXNfbm93YXJuLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9haG9zdC1hcmVzX3N0cmNhc2VjbXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX2Nsb3NlX3NvY2tldHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX3JlYWRfbGluZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX3RpbWV2YWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2NhbmNlbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfY3JlYXRlX3F1ZXJ5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kYXRhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19leHBhbmRfbmFtZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX3N0cmluZy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZmRzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2ZyZWVfc3RyaW5nLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRlbnYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieWFkZHIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldG5hbWVpbmZvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRzb2NrLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19pbml0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19saWJyYXJ5X2luaXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2xsaXN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19ta3F1ZXJ5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19ub3dhcm4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX29wdGlvbnMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX2FhYWFfcmVwbHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zcnZfcmVwbHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGxhdGZvcm0uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3Byb2Nlc3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3F1ZXJ5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zZWFyY2guUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3NlbmQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmNhc2VjbXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmR1cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3RpbWVvdXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3ZlcnNpb24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3dyaXRldi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWJpdG5jbXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1pbmV0X25ldF9wdG9uLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtaW5ldF9udG9wLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtd2luZG93c19wb3J0LlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLmxvOiBhcmVzX19jbG9zZV9zb2NrZXRzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19fY2xvc2Vfc29ja2V0cy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fY2xvc2Vfc29ja2V0cy5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19fY2xvc2Vfc29ja2V0cy5sbyBgdGVzdCAtZiAnYXJlc19fY2xvc2Vfc29ja2V0cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX19jbG9zZV9zb2NrZXRzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX2Nsb3NlX3NvY2tldHMuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfX2Nsb3NlX3NvY2tldHMuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19fY2xvc2Vfc29ja2V0cy5sbyBgdGVzdCAtZiAnYXJlc19fY2xvc2Vfc29ja2V0cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX19jbG9zZV9zb2NrZXRzLmMKKworbGliY2FyZXNfbGEtYXJlc19fZ2V0X2hvc3RlbnQubG86IGFyZXNfX2dldF9ob3N0ZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19fZ2V0X2hvc3RlbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX2dldF9ob3N0ZW50LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5sbyBgdGVzdCAtZiAnYXJlc19fZ2V0X2hvc3RlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19fZ2V0X2hvc3RlbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fZ2V0X2hvc3RlbnQuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX19nZXRfaG9zdGVudC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfX2dldF9ob3N0ZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19fZ2V0X2hvc3RlbnQubG8gYHRlc3QgLWYgJ2FyZXNfX2dldF9ob3N0ZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfX2dldF9ob3N0ZW50LmMKKworbGliY2FyZXNfbGEtYXJlc19fcmVhZF9saW5lLmxvOiBhcmVzX19yZWFkX2xpbmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX19yZWFkX2xpbmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX3JlYWRfbGluZS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19fcmVhZF9saW5lLmxvIGB0ZXN0IC1mICdhcmVzX19yZWFkX2xpbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19fcmVhZF9saW5lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX3JlYWRfbGluZS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX3JlYWRfbGluZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX19yZWFkX2xpbmUuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX19yZWFkX2xpbmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX19yZWFkX2xpbmUubG8gYHRlc3QgLWYgJ2FyZXNfX3JlYWRfbGluZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX19yZWFkX2xpbmUuYworCitsaWJjYXJlc19sYS1hcmVzX190aW1ldmFsLmxvOiBhcmVzX190aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19fdGltZXZhbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fdGltZXZhbC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19fdGltZXZhbC5sbyBgdGVzdCAtZiAnYXJlc19fdGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX190aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX3RpbWV2YWwuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX190aW1ldmFsLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfX3RpbWV2YWwuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX190aW1ldmFsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19fdGltZXZhbC5sbyBgdGVzdCAtZiAnYXJlc19fdGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX190aW1ldmFsLmMKKworbGliY2FyZXNfbGEtYXJlc19jYW5jZWwubG86IGFyZXNfY2FuY2VsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19jYW5jZWwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfY2FuY2VsLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2NhbmNlbC5sbyBgdGVzdCAtZiAnYXJlc19jYW5jZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19jYW5jZWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19jYW5jZWwuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2NhbmNlbC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2NhbmNlbC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfY2FuY2VsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19jYW5jZWwubG8gYHRlc3QgLWYgJ2FyZXNfY2FuY2VsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfY2FuY2VsLmMKKworbGliY2FyZXNfbGEtYXJlc19kYXRhLmxvOiBhcmVzX2RhdGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2RhdGEubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZGF0YS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19kYXRhLmxvIGB0ZXN0IC1mICdhcmVzX2RhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19kYXRhLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZGF0YS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZGF0YS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2RhdGEuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2RhdGEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2RhdGEubG8gYHRlc3QgLWYgJ2FyZXNfZGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2RhdGEuYworCitsaWJjYXJlc19sYS1hcmVzX2Rlc3Ryb3kubG86IGFyZXNfZGVzdHJveS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZGVzdHJveS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2Rlc3Ryb3kubG8gYHRlc3QgLWYgJ2FyZXNfZGVzdHJveS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2Rlc3Ryb3kuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZGVzdHJveS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZGVzdHJveS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZGVzdHJveS5sbyBgdGVzdCAtZiAnYXJlc19kZXN0cm95LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZGVzdHJveS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUubG86IGFyZXNfZXhwYW5kX25hbWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2V4cGFuZF9uYW1lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2V4cGFuZF9uYW1lLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2V4cGFuZF9uYW1lLmxvIGB0ZXN0IC1mICdhcmVzX2V4cGFuZF9uYW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZXhwYW5kX25hbWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19leHBhbmRfbmFtZS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19leHBhbmRfbmFtZS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2V4cGFuZF9uYW1lLmxvIGB0ZXN0IC1mICdhcmVzX2V4cGFuZF9uYW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZXhwYW5kX25hbWUuYworCitsaWJjYXJlc19sYS1hcmVzX2V4cGFuZF9zdHJpbmcubG86IGFyZXNfZXhwYW5kX3N0cmluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX3N0cmluZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2V4cGFuZF9zdHJpbmcubG8gYHRlc3QgLWYgJ2FyZXNfZXhwYW5kX3N0cmluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2V4cGFuZF9zdHJpbmcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZXhwYW5kX3N0cmluZy5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX3N0cmluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX3N0cmluZy5sbyBgdGVzdCAtZiAnYXJlc19leHBhbmRfc3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZXhwYW5kX3N0cmluZy5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZmRzLmxvOiBhcmVzX2Zkcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZmRzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2Zkcy5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19mZHMubG8gYHRlc3QgLWYgJ2FyZXNfZmRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZmRzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZmRzLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mZHMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19mZHMuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2Zkcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZmRzLmxvIGB0ZXN0IC1mICdhcmVzX2Zkcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2Zkcy5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9ob3N0ZW50LmxvOiBhcmVzX2ZyZWVfaG9zdGVudC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZnJlZV9ob3N0ZW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2ZyZWVfaG9zdGVudC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQubG8gYHRlc3QgLWYgJ2FyZXNfZnJlZV9ob3N0ZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZnJlZV9ob3N0ZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9ob3N0ZW50LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19mcmVlX2hvc3RlbnQuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2ZyZWVfaG9zdGVudC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZnJlZV9ob3N0ZW50LmxvIGB0ZXN0IC1mICdhcmVzX2ZyZWVfaG9zdGVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2ZyZWVfaG9zdGVudC5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcubG86IGFyZXNfZnJlZV9zdHJpbmcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2ZyZWVfc3RyaW5nLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2ZyZWVfc3RyaW5nLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2ZyZWVfc3RyaW5nLmxvIGB0ZXN0IC1mICdhcmVzX2ZyZWVfc3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZnJlZV9zdHJpbmcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mcmVlX3N0cmluZy5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19mcmVlX3N0cmluZy5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2ZyZWVfc3RyaW5nLmxvIGB0ZXN0IC1mICdhcmVzX2ZyZWVfc3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZnJlZV9zdHJpbmcuYworCitsaWJjYXJlc19sYS1hcmVzX2dldGVudi5sbzogYXJlc19nZXRlbnYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2dldGVudi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRlbnYuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0ZW52LmxvIGB0ZXN0IC1mICdhcmVzX2dldGVudi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldGVudi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGVudi5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0ZW52LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0ZW52LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19nZXRlbnYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2dldGVudi5sbyBgdGVzdCAtZiAnYXJlc19nZXRlbnYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRlbnYuYworCitsaWJjYXJlc19sYS1hcmVzX2dldGhvc3RieWFkZHIubG86IGFyZXNfZ2V0aG9zdGJ5YWRkci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5YWRkci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnlhZGRyLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2dldGhvc3RieWFkZHIubG8gYHRlc3QgLWYgJ2FyZXNfZ2V0aG9zdGJ5YWRkci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldGhvc3RieWFkZHIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnlhZGRyLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnlhZGRyLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0aG9zdGJ5YWRkci5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5YWRkci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5YWRkci5sbyBgdGVzdCAtZiAnYXJlc19nZXRob3N0YnlhZGRyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZ2V0aG9zdGJ5YWRkci5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5bmFtZS5sbzogYXJlc19nZXRob3N0YnluYW1lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnluYW1lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5bmFtZS5sbyBgdGVzdCAtZiAnYXJlc19nZXRob3N0YnluYW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZ2V0aG9zdGJ5bmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19nZXRob3N0YnluYW1lLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnluYW1lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnluYW1lLmxvIGB0ZXN0IC1mICdhcmVzX2dldGhvc3RieW5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRob3N0YnluYW1lLmMKKworbGliY2FyZXNfbGEtYXJlc19nZXRuYW1laW5mby5sbzogYXJlc19nZXRuYW1laW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZ2V0bmFtZWluZm8ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0bmFtZWluZm8uVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0bmFtZWluZm8ubG8gYHRlc3QgLWYgJ2FyZXNfZ2V0bmFtZWluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRuYW1laW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldG5hbWVpbmZvLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRuYW1laW5mby5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2dldG5hbWVpbmZvLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19nZXRuYW1laW5mby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0bmFtZWluZm8ubG8gYHRlc3QgLWYgJ2FyZXNfZ2V0bmFtZWluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRuYW1laW5mby5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZ2V0c29jay5sbzogYXJlc19nZXRzb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19nZXRzb2NrLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldHNvY2suVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0c29jay5sbyBgdGVzdCAtZiAnYXJlc19nZXRzb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZ2V0c29jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldHNvY2suVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldHNvY2suUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19nZXRzb2NrLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19nZXRzb2NrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRzb2NrLmxvIGB0ZXN0IC1mICdhcmVzX2dldHNvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRzb2NrLmMKKworbGliY2FyZXNfbGEtYXJlc19pbml0LmxvOiBhcmVzX2luaXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2luaXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfaW5pdC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19pbml0LmxvIGB0ZXN0IC1mICdhcmVzX2luaXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19pbml0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfaW5pdC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfaW5pdC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2luaXQuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2luaXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2luaXQubG8gYHRlc3QgLWYgJ2FyZXNfaW5pdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2luaXQuYworCitsaWJjYXJlc19sYS1hcmVzX2xpYnJhcnlfaW5pdC5sbzogYXJlc19saWJyYXJ5X2luaXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2xpYnJhcnlfaW5pdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19saWJyYXJ5X2luaXQuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfbGlicmFyeV9pbml0LmxvIGB0ZXN0IC1mICdhcmVzX2xpYnJhcnlfaW5pdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2xpYnJhcnlfaW5pdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2xpYnJhcnlfaW5pdC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbGlicmFyeV9pbml0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbGlicmFyeV9pbml0LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19saWJyYXJ5X2luaXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2xpYnJhcnlfaW5pdC5sbyBgdGVzdCAtZiAnYXJlc19saWJyYXJ5X2luaXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19saWJyYXJ5X2luaXQuYworCitsaWJjYXJlc19sYS1hcmVzX2xsaXN0LmxvOiBhcmVzX2xsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19sbGlzdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19sbGlzdC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19sbGlzdC5sbyBgdGVzdCAtZiAnYXJlc19sbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2xsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbGxpc3QuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2xsaXN0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbGxpc3QuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2xsaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19sbGlzdC5sbyBgdGVzdCAtZiAnYXJlc19sbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2xsaXN0LmMKKworbGliY2FyZXNfbGEtYXJlc19ta3F1ZXJ5LmxvOiBhcmVzX21rcXVlcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX21rcXVlcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbWtxdWVyeS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19ta3F1ZXJ5LmxvIGB0ZXN0IC1mICdhcmVzX21rcXVlcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ta3F1ZXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbWtxdWVyeS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbWtxdWVyeS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX21rcXVlcnkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX21rcXVlcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX21rcXVlcnkubG8gYHRlc3QgLWYgJ2FyZXNfbWtxdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX21rcXVlcnkuYworCitsaWJjYXJlc19sYS1hcmVzX2NyZWF0ZV9xdWVyeS5sbzogYXJlc19jcmVhdGVfcXVlcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2NyZWF0ZV9xdWVyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19jcmVhdGVfcXVlcnkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfY3JlYXRlX3F1ZXJ5LmxvIGB0ZXN0IC1mICdhcmVzX2NyZWF0ZV9xdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2NyZWF0ZV9xdWVyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2NyZWF0ZV9xdWVyeS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfY3JlYXRlX3F1ZXJ5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfY3JlYXRlX3F1ZXJ5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19jcmVhdGVfcXVlcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2NyZWF0ZV9xdWVyeS5sbyBgdGVzdCAtZiAnYXJlc19jcmVhdGVfcXVlcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19jcmVhdGVfcXVlcnkuYworCitsaWJjYXJlc19sYS1hcmVzX25vd2Fybi5sbzogYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX25vd2Fybi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19ub3dhcm4uVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfbm93YXJuLmxvIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX25vd2Fybi5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbm93YXJuLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbm93YXJuLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19ub3dhcm4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX25vd2Fybi5sbyBgdGVzdCAtZiAnYXJlc19ub3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ub3dhcm4uYworCitsaWJjYXJlc19sYS1hcmVzX29wdGlvbnMubG86IGFyZXNfb3B0aW9ucy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfb3B0aW9ucy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19vcHRpb25zLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX29wdGlvbnMubG8gYHRlc3QgLWYgJ2FyZXNfb3B0aW9ucy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX29wdGlvbnMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19vcHRpb25zLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19vcHRpb25zLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfb3B0aW9ucy5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfb3B0aW9ucy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfb3B0aW9ucy5sbyBgdGVzdCAtZiAnYXJlc19vcHRpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfb3B0aW9ucy5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYV9yZXBseS5sbzogYXJlc19wYXJzZV9hX3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hX3JlcGx5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYV9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9hX3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfYV9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wYXJzZV9hX3JlcGx5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hX3JlcGx5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX2FfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9hX3JlcGx5LmMKKworbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hYWFhX3JlcGx5LmxvOiBhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FhYWFfcmVwbHkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hYWFhX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9hYWFhX3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FhYWFfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FhYWFfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfYWFhYV9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LmxvOiBhcmVzX3BhcnNlX214X3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19wYXJzZV9teF9yZXBseS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9teF9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9teF9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9teF9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX214X3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbXhfcmVwbHkuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGFyc2VfbXhfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9teF9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9teF9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX214X3JlcGx5LmMKKworbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5sbzogYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbmFwdHJfcmVwbHkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbmFwdHJfcmVwbHkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbmFwdHJfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfbmFwdHJfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX25hcHRyX3JlcGx5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3BhcnNlX25hcHRyX3JlcGx5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbmFwdHJfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfbmFwdHJfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkubG86IGFyZXNfcGFyc2VfbnNfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX25zX3JlcGx5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX25zX3JlcGx5LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX25zX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX25zX3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfbnNfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uc19yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wYXJzZV9uc19yZXBseS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX25zX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX25zX3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfbnNfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5sbzogYXJlc19wYXJzZV9wdHJfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9wdHJfcmVwbHkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfcHRyX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3B0cl9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3B0cl9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfcHRyX3JlcGx5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGFyc2VfcHRyX3JlcGx5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19wYXJzZV9wdHJfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9wdHJfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9wdHJfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3NvYV9yZXBseS5sbzogYXJlc19wYXJzZV9zb2FfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3NvYV9yZXBseS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zb2FfcmVwbHkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3NvYV9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3NvYV9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3NvYV9yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGFyc2Vfc29hX3JlcGx5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zb2FfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3NvYV9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9zb2FfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9zb2FfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5sbzogYXJlc19wYXJzZV9zcnZfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zcnZfcmVwbHkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc3J2X3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3Nydl9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3Nydl9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc3J2X3JlcGx5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGFyc2Vfc3J2X3JlcGx5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zcnZfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9zcnZfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9zcnZfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5sbzogYXJlc19wYXJzZV90eHRfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV90eHRfcmVwbHkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfdHh0X3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3R4dF9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3R4dF9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfdHh0X3JlcGx5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGFyc2VfdHh0X3JlcGx5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19wYXJzZV90eHRfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV90eHRfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV90eHRfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BsYXRmb3JtLmxvOiBhcmVzX3BsYXRmb3JtLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19wbGF0Zm9ybS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wbGF0Zm9ybS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wbGF0Zm9ybS5sbyBgdGVzdCAtZiAnYXJlc19wbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BsYXRmb3JtLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGxhdGZvcm0uVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BsYXRmb3JtLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGxhdGZvcm0uYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BsYXRmb3JtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wbGF0Zm9ybS5sbyBgdGVzdCAtZiAnYXJlc19wbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BsYXRmb3JtLmMKKworbGliY2FyZXNfbGEtYXJlc19wcm9jZXNzLmxvOiBhcmVzX3Byb2Nlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3Byb2Nlc3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcHJvY2Vzcy5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wcm9jZXNzLmxvIGB0ZXN0IC1mICdhcmVzX3Byb2Nlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wcm9jZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcHJvY2Vzcy5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcHJvY2Vzcy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3Byb2Nlc3MuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3Byb2Nlc3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3Byb2Nlc3MubG8gYHRlc3QgLWYgJ2FyZXNfcHJvY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3Byb2Nlc3MuYworCitsaWJjYXJlc19sYS1hcmVzX3F1ZXJ5LmxvOiBhcmVzX3F1ZXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19xdWVyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19xdWVyeS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19xdWVyeS5sbyBgdGVzdCAtZiAnYXJlc19xdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3F1ZXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcXVlcnkuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3F1ZXJ5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcXVlcnkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3F1ZXJ5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19xdWVyeS5sbyBgdGVzdCAtZiAnYXJlc19xdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3F1ZXJ5LmMKKworbGliY2FyZXNfbGEtYXJlc19zZWFyY2gubG86IGFyZXNfc2VhcmNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19zZWFyY2gubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc2VhcmNoLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3NlYXJjaC5sbyBgdGVzdCAtZiAnYXJlc19zZWFyY2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zZWFyY2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zZWFyY2guVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3NlYXJjaC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3NlYXJjaC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfc2VhcmNoLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19zZWFyY2gubG8gYHRlc3QgLWYgJ2FyZXNfc2VhcmNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc2VhcmNoLmMKKworbGliY2FyZXNfbGEtYXJlc19zZW5kLmxvOiBhcmVzX3NlbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3NlbmQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc2VuZC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19zZW5kLmxvIGB0ZXN0IC1mICdhcmVzX3NlbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zZW5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc2VuZC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc2VuZC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3NlbmQuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3NlbmQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3NlbmQubG8gYHRlc3QgLWYgJ2FyZXNfc2VuZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3NlbmQuYworCitsaWJjYXJlc19sYS1hcmVzX3N0cmNhc2VjbXAubG86IGFyZXNfc3RyY2FzZWNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfc3RyY2FzZWNtcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJjYXNlY21wLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3N0cmNhc2VjbXAubG8gYHRlc3QgLWYgJ2FyZXNfc3RyY2FzZWNtcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3N0cmNhc2VjbXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJjYXNlY21wLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJjYXNlY21wLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc3RyY2FzZWNtcC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfc3RyY2FzZWNtcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfc3RyY2FzZWNtcC5sbyBgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyY2FzZWNtcC5jCisKK2xpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLmxvOiBhcmVzX3N0cmR1cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmR1cC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19zdHJkdXAubG8gYHRlc3QgLWYgJ2FyZXNfc3RyZHVwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyZHVwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJkdXAuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19zdHJkdXAuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3N0cmR1cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLmxvIGB0ZXN0IC1mICdhcmVzX3N0cmR1cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3N0cmR1cC5jCisKK2xpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IubG86IGFyZXNfc3RyZXJyb3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3N0cmVycm9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmVycm9yLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3N0cmVycm9yLmxvIGB0ZXN0IC1mICdhcmVzX3N0cmVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyZXJyb3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJlcnJvci5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19zdHJlcnJvci5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3N0cmVycm9yLmxvIGB0ZXN0IC1mICdhcmVzX3N0cmVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyZXJyb3IuYworCitsaWJjYXJlc19sYS1hcmVzX3RpbWVvdXQubG86IGFyZXNfdGltZW91dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfdGltZW91dC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc190aW1lb3V0LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3RpbWVvdXQubG8gYHRlc3QgLWYgJ2FyZXNfdGltZW91dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3RpbWVvdXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc190aW1lb3V0LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc190aW1lb3V0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfdGltZW91dC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfdGltZW91dC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfdGltZW91dC5sbyBgdGVzdCAtZiAnYXJlc190aW1lb3V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfdGltZW91dC5jCisKK2xpYmNhcmVzX2xhLWFyZXNfdmVyc2lvbi5sbzogYXJlc192ZXJzaW9uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc192ZXJzaW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3ZlcnNpb24uVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfdmVyc2lvbi5sbyBgdGVzdCAtZiAnYXJlc192ZXJzaW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfdmVyc2lvbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3ZlcnNpb24uVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3ZlcnNpb24uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc192ZXJzaW9uLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc192ZXJzaW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc192ZXJzaW9uLmxvIGB0ZXN0IC1mICdhcmVzX3ZlcnNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc192ZXJzaW9uLmMKKworbGliY2FyZXNfbGEtYXJlc193cml0ZXYubG86IGFyZXNfd3JpdGV2LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc193cml0ZXYubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfd3JpdGV2LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3dyaXRldi5sbyBgdGVzdCAtZiAnYXJlc193cml0ZXYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc193cml0ZXYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc193cml0ZXYuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3dyaXRldi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3dyaXRldi5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfd3JpdGV2LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc193cml0ZXYubG8gYHRlc3QgLWYgJ2FyZXNfd3JpdGV2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfd3JpdGV2LmMKKworbGliY2FyZXNfbGEtYml0bmNtcC5sbzogYml0bmNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWJpdG5jbXAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWJpdG5jbXAuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWJpdG5jbXAubG8gYHRlc3QgLWYgJ2JpdG5jbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYml0bmNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1iaXRuY21wLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYml0bmNtcC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdiaXRuY21wLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYml0bmNtcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWJpdG5jbXAubG8gYHRlc3QgLWYgJ2JpdG5jbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYml0bmNtcC5jCisKK2xpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24ubG86IGluZXRfbmV0X3B0b24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1pbmV0X25ldF9wdG9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1pbmV0X25ldF9wdG9uLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1pbmV0X25ldF9wdG9uLmxvIGB0ZXN0IC1mICdpbmV0X25ldF9wdG9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGluZXRfbmV0X3B0b24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtaW5ldF9uZXRfcHRvbi5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naW5ldF9uZXRfcHRvbi5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1pbmV0X25ldF9wdG9uLmxvIGB0ZXN0IC1mICdpbmV0X25ldF9wdG9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGluZXRfbmV0X3B0b24uYworCitsaWJjYXJlc19sYS1pbmV0X250b3AubG86IGluZXRfbnRvcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWluZXRfbnRvcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtaW5ldF9udG9wLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1pbmV0X250b3AubG8gYHRlc3QgLWYgJ2luZXRfbnRvcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpbmV0X250b3AuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtaW5ldF9udG9wLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtaW5ldF9udG9wLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2luZXRfbnRvcC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWluZXRfbnRvcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWluZXRfbnRvcC5sbyBgdGVzdCAtZiAnaW5ldF9udG9wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGluZXRfbnRvcC5jCisKK2xpYmNhcmVzX2xhLXdpbmRvd3NfcG9ydC5sbzogd2luZG93c19wb3J0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtd2luZG93c19wb3J0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS13aW5kb3dzX3BvcnQuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLXdpbmRvd3NfcG9ydC5sbyBgdGVzdCAtZiAnd2luZG93c19wb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdpbmRvd3NfcG9ydC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS13aW5kb3dzX3BvcnQuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS13aW5kb3dzX3BvcnQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nd2luZG93c19wb3J0LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtd2luZG93c19wb3J0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtd2luZG93c19wb3J0LmxvIGB0ZXN0IC1mICd3aW5kb3dzX3BvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2luZG93c19wb3J0LmMKKworYWNvdW50cnktYWNvdW50cnkubzogYWNvdW50cnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhY291bnRyeS1hY291bnRyeS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hY291bnRyeS1hY291bnRyeS5UcG8gLWMgLW8gYWNvdW50cnktYWNvdW50cnkubyBgdGVzdCAtZiAnYWNvdW50cnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWNvdW50cnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWNvdW50cnktYWNvdW50cnkuVHBvICQoREVQRElSKS9hY291bnRyeS1hY291bnRyeS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Fjb3VudHJ5LmMnIG9iamVjdD0nYWNvdW50cnktYWNvdW50cnkubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWNvdW50cnktYWNvdW50cnkubyBgdGVzdCAtZiAnYWNvdW50cnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWNvdW50cnkuYworCithY291bnRyeS1hY291bnRyeS5vYmo6IGFjb3VudHJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWNvdW50cnktYWNvdW50cnkub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hY291bnRyeS1hY291bnRyeS5UcG8gLWMgLW8gYWNvdW50cnktYWNvdW50cnkub2JqIGBpZiB0ZXN0IC1mICdhY291bnRyeS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Fjb3VudHJ5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Fjb3VudHJ5LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fjb3VudHJ5LWFjb3VudHJ5LlRwbyAkKERFUERJUikvYWNvdW50cnktYWNvdW50cnkuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhY291bnRyeS5jJyBvYmplY3Q9J2Fjb3VudHJ5LWFjb3VudHJ5Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWNvdW50cnktYWNvdW50cnkub2JqIGBpZiB0ZXN0IC1mICdhY291bnRyeS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Fjb3VudHJ5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Fjb3VudHJ5LmMnOyBmaWAKKworYWNvdW50cnktYXJlc19nZXRvcHQubzogYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhY291bnRyeS1hcmVzX2dldG9wdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hY291bnRyeS1hcmVzX2dldG9wdC5UcG8gLWMgLW8gYWNvdW50cnktYXJlc19nZXRvcHQubyBgdGVzdCAtZiAnYXJlc19nZXRvcHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWNvdW50cnktYXJlc19nZXRvcHQuVHBvICQoREVQRElSKS9hY291bnRyeS1hcmVzX2dldG9wdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0b3B0LmMnIG9iamVjdD0nYWNvdW50cnktYXJlc19nZXRvcHQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWNvdW50cnktYXJlc19nZXRvcHQubyBgdGVzdCAtZiAnYXJlc19nZXRvcHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRvcHQuYworCithY291bnRyeS1hcmVzX2dldG9wdC5vYmo6IGFyZXNfZ2V0b3B0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWNvdW50cnktYXJlc19nZXRvcHQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hY291bnRyeS1hcmVzX2dldG9wdC5UcG8gLWMgLW8gYWNvdW50cnktYXJlc19nZXRvcHQub2JqIGBpZiB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfZ2V0b3B0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfZ2V0b3B0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfZ2V0b3B0LlRwbyAkKERFUERJUikvYWNvdW50cnktYXJlc19nZXRvcHQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2dldG9wdC5jJyBvYmplY3Q9J2Fjb3VudHJ5LWFyZXNfZ2V0b3B0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWNvdW50cnktYXJlc19nZXRvcHQub2JqIGBpZiB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfZ2V0b3B0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfZ2V0b3B0LmMnOyBmaWAKKworYWNvdW50cnktYXJlc19ub3dhcm4ubzogYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhY291bnRyeS1hcmVzX25vd2Fybi5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hY291bnRyeS1hcmVzX25vd2Fybi5UcG8gLWMgLW8gYWNvdW50cnktYXJlc19ub3dhcm4ubyBgdGVzdCAtZiAnYXJlc19ub3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWNvdW50cnktYXJlc19ub3dhcm4uVHBvICQoREVQRElSKS9hY291bnRyeS1hcmVzX25vd2Fybi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbm93YXJuLmMnIG9iamVjdD0nYWNvdW50cnktYXJlc19ub3dhcm4ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWNvdW50cnktYXJlc19ub3dhcm4ubyBgdGVzdCAtZiAnYXJlc19ub3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ub3dhcm4uYworCithY291bnRyeS1hcmVzX25vd2Fybi5vYmo6IGFyZXNfbm93YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWNvdW50cnktYXJlc19ub3dhcm4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hY291bnRyeS1hcmVzX25vd2Fybi5UcG8gLWMgLW8gYWNvdW50cnktYXJlc19ub3dhcm4ub2JqIGBpZiB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfbm93YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfbm93YXJuLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfbm93YXJuLlRwbyAkKERFUERJUikvYWNvdW50cnktYXJlc19ub3dhcm4uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX25vd2Fybi5jJyBvYmplY3Q9J2Fjb3VudHJ5LWFyZXNfbm93YXJuLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWNvdW50cnktYXJlc19ub3dhcm4ub2JqIGBpZiB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfbm93YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfbm93YXJuLmMnOyBmaWAKKworYWNvdW50cnktYXJlc19zdHJjYXNlY21wLm86IGFyZXNfc3RyY2FzZWNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hY291bnRyeS1hcmVzX3N0cmNhc2VjbXAuVHBvIC1jIC1vIGFjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vIGB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5UcG8gJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc3RyY2FzZWNtcC5jJyBvYmplY3Q9J2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hcmVzX3N0cmNhc2VjbXAubyBgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyY2FzZWNtcC5jCisKK2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vYmo6IGFyZXNfc3RyY2FzZWNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5UcG8gLWMgLW8gYWNvdW50cnktYXJlc19zdHJjYXNlY21wLm9iaiBgaWYgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19zdHJjYXNlY21wLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfc3RyY2FzZWNtcC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hY291bnRyeS1hcmVzX3N0cmNhc2VjbXAuVHBvICQoREVQRElSKS9hY291bnRyeS1hcmVzX3N0cmNhc2VjbXAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3N0cmNhc2VjbXAuYycgb2JqZWN0PSdhY291bnRyeS1hcmVzX3N0cmNhc2VjbXAub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hcmVzX3N0cmNhc2VjbXAub2JqIGBpZiB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhcmVzX3N0cmNhc2VjbXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19zdHJjYXNlY21wLmMnOyBmaWAKKworYWRpZy1hZGlnLm86IGFkaWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRpZy1hZGlnLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FkaWctYWRpZy5UcG8gLWMgLW8gYWRpZy1hZGlnLm8gYHRlc3QgLWYgJ2FkaWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWRpZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGlnLWFkaWcuVHBvICQoREVQRElSKS9hZGlnLWFkaWcuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhZGlnLmMnIG9iamVjdD0nYWRpZy1hZGlnLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGlnLWFkaWcubyBgdGVzdCAtZiAnYWRpZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGlnLmMKKworYWRpZy1hZGlnLm9iajogYWRpZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGlnLWFkaWcub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hZGlnLWFkaWcuVHBvIC1jIC1vIGFkaWctYWRpZy5vYmogYGlmIHRlc3QgLWYgJ2FkaWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGlnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkaWcuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRpZy1hZGlnLlRwbyAkKERFUERJUikvYWRpZy1hZGlnLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWRpZy5jJyBvYmplY3Q9J2FkaWctYWRpZy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGlnLWFkaWcub2JqIGBpZiB0ZXN0IC1mICdhZGlnLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWRpZy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hZGlnLmMnOyBmaWAKKworYWRpZy1hcmVzX2dldG9wdC5vOiBhcmVzX2dldG9wdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGlnLWFyZXNfZ2V0b3B0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FkaWctYXJlc19nZXRvcHQuVHBvIC1jIC1vIGFkaWctYXJlc19nZXRvcHQubyBgdGVzdCAtZiAnYXJlc19nZXRvcHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRpZy1hcmVzX2dldG9wdC5UcG8gJChERVBESVIpL2FkaWctYXJlc19nZXRvcHQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2dldG9wdC5jJyBvYmplY3Q9J2FkaWctYXJlc19nZXRvcHQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkaWctYXJlc19nZXRvcHQubyBgdGVzdCAtZiAnYXJlc19nZXRvcHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRvcHQuYworCithZGlnLWFyZXNfZ2V0b3B0Lm9iajogYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRpZy1hcmVzX2dldG9wdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FkaWctYXJlc19nZXRvcHQuVHBvIC1jIC1vIGFkaWctYXJlc19nZXRvcHQub2JqIGBpZiB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfZ2V0b3B0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfZ2V0b3B0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkaWctYXJlc19nZXRvcHQuVHBvICQoREVQRElSKS9hZGlnLWFyZXNfZ2V0b3B0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19nZXRvcHQuYycgb2JqZWN0PSdhZGlnLWFyZXNfZ2V0b3B0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkaWctYXJlc19nZXRvcHQub2JqIGBpZiB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfZ2V0b3B0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfZ2V0b3B0LmMnOyBmaWAKKworYWRpZy1hcmVzX25vd2Fybi5vOiBhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGlnLWFyZXNfbm93YXJuLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FkaWctYXJlc19ub3dhcm4uVHBvIC1jIC1vIGFkaWctYXJlc19ub3dhcm4ubyBgdGVzdCAtZiAnYXJlc19ub3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRpZy1hcmVzX25vd2Fybi5UcG8gJChERVBESVIpL2FkaWctYXJlc19ub3dhcm4uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX25vd2Fybi5jJyBvYmplY3Q9J2FkaWctYXJlc19ub3dhcm4ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkaWctYXJlc19ub3dhcm4ubyBgdGVzdCAtZiAnYXJlc19ub3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ub3dhcm4uYworCithZGlnLWFyZXNfbm93YXJuLm9iajogYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRpZy1hcmVzX25vd2Fybi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FkaWctYXJlc19ub3dhcm4uVHBvIC1jIC1vIGFkaWctYXJlc19ub3dhcm4ub2JqIGBpZiB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfbm93YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfbm93YXJuLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkaWctYXJlc19ub3dhcm4uVHBvICQoREVQRElSKS9hZGlnLWFyZXNfbm93YXJuLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19ub3dhcm4uYycgb2JqZWN0PSdhZGlnLWFyZXNfbm93YXJuLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkaWctYXJlc19ub3dhcm4ub2JqIGBpZiB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfbm93YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfbm93YXJuLmMnOyBmaWAKKworYWRpZy1hcmVzX3N0cmNhc2VjbXAubzogYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFkaWctYXJlc19zdHJjYXNlY21wLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FkaWctYXJlc19zdHJjYXNlY21wLlRwbyAtYyAtbyBhZGlnLWFyZXNfc3RyY2FzZWNtcC5vIGB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkaWctYXJlc19zdHJjYXNlY21wLlRwbyAkKERFUERJUikvYWRpZy1hcmVzX3N0cmNhc2VjbXAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3N0cmNhc2VjbXAuYycgb2JqZWN0PSdhZGlnLWFyZXNfc3RyY2FzZWNtcC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRpZy1hcmVzX3N0cmNhc2VjbXAubyBgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyY2FzZWNtcC5jCisKK2FkaWctYXJlc19zdHJjYXNlY21wLm9iajogYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFkaWctYXJlc19zdHJjYXNlY21wLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRpZy1hcmVzX3N0cmNhc2VjbXAuVHBvIC1jIC1vIGFkaWctYXJlc19zdHJjYXNlY21wLm9iaiBgaWYgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19zdHJjYXNlY21wLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfc3RyY2FzZWNtcC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGlnLWFyZXNfc3RyY2FzZWNtcC5UcG8gJChERVBESVIpL2FkaWctYXJlc19zdHJjYXNlY21wLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19zdHJjYXNlY21wLmMnIG9iamVjdD0nYWRpZy1hcmVzX3N0cmNhc2VjbXAub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRpZy1hcmVzX3N0cmNhc2VjbXAub2JqIGBpZiB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhcmVzX3N0cmNhc2VjbXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19zdHJjYXNlY21wLmMnOyBmaWAKKworYWhvc3QtYWhvc3QubzogYWhvc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhaG9zdC1haG9zdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9haG9zdC1haG9zdC5UcG8gLWMgLW8gYWhvc3QtYWhvc3QubyBgdGVzdCAtZiAnYWhvc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWhvc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWhvc3QtYWhvc3QuVHBvICQoREVQRElSKS9haG9zdC1haG9zdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Fob3N0LmMnIG9iamVjdD0nYWhvc3QtYWhvc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWhvc3QtYWhvc3QubyBgdGVzdCAtZiAnYWhvc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWhvc3QuYworCithaG9zdC1haG9zdC5vYmo6IGFob3N0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWhvc3QtYWhvc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9haG9zdC1haG9zdC5UcG8gLWMgLW8gYWhvc3QtYWhvc3Qub2JqIGBpZiB0ZXN0IC1mICdhaG9zdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Fob3N0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Fob3N0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fob3N0LWFob3N0LlRwbyAkKERFUERJUikvYWhvc3QtYWhvc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhaG9zdC5jJyBvYmplY3Q9J2Fob3N0LWFob3N0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWhvc3QtYWhvc3Qub2JqIGBpZiB0ZXN0IC1mICdhaG9zdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Fob3N0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Fob3N0LmMnOyBmaWAKKworYWhvc3QtYXJlc19nZXRvcHQubzogYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhaG9zdC1hcmVzX2dldG9wdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9haG9zdC1hcmVzX2dldG9wdC5UcG8gLWMgLW8gYWhvc3QtYXJlc19nZXRvcHQubyBgdGVzdCAtZiAnYXJlc19nZXRvcHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWhvc3QtYXJlc19nZXRvcHQuVHBvICQoREVQRElSKS9haG9zdC1hcmVzX2dldG9wdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0b3B0LmMnIG9iamVjdD0nYWhvc3QtYXJlc19nZXRvcHQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWhvc3QtYXJlc19nZXRvcHQubyBgdGVzdCAtZiAnYXJlc19nZXRvcHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRvcHQuYworCithaG9zdC1hcmVzX2dldG9wdC5vYmo6IGFyZXNfZ2V0b3B0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWhvc3QtYXJlc19nZXRvcHQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9haG9zdC1hcmVzX2dldG9wdC5UcG8gLWMgLW8gYWhvc3QtYXJlc19nZXRvcHQub2JqIGBpZiB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfZ2V0b3B0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfZ2V0b3B0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fob3N0LWFyZXNfZ2V0b3B0LlRwbyAkKERFUERJUikvYWhvc3QtYXJlc19nZXRvcHQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2dldG9wdC5jJyBvYmplY3Q9J2Fob3N0LWFyZXNfZ2V0b3B0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWhvc3QtYXJlc19nZXRvcHQub2JqIGBpZiB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfZ2V0b3B0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfZ2V0b3B0LmMnOyBmaWAKKworYWhvc3QtYXJlc19ub3dhcm4ubzogYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhaG9zdC1hcmVzX25vd2Fybi5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9haG9zdC1hcmVzX25vd2Fybi5UcG8gLWMgLW8gYWhvc3QtYXJlc19ub3dhcm4ubyBgdGVzdCAtZiAnYXJlc19ub3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWhvc3QtYXJlc19ub3dhcm4uVHBvICQoREVQRElSKS9haG9zdC1hcmVzX25vd2Fybi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbm93YXJuLmMnIG9iamVjdD0nYWhvc3QtYXJlc19ub3dhcm4ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWhvc3QtYXJlc19ub3dhcm4ubyBgdGVzdCAtZiAnYXJlc19ub3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19ub3dhcm4uYworCithaG9zdC1hcmVzX25vd2Fybi5vYmo6IGFyZXNfbm93YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWhvc3QtYXJlc19ub3dhcm4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9haG9zdC1hcmVzX25vd2Fybi5UcG8gLWMgLW8gYWhvc3QtYXJlc19ub3dhcm4ub2JqIGBpZiB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfbm93YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfbm93YXJuLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fob3N0LWFyZXNfbm93YXJuLlRwbyAkKERFUERJUikvYWhvc3QtYXJlc19ub3dhcm4uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX25vd2Fybi5jJyBvYmplY3Q9J2Fob3N0LWFyZXNfbm93YXJuLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWhvc3QtYXJlc19ub3dhcm4ub2JqIGBpZiB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfbm93YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfbm93YXJuLmMnOyBmaWAKKworYWhvc3QtYXJlc19zdHJjYXNlY21wLm86IGFyZXNfc3RyY2FzZWNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFob3N0LWFyZXNfc3RyY2FzZWNtcC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9haG9zdC1hcmVzX3N0cmNhc2VjbXAuVHBvIC1jIC1vIGFob3N0LWFyZXNfc3RyY2FzZWNtcC5vIGB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5UcG8gJChERVBESVIpL2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc3RyY2FzZWNtcC5jJyBvYmplY3Q9J2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1hcmVzX3N0cmNhc2VjbXAubyBgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyY2FzZWNtcC5jCisKK2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5vYmo6IGFyZXNfc3RyY2FzZWNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFob3N0LWFyZXNfc3RyY2FzZWNtcC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5UcG8gLWMgLW8gYWhvc3QtYXJlc19zdHJjYXNlY21wLm9iaiBgaWYgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19zdHJjYXNlY21wLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FyZXNfc3RyY2FzZWNtcC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9haG9zdC1hcmVzX3N0cmNhc2VjbXAuVHBvICQoREVQRElSKS9haG9zdC1hcmVzX3N0cmNhc2VjbXAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3N0cmNhc2VjbXAuYycgb2JqZWN0PSdhaG9zdC1hcmVzX3N0cmNhc2VjbXAub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1hcmVzX3N0cmNhc2VjbXAub2JqIGBpZiB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhcmVzX3N0cmNhc2VjbXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19zdHJjYXNlY21wLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wgY29uZmlnLmx0CitpbnN0YWxsLW1hbjM6ICQobWFuX01BTlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3QxPScnOyBcCisJbGlzdDI9JyQobWFuX01BTlMpJzsgXAorCXRlc3QgLW4gIiQobWFuM2RpcikiIFwKKwkgICYmIHRlc3QgLW4gImBlY2hvICQkbGlzdDEkJGxpc3QyYCIgXAorCSAgfHwgZXhpdCAwOyBcCisJZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKG1hbjNkaXIpJyI7IFwKKwkkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW4zZGlyKSIgfHwgZXhpdCAxOyBcCisJeyBmb3IgaSBpbiAkJGxpc3QxOyBkbyBlY2hvICIkJGkiOyBkb25lOyAgXAorCWlmIHRlc3QgLW4gIiQkbGlzdDIiOyB0aGVuIFwKKwkgIGZvciBpIGluICQkbGlzdDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgXAorCSAgICB8IHNlZCAtbiAnL1wuM1thLXpdKiQkL3AnOyBcCisJZmk7IFwKKwl9IHwgd2hpbGUgcmVhZCBwOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAnbjtzLC4qLywsO3A7aDtzLC4qXC4sLDtzLF5bXjNdWzAtOWEtel0qJCQsMyw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJyB8IFwKKwlzZWQgJ047TjtzLFxuLCAsZycgfCB7IFwKKwlsaXN0PTsgd2hpbGUgcmVhZCBmaWxlIGJhc2UgaW5zdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRiYXNlIiA9ICIkJGluc3QiOyB0aGVuIGxpc3Q9IiQkbGlzdCAkJGZpbGUiOyBlbHNlIFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRmaWxlJyAnJChERVNURElSKSQobWFuM2RpcikvJCRpbnN0JyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGZpbGUiICIkKERFU1RESVIpJChtYW4zZGlyKS8kJGluc3QiIHx8IGV4aXQgJCQ/OyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbjNkaXIpJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKG1hbjNkaXIpIiB8fCBleGl0ICQkPzsgfTsgXAorCWRvbmU7IH0KKwordW5pbnN0YWxsLW1hbjM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJzsgdGVzdCAtbiAiJChtYW4zZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YHsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKwkgIHNlZCAtbiAnL1wuM1thLXpdKiQkL3AnOyBcCisJfSB8IHNlZCAtZSAncywuKi8sLDtoO3MsLipcLiwsO3MsXlteM11bMC05YS16XSokJCwzLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnYDsgXAorCWRpcj0nJChERVNURElSKSQobWFuM2RpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6ICQocGtnY29uZmlnX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2NvbmZpZ2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLWxpYmNhcmVzX2xhSEVBREVSUzogJChsaWJjYXJlc19sYV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKGxpYmNhcmVzX2xhX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJjYXJlc19sYWRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobGliY2FyZXNfbGFkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmNhcmVzX2xhZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmNhcmVzX2xhZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChsaWJjYXJlc19sYWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtbGliY2FyZXNfbGFIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliY2FyZXNfbGFfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmNhcmVzX2xhZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQobGliY2FyZXNfbGFkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biAnbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mICdtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluICdjb25maWcuc3RhdHVzJywgZWRpdCAnY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuICdtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSAnbWFrZScgY29tbWFuZCBsaW5lLgorJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpOgorCUBmYWlsPTsgXAorCWlmICQoYW1fX21ha2Vfa2VlcGdvaW5nKTsgdGhlbiBcCisJICBmYWlsY29tPSdmYWlsPXllcyc7IFwKKwllbHNlIFwKKwkgIGZhaWxjb209J2V4aXQgMSc7IFwKKwlmaTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCWZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiB0YWdzLXJlY3Vyc2l2ZQorVEFHUzogdGFncworCit0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IGN0YWdzLXJlY3Vyc2l2ZQorCitDVEFHUzogY3RhZ3MKK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKK2NzY29wZTogY3Njb3BlLmZpbGVzCisJdGVzdCAhIC1zIGNzY29wZS5maWxlcyBcCisJICB8fCAkKENTQ09QRSkgLWIgLXEgJChBTV9DU0NPUEVGTEFHUykgJChDU0NPUEVGTEFHUykgLWkgY3Njb3BlLmZpbGVzICQoQ1NDT1BFX0FSR1MpCitjbGVhbi1jc2NvcGU6CisJLXJtIC1mIGNzY29wZS5maWxlcworY3Njb3BlLmZpbGVzOiBjbGVhbi1jc2NvcGUgY3Njb3BlbGlzdAorY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKKworY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorCWVzYWM7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisJICBmaTsgXAorCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCS1ybSAtZiBjc2NvcGUub3V0IGNzY29wZS5pbi5vdXQgY3Njb3BlLnBvLm91dCBjc2NvcGUuZmlsZXMKKworZGlzdGRpcjogJChESVNURklMRVMpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICAkKGFtX19tYWtlX2RyeXJ1bikgXAorCSAgICAgIHx8IHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKKwkgIGRpc3QtaG9vaworCS10ZXN0IC1uICIkKGFtX19za2lwX21vZGVfZml4KSIgXAorCXx8IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtNzU1IFwKKwkJLWV4ZWMgY2htb2QgdStyd3gsZ28rcngge30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCisJfHwgY2htb2QgLVIgYStyICIkKGRpc3RkaXIpIgorZGlzdC1nemlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWJ6aXAyOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEJaSVAyPSQke0JaSVAyLS05fSBiemlwMiAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKworZGlzdC1semlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6aXAgLWMgJCR7TFpJUF9PUFQtLTl9ID4kKGRpc3RkaXIpLnRhci5segorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QteHo6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgWFpfT1BUPSQke1haX09QVC0tZX0geHogLWMgPiQoZGlzdGRpcikudGFyLnh6CisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKworZGlzdC10YXJaOiBkaXN0ZGlyCisJQGVjaG8gV0FSTklORzogIlN1cHBvcnQgZm9yIGRpc3RyaWJ1dGlvbiBhcmNoaXZlcyBjb21wcmVzc2VkIHdpdGgiIFwKKwkJICAgICAgICJsZWdhY3kgcHJvZ3JhbSAnY29tcHJlc3MnIGlzIGRlcHJlY2F0ZWQuIiA+JjIKKwlAZWNobyBXQVJOSU5HOiAiSXQgd2lsbCBiZSByZW1vdmVkIGFsdG9nZXRoZXIgaW4gQXV0b21ha2UgMi4wIiA+JjIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXNoYXI6IGRpc3RkaXIKKwlAZWNobyBXQVJOSU5HOiAiU3VwcG9ydCBmb3Igc2hhciBkaXN0cmlidXRpb24gYXJjaGl2ZXMgaXMiIFwKKwkgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC4iID4mMgorCUBlY2hvIFdBUk5JTkc6ICJJdCB3aWxsIGJlIHJlbW92ZWQgYWx0b2dldGhlciBpbiBBdXRvbWFrZSAyLjAiID4mMgorCXNoYXIgJChkaXN0ZGlyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS5zaGFyLmd6CisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKworZGlzdC16aXA6IGRpc3RkaXIKKwktcm0gLWYgJChkaXN0ZGlyKS56aXAKKwl6aXAgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcikKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0IGRpc3QtYWxsOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoRElTVF9UQVJHRVRTKSBhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcj0nQDonCisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKworIyBUaGlzIHRhcmdldCB1bnRhcnMgdGhlIGRpc3QgZmlsZSBhbmQgdHJpZXMgYSBWUEFUSCBjb25maWd1cmF0aW9uLiAgVGhlbgorIyBpdCBndWFyYW50ZWVzIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzZWxmLWNvbnRhaW5lZCBieSBtYWtpbmcgYW5vdGhlcgorIyB0YXJmaWxlLgorZGlzdGNoZWNrOiBkaXN0CisJY2FzZSAnJChESVNUX0FSQ0hJVkVTKScgaW4gXAorCSoudGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnRhci5neiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5iejIqKSBcCisJICBiemlwMiAtZGMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmx6KikgXAorCSAgbHppcCAtZGMgJChkaXN0ZGlyKS50YXIubHogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIueHoqKSBcCisJICB4eiAtZGMgJChkaXN0ZGlyKS50YXIueHogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuWiopIFwKKwkgIHVuY29tcHJlc3MgLWMgJChkaXN0ZGlyKS50YXIuWiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnNoYXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikuc2hhci5neiB8IHVuc2hhciA7O1wKKwkqLnppcCopIFwKKwkgIHVuemlwICQoZGlzdGRpcikuemlwIDs7XAorCWVzYWMKKwljaG1vZCAtUiBhLXcgJChkaXN0ZGlyKQorCWNobW9kIHUrdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQgJChkaXN0ZGlyKS9fYnVpbGQvc3ViICQoZGlzdGRpcikvX2luc3QKKwljaG1vZCBhLXcgJChkaXN0ZGlyKQorCXRlc3QgLWQgJChkaXN0ZGlyKS9fYnVpbGQgfHwgZXhpdCAwOyBcCisJZGNfaW5zdGFsbF9iYXNlPWAkKGFtX19jZCkgJChkaXN0ZGlyKS9faW5zdCAmJiBwd2QgfCBzZWQgLWUgJ3MsXlteOlxcL106W1xcL10sLywnYCBcCisJICAmJiBkY19kZXN0ZGlyPSIkJHtUTVBESVItL3RtcH0vYW0tZGMtJCQkJC8iIFwKKwkgICYmIGFtX19jd2Q9YHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQoZGlzdGRpcikvX2J1aWxkL3N1YiBcCisJICAmJiAuLi8uLi9jb25maWd1cmUgXAorCSAgICAkKEFNX0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICAgJChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKSBcCisJICAgIC0tc3JjZGlyPS4uLy4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZHZpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHVuaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrIFwKKwkgICYmIGNobW9kIC1SIGEtdyAiJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICYmICh7IFwKKwkgICAgICAgKGNkIC4uLy4uICYmIHVtYXNrIDA3NyAmJiBta2RpciAiJCRkY19kZXN0ZGlyIikgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIGluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIHVuaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgXAorCSAgICAgICAgICAgIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfZGVzdGRpciIgZGlzdHVuaW5zdGFsbGNoZWNrOyBcCisJICAgICAgfSB8fCB7IHJtIC1yZiAiJCRkY19kZXN0ZGlyIjsgZXhpdCAxOyB9KSBcCisJICAmJiBybSAtcmYgIiQkZGNfZGVzdGRpciIgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdCBcCisJICAmJiBybSAtcmYgJChESVNUX0FSQ0hJVkVTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjayBcCisJICAmJiBjZCAiJCRhbV9fY3dkIiBcCisJICB8fCBleGl0IDEKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCUAoZWNobyAiJChkaXN0ZGlyKSBhcmNoaXZlcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uOiAiOyBcCisJICBsaXN0PSckKERJU1RfQVJDSElWRVMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICQkaTsgZG9uZSkgfCBcCisJICBzZWQgLWUgMWggLWUgMXMvLi89L2cgLWUgMXAgLWUgMXggLWUgJyQkcCcgLWUgJyQkeCcKK2Rpc3R1bmluc3RhbGxjaGVjazoKKwlAdGVzdCAtbiAnJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKScgfHwgeyBcCisJICBlY2hvICdFUlJPUjogdHJ5aW5nIHRvIHJ1biAkQCB3aXRoIGFuIGVtcHR5JyBcCisJICAgICAgICckJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKScgPiYyOyBcCisJICBleGl0IDE7IFwKKwl9OyBcCisJJChhbV9fY2QpICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKKwkgIGVjaG8gJ0VSUk9SOiBjYW5ub3QgY2hkaXIgaW50byAkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKKwkgIGV4aXQgMTsgXAorCX07IFwKKwl0ZXN0IGAkKGFtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBhZnRlciB1bmluc3RhbGw6IiA7IFwKKwkgICAgICAgIGlmIHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuIFwKKwkgICAgICAgICAgZWNobyAiICAoY2hlY2sgREVTVERJUiBzdXBwb3J0KSI7IFwKKwkgICAgICAgIGZpIDsgXAorCSAgICAgICAgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSA7IFwKKwkgICAgICAgIGV4aXQgMTsgfSA+JjIKK2Rpc3RjbGVhbmNoZWNrOiBkaXN0Y2xlYW4KKwlAaWYgdGVzdCAnJChzcmNkaXIpJyA9IC4gOyB0aGVuIFwKKwkgIGVjaG8gIkVSUk9SOiBkaXN0Y2xlYW5jaGVjayBjYW4gb25seSBydW4gZnJvbSBhIFZQQVRIIGJ1aWxkIiA7IFwKKwkgIGV4aXQgMSA7IFwKKwlmaQorCUB0ZXN0IGAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWVxIDAgXAorCSAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBpbiBidWlsZCBkaXJlY3RvcnkgYWZ0ZXIgZGlzdGNsZWFuOiIgOyBcCisJICAgICAgICQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSA7IFwKKwkgICAgICAgZXhpdCAxOyB9ID4mMgorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKFBST0dSQU1TKSAkKE1BTlMpICQoREFUQSkgJChIRUFERVJTKSBcCisJCWFyZXNfY29uZmlnLmggYXJlc19idWlsZC5oCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQobWFuM2RpcikiICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIiAiJChERVNURElSKSQobGliY2FyZXNfbGFkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisJLXRlc3QgLXogIiQoRElTVENMRUFORklMRVMpIiB8fCBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbGliY2FyZXNfbGFIRUFERVJTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOiBpbnN0YWxsLW1hbjMKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgdW5pbnN0YWxsLWxpYmNhcmVzX2xhSEVBREVSUyBcCisJdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtcGtnY29uZmlnREFUQQorCit1bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuMworCisuTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIFwKKwlhbS0tcmVmcmVzaCBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1jc2NvcGUgY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdCBcCisJZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1ob29rIGRpc3QtbHppcCBkaXN0LXNoYXIgXAorCWRpc3QtdGFyWiBkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgXAorCWRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1saWJjYXJlc19sYUhFQURFUlMgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtbWFuMyBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwl1bmluc3RhbGwtbGliY2FyZXNfbGFIRUFERVJTIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjMgXAorCXVuaW5zdGFsbC1wa2djb25maWdEQVRBCisKKy5QUkVDSU9VUzogTWFrZWZpbGUKKworCitAQ09ERV9DT1ZFUkFHRV9SVUxFU0AKKworY2xlYW4tbG9jYWw6IGNsZWFuLXNvdXJjZWQtbWFucGFnZXMKKworY2xlYW4tc291cmNlZC1tYW5wYWdlczoKKwlAc3JjZG1hbmRpcj0nJChTT1VSQ0VETUFORElSKSc7IFwKKwllY2hvICJybSAtcmYgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpciI7IFwKKwlybSAtcmYgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpcgorCitzb3VyY2VkLW1hbnBhZ2VzOiBjbGVhbi1zb3VyY2VkLW1hbnBhZ2VzCisJQHNyY2RtYW5kaXI9JyQoU09VUkNFRE1BTkRJUiknOyBcCisJc3JjZG1hbmZpbGVzPSckKFNPVVJDRURNQU5QQUdFUyknOyBcCisJbWtkaXIgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpcjsgXAorCWZvciBmaWxlIGluICQkc3JjZG1hbmZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQodG9wX3NyY2RpcikvJCRmaWxlOyB0aGVuIFwKKwkgICAgZWNobyAiY3AgJCh0b3Bfc3JjZGlyKS8kJGZpbGUgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpci8kJGZpbGUiOyBcCisJICAgIGNwICQodG9wX3NyY2RpcikvJCRmaWxlICQodG9wX2J1aWxkZGlyKS8kJHNyY2RtYW5kaXIvJCRmaWxlOyBcCisJICBmaTsgXAorCWRvbmUKKworaHRtbDogc291cmNlZC1tYW5wYWdlcyAkKEhUTUxQQUdFUykKKworLjMuaHRtbDoKKwkkKE1BTjJIVE1MKQorCitwZGY6IHNvdXJjZWQtbWFucGFnZXMgJChQREZQQUdFUykKKworLjMucGRmOgorCUAoZm9vPWBlY2hvICRAIHwgc2VkIC1lICdzL1wuWzAtOV0kJC8vZydgOyBcCisJZ3JvZmYgLVRwcyAtbWFuICQ8ID4kJGZvby5wczsgXAorCXBzMnBkZiAkJGZvby5wcyAkQDsgXAorCXJtICQkZm9vLnBzOyBcCisJZWNobyAiY29udmVydGVkICQ8IHRvICRAIikKKworIyBNYWtlIGZpbGVzIG5hbWVkICouZGlzdCByZXBsYWNlIHRoZSBmaWxlIHdpdGhvdXQgLmRpc3QgZXh0ZW5zaW9uCitkaXN0LWhvb2s6CisJZmluZCAkKGRpc3RkaXIpIC1uYW1lICIqLmRpc3QiIC1leGVjIHJtIHt9IFw7CisJKGRpc3RpdD1gZmluZCAkKHNyY2RpcikgLW5hbWUgIiouZGlzdCJgOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0aXQ7IGRvIFwKKwkgIHN0cmlwPWBlY2hvICQkZmlsZSB8IHNlZCAtZSBzL14kKHNyY2RpcikvLyAtZSBzL1wuZGlzdC8vYDsgXAorCSAgY3AgJCRmaWxlICQoZGlzdGRpcikkJHN0cmlwOyBcCisJZG9uZSkKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvTWFrZWZpbGUuaW4uc2F2ZWQgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5pbi5zYXZlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU2MTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvTWFrZWZpbGUuaW4uc2F2ZWQKQEAgLTAsMCArMSwyMTU1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCisKKworVlBBVEggPSBAc3JjZGlyQAorYW1fX2lzX2dudV9tYWtlID0geyBcCisgIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAorICAgIGZhbHNlOyBcCisgIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCisgICAgdHJ1ZTsgXAorICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCisgICAgdHJ1ZTsgXAorICBlbHNlIFwKKyAgICBmYWxzZTsgXAorICBmaTsgXAorfQorYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorICAgICAgPykgOzsgXAorICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKyAgICAgICAgIGV4aXQgMTs7IFwKKyAgZXNhYzsgXAorICBoYXNfb3B0PW5vOyBcCisgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKyAgZWxzZSBcCisgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisgICAgICAqXFxbXCBcCV0qKSBcCisgICAgICAgIGJzPVxcOyBcCisgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAorICAgIGVzYWM7IFwKKyAgZmk7IFwKKyAgc2tpcF9uZXh0PW5vOyBcCisgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKyAgeyBcCisgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKyAgfTsgXAorICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgZXNhYzsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKyAgICBlc2FjOyBcCisgIGRvbmU7IFwKKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCithbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorbm9pbnN0X1BST0dSQU1TID0gJChhbV9fRVhFRVhUXzEpCitAQ0FSRVNfTFRfU0hMSUJfVVNFX1ZFUlNJT05fSU5GT19UUlVFQGFtX19hcHBlbmRfMSA9ICQoQ0FSRVNfVkVSU0lPTl9JTkZPKQorQENBUkVTX0xUX1NITElCX1VTRV9OT19VTkRFRklORURfVFJVRUBhbV9fYXBwZW5kXzIgPSAtbm8tdW5kZWZpbmVkCitAQ0FSRVNfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVF9UUlVFQGFtX19hcHBlbmRfMyA9IC1taW1wdXJlLXRleHQKK0BVU0VfQ1BQRkxBR19DQVJFU19TVEFUSUNMSUJfVFJVRUBhbV9fYXBwZW5kXzQgPSAkKENQUEZMQUdfQ0FSRVNfU1RBVElDTElCKQorQERPSU5HX0NBUkVTX1NZTUJPTF9ISURJTkdfVFJVRUBhbV9fYXBwZW5kXzUgPSAkKENGTEFHX0NBUkVTX1NZTUJPTF9ISURJTkcpCitARE9JTkdfQ0FSRVNfU1lNQk9MX0hJRElOR19UUlVFQGFtX19hcHBlbmRfNiA9IC1EQ0FSRVNfU1lNQk9MX0hJRElORworc3ViZGlyID0gLgorU1VCRElSUyA9CitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9heF9jb2RlX2NvdmVyYWdlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jYXJlcy1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2FyZXMtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2FyZXMtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NhcmVzLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NhcmVzLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtYW0taWZhY2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtY2MtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtbHQtaWZhY2UubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdmFsLWZsZ3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno0MC14Yy1vdnIubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno2MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29uZmlndXJlIFwKKwkkKGFtX19jb25maWd1cmVfZGVwcykgJChsaWJjYXJlc19sYV9IRUFERVJTKSBcCisJJChhbV9fRElTVF9DT01NT04pCithbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSBhcmVzX2NvbmZpZy5oIGFyZXNfYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gbGliY2FyZXMucGMKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQobWFuM2RpcikiIFwKKwkiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgIiQoREVTVERJUikkKGxpYmNhcmVzX2xhZGlyKSIKK0xUTElCUkFSSUVTID0gJChsaWJfTFRMSUJSQVJJRVMpCitsaWJjYXJlc19sYV9MSUJBREQgPQorYW1fX29iamVjdHNfMSA9IGxpYmNhcmVzX2xhLWFyZXNfX2Nsb3NlX3NvY2tldHMubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfX2dldF9ob3N0ZW50LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX19yZWFkX2xpbmUubG8gbGliY2FyZXNfbGEtYXJlc19fdGltZXZhbC5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19jYW5jZWwubG8gbGliY2FyZXNfbGEtYXJlc19kYXRhLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX2Rlc3Ryb3kubG8gbGliY2FyZXNfbGEtYXJlc19leHBhbmRfbmFtZS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLmxvIGxpYmNhcmVzX2xhLWFyZXNfZmRzLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX2ZyZWVfaG9zdGVudC5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19mcmVlX3N0cmluZy5sbyBsaWJjYXJlc19sYS1hcmVzX2dldGVudi5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnlhZGRyLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfZ2V0bmFtZWluZm8ubG8gbGliY2FyZXNfbGEtYXJlc19nZXRzb2NrLmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX2luaXQubG8gbGliY2FyZXNfbGEtYXJlc19saWJyYXJ5X2luaXQubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfbGxpc3QubG8gbGliY2FyZXNfbGEtYXJlc19ta3F1ZXJ5LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX2NyZWF0ZV9xdWVyeS5sbyBsaWJjYXJlc19sYS1hcmVzX25vd2Fybi5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19vcHRpb25zLmxvIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYV9yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hYWFhX3JlcGx5LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3BhcnNlX25hcHRyX3JlcGx5LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3BhcnNlX25zX3JlcGx5LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zb2FfcmVwbHkubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc3J2X3JlcGx5LmxvIFwKKwlsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5sbyBcCisJbGliY2FyZXNfbGEtYXJlc19wbGF0Zm9ybS5sbyBsaWJjYXJlc19sYS1hcmVzX3Byb2Nlc3MubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfcXVlcnkubG8gbGliY2FyZXNfbGEtYXJlc19zZWFyY2gubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfc2VuZC5sbyBsaWJjYXJlc19sYS1hcmVzX3N0cmNhc2VjbXAubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLmxvIGxpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfdGltZW91dC5sbyBsaWJjYXJlc19sYS1hcmVzX3ZlcnNpb24ubG8gXAorCWxpYmNhcmVzX2xhLWFyZXNfd3JpdGV2LmxvIGxpYmNhcmVzX2xhLWJpdG5jbXAubG8gXAorCWxpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24ubG8gbGliY2FyZXNfbGEtaW5ldF9udG9wLmxvIFwKKwlsaWJjYXJlc19sYS13aW5kb3dzX3BvcnQubG8KK2FtX19vYmplY3RzXzIgPQorYW1fbGliY2FyZXNfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKQorbGliY2FyZXNfbGFfT0JKRUNUUyA9ICQoYW1fbGliY2FyZXNfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2FtX192X2x0XzEgPSAKK2xpYmNhcmVzX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKGxpYmNhcmVzX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0BDVVJMREVCVUdfRkFMU0VAYW1fX0VYRUVYVF8xID0gYWhvc3QkKEVYRUVYVCkgYWRpZyQoRVhFRVhUKSBcCitAQ1VSTERFQlVHX0ZBTFNFQAlhY291bnRyeSQoRVhFRVhUKQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX19vYmplY3RzXzMgPSBhY291bnRyeS1hcmVzX2dldG9wdC4kKE9CSkVYVCkgXAorCWFjb3VudHJ5LWFyZXNfbm93YXJuLiQoT0JKRVhUKSBcCisJYWNvdW50cnktYXJlc19zdHJjYXNlY21wLiQoT0JKRVhUKQorYW1fYWNvdW50cnlfT0JKRUNUUyA9IGFjb3VudHJ5LWFjb3VudHJ5LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzMpIFwKKwkkKGFtX19vYmplY3RzXzIpCithY291bnRyeV9PQkpFQ1RTID0gJChhbV9hY291bnRyeV9PQkpFQ1RTKQorYWNvdW50cnlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYmNhcmVzLmxhCithY291bnRyeV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChhY291bnRyeV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9fb2JqZWN0c180ID0gYWRpZy1hcmVzX2dldG9wdC4kKE9CSkVYVCkgYWRpZy1hcmVzX25vd2Fybi4kKE9CSkVYVCkgXAorCWFkaWctYXJlc19zdHJjYXNlY21wLiQoT0JKRVhUKQorYW1fYWRpZ19PQkpFQ1RTID0gYWRpZy1hZGlnLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzQpIFwKKwkkKGFtX19vYmplY3RzXzIpCithZGlnX09CSkVDVFMgPSAkKGFtX2FkaWdfT0JKRUNUUykKK2FkaWdfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYmNhcmVzLmxhCithZGlnX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX29iamVjdHNfNSA9IGFob3N0LWFyZXNfZ2V0b3B0LiQoT0JKRVhUKSBcCisJYWhvc3QtYXJlc19ub3dhcm4uJChPQkpFWFQpIGFob3N0LWFyZXNfc3RyY2FzZWNtcC4kKE9CSkVYVCkKK2FtX2Fob3N0X09CSkVDVFMgPSBhaG9zdC1haG9zdC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c181KSBcCisJJChhbV9fb2JqZWN0c18yKQorYWhvc3RfT0JKRUNUUyA9ICQoYW1fYWhvc3RfT0JKRUNUUykKK2Fob3N0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJjYXJlcy5sYQorYWhvc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCitERUZBVUxUX0lOQ0xVREVTID0gCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKK2FtX192X0NDXzEgPSAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOworYW1fX3ZfQ0NMRF8xID0gCitTT1VSQ0VTID0gJChsaWJjYXJlc19sYV9TT1VSQ0VTKSAkKGFjb3VudHJ5X1NPVVJDRVMpICQoYWRpZ19TT1VSQ0VTKSBcCisJJChhaG9zdF9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJjYXJlc19sYV9TT1VSQ0VTKSAkKGFjb3VudHJ5X1NPVVJDRVMpIFwKKwkkKGFkaWdfU09VUkNFUykgJChhaG9zdF9TT1VSQ0VTKQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBcCisJY3RhZ3MtcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaHRtbC1yZWN1cnNpdmUgXAorCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1wZGYtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKKwlpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgXAorCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorICBlc2FjCittYW4zZGlyID0gJChtYW5kaXIpL21hbjMKK05ST0ZGID0gbnJvZmYKK01BTlMgPSAkKG1hbl9NQU5TKQorREFUQSA9ICQocGtnY29uZmlnX0RBVEEpCitIRUFERVJTID0gJChsaWJjYXJlc19sYV9IRUFERVJTKQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAorICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCisgICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKKyAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKKwljc2NvcGUgZGlzdGRpciBkaXN0IGRpc3QtYWxsIGRpc3RjaGVjaworYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpIFwKKwkkKExJU1ApYXJlc19jb25maWcuaC5pbiBhcmVzX2J1aWxkLmguaW4KKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworIyAqbm90KiBwcmVzZXJ2ZWQuCithbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKycKKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitDU0NPUEUgPSBjc2NvcGUKK2FtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuaW5jIFwKKwkkKHNyY2RpcikvYXJlc19idWlsZC5oLmluICQoc3JjZGlyKS9hcmVzX2NvbmZpZy5oLmluIFwKKwkkKHNyY2RpcikvbGliY2FyZXMucGMuaW4gQVVUSE9SUyBJTlNUQUxMIE5FV1MgVE9ETyBjb21waWxlIFwKKwljb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBkZXBjb21wIGluc3RhbGwtc2ggbHRtYWluLnNoIG1pc3NpbmcgXAorCW1raW5zdGFsbGRpcnMKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCit0b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKK2FtX19yZW1vdmVfZGlzdGRpciA9IFwKKyAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKSI7IHRoZW4gXAorICAgIGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgJiYgcm0gLXJmICIkKGRpc3RkaXIpIiBcCisgICAgICB8fCB7IHNsZWVwIDUgJiYgcm0gLXJmICIkKGRpc3RkaXIpIjsgfTsgXAorICBlbHNlIDo7IGZpCithbV9fcG9zdF9yZW1vdmVfZGlzdGRpciA9ICQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3oKK0daSVBfRU5WID0gLS1iZXN0CitESVNUX1RBUkdFVFMgPSBkaXN0LWd6aXAKK2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2FtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSBcCisgIHwgc2VkICdzfF5cLi98JChwcmVmaXgpL3wnIHwgZ3JlcCAtdiAnJChpbmZvZGlyKS9kaXIkJCcKK2Rpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NBUkVTX0NGTEFHX0VYVFJBUyA9IEBDQVJFU19DRkxBR19FWFRSQVNACitDQVJFU19QUklWQVRFX0xJQlMgPSBAQ0FSRVNfUFJJVkFURV9MSUJTQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorCisjIEFkZCAtV2Vycm9yIGlmIGRlZmluZWQKK0NGTEFHUyA9IEBDRkxBR1NAIEBDQVJFU19DRkxBR19FWFRSQVNACitDRkxBR19DQVJFU19TWU1CT0xfSElESU5HID0gQENGTEFHX0NBUkVTX1NZTUJPTF9ISURJTkdACitDT0RFX0NPVkVSQUdFX0NGTEFHUyA9IEBDT0RFX0NPVkVSQUdFX0NGTEFHU0AKK0NPREVfQ09WRVJBR0VfRU5BQkxFRCA9IEBDT0RFX0NPVkVSQUdFX0VOQUJMRURACitDT0RFX0NPVkVSQUdFX0xERkxBR1MgPSBAQ09ERV9DT1ZFUkFHRV9MREZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1BQRkxBR19DQVJFU19TVEFUSUNMSUIgPSBAQ1BQRkxBR19DQVJFU19TVEFUSUNMSUJACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0NPViA9IEBHQ09WQAorR0VOSFRNTCA9IEBHRU5IVE1MQAorR1JFUCA9IEBHUkVQQAorSEFWRV9DWFgxMSA9IEBIQVZFX0NYWDExQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMQ09WID0gQExDT1ZACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00CitAQ1VSTERFQlVHX0ZBTFNFQEFNX0NQUEZMQUdTID0gLUkkKHRvcF9idWlsZGRpcikgLUkkKHRvcF9zcmNkaXIpIFwKK0BDVVJMREVCVUdfRkFMU0VACSQoYW1fX2FwcGVuZF80KQorCisjIFNwZWNpZnkgb3VyIGluY2x1ZGUgcGF0aHMgaGVyZSwgYW5kIGRvIGl0IHJlbGF0aXZlIHRvICQodG9wX3NyY2RpcikgYW5kCisjICQodG9wX2J1aWxkZGlyKSwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgcGF0aHMgd2hpY2ggYmVsb25nIHRvIHRoZSBsaWJyYXJ5CisjIGJlaW5nIGN1cnJlbnRseSBidWlsdCBhbmQgdGVzdGVkIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGxpYnJhcnkgd2hpY2gKKyMgbWlnaHQgcG9zc2libHkgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbS4KKyMKKyMgV2hlbiB1c2luZyB0aGUgbG93LWxldmVsIGhhcmQtaGFja2luZyBtZW1vcnkgbGVhayB0cmFja2luZyBjb2RlIGZyb20KKyMgbGliY3VybCB0aGUgZ2VuZXJhdGVkIGN1cmwvY3VybGJ1aWxkLmggZmlsZSBtdXN0IGFsc28gYmUgcmVhY2hhYmxlLgorIyBVc2luZyB0aGUgbGliY3VybCBsb3dsZXZlbCBjb2RlIGZyb20gd2l0aGluIGMtYXJlcyBsaWJyYXJ5IGlzIHVnbHkgYW5kCisjIG9ubHkgd29ya3Mgd2hlbiBjLWFyZXMgaXMgYnVpbHQgYW5kIGxpbmtlZCB3aXRoIGEgc2ltaWxhcmx5IGRlYnVnLWJ1aWxkCisjIGxpYmN1cmwsIGJ1dCB3ZSBkbyB0aGlzIGFueXdheSBmb3IgY29udmVuaWVuY2UuCisjCisjICQodG9wX2J1aWxkZGlyKS8uLi9pbmNsdWRlL2N1cmwgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGN1cmwuaAorIyAkKHRvcF9idWlsZGRpcikvLi4vaW5jbHVkZSBpcyBmb3IgbGliY3VybCdzIGdlbmVyYXRlZCBjdXJsL2N1cmxidWlsZC5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS8uLi9pbmNsdWRlIGlzIGZvciBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvLi4vbGliIGlzIGZvciBsaWJjdXJsJ3MgZ2VuZXJhdGVkIGxpYi9jdXJsX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS8uLi9saWIgaXMgZm9yIGxpYmN1cmwncyBsaWIvc2V0dXAuaCBhbmQgb3RoZXIgInByaXZhdGUiIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKSBpcyBmb3IgYy1hcmVzJ3MgZ2VuZXJhdGVkIGFyZXNfY29uZmlnLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpIGlzIGZvciBjLWFyZXMncyBhcmVzX3NldHVwLmggYW5kIG90aGVyICJjLWFyZXMtcHJpdmF0ZSIgZmlsZXMKK0BDVVJMREVCVUdfVFJVRUBBTV9DUFBGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpLy4uL2luY2x1ZGUvY3VybCBcCitAQ1VSTERFQlVHX1RSVUVACS1JJCh0b3BfYnVpbGRkaXIpLy4uL2luY2x1ZGUgXAorQENVUkxERUJVR19UUlVFQAktSSQodG9wX3NyY2RpcikvLi4vaW5jbHVkZSBcCitAQ1VSTERFQlVHX1RSVUVACS1JJCh0b3BfYnVpbGRkaXIpLy4uL2xpYiBcCitAQ1VSTERFQlVHX1RSVUVACS1JJCh0b3Bfc3JjZGlyKS8uLi9saWIgLUkkKHRvcF9idWlsZGRpcikgXAorQENVUkxERUJVR19UUlVFQAktSSQodG9wX3NyY2RpcikgJChhbV9fYXBwZW5kXzQpCitsaWJfTFRMSUJSQVJJRVMgPSBsaWJjYXJlcy5sYQorbWFuX01BTlMgPSAkKE1BTlBBR0VTKQorTVNWQ0ZJTEVTID0gdmMvdmM2YXdzLmRzdyB2Yy9hY291bnRyeS92YzZhY291bnRyeS5kc3AgdmMvYWRpZy92YzZhZGlnLmRzcCBcCisgdmMvYWhvc3QvdmM2YWhvc3QuZHNwIHZjL2NhcmVzL3ZjNmNhcmVzLmRzcCB2Yy9jYXJlcy92YzZjYXJlcy5kc3cKKworQENVUkxERUJVR19GQUxTRUBQUk9HUyA9IGFob3N0IGFkaWcgYWNvdW50cnkKK0BDVVJMREVCVUdfVFJVRUBQUk9HUyA9IAorCisjIGFkaWcgYW5kIGFob3N0IGFyZSBqdXN0IHNhbXBsZSBwcm9ncmFtcyBhbmQgdGh1cyBub3QgbWVudGlvbmVkIHdpdGggdGhlCisjIHJlZ3VsYXIgc291cmNlcyBhbmQgaGVhZGVycworRVhUUkFfRElTVCA9IEFVVEhPUlMgQ0hBTkdFUyBSRUFETUUuY2FyZXMgTWFrZWZpbGUuaW5jIE1ha2VmaWxlLmRqCSAgIFwKKyBNYWtlZmlsZS5tMzIgTWFrZWZpbGUubmV0d2FyZSBNYWtlZmlsZS5tc3ZjIE1ha2VmaWxlLldhdGNvbSAkKG1hbl9NQU5TKSAgIFwKKyBjb25maWctd2luMzIuaCBSRUxFQVNFLU5PVEVTIGxpYmNhcmVzLnBjLmluIGJ1aWxkY29uZiBnZXRfdmVyLmF3ayBtYWtldGd6IFwKKyBUT0RPIGFyZXNfYnVpbGQuaC5pbiAkKFBERlBBR0VTKSBjYXJlcy5yYyBSRUFETUUubXN2YyAkKE1TVkNGSUxFUykJICAgXAorICQoQ1NPVVJDRVMpICQoSEhFQURFUlMpIGNvbmZpZy1kb3MuaCBhY291bnRyeS4xIGFkaWcuMSBhaG9zdC4xIElOU1RBTEwJICAgXAorIFJFQURNRS5tZCBMSUNFTlNFLm1kCisKK0NMRUFORklMRVMgPSAkKFBERlBBR0VTKSAkKEhUTUxQQUdFUykKK0RJU1RDTEVBTkZJTEVTID0gYXJlc19idWlsZC5oCitESVNUX1NVQkRJUlMgPSB0ZXN0Citwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCitwa2djb25maWdfREFUQSA9IGxpYmNhcmVzLnBjCitDQVJFU19WRVJTSU9OX0lORk8gPSAtdmVyc2lvbi1pbmZvIDQ6MDoyCisjIFRoaXMgZmxhZyBhY2NlcHRzIGFuIGFyZ3VtZW50IG9mIHRoZSBmb3JtIGN1cnJlbnRbOnJldmlzaW9uWzphZ2VdXS4gU28sCisjIHBhc3NpbmcgLXZlcnNpb24taW5mbyAzOjEyOjEgc2V0cyBjdXJyZW50IHRvIDMsIHJldmlzaW9uIHRvIDEyLCBhbmQgYWdlIHRvCisjIDEuCisjCisjIElmIGVpdGhlciByZXZpc2lvbiBvciBhZ2UgYXJlIG9taXR0ZWQsIHRoZXkgZGVmYXVsdCB0byAwLiBBbHNvIG5vdGUgdGhhdCBhZ2UKKyMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlci4KKyMKKyMgSGVyZSBhcmUgYSBzZXQgb2YgcnVsZXMgdG8gaGVscCB5b3UgdXBkYXRlIHlvdXIgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uOiAKKyMKKyMgMS5TdGFydCB3aXRoIHZlcnNpb24gaW5mb3JtYXRpb24gb2YgMDowOjAgZm9yIGVhY2ggbGlidG9vbCBsaWJyYXJ5LgorIworIyAyLlVwZGF0ZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbmx5IGltbWVkaWF0ZWx5IGJlZm9yZSBhIHB1YmxpYyByZWxlYXNlIG9mCisjIHlvdXIgc29mdHdhcmUuIE1vcmUgZnJlcXVlbnQgdXBkYXRlcyBhcmUgdW5uZWNlc3NhcnksIGFuZCBvbmx5IGd1YXJhbnRlZQorIyB0aGF0IHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgZ2V0cyBsYXJnZXIgZmFzdGVyLgorIworIyAzLklmIHRoZSBsaWJyYXJ5IHNvdXJjZSBjb2RlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUsIHRoZW4KKyMgaW5jcmVtZW50IHJldmlzaW9uIChjOnIrMTphKQorIworIyA0LklmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgb3IgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAorIyB1cGRhdGUsIGluY3JlbWVudCBjdXJyZW50LCBhbmQgc2V0IHJldmlzaW9uIHRvIDAuIChjKzE6cj0wOmEpCisjCisjIDUuSWYgYW55IGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHB1YmxpYyByZWxlYXNlLCB0aGVuCisjIGluY3JlbWVudCBhZ2UuIChjOnI6YSsxKQorIworIyA2LklmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIHRoZSBsYXN0IHB1YmxpYyByZWxlYXNlLCB0aGVuCisjIHNldCBhZ2UgdG8gMC4gKGM6cjphPTApCisjCitBTV9MREZMQUdTID0gCitsaWJjYXJlc19sYV9MREZMQUdTX0VYVFJBID0gJChhbV9fYXBwZW5kXzEpICQoYW1fX2FwcGVuZF8yKSBcCisJJChhbV9fYXBwZW5kXzMpCitsaWJjYXJlc19sYV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAkKGxpYmNhcmVzX2xhX0xERkxBR1NfRVhUUkEpIFwKKwkkKENPREVfQ09WRVJBR0VfTERGTEFHUykKK2xpYmNhcmVzX2xhX0NGTEFHU19FWFRSQSA9ICQoYW1fX2FwcGVuZF81KSAkKENPREVfQ09WRVJBR0VfQ0ZMQUdTKQorbGliY2FyZXNfbGFfQ1BQRkxBR1NfRVhUUkEgPSAtRENBUkVTX0JVSUxESU5HX0xJQlJBUlkgJChhbV9fYXBwZW5kXzYpCitsaWJjYXJlc19sYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1NfRVhUUkEpCitsaWJjYXJlc19sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ1BQRkxBR1NfRVhUUkEpCitDU09VUkNFUyA9IGFyZXNfX2Nsb3NlX3NvY2tldHMuYwlcCisgIGFyZXNfX2dldF9ob3N0ZW50LmMJCQlcCisgIGFyZXNfX3JlYWRfbGluZS5jCQkJXAorICBhcmVzX190aW1ldmFsLmMJCQlcCisgIGFyZXNfY2FuY2VsLmMJCQkJXAorICBhcmVzX2RhdGEuYwkJCQlcCisgIGFyZXNfZGVzdHJveS5jCQkJXAorICBhcmVzX2V4cGFuZF9uYW1lLmMJCQlcCisgIGFyZXNfZXhwYW5kX3N0cmluZy5jCQkJXAorICBhcmVzX2Zkcy5jCQkJCVwKKyAgYXJlc19mcmVlX2hvc3RlbnQuYwkJCVwKKyAgYXJlc19mcmVlX3N0cmluZy5jCQkJXAorICBhcmVzX2dldGVudi5jCQkJCVwKKyAgYXJlc19nZXRob3N0YnlhZGRyLmMJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZS5jCQkJXAorICBhcmVzX2dldG5hbWVpbmZvLmMJCQlcCisgIGFyZXNfZ2V0c29jay5jCQkJXAorICBhcmVzX2luaXQuYwkJCQlcCisgIGFyZXNfbGlicmFyeV9pbml0LmMJCQlcCisgIGFyZXNfbGxpc3QuYwkJCQlcCisgIGFyZXNfbWtxdWVyeS5jCQkJXAorICBhcmVzX2NyZWF0ZV9xdWVyeS5jCQkJXAorICBhcmVzX25vd2Fybi5jCQkJCVwKKyAgYXJlc19vcHRpb25zLmMJCQlcCisgIGFyZXNfcGFyc2VfYV9yZXBseS5jCQkJXAorICBhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYwkJXAorICBhcmVzX3BhcnNlX214X3JlcGx5LmMJCQlcCisgIGFyZXNfcGFyc2VfbmFwdHJfcmVwbHkuYwkJXAorICBhcmVzX3BhcnNlX25zX3JlcGx5LmMJCQlcCisgIGFyZXNfcGFyc2VfcHRyX3JlcGx5LmMJCVwKKyAgYXJlc19wYXJzZV9zb2FfcmVwbHkuYwkJXAorICBhcmVzX3BhcnNlX3Nydl9yZXBseS5jCQlcCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5LmMJCVwKKyAgYXJlc19wbGF0Zm9ybS5jCQkJXAorICBhcmVzX3Byb2Nlc3MuYwkJCVwKKyAgYXJlc19xdWVyeS5jCQkJCVwKKyAgYXJlc19zZWFyY2guYwkJCQlcCisgIGFyZXNfc2VuZC5jCQkJCVwKKyAgYXJlc19zdHJjYXNlY21wLmMJCQlcCisgIGFyZXNfc3RyZHVwLmMJCQkJXAorICBhcmVzX3N0cmVycm9yLmMJCQlcCisgIGFyZXNfdGltZW91dC5jCQkJXAorICBhcmVzX3ZlcnNpb24uYwkJCVwKKyAgYXJlc193cml0ZXYuYwkJCQlcCisgIGJpdG5jbXAuYwkJCQlcCisgIGluZXRfbmV0X3B0b24uYwkJCVwKKyAgaW5ldF9udG9wLmMJCQkJXAorICB3aW5kb3dzX3BvcnQuYworCitISEVBREVSUyA9IGFyZXMuaAkJCVwKKyAgYXJlc19idWlsZC5oCQkJCVwKKyAgYXJlc19kYXRhLmgJCQkJXAorICBhcmVzX2Rucy5oCQkJCVwKKyAgYXJlc19nZXRlbnYuaAkJCQlcCisgIGFyZXNfaW5ldF9uZXRfcHRvbi5oCQlcCisgIGFyZXNfaXBobHBhcGkuaAkJCVwKKyAgYXJlc19pcHY2LmgJCQkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC5oCQkJXAorICBhcmVzX2xsaXN0LmgJCQkJXAorICBhcmVzX25vd2Fybi5oCQkJCVwKKyAgYXJlc19wbGF0Zm9ybS5oCQkJXAorICBhcmVzX3ByaXZhdGUuaAkJCVwKKyAgYXJlc19ydWxlcy5oCQkJCVwKKyAgYXJlc19zdHJjYXNlY21wLmgJCQlcCisgIGFyZXNfc3RyZHVwLmgJCQkJXAorICBhcmVzX3ZlcnNpb24uaAkJCVwKKyAgYXJlc193cml0ZXYuaAkJCQlcCisgIGJpdG5jbXAuaAkJCQlcCisgIG5hbWVzZXIuaAkJCQlcCisgIGFyZXNfc2V0dXAuaAkJCQlcCisgIHNldHVwX29uY2UuaAorCitNQU5QQUdFUyA9IGFyZXNfY2FuY2VsLjMJCVwKKyAgYXJlc19kZXN0cm95LjMJCQlcCisgIGFyZXNfZGVzdHJveV9vcHRpb25zLjMJCVwKKyAgYXJlc19kdXAuMwkJCQlcCisgIGFyZXNfZXhwYW5kX25hbWUuMwkJCVwKKyAgYXJlc19leHBhbmRfc3RyaW5nLjMJCQlcCisgIGFyZXNfZmRzLjMJCQkJXAorICBhcmVzX2ZyZWVfZGF0YS4zCQkJXAorICBhcmVzX2ZyZWVfaG9zdGVudC4zCQkJXAorICBhcmVzX2ZyZWVfc3RyaW5nLjMJCQlcCisgIGFyZXNfZ2V0X3NlcnZlcnMuMwkJCVwKKyAgYXJlc19nZXRfc2VydmVyc19wb3J0cy4zCQkJXAorICBhcmVzX2dldGhvc3RieWFkZHIuMwkJCVwKKyAgYXJlc19nZXRob3N0YnluYW1lLjMJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlLjMJCVwKKyAgYXJlc19nZXRuYW1laW5mby4zCQkJXAorICBhcmVzX2dldHNvY2suMwkJCVwKKyAgYXJlc19pbml0LjMJCQkJXAorICBhcmVzX2luaXRfb3B0aW9ucy4zCQkJXAorICBhcmVzX2xpYnJhcnlfY2xlYW51cC4zCQlcCisgIGFyZXNfbGlicmFyeV9pbml0LjMJCQlcCisgIGFyZXNfbWtxdWVyeS4zCQkJXAorICBhcmVzX2NyZWF0ZV9xdWVyeS4zCQkJXAorICBhcmVzX3BhcnNlX2FfcmVwbHkuMwkJCVwKKyAgYXJlc19wYXJzZV9hYWFhX3JlcGx5LjMJCVwKKyAgYXJlc19wYXJzZV9teF9yZXBseS4zCQkJXAorICBhcmVzX3BhcnNlX25hcHRyX3JlcGx5LjMJCVwKKyAgYXJlc19wYXJzZV9uc19yZXBseS4zCQkJXAorICBhcmVzX3BhcnNlX3B0cl9yZXBseS4zCQlcCisgIGFyZXNfcGFyc2Vfc29hX3JlcGx5LjMJCVwKKyAgYXJlc19wYXJzZV9zcnZfcmVwbHkuMwkJXAorICBhcmVzX3BhcnNlX3R4dF9yZXBseS4zCQlcCisgIGFyZXNfcHJvY2Vzcy4zCQkJXAorICBhcmVzX3F1ZXJ5LjMJCQkJXAorICBhcmVzX3NhdmVfb3B0aW9ucy4zCQkJXAorICBhcmVzX3NlYXJjaC4zCQkJCVwKKyAgYXJlc19zZW5kLjMJCQkJXAorICBhcmVzX3NldF9sb2NhbF9kZXYuMwkJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA0LjMJCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNi4zCQkJXAorICBhcmVzX3NldF9zZXJ2ZXJzLjMJCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfY3N2LjMJCVwKKyAgYXJlc19zZXRfc2VydmVyc19wb3J0cy4zCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2LjMJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrLjMJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjay4zCVwKKyAgYXJlc19zZXRfc29ydGxpc3QuMwkJCVwKKyAgYXJlc19zdHJlcnJvci4zCQkJXAorICBhcmVzX3RpbWVvdXQuMwkJCVwKKyAgYXJlc192ZXJzaW9uLjMJCSAgICAgICAgXAorICBhcmVzX2luZXRfcHRvbi4zICAgICAgICAgICAgICAgICAgICAgIFwKKyAgYXJlc19pbmV0X250b3AuMworCitIVE1MUEFHRVMgPSBhcmVzX2NhbmNlbC5odG1sCQlcCisgIGFyZXNfZGVzdHJveS5odG1sCQkJXAorICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucy5odG1sCQlcCisgIGFyZXNfZHVwLmh0bWwJCQkJXAorICBhcmVzX2V4cGFuZF9uYW1lLmh0bWwJCQlcCisgIGFyZXNfZXhwYW5kX3N0cmluZy5odG1sCQlcCisgIGFyZXNfZmRzLmh0bWwJCQkJXAorICBhcmVzX2ZyZWVfZGF0YS5odG1sCQkJXAorICBhcmVzX2ZyZWVfaG9zdGVudC5odG1sCQlcCisgIGFyZXNfZnJlZV9zdHJpbmcuaHRtbAkJCVwKKyAgYXJlc19nZXRfc2VydmVycy5odG1sCQkJXAorICBhcmVzX2dldF9zZXJ2ZXJzX3BvcnRzLmh0bWwJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5YWRkci5odG1sCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZS5odG1sCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlLmh0bWwJCVwKKyAgYXJlc19nZXRuYW1laW5mby5odG1sCQkJXAorICBhcmVzX2dldHNvY2suaHRtbAkJCVwKKyAgYXJlc19pbml0Lmh0bWwJCQlcCisgIGFyZXNfaW5pdF9vcHRpb25zLmh0bWwJCVwKKyAgYXJlc19saWJyYXJ5X2NsZWFudXAuaHRtbAkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC5odG1sCQlcCisgIGFyZXNfbWtxdWVyeS5odG1sCQkJXAorICBhcmVzX2NyZWF0ZV9xdWVyeS5odG1sCQkJXAorICBhcmVzX3BhcnNlX2FfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX2FhYWFfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX214X3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wYXJzZV9uc19yZXBseS5odG1sCQlcCisgIGFyZXNfcGFyc2VfcHRyX3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wYXJzZV9zb2FfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX3Nydl9yZXBseS5odG1sCQlcCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wcm9jZXNzLmh0bWwJCQlcCisgIGFyZXNfcXVlcnkuaHRtbAkJCVwKKyAgYXJlc19zYXZlX29wdGlvbnMuaHRtbAkJXAorICBhcmVzX3NlYXJjaC5odG1sCQkJXAorICBhcmVzX3NlbmQuaHRtbAkJCVwKKyAgYXJlc19zZXRfbG9jYWxfZGV2Lmh0bWwJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA0Lmh0bWwJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA2Lmh0bWwJCVwKKyAgYXJlc19zZXRfc2VydmVycy5odG1sCQkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX2Nzdi5odG1sCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMuaHRtbAkJCVwKKyAgYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3YuaHRtbAkJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrLmh0bWwJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjay5odG1sCQlcCisgIGFyZXNfc2V0X3NvcnRsaXN0Lmh0bWwJCQlcCisgIGFyZXNfc3RyZXJyb3IuaHRtbAkJCVwKKyAgYXJlc190aW1lb3V0Lmh0bWwJCQlcCisgIGFyZXNfdmVyc2lvbi5odG1sICAgICAgICAgICAgICAgICAgICAgXAorICBhcmVzX2luZXRfcHRvbi5odG1sICAgICAgICAgICAgICAgICAgIFwKKyAgYXJlc19pbmV0X250b3AuaHRtbAorCitQREZQQUdFUyA9IGFyZXNfY2FuY2VsLnBkZgkJXAorICBhcmVzX2Rlc3Ryb3kucGRmCQkJXAorICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucy5wZGYJCVwKKyAgYXJlc19kdXAucGRmCQkJCVwKKyAgYXJlc19leHBhbmRfbmFtZS5wZGYJCQlcCisgIGFyZXNfZXhwYW5kX3N0cmluZy5wZGYJCVwKKyAgYXJlc19mZHMucGRmCQkJCVwKKyAgYXJlc19mcmVlX2RhdGEucGRmCQkJXAorICBhcmVzX2ZyZWVfaG9zdGVudC5wZGYJCQlcCisgIGFyZXNfZnJlZV9zdHJpbmcucGRmCQkJXAorICBhcmVzX2dldF9zZXJ2ZXJzLnBkZgkJCVwKKyAgYXJlc19nZXRfc2VydmVyc19wb3J0cy5wZGYJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5YWRkci5wZGYJCVwKKyAgYXJlc19nZXRob3N0YnluYW1lLnBkZgkJXAorICBhcmVzX2dldGhvc3RieW5hbWVfZmlsZS5wZGYJCVwKKyAgYXJlc19nZXRuYW1laW5mby5wZGYJCQlcCisgIGFyZXNfZ2V0c29jay5wZGYJCQlcCisgIGFyZXNfaW5pdC5wZGYJCQkJXAorICBhcmVzX2luaXRfb3B0aW9ucy5wZGYJCQlcCisgIGFyZXNfbGlicmFyeV9jbGVhbnVwLnBkZgkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC5wZGYJCQlcCisgIGFyZXNfbWtxdWVyeS5wZGYJCQlcCisgIGFyZXNfY3JlYXRlX3F1ZXJ5LnBkZgkJCVwKKyAgYXJlc19wYXJzZV9hX3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX2FhYWFfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfbXhfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfbnNfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfcHRyX3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX3NvYV9yZXBseS5wZGYJCVwKKyAgYXJlc19wYXJzZV9zcnZfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5LnBkZgkJXAorICBhcmVzX3Byb2Nlc3MucGRmCQkJXAorICBhcmVzX3F1ZXJ5LnBkZgkJCVwKKyAgYXJlc19zYXZlX29wdGlvbnMucGRmCQkJXAorICBhcmVzX3NlYXJjaC5wZGYJCQlcCisgIGFyZXNfc2VuZC5wZGYJCQkJXAorICBhcmVzX3NldF9sb2NhbF9kZXYucGRmCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNC5wZGYJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA2LnBkZgkJXAorICBhcmVzX3NldF9zZXJ2ZXJzLnBkZgkJCVwKKyAgYXJlc19zZXRfc2VydmVyc19jc3YucGRmCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMucGRmCQkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2Nzdi5wZGYJCQlcCisgIGFyZXNfc2V0X3NvY2tldF9jYWxsYmFjay5wZGYJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjay5wZGYJCVwKKyAgYXJlc19zZXRfc29ydGxpc3QucGRmCQkJXAorICBhcmVzX3N0cmVycm9yLnBkZgkJCVwKKyAgYXJlc190aW1lb3V0LnBkZgkJCVwKKyAgYXJlc192ZXJzaW9uLnBkZiAgICAgICAgICAgICAgICAgICAgICBcCisgIGFyZXNfaW5ldF9wdG9uLnBkZiAgICAgICAgICAgICAgICAgICAgXAorICBhcmVzX2luZXRfbnRvcC5wZGYKKworU0FNUExFU09VUkNFUyA9IGFyZXNfZ2V0b3B0LmMJCVwKKyAgYXJlc19ub3dhcm4uYwkJCQlcCisgIGFyZXNfc3RyY2FzZWNtcC5jCisKK1NBTVBMRUhFQURFUlMgPSBhcmVzX2dldG9wdC5oCQlcCisgIGFyZXNfbm93YXJuLmgJCQkJXAorICBhcmVzX3N0cmNhc2VjbXAuaAorCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBDU09VUkNFUyBhbmQgSEhFQURFUlMgZGVmaW5lcworbGliY2FyZXNfbGFfU09VUkNFUyA9ICQoQ1NPVVJDRVMpICQoSEhFQURFUlMpCisKKyMgd2hlcmUgdG8gaW5zdGFsbCB0aGUgYy1hcmVzIGhlYWRlcnMKK2xpYmNhcmVzX2xhZGlyID0gJChpbmNsdWRlZGlyKQorIyB3aGF0IGhlYWRlcnMgdG8gaW5zdGFsbCBvbiAnbWFrZSBpbnN0YWxsJzoKK2xpYmNhcmVzX2xhX0hFQURFUlMgPSBhcmVzLmggYXJlc192ZXJzaW9uLmggYXJlc19kbnMuaCBcCisJYXJlc19idWlsZC5oIGFyZXNfcnVsZXMuaAorCithaG9zdF9TT1VSQ0VTID0gYWhvc3QuYyAkKFNBTVBMRVNPVVJDRVMpICQoU0FNUExFSEVBREVSUykKK2Fob3N0X0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYmNhcmVzLmxhCithaG9zdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK2Fob3N0X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykKK2FkaWdfU09VUkNFUyA9IGFkaWcuYyAkKFNBTVBMRVNPVVJDRVMpICQoU0FNUExFSEVBREVSUykKK2FkaWdfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliY2FyZXMubGEKK2FkaWdfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithZGlnX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykKK2Fjb3VudHJ5X1NPVVJDRVMgPSBhY291bnRyeS5jICQoU0FNUExFU09VUkNFUykgJChTQU1QTEVIRUFERVJTKQorYWNvdW50cnlfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliY2FyZXMubGEKK2Fjb3VudHJ5X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorYWNvdW50cnlfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQorU09VUkNFRE1BTkRJUiA9IG1hbjMKK1NPVVJDRURNQU5QQUdFUyA9IGFyZXNfaW5pdC4zCitNQU4ySFRNTCA9IHJvZmZpdCAtLW1hbmRpcj0uIDwgJDwgPiRACitTVUZGSVhFUyA9IC4zIC5odG1sCithbGw6IGFyZXNfY29uZmlnLmggYXJlc19idWlsZC5oCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC4zIC5odG1sIC5jIC5sbyAubyAub2JqIC5wZGYKK2FtLS1yZWZyZXNoOiBNYWtlZmlsZQorCUA6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbmMgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24nOyBcCisJICAgICAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBlY2hvICcgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzJzsgXAorCSAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXM7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbmMgJChhbV9fZW1wdHkpOgorCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2FyZXNfY29uZmlnLmg6IHN0YW1wLWgxCisJQHRlc3QgLWYgJEAgfHwgcm0gLWYgc3RhbXAtaDEKKwlAdGVzdCAtZiAkQCB8fCAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBzdGFtcC1oMQorCitzdGFtcC1oMTogJChzcmNkaXIpL2FyZXNfY29uZmlnLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAcm0gLWYgc3RhbXAtaDEKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGFyZXNfY29uZmlnLmgKKyQoc3JjZGlyKS9hcmVzX2NvbmZpZy5oLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKKwkoJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgJChBVVRPSEVBREVSKSkKKwlybSAtZiBzdGFtcC1oMQorCXRvdWNoICRACisKK2FyZXNfYnVpbGQuaDogc3RhbXAtaDIKKwlAdGVzdCAtZiAkQCB8fCBybSAtZiBzdGFtcC1oMgorCUB0ZXN0IC1mICRAIHx8ICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHN0YW1wLWgyCisKK3N0YW1wLWgyOiAkKHNyY2RpcikvYXJlc19idWlsZC5oLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQHJtIC1mIHN0YW1wLWgyCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBhcmVzX2J1aWxkLmgKKworZGlzdGNsZWFuLWhkcjoKKwktcm0gLWYgYXJlc19jb25maWcuaCBzdGFtcC1oMSBhcmVzX2J1aWxkLmggc3RhbXAtaDIKK2xpYmNhcmVzLnBjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvbGliY2FyZXMucGMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACisKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiIHx8IGV4aXQgMTsgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAorCX0KKwordW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisJZG9uZQorCitjbGVhbi1saWJMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgXAorCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCisJICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAorCSAgICAgIHNvcnQgLXVgOyBcCisJdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKKwkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKKwkgIHJtIC1mICQke2xvY3N9OyBcCisJfQorCitsaWJjYXJlcy5sYTogJChsaWJjYXJlc19sYV9PQkpFQ1RTKSAkKGxpYmNhcmVzX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJjYXJlc19sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGliY2FyZXNfbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYmNhcmVzX2xhX09CSkVDVFMpICQobGliY2FyZXNfbGFfTElCQUREKSAkKExJQlMpCisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKKworYWNvdW50cnkkKEVYRUVYVCk6ICQoYWNvdW50cnlfT0JKRUNUUykgJChhY291bnRyeV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYWNvdW50cnlfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYWNvdW50cnkkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGFjb3VudHJ5X0xJTkspICQoYWNvdW50cnlfT0JKRUNUUykgJChhY291bnRyeV9MREFERCkgJChMSUJTKQorCithZGlnJChFWEVFWFQpOiAkKGFkaWdfT0JKRUNUUykgJChhZGlnX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hZGlnX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGFkaWckKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGFkaWdfTElOSykgJChhZGlnX09CSkVDVFMpICQoYWRpZ19MREFERCkgJChMSUJTKQorCithaG9zdCQoRVhFRVhUKTogJChhaG9zdF9PQkpFQ1RTKSAkKGFob3N0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9haG9zdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhaG9zdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYWhvc3RfTElOSykgJChhaG9zdF9PQkpFQ1RTKSAkKGFob3N0X0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hY291bnRyeS1hY291bnRyeS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWNvdW50cnktYXJlc19nZXRvcHQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfbm93YXJuLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hY291bnRyeS1hcmVzX3N0cmNhc2VjbXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FkaWctYWRpZy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWRpZy1hcmVzX2dldG9wdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWRpZy1hcmVzX25vd2Fybi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWRpZy1hcmVzX3N0cmNhc2VjbXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Fob3N0LWFob3N0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9haG9zdC1hcmVzX2dldG9wdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWhvc3QtYXJlc19ub3dhcm4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fY2xvc2Vfc29ja2V0cy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX2dldF9ob3N0ZW50LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fcmVhZF9saW5lLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fdGltZXZhbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfY2FuY2VsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19jcmVhdGVfcXVlcnkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2RhdGEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2Rlc3Ryb3kuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2V4cGFuZF9uYW1lLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mZHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2ZyZWVfaG9zdGVudC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGVudi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5YWRkci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5bmFtZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0bmFtZWluZm8uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldHNvY2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2luaXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2xpYnJhcnlfaW5pdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbGxpc3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX21rcXVlcnkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX25vd2Fybi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfb3B0aW9ucy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYV9yZXBseS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbXhfcmVwbHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX25hcHRyX3JlcGx5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uc19yZXBseS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfcHRyX3JlcGx5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zb2FfcmVwbHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfdHh0X3JlcGx5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wbGF0Zm9ybS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcHJvY2Vzcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcXVlcnkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3NlYXJjaC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc2VuZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc3RyY2FzZWNtcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJlcnJvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfdGltZW91dC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfdmVyc2lvbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfd3JpdGV2LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2FyZXNfbGEtYml0bmNtcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS1pbmV0X250b3AuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjYXJlc19sYS13aW5kb3dzX3BvcnQuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2xpYmNhcmVzX2xhLWFyZXNfX2Nsb3NlX3NvY2tldHMubG86IGFyZXNfX2Nsb3NlX3NvY2tldHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLmxvIGB0ZXN0IC1mICdhcmVzX19jbG9zZV9zb2NrZXRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfX2Nsb3NlX3NvY2tldHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fY2xvc2Vfc29ja2V0cy5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX2Nsb3NlX3NvY2tldHMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19fY2xvc2Vfc29ja2V0cy5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfX2Nsb3NlX3NvY2tldHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX19jbG9zZV9zb2NrZXRzLmxvIGB0ZXN0IC1mICdhcmVzX19jbG9zZV9zb2NrZXRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfX2Nsb3NlX3NvY2tldHMuYworCitsaWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5sbzogYXJlc19fZ2V0X2hvc3RlbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fZ2V0X2hvc3RlbnQuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfX2dldF9ob3N0ZW50LmxvIGB0ZXN0IC1mICdhcmVzX19nZXRfaG9zdGVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX19nZXRfaG9zdGVudC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX2dldF9ob3N0ZW50LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfX2dldF9ob3N0ZW50LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19fZ2V0X2hvc3RlbnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX19nZXRfaG9zdGVudC5sbyBgdGVzdCAtZiAnYXJlc19fZ2V0X2hvc3RlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19fZ2V0X2hvc3RlbnQuYworCitsaWJjYXJlc19sYS1hcmVzX19yZWFkX2xpbmUubG86IGFyZXNfX3JlYWRfbGluZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfX3JlYWRfbGluZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fcmVhZF9saW5lLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX19yZWFkX2xpbmUubG8gYHRlc3QgLWYgJ2FyZXNfX3JlYWRfbGluZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX19yZWFkX2xpbmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fcmVhZF9saW5lLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fcmVhZF9saW5lLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfX3JlYWRfbGluZS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfX3JlYWRfbGluZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfX3JlYWRfbGluZS5sbyBgdGVzdCAtZiAnYXJlc19fcmVhZF9saW5lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfX3JlYWRfbGluZS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfX3RpbWV2YWwubG86IGFyZXNfX3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX190aW1ldmFsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX190aW1ldmFsLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX190aW1ldmFsLmxvIGB0ZXN0IC1mICdhcmVzX190aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfX3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19fdGltZXZhbC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfX3RpbWV2YWwuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19fdGltZXZhbC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfX3RpbWV2YWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX190aW1ldmFsLmxvIGB0ZXN0IC1mICdhcmVzX190aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfX3RpbWV2YWwuYworCitsaWJjYXJlc19sYS1hcmVzX2NhbmNlbC5sbzogYXJlc19jYW5jZWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2NhbmNlbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19jYW5jZWwuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfY2FuY2VsLmxvIGB0ZXN0IC1mICdhcmVzX2NhbmNlbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2NhbmNlbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2NhbmNlbC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfY2FuY2VsLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfY2FuY2VsLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19jYW5jZWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2NhbmNlbC5sbyBgdGVzdCAtZiAnYXJlc19jYW5jZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19jYW5jZWwuYworCitsaWJjYXJlc19sYS1hcmVzX2RhdGEubG86IGFyZXNfZGF0YS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZGF0YS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kYXRhLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2RhdGEubG8gYHRlc3QgLWYgJ2FyZXNfZGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2RhdGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kYXRhLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19kYXRhLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZGF0YS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZGF0YS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZGF0YS5sbyBgdGVzdCAtZiAnYXJlc19kYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZGF0YS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZGVzdHJveS5sbzogYXJlc19kZXN0cm95LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2Rlc3Ryb3kuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZGVzdHJveS5sbyBgdGVzdCAtZiAnYXJlc19kZXN0cm95LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZGVzdHJveS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2Rlc3Ryb3kuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2Rlc3Ryb3kuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19kZXN0cm95LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19kZXN0cm95LmxvIGB0ZXN0IC1mICdhcmVzX2Rlc3Ryb3kuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19kZXN0cm95LmMKKworbGliY2FyZXNfbGEtYXJlc19leHBhbmRfbmFtZS5sbzogYXJlc19leHBhbmRfbmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUubG8gYHRlc3QgLWYgJ2FyZXNfZXhwYW5kX25hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19leHBhbmRfbmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2V4cGFuZF9uYW1lLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19leHBhbmRfbmFtZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2V4cGFuZF9uYW1lLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19leHBhbmRfbmFtZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX25hbWUubG8gYHRlc3QgLWYgJ2FyZXNfZXhwYW5kX25hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19leHBhbmRfbmFtZS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX3N0cmluZy5sbzogYXJlc19leHBhbmRfc3RyaW5nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2V4cGFuZF9zdHJpbmcuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZXhwYW5kX3N0cmluZy5sbyBgdGVzdCAtZiAnYXJlc19leHBhbmRfc3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZXhwYW5kX3N0cmluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2V4cGFuZF9zdHJpbmcuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2V4cGFuZF9zdHJpbmcuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19leHBhbmRfc3RyaW5nLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19leHBhbmRfc3RyaW5nLmxvIGB0ZXN0IC1mICdhcmVzX2V4cGFuZF9zdHJpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19leHBhbmRfc3RyaW5nLmMKKworbGliY2FyZXNfbGEtYXJlc19mZHMubG86IGFyZXNfZmRzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19mZHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZmRzLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2Zkcy5sbyBgdGVzdCAtZiAnYXJlc19mZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19mZHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mZHMuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2Zkcy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2Zkcy5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZmRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19mZHMubG8gYHRlc3QgLWYgJ2FyZXNfZmRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZmRzLmMKKworbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQubG86IGFyZXNfZnJlZV9ob3N0ZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9ob3N0ZW50LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2ZyZWVfaG9zdGVudC5sbyBgdGVzdCAtZiAnYXJlc19mcmVlX2hvc3RlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19mcmVlX2hvc3RlbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2ZyZWVfaG9zdGVudC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2ZyZWVfaG9zdGVudC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9ob3N0ZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19mcmVlX2hvc3RlbnQubG8gYHRlc3QgLWYgJ2FyZXNfZnJlZV9ob3N0ZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZnJlZV9ob3N0ZW50LmMKKworbGliY2FyZXNfbGEtYXJlc19mcmVlX3N0cmluZy5sbzogYXJlc19mcmVlX3N0cmluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcubG8gYHRlc3QgLWYgJ2FyZXNfZnJlZV9zdHJpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19mcmVlX3N0cmluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2ZyZWVfc3RyaW5nLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19mcmVlX3N0cmluZy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2ZyZWVfc3RyaW5nLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19mcmVlX3N0cmluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZnJlZV9zdHJpbmcubG8gYHRlc3QgLWYgJ2FyZXNfZnJlZV9zdHJpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19mcmVlX3N0cmluZy5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZ2V0ZW52LmxvOiBhcmVzX2dldGVudi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfZ2V0ZW52LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGVudi5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRlbnYubG8gYHRlc3QgLWYgJ2FyZXNfZ2V0ZW52LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZ2V0ZW52LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0ZW52LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRlbnYuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19nZXRlbnYuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2dldGVudi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0ZW52LmxvIGB0ZXN0IC1mICdhcmVzX2dldGVudi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldGVudi5jCisKK2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5YWRkci5sbzogYXJlc19nZXRob3N0YnlhZGRyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnlhZGRyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieWFkZHIuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5YWRkci5sbyBgdGVzdCAtZiAnYXJlc19nZXRob3N0YnlhZGRyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfZ2V0aG9zdGJ5YWRkci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieWFkZHIuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldGhvc3RieWFkZHIuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19nZXRob3N0YnlhZGRyLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnlhZGRyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnlhZGRyLmxvIGB0ZXN0IC1mICdhcmVzX2dldGhvc3RieWFkZHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRob3N0YnlhZGRyLmMKKworbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnluYW1lLmxvOiBhcmVzX2dldGhvc3RieW5hbWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5bmFtZS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRob3N0YnluYW1lLmxvIGB0ZXN0IC1mICdhcmVzX2dldGhvc3RieW5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRob3N0YnluYW1lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5bmFtZS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0aG9zdGJ5bmFtZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2dldGhvc3RieW5hbWUuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2dldGhvc3RieW5hbWUubG8gYHRlc3QgLWYgJ2FyZXNfZ2V0aG9zdGJ5bmFtZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldGhvc3RieW5hbWUuYworCitsaWJjYXJlc19sYS1hcmVzX2dldG5hbWVpbmZvLmxvOiBhcmVzX2dldG5hbWVpbmZvLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19nZXRuYW1laW5mby5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19nZXRuYW1laW5mby5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRuYW1laW5mby5sbyBgdGVzdCAtZiAnYXJlc19nZXRuYW1laW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG5hbWVpbmZvLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0bmFtZWluZm8uVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2dldG5hbWVpbmZvLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0bmFtZWluZm8uYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2dldG5hbWVpbmZvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRuYW1laW5mby5sbyBgdGVzdCAtZiAnYXJlc19nZXRuYW1laW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG5hbWVpbmZvLmMKKworbGliY2FyZXNfbGEtYXJlc19nZXRzb2NrLmxvOiBhcmVzX2dldHNvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2dldHNvY2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0c29jay5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19nZXRzb2NrLmxvIGB0ZXN0IC1mICdhcmVzX2dldHNvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19nZXRzb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0c29jay5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfZ2V0c29jay5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2dldHNvY2suYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2dldHNvY2subG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2dldHNvY2subG8gYHRlc3QgLWYgJ2FyZXNfZ2V0c29jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldHNvY2suYworCitsaWJjYXJlc19sYS1hcmVzX2luaXQubG86IGFyZXNfaW5pdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfaW5pdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19pbml0LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2luaXQubG8gYHRlc3QgLWYgJ2FyZXNfaW5pdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2luaXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19pbml0LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19pbml0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfaW5pdC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfaW5pdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfaW5pdC5sbyBgdGVzdCAtZiAnYXJlc19pbml0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfaW5pdC5jCisKK2xpYmNhcmVzX2xhLWFyZXNfbGlicmFyeV9pbml0LmxvOiBhcmVzX2xpYnJhcnlfaW5pdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfbGlicmFyeV9pbml0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2xpYnJhcnlfaW5pdC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19saWJyYXJ5X2luaXQubG8gYHRlc3QgLWYgJ2FyZXNfbGlicmFyeV9pbml0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfbGlicmFyeV9pbml0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbGlicmFyeV9pbml0LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19saWJyYXJ5X2luaXQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19saWJyYXJ5X2luaXQuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2xpYnJhcnlfaW5pdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfbGlicmFyeV9pbml0LmxvIGB0ZXN0IC1mICdhcmVzX2xpYnJhcnlfaW5pdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2xpYnJhcnlfaW5pdC5jCisKK2xpYmNhcmVzX2xhLWFyZXNfbGxpc3QubG86IGFyZXNfbGxpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX2xsaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2xsaXN0LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2xsaXN0LmxvIGB0ZXN0IC1mICdhcmVzX2xsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfbGxpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19sbGlzdC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbGxpc3QuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19sbGlzdC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfbGxpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX2xsaXN0LmxvIGB0ZXN0IC1mICdhcmVzX2xsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfbGxpc3QuYworCitsaWJjYXJlc19sYS1hcmVzX21rcXVlcnkubG86IGFyZXNfbWtxdWVyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfbWtxdWVyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19ta3F1ZXJ5LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX21rcXVlcnkubG8gYHRlc3QgLWYgJ2FyZXNfbWtxdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX21rcXVlcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19ta3F1ZXJ5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19ta3F1ZXJ5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbWtxdWVyeS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfbWtxdWVyeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfbWtxdWVyeS5sbyBgdGVzdCAtZiAnYXJlc19ta3F1ZXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfbWtxdWVyeS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfY3JlYXRlX3F1ZXJ5LmxvOiBhcmVzX2NyZWF0ZV9xdWVyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfY3JlYXRlX3F1ZXJ5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX2NyZWF0ZV9xdWVyeS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19jcmVhdGVfcXVlcnkubG8gYHRlc3QgLWYgJ2FyZXNfY3JlYXRlX3F1ZXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfY3JlYXRlX3F1ZXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfY3JlYXRlX3F1ZXJ5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19jcmVhdGVfcXVlcnkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19jcmVhdGVfcXVlcnkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX2NyZWF0ZV9xdWVyeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfY3JlYXRlX3F1ZXJ5LmxvIGB0ZXN0IC1mICdhcmVzX2NyZWF0ZV9xdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2NyZWF0ZV9xdWVyeS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfbm93YXJuLmxvOiBhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfbm93YXJuLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX25vd2Fybi5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19ub3dhcm4ubG8gYHRlc3QgLWYgJ2FyZXNfbm93YXJuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfbm93YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfbm93YXJuLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19ub3dhcm4uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19ub3dhcm4uYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX25vd2Fybi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfbm93YXJuLmxvIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCisKK2xpYmNhcmVzX2xhLWFyZXNfb3B0aW9ucy5sbzogYXJlc19vcHRpb25zLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19vcHRpb25zLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX29wdGlvbnMuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfb3B0aW9ucy5sbyBgdGVzdCAtZiAnYXJlc19vcHRpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfb3B0aW9ucy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX29wdGlvbnMuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX29wdGlvbnMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19vcHRpb25zLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19vcHRpb25zLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19vcHRpb25zLmxvIGB0ZXN0IC1mICdhcmVzX29wdGlvbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19vcHRpb25zLmMKKworbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hX3JlcGx5LmxvOiBhcmVzX3BhcnNlX2FfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYV9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX2FfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9hX3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYV9yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYV9yZXBseS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3BhcnNlX2FfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfYV9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX2FfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FhYWFfcmVwbHkubG86IGFyZXNfcGFyc2VfYWFhYV9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hYWFhX3JlcGx5LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX2FhYWFfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfYWFhYV9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hYWFhX3JlcGx5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9hYWFhX3JlcGx5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGFyc2VfYWFhYV9yZXBseS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfYWFhYV9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9hYWFhX3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfYWFhYV9yZXBseS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbXhfcmVwbHkubG86IGFyZXNfcGFyc2VfbXhfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX214X3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfbXhfcmVwbHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9teF9yZXBseS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbXhfcmVwbHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wYXJzZV9teF9yZXBseS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbXhfcmVwbHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BhcnNlX214X3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX214X3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfbXhfcmVwbHkuYworCitsaWJjYXJlc19sYS1hcmVzX3BhcnNlX25hcHRyX3JlcGx5LmxvOiBhcmVzX3BhcnNlX25hcHRyX3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX25hcHRyX3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbmFwdHJfcmVwbHkuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX25hcHRyX3JlcGx5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcGFyc2VfbmFwdHJfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX25hcHRyX3JlcGx5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uYXB0cl9yZXBseS5sbyBgdGVzdCAtZiAnYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX25hcHRyX3JlcGx5LmMKKworbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uc19yZXBseS5sbzogYXJlc19wYXJzZV9uc19yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfbnNfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9uc19yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX25zX3JlcGx5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uc19yZXBseS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3BhcnNlX25zX3JlcGx5LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19wYXJzZV9uc19yZXBseS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfbnNfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfbnNfcmVwbHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19wYXJzZV9uc19yZXBseS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfcHRyX3JlcGx5LmxvOiBhcmVzX3BhcnNlX3B0cl9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfcHRyX3JlcGx5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9wdHJfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfcHRyX3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfcHRyX3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfcHRyX3JlcGx5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9wdHJfcmVwbHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wYXJzZV9wdHJfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3B0cl9yZXBseS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfcHRyX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3B0cl9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3B0cl9yZXBseS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LmxvOiBhcmVzX3BhcnNlX3NvYV9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3NvYV9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zb2FfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2Vfc29hX3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2Vfc29hX3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zb2FfcmVwbHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wYXJzZV9zb2FfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3NvYV9yZXBseS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc29hX3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3NvYV9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3NvYV9yZXBseS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc3J2X3JlcGx5LmxvOiBhcmVzX3BhcnNlX3Nydl9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc3J2X3JlcGx5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zcnZfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2Vfc3J2X3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2Vfc3J2X3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc3J2X3JlcGx5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV9zcnZfcmVwbHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wYXJzZV9zcnZfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3Nydl9yZXBseS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2Vfc3J2X3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3Nydl9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3Nydl9yZXBseS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfdHh0X3JlcGx5LmxvOiBhcmVzX3BhcnNlX3R4dF9yZXBseS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfdHh0X3JlcGx5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc19wYXJzZV90eHRfcmVwbHkubG8gYHRlc3QgLWYgJ2FyZXNfcGFyc2VfdHh0X3JlcGx5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGFyc2VfdHh0X3JlcGx5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGFyc2VfdHh0X3JlcGx5LlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wYXJzZV90eHRfcmVwbHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wYXJzZV90eHRfcmVwbHkuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3BhcnNlX3R4dF9yZXBseS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcGFyc2VfdHh0X3JlcGx5LmxvIGB0ZXN0IC1mICdhcmVzX3BhcnNlX3R4dF9yZXBseS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3BhcnNlX3R4dF9yZXBseS5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcGxhdGZvcm0ubG86IGFyZXNfcGxhdGZvcm0uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3BsYXRmb3JtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3BsYXRmb3JtLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BsYXRmb3JtLmxvIGB0ZXN0IC1mICdhcmVzX3BsYXRmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGxhdGZvcm0uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wbGF0Zm9ybS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcGxhdGZvcm0uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19wbGF0Zm9ybS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfcGxhdGZvcm0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3BsYXRmb3JtLmxvIGB0ZXN0IC1mICdhcmVzX3BsYXRmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcGxhdGZvcm0uYworCitsaWJjYXJlc19sYS1hcmVzX3Byb2Nlc3MubG86IGFyZXNfcHJvY2Vzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfcHJvY2Vzcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wcm9jZXNzLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3Byb2Nlc3MubG8gYHRlc3QgLWYgJ2FyZXNfcHJvY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3Byb2Nlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wcm9jZXNzLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19wcm9jZXNzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfcHJvY2Vzcy5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfcHJvY2Vzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfcHJvY2Vzcy5sbyBgdGVzdCAtZiAnYXJlc19wcm9jZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcHJvY2Vzcy5jCisKK2xpYmNhcmVzX2xhLWFyZXNfcXVlcnkubG86IGFyZXNfcXVlcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3F1ZXJ5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3F1ZXJ5LlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3F1ZXJ5LmxvIGB0ZXN0IC1mICdhcmVzX3F1ZXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcXVlcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19xdWVyeS5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfcXVlcnkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19xdWVyeS5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfcXVlcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3F1ZXJ5LmxvIGB0ZXN0IC1mICdhcmVzX3F1ZXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfcXVlcnkuYworCitsaWJjYXJlc19sYS1hcmVzX3NlYXJjaC5sbzogYXJlc19zZWFyY2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3NlYXJjaC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zZWFyY2guVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfc2VhcmNoLmxvIGB0ZXN0IC1mICdhcmVzX3NlYXJjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3NlYXJjaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3NlYXJjaC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc2VhcmNoLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc2VhcmNoLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19zZWFyY2gubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3NlYXJjaC5sbyBgdGVzdCAtZiAnYXJlc19zZWFyY2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zZWFyY2guYworCitsaWJjYXJlc19sYS1hcmVzX3NlbmQubG86IGFyZXNfc2VuZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfc2VuZC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zZW5kLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3NlbmQubG8gYHRlc3QgLWYgJ2FyZXNfc2VuZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3NlbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zZW5kLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zZW5kLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc2VuZC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfc2VuZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfc2VuZC5sbyBgdGVzdCAtZiAnYXJlc19zZW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc2VuZC5jCisKK2xpYmNhcmVzX2xhLWFyZXNfc3RyY2FzZWNtcC5sbzogYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19zdHJjYXNlY21wLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmNhc2VjbXAuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfc3RyY2FzZWNtcC5sbyBgdGVzdCAtZiAnYXJlc19zdHJjYXNlY21wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyY2FzZWNtcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmNhc2VjbXAuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmNhc2VjbXAuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19zdHJjYXNlY21wLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19zdHJjYXNlY21wLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19zdHJjYXNlY21wLmxvIGB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJjYXNlY21wLmMKKworbGliY2FyZXNfbGEtYXJlc19zdHJkdXAubG86IGFyZXNfc3RyZHVwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc19zdHJkdXAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLlRwbyAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3N0cmR1cC5sbyBgdGVzdCAtZiAnYXJlc19zdHJkdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJkdXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJkdXAuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmR1cC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3N0cmR1cC5jJyBvYmplY3Q9J2xpYmNhcmVzX2xhLWFyZXNfc3RyZHVwLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc19zdHJkdXAubG8gYHRlc3QgLWYgJ2FyZXNfc3RyZHVwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfc3RyZHVwLmMKKworbGliY2FyZXNfbGEtYXJlc19zdHJlcnJvci5sbzogYXJlc19zdHJlcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IubG8gYHRlc3QgLWYgJ2FyZXNfc3RyZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJlcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3N0cmVycm9yLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc19zdHJlcnJvci5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3N0cmVycm9yLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc19zdHJlcnJvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfc3RyZXJyb3IubG8gYHRlc3QgLWYgJ2FyZXNfc3RyZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJlcnJvci5jCisKK2xpYmNhcmVzX2xhLWFyZXNfdGltZW91dC5sbzogYXJlc190aW1lb3V0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYXJlc190aW1lb3V0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3RpbWVvdXQuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfdGltZW91dC5sbyBgdGVzdCAtZiAnYXJlc190aW1lb3V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyZXNfdGltZW91dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3RpbWVvdXQuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3RpbWVvdXQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc190aW1lb3V0LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc190aW1lb3V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYXJlc190aW1lb3V0LmxvIGB0ZXN0IC1mICdhcmVzX3RpbWVvdXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc190aW1lb3V0LmMKKworbGliY2FyZXNfbGEtYXJlc192ZXJzaW9uLmxvOiBhcmVzX3ZlcnNpb24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3ZlcnNpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfdmVyc2lvbi5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYXJlc192ZXJzaW9uLmxvIGB0ZXN0IC1mICdhcmVzX3ZlcnNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc192ZXJzaW9uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfdmVyc2lvbi5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfdmVyc2lvbi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3ZlcnNpb24uYycgb2JqZWN0PSdsaWJjYXJlc19sYS1hcmVzX3ZlcnNpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3ZlcnNpb24ubG8gYHRlc3QgLWYgJ2FyZXNfdmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3ZlcnNpb24uYworCitsaWJjYXJlc19sYS1hcmVzX3dyaXRldi5sbzogYXJlc193cml0ZXYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS1hcmVzX3dyaXRldi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYXJlc193cml0ZXYuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWFyZXNfd3JpdGV2LmxvIGB0ZXN0IC1mICdhcmVzX3dyaXRldi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3dyaXRldi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1hcmVzX3dyaXRldi5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLWFyZXNfd3JpdGV2LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfd3JpdGV2LmMnIG9iamVjdD0nbGliY2FyZXNfbGEtYXJlc193cml0ZXYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS1hcmVzX3dyaXRldi5sbyBgdGVzdCAtZiAnYXJlc193cml0ZXYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc193cml0ZXYuYworCitsaWJjYXJlc19sYS1iaXRuY21wLmxvOiBiaXRuY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtYml0bmNtcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2FyZXNfbGEtYml0bmNtcC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtYml0bmNtcC5sbyBgdGVzdCAtZiAnYml0bmNtcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BiaXRuY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLWJpdG5jbXAuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1iaXRuY21wLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2JpdG5jbXAuYycgb2JqZWN0PSdsaWJjYXJlc19sYS1iaXRuY21wLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtYml0bmNtcC5sbyBgdGVzdCAtZiAnYml0bmNtcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BiaXRuY21wLmMKKworbGliY2FyZXNfbGEtaW5ldF9uZXRfcHRvbi5sbzogaW5ldF9uZXRfcHRvbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24uVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24ubG8gYHRlc3QgLWYgJ2luZXRfbmV0X3B0b24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5ldF9uZXRfcHRvbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1pbmV0X25ldF9wdG9uLlRwbyAkKERFUERJUikvbGliY2FyZXNfbGEtaW5ldF9uZXRfcHRvbi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpbmV0X25ldF9wdG9uLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtaW5ldF9uZXRfcHRvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNhcmVzX2xhLWluZXRfbmV0X3B0b24ubG8gYHRlc3QgLWYgJ2luZXRfbmV0X3B0b24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5ldF9uZXRfcHRvbi5jCisKK2xpYmNhcmVzX2xhLWluZXRfbnRvcC5sbzogaW5ldF9udG9wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2FyZXNfbGEtaW5ldF9udG9wLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjYXJlc19sYS1pbmV0X250b3AuVHBvIC1jIC1vIGxpYmNhcmVzX2xhLWluZXRfbnRvcC5sbyBgdGVzdCAtZiAnaW5ldF9udG9wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGluZXRfbnRvcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjYXJlc19sYS1pbmV0X250b3AuVHBvICQoREVQRElSKS9saWJjYXJlc19sYS1pbmV0X250b3AuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naW5ldF9udG9wLmMnIG9iamVjdD0nbGliY2FyZXNfbGEtaW5ldF9udG9wLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY2FyZXNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2FyZXNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2FyZXNfbGEtaW5ldF9udG9wLmxvIGB0ZXN0IC1mICdpbmV0X250b3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5ldF9udG9wLmMKKworbGliY2FyZXNfbGEtd2luZG93c19wb3J0LmxvOiB3aW5kb3dzX3BvcnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmNhcmVzX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNhcmVzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjYXJlc19sYS13aW5kb3dzX3BvcnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNhcmVzX2xhLXdpbmRvd3NfcG9ydC5UcG8gLWMgLW8gbGliY2FyZXNfbGEtd2luZG93c19wb3J0LmxvIGB0ZXN0IC1mICd3aW5kb3dzX3BvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2luZG93c19wb3J0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNhcmVzX2xhLXdpbmRvd3NfcG9ydC5UcG8gJChERVBESVIpL2xpYmNhcmVzX2xhLXdpbmRvd3NfcG9ydC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd3aW5kb3dzX3BvcnQuYycgb2JqZWN0PSdsaWJjYXJlc19sYS13aW5kb3dzX3BvcnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjYXJlc19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjYXJlc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjYXJlc19sYS13aW5kb3dzX3BvcnQubG8gYHRlc3QgLWYgJ3dpbmRvd3NfcG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3aW5kb3dzX3BvcnQuYworCithY291bnRyeS1hY291bnRyeS5vOiBhY291bnRyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFjb3VudHJ5LWFjb3VudHJ5Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFjb3VudHJ5LlRwbyAtYyAtbyBhY291bnRyeS1hY291bnRyeS5vIGB0ZXN0IC1mICdhY291bnRyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhY291bnRyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hY291bnRyeS1hY291bnRyeS5UcG8gJChERVBESVIpL2Fjb3VudHJ5LWFjb3VudHJ5LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWNvdW50cnkuYycgb2JqZWN0PSdhY291bnRyeS1hY291bnRyeS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hY291bnRyeS5vIGB0ZXN0IC1mICdhY291bnRyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhY291bnRyeS5jCisKK2Fjb3VudHJ5LWFjb3VudHJ5Lm9iajogYWNvdW50cnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhY291bnRyeS1hY291bnRyeS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFjb3VudHJ5LlRwbyAtYyAtbyBhY291bnRyeS1hY291bnRyeS5vYmogYGlmIHRlc3QgLWYgJ2Fjb3VudHJ5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWNvdW50cnkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWNvdW50cnkuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWNvdW50cnktYWNvdW50cnkuVHBvICQoREVQRElSKS9hY291bnRyeS1hY291bnRyeS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Fjb3VudHJ5LmMnIG9iamVjdD0nYWNvdW50cnktYWNvdW50cnkub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hY291bnRyeS5vYmogYGlmIHRlc3QgLWYgJ2Fjb3VudHJ5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWNvdW50cnkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWNvdW50cnkuYyc7IGZpYAorCithY291bnRyeS1hcmVzX2dldG9wdC5vOiBhcmVzX2dldG9wdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFjb3VudHJ5LWFyZXNfZ2V0b3B0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfZ2V0b3B0LlRwbyAtYyAtbyBhY291bnRyeS1hcmVzX2dldG9wdC5vIGB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG9wdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hY291bnRyeS1hcmVzX2dldG9wdC5UcG8gJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfZ2V0b3B0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19nZXRvcHQuYycgb2JqZWN0PSdhY291bnRyeS1hcmVzX2dldG9wdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hcmVzX2dldG9wdC5vIGB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG9wdC5jCisKK2Fjb3VudHJ5LWFyZXNfZ2V0b3B0Lm9iajogYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhY291bnRyeS1hcmVzX2dldG9wdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfZ2V0b3B0LlRwbyAtYyAtbyBhY291bnRyeS1hcmVzX2dldG9wdC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfZ2V0b3B0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19nZXRvcHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19nZXRvcHQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWNvdW50cnktYXJlc19nZXRvcHQuVHBvICQoREVQRElSKS9hY291bnRyeS1hcmVzX2dldG9wdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0b3B0LmMnIG9iamVjdD0nYWNvdW50cnktYXJlc19nZXRvcHQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hcmVzX2dldG9wdC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfZ2V0b3B0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19nZXRvcHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19nZXRvcHQuYyc7IGZpYAorCithY291bnRyeS1hcmVzX25vd2Fybi5vOiBhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWNvdW50cnlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWNvdW50cnlfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFjb3VudHJ5LWFyZXNfbm93YXJuLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfbm93YXJuLlRwbyAtYyAtbyBhY291bnRyeS1hcmVzX25vd2Fybi5vIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hY291bnRyeS1hcmVzX25vd2Fybi5UcG8gJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfbm93YXJuLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19ub3dhcm4uYycgb2JqZWN0PSdhY291bnRyeS1hcmVzX25vd2Fybi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hcmVzX25vd2Fybi5vIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCisKK2Fjb3VudHJ5LWFyZXNfbm93YXJuLm9iajogYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhY291bnRyeS1hcmVzX25vd2Fybi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfbm93YXJuLlRwbyAtYyAtbyBhY291bnRyeS1hcmVzX25vd2Fybi5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfbm93YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19ub3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19ub3dhcm4uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWNvdW50cnktYXJlc19ub3dhcm4uVHBvICQoREVQRElSKS9hY291bnRyeS1hcmVzX25vd2Fybi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbm93YXJuLmMnIG9iamVjdD0nYWNvdW50cnktYXJlc19ub3dhcm4ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhY291bnRyeS1hcmVzX25vd2Fybi5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfbm93YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19ub3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19ub3dhcm4uYyc7IGZpYAorCithY291bnRyeS1hcmVzX3N0cmNhc2VjbXAubzogYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWNvdW50cnktYXJlc19zdHJjYXNlY21wLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5UcG8gLWMgLW8gYWNvdW50cnktYXJlc19zdHJjYXNlY21wLm8gYHRlc3QgLWYgJ2FyZXNfc3RyY2FzZWNtcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3N0cmNhc2VjbXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWNvdW50cnktYXJlc19zdHJjYXNlY21wLlRwbyAkKERFUERJUikvYWNvdW50cnktYXJlc19zdHJjYXNlY21wLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19zdHJjYXNlY21wLmMnIG9iamVjdD0nYWNvdW50cnktYXJlc19zdHJjYXNlY21wLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vIGB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJjYXNlY21wLmMKKworYWNvdW50cnktYXJlc19zdHJjYXNlY21wLm9iajogYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhY291bnRyeV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhY291bnRyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWNvdW50cnktYXJlc19zdHJjYXNlY21wLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWNvdW50cnktYXJlc19zdHJjYXNlY21wLlRwbyAtYyAtbyBhY291bnRyeS1hcmVzX3N0cmNhc2VjbXAub2JqIGBpZiB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhcmVzX3N0cmNhc2VjbXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19zdHJjYXNlY21wLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5UcG8gJChERVBESVIpL2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc3RyY2FzZWNtcC5jJyBvYmplY3Q9J2Fjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFjb3VudHJ5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFjb3VudHJ5X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFjb3VudHJ5LWFyZXNfc3RyY2FzZWNtcC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfc3RyY2FzZWNtcC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfc3RyY2FzZWNtcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hcmVzX3N0cmNhc2VjbXAuYyc7IGZpYAorCithZGlnLWFkaWcubzogYWRpZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGlnLWFkaWcubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRpZy1hZGlnLlRwbyAtYyAtbyBhZGlnLWFkaWcubyBgdGVzdCAtZiAnYWRpZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGlnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkaWctYWRpZy5UcG8gJChERVBESVIpL2FkaWctYWRpZy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FkaWcuYycgb2JqZWN0PSdhZGlnLWFkaWcubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkaWctYWRpZy5vIGB0ZXN0IC1mICdhZGlnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkaWcuYworCithZGlnLWFkaWcub2JqOiBhZGlnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFkaWctYWRpZy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FkaWctYWRpZy5UcG8gLWMgLW8gYWRpZy1hZGlnLm9iaiBgaWYgdGVzdCAtZiAnYWRpZy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FkaWcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWRpZy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGlnLWFkaWcuVHBvICQoREVQRElSKS9hZGlnLWFkaWcuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhZGlnLmMnIG9iamVjdD0nYWRpZy1hZGlnLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkaWctYWRpZy5vYmogYGlmIHRlc3QgLWYgJ2FkaWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGlnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkaWcuYyc7IGZpYAorCithZGlnLWFyZXNfZ2V0b3B0Lm86IGFyZXNfZ2V0b3B0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFkaWctYXJlc19nZXRvcHQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRpZy1hcmVzX2dldG9wdC5UcG8gLWMgLW8gYWRpZy1hcmVzX2dldG9wdC5vIGB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG9wdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGlnLWFyZXNfZ2V0b3B0LlRwbyAkKERFUERJUikvYWRpZy1hcmVzX2dldG9wdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0b3B0LmMnIG9iamVjdD0nYWRpZy1hcmVzX2dldG9wdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRpZy1hcmVzX2dldG9wdC5vIGB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG9wdC5jCisKK2FkaWctYXJlc19nZXRvcHQub2JqOiBhcmVzX2dldG9wdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGlnLWFyZXNfZ2V0b3B0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRpZy1hcmVzX2dldG9wdC5UcG8gLWMgLW8gYWRpZy1hcmVzX2dldG9wdC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfZ2V0b3B0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19nZXRvcHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19nZXRvcHQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRpZy1hcmVzX2dldG9wdC5UcG8gJChERVBESVIpL2FkaWctYXJlc19nZXRvcHQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX2dldG9wdC5jJyBvYmplY3Q9J2FkaWctYXJlc19nZXRvcHQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRpZy1hcmVzX2dldG9wdC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfZ2V0b3B0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19nZXRvcHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19nZXRvcHQuYyc7IGZpYAorCithZGlnLWFyZXNfbm93YXJuLm86IGFyZXNfbm93YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFkaWctYXJlc19ub3dhcm4ubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRpZy1hcmVzX25vd2Fybi5UcG8gLWMgLW8gYWRpZy1hcmVzX25vd2Fybi5vIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGlnLWFyZXNfbm93YXJuLlRwbyAkKERFUERJUikvYWRpZy1hcmVzX25vd2Fybi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbm93YXJuLmMnIG9iamVjdD0nYWRpZy1hcmVzX25vd2Fybi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRpZy1hcmVzX25vd2Fybi5vIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCisKK2FkaWctYXJlc19ub3dhcm4ub2JqOiBhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWRpZ19DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGlnX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGlnLWFyZXNfbm93YXJuLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRpZy1hcmVzX25vd2Fybi5UcG8gLWMgLW8gYWRpZy1hcmVzX25vd2Fybi5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfbm93YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19ub3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19ub3dhcm4uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRpZy1hcmVzX25vd2Fybi5UcG8gJChERVBESVIpL2FkaWctYXJlc19ub3dhcm4uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX25vd2Fybi5jJyBvYmplY3Q9J2FkaWctYXJlc19ub3dhcm4ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhZGlnX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkaWdfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRpZy1hcmVzX25vd2Fybi5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfbm93YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19ub3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19ub3dhcm4uYyc7IGZpYAorCithZGlnLWFyZXNfc3RyY2FzZWNtcC5vOiBhcmVzX3N0cmNhc2VjbXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRpZy1hcmVzX3N0cmNhc2VjbXAubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRpZy1hcmVzX3N0cmNhc2VjbXAuVHBvIC1jIC1vIGFkaWctYXJlc19zdHJjYXNlY21wLm8gYHRlc3QgLWYgJ2FyZXNfc3RyY2FzZWNtcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3N0cmNhc2VjbXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRpZy1hcmVzX3N0cmNhc2VjbXAuVHBvICQoREVQRElSKS9hZGlnLWFyZXNfc3RyY2FzZWNtcC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc3RyY2FzZWNtcC5jJyBvYmplY3Q9J2FkaWctYXJlc19zdHJjYXNlY21wLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGlnLWFyZXNfc3RyY2FzZWNtcC5vIGB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJjYXNlY21wLmMKKworYWRpZy1hcmVzX3N0cmNhc2VjbXAub2JqOiBhcmVzX3N0cmNhc2VjbXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRpZy1hcmVzX3N0cmNhc2VjbXAub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hZGlnLWFyZXNfc3RyY2FzZWNtcC5UcG8gLWMgLW8gYWRpZy1hcmVzX3N0cmNhc2VjbXAub2JqIGBpZiB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhcmVzX3N0cmNhc2VjbXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19zdHJjYXNlY21wLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkaWctYXJlc19zdHJjYXNlY21wLlRwbyAkKERFUERJUikvYWRpZy1hcmVzX3N0cmNhc2VjbXAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhcmVzX3N0cmNhc2VjbXAuYycgb2JqZWN0PSdhZGlnLWFyZXNfc3RyY2FzZWNtcC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFkaWdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRpZ19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGlnLWFyZXNfc3RyY2FzZWNtcC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfc3RyY2FzZWNtcC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfc3RyY2FzZWNtcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hcmVzX3N0cmNhc2VjbXAuYyc7IGZpYAorCithaG9zdC1haG9zdC5vOiBhaG9zdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFob3N0LWFob3N0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFob3N0LlRwbyAtYyAtbyBhaG9zdC1haG9zdC5vIGB0ZXN0IC1mICdhaG9zdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhaG9zdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9haG9zdC1haG9zdC5UcG8gJChERVBESVIpL2Fob3N0LWFob3N0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWhvc3QuYycgb2JqZWN0PSdhaG9zdC1haG9zdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1haG9zdC5vIGB0ZXN0IC1mICdhaG9zdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhaG9zdC5jCisKK2Fob3N0LWFob3N0Lm9iajogYWhvc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhaG9zdC1haG9zdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFob3N0LlRwbyAtYyAtbyBhaG9zdC1haG9zdC5vYmogYGlmIHRlc3QgLWYgJ2Fob3N0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWhvc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWhvc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWhvc3QtYWhvc3QuVHBvICQoREVQRElSKS9haG9zdC1haG9zdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Fob3N0LmMnIG9iamVjdD0nYWhvc3QtYWhvc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1haG9zdC5vYmogYGlmIHRlc3QgLWYgJ2Fob3N0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWhvc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWhvc3QuYyc7IGZpYAorCithaG9zdC1hcmVzX2dldG9wdC5vOiBhcmVzX2dldG9wdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFob3N0LWFyZXNfZ2V0b3B0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFyZXNfZ2V0b3B0LlRwbyAtYyAtbyBhaG9zdC1hcmVzX2dldG9wdC5vIGB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG9wdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9haG9zdC1hcmVzX2dldG9wdC5UcG8gJChERVBESVIpL2Fob3N0LWFyZXNfZ2V0b3B0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19nZXRvcHQuYycgb2JqZWN0PSdhaG9zdC1hcmVzX2dldG9wdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1hcmVzX2dldG9wdC5vIGB0ZXN0IC1mICdhcmVzX2dldG9wdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX2dldG9wdC5jCisKK2Fob3N0LWFyZXNfZ2V0b3B0Lm9iajogYXJlc19nZXRvcHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhaG9zdC1hcmVzX2dldG9wdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFyZXNfZ2V0b3B0LlRwbyAtYyAtbyBhaG9zdC1hcmVzX2dldG9wdC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfZ2V0b3B0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19nZXRvcHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19nZXRvcHQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWhvc3QtYXJlc19nZXRvcHQuVHBvICQoREVQRElSKS9haG9zdC1hcmVzX2dldG9wdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfZ2V0b3B0LmMnIG9iamVjdD0nYWhvc3QtYXJlc19nZXRvcHQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1hcmVzX2dldG9wdC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfZ2V0b3B0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19nZXRvcHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19nZXRvcHQuYyc7IGZpYAorCithaG9zdC1hcmVzX25vd2Fybi5vOiBhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoYWhvc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWhvc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFob3N0LWFyZXNfbm93YXJuLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFyZXNfbm93YXJuLlRwbyAtYyAtbyBhaG9zdC1hcmVzX25vd2Fybi5vIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9haG9zdC1hcmVzX25vd2Fybi5UcG8gJChERVBESVIpL2Fob3N0LWFyZXNfbm93YXJuLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19ub3dhcm4uYycgb2JqZWN0PSdhaG9zdC1hcmVzX25vd2Fybi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1hcmVzX25vd2Fybi5vIGB0ZXN0IC1mICdhcmVzX25vd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX25vd2Fybi5jCisKK2Fob3N0LWFyZXNfbm93YXJuLm9iajogYXJlc19ub3dhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhaG9zdC1hcmVzX25vd2Fybi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFyZXNfbm93YXJuLlRwbyAtYyAtbyBhaG9zdC1hcmVzX25vd2Fybi5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfbm93YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19ub3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19ub3dhcm4uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWhvc3QtYXJlc19ub3dhcm4uVHBvICQoREVQRElSKS9haG9zdC1hcmVzX25vd2Fybi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfbm93YXJuLmMnIG9iamVjdD0nYWhvc3QtYXJlc19ub3dhcm4ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhaG9zdC1hcmVzX25vd2Fybi5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfbm93YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXJlc19ub3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19ub3dhcm4uYyc7IGZpYAorCithaG9zdC1hcmVzX3N0cmNhc2VjbXAubzogYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWhvc3QtYXJlc19zdHJjYXNlY21wLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5UcG8gLWMgLW8gYWhvc3QtYXJlc19zdHJjYXNlY21wLm8gYHRlc3QgLWYgJ2FyZXNfc3RyY2FzZWNtcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmVzX3N0cmNhc2VjbXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWhvc3QtYXJlc19zdHJjYXNlY21wLlRwbyAkKERFUERJUikvYWhvc3QtYXJlc19zdHJjYXNlY21wLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXJlc19zdHJjYXNlY21wLmMnIG9iamVjdD0nYWhvc3QtYXJlc19zdHJjYXNlY21wLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFob3N0LWFyZXNfc3RyY2FzZWNtcC5vIGB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJlc19zdHJjYXNlY21wLmMKKworYWhvc3QtYXJlc19zdHJjYXNlY21wLm9iajogYXJlc19zdHJjYXNlY21wLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChhaG9zdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhaG9zdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWhvc3QtYXJlc19zdHJjYXNlY21wLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWhvc3QtYXJlc19zdHJjYXNlY21wLlRwbyAtYyAtbyBhaG9zdC1hcmVzX3N0cmNhc2VjbXAub2JqIGBpZiB0ZXN0IC1mICdhcmVzX3N0cmNhc2VjbXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhcmVzX3N0cmNhc2VjbXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXJlc19zdHJjYXNlY21wLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5UcG8gJChERVBESVIpL2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FyZXNfc3RyY2FzZWNtcC5jJyBvYmplY3Q9J2Fob3N0LWFyZXNfc3RyY2FzZWNtcC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGFob3N0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFob3N0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFob3N0LWFyZXNfc3RyY2FzZWNtcC5vYmogYGlmIHRlc3QgLWYgJ2FyZXNfc3RyY2FzZWNtcC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FyZXNfc3RyY2FzZWNtcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hcmVzX3N0cmNhc2VjbXAuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKK2luc3RhbGwtbWFuMzogJChtYW5fTUFOUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdDE9Jyc7IFwKKwlsaXN0Mj0nJChtYW5fTUFOUyknOyBcCisJdGVzdCAtbiAiJChtYW4zZGlyKSIgXAorCSAgJiYgdGVzdCAtbiAiYGVjaG8gJCRsaXN0MSQkbGlzdDJgIiBcCisJICB8fCBleGl0IDA7IFwKKwllY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobWFuM2RpciknIjsgXAorCSQoTUtESVJfUCkgIiQoREVTVERJUikkKG1hbjNkaXIpIiB8fCBleGl0IDE7IFwKKwl7IGZvciBpIGluICQkbGlzdDE7IGRvIGVjaG8gIiQkaSI7IGRvbmU7ICBcCisJaWYgdGVzdCAtbiAiJCRsaXN0MiI7IHRoZW4gXAorCSAgZm9yIGkgaW4gJCRsaXN0MjsgZG8gZWNobyAiJCRpIjsgZG9uZSBcCisJICAgIHwgc2VkIC1uICcvXC4zW2Etel0qJCQvcCc7IFwKKwlmaTsgXAorCX0gfCB3aGlsZSByZWFkIHA7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAorCWRvbmUgfCBcCisJc2VkIC1lICduO3MsLiovLCw7cDtoO3MsLipcLiwsO3MsXlteM11bMC05YS16XSokJCwzLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnIHwgXAorCXNlZCAnTjtOO3MsXG4sICxnJyB8IHsgXAorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4zZGlyKS8kJGluc3QnIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjNkaXIpLyQkaW5zdCIgfHwgZXhpdCAkJD87IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobWFuM2RpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuM2RpcikiIHx8IGV4aXQgJCQ/OyB9OyBcCisJZG9uZTsgfQorCit1bmluc3RhbGwtbWFuMzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjNkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1geyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKKwlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4zW2Etel0qJCQvcCc7IFwKKwl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14zXVswLTlhLXpdKiQkLDMsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJZGlyPSckKERFU1RESVIpJChtYW4zZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtcGtnY29uZmlnREFUQTogJChwa2djb25maWdfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2NvbmZpZ2RpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGtnY29uZmlnZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIiB8fCBleGl0IDE7IFwKKwlmaTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtcGtnY29uZmlnREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IHRlc3QgLW4gIiQocGtnY29uZmlnZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQocGtnY29uZmlnZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtbGliY2FyZXNfbGFIRUFERVJTOiAkKGxpYmNhcmVzX2xhX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQobGliY2FyZXNfbGFfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmNhcmVzX2xhZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChsaWJjYXJlc19sYWRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliY2FyZXNfbGFkaXIpIiB8fCBleGl0IDE7IFwKKwlmaTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQobGliY2FyZXNfbGFkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGxpYmNhcmVzX2xhZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1saWJjYXJlc19sYUhFQURFUlM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJjYXJlc19sYV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliY2FyZXNfbGFkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChsaWJjYXJlc19sYWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCiskKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6CisJQGZhaWw9OyBcCisJaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKKwkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAorCWVsc2UgXAorCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZpOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IHRhZ3MtcmVjdXJzaXZlCitUQUdTOiB0YWdzCisKK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogY3RhZ3MtcmVjdXJzaXZlCisKK0NUQUdTOiBjdGFncworY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorY3Njb3BlOiBjc2NvcGUuZmlsZXMKKwl0ZXN0ICEgLXMgY3Njb3BlLmZpbGVzIFwKKwkgIHx8ICQoQ1NDT1BFKSAtYiAtcSAkKEFNX0NTQ09QRUZMQUdTKSAkKENTQ09QRUZMQUdTKSAtaSBjc2NvcGUuZmlsZXMgJChDU0NPUEVfQVJHUykKK2NsZWFuLWNzY29wZToKKwktcm0gLWYgY3Njb3BlLmZpbGVzCitjc2NvcGUuZmlsZXM6IGNsZWFuLWNzY29wZSBjc2NvcGVsaXN0Citjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQorCitjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisJbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKwljYXNlICIkKHNyY2RpcikiIGluIFwKKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKwkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCisJZXNhYzsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCisJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisJICBlbHNlIFwKKwkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisJLXJtIC1mIGNzY29wZS5vdXQgY3Njb3BlLmluLm91dCBjc2NvcGUucG8ub3V0IGNzY29wZS5maWxlcworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwl0ZXN0IC1kICIkKGRpc3RkaXIpIiB8fCBta2RpciAiJChkaXN0ZGlyKSIKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCisJICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAorCSAgZGlzdC1ob29rCisJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCisJfHwgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NTUgXAorCQktZXhlYyBjaG1vZCB1K3J3eCxnbytyeCB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDAwIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCitkaXN0LWd6aXA6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtYnppcDI6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgQlpJUDI9JCR7QlpJUDItLTl9IGJ6aXAyIC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWx6aXA6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHppcCAtYyAkJHtMWklQX09QVC0tOX0gPiQoZGlzdGRpcikudGFyLmx6CisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKworZGlzdC14ejogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBYWl9PUFQ9JCR7WFpfT1BULS1lfSB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXRhclo6IGRpc3RkaXIKKwlAZWNobyBXQVJOSU5HOiAiU3VwcG9ydCBmb3IgZGlzdHJpYnV0aW9uIGFyY2hpdmVzIGNvbXByZXNzZWQgd2l0aCIgXAorCQkgICAgICAgImxlZ2FjeSBwcm9ncmFtICdjb21wcmVzcycgaXMgZGVwcmVjYXRlZC4iID4mMgorCUBlY2hvIFdBUk5JTkc6ICJJdCB3aWxsIGJlIHJlbW92ZWQgYWx0b2dldGhlciBpbiBBdXRvbWFrZSAyLjAiID4mMgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBjb21wcmVzcyAtYyA+JChkaXN0ZGlyKS50YXIuWgorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3Qtc2hhcjogZGlzdGRpcgorCUBlY2hvIFdBUk5JTkc6ICJTdXBwb3J0IGZvciBzaGFyIGRpc3RyaWJ1dGlvbiBhcmNoaXZlcyBpcyIgXAorCSAgICAgICAgICAgICAgICJkZXByZWNhdGVkLiIgPiYyCisJQGVjaG8gV0FSTklORzogIkl0IHdpbGwgYmUgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIEF1dG9tYWtlIDIuMCIgPiYyCisJc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXppcDogZGlzdGRpcgorCS1ybSAtZiAkKGRpc3RkaXIpLnppcAorCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QgZGlzdC1hbGw6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChESVNUX1RBUkdFVFMpIGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyPSdAOicKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCisjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisjIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCisjIHRhcmZpbGUuCitkaXN0Y2hlY2s6IGRpc3QKKwljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCisJKi50YXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmJ6MiopIFwKKwkgIGJ6aXAyIC1kYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIubHoqKSBcCisJICBsemlwIC1kYyAkKGRpc3RkaXIpLnRhci5seiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5aKikgXAorCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAorCSouc2hhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAorCSouemlwKikgXAorCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCisJZXNhYworCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpCisJY2htb2QgdSt3ICQoZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpL19idWlsZCAkKGRpc3RkaXIpL19idWlsZC9zdWIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKwkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAorCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQvc3ViIFwKKwkgICYmIC4uLy4uL2NvbmZpZ3VyZSBcCisJICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICAgLS1zcmNkaXI9Li4vLi4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAorCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgJiYgKHsgXAorCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCisJICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKKwkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKKwkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKKwkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrIFwKKwkgICYmIGNkICIkJGFtX19jd2QiIFwKKwkgIHx8IGV4aXQgMQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisJQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKKwkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKwkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKKwkgIGVjaG8gJ0VSUk9SOiB0cnlpbmcgdG8gcnVuICRAIHdpdGggYW4gZW1wdHknIFwKKwkgICAgICAgJyQkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKKwkgIGV4aXQgMTsgXAorCX07IFwKKwkkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAorCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorCSAgZXhpdCAxOyBcCisJfTsgXAorCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoUFJPR1JBTVMpICQoTUFOUykgJChEQVRBKSAkKEhFQURFUlMpIFwKKwkJYXJlc19jb25maWcuaCBhcmVzX2J1aWxkLmgKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChtYW4zZGlyKSIgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiICIkKERFU1RESVIpJChsaWJjYXJlc19sYWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKwktdGVzdCAteiAiJChESVNUQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoRElTVENMRUFORklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIFwKKwljbGVhbi1ub2luc3RQUk9HUkFNUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1saWJjYXJlc19sYUhFQURFUlMgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGtnY29uZmlnREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46IGluc3RhbGwtbWFuMworCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1saWJMVExJQlJBUklFUyB1bmluc3RhbGwtbGliY2FyZXNfbGFIRUFERVJTIFwKKwl1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1wa2djb25maWdEQVRBCisKK3VuaW5zdGFsbC1tYW46IHVuaW5zdGFsbC1tYW4zCisKKy5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgYWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gXAorCWFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWNzY29wZSBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIFwKKwljbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGUgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0IFwKKwlkaXN0LWFsbCBkaXN0LWJ6aXAyIGRpc3QtZ3ppcCBkaXN0LWhvb2sgZGlzdC1semlwIGRpc3Qtc2hhciBcCisJZGlzdC10YXJaIGRpc3QteHogZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGNsZWFuY2hlY2sgZGlzdGRpciBcCisJZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1saWJMVExJQlJBUklFUyBpbnN0YWxsLWxpYmNhcmVzX2xhSEVBREVSUyBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1tYW4zIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnY29uZmlnREFUQSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCXVuaW5zdGFsbC1saWJjYXJlc19sYUhFQURFUlMgdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtbWFuMyBcCisJdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKworLlBSRUNJT1VTOiBNYWtlZmlsZQorCisKK0BDT0RFX0NPVkVSQUdFX1JVTEVTQAorCitjbGVhbi1sb2NhbDogY2xlYW4tc291cmNlZC1tYW5wYWdlcworCitjbGVhbi1zb3VyY2VkLW1hbnBhZ2VzOgorCUBzcmNkbWFuZGlyPSckKFNPVVJDRURNQU5ESVIpJzsgXAorCWVjaG8gInJtIC1yZiAkKHRvcF9idWlsZGRpcikvJCRzcmNkbWFuZGlyIjsgXAorCXJtIC1yZiAkKHRvcF9idWlsZGRpcikvJCRzcmNkbWFuZGlyCisKK3NvdXJjZWQtbWFucGFnZXM6IGNsZWFuLXNvdXJjZWQtbWFucGFnZXMKKwlAc3JjZG1hbmRpcj0nJChTT1VSQ0VETUFORElSKSc7IFwKKwlzcmNkbWFuZmlsZXM9JyQoU09VUkNFRE1BTlBBR0VTKSc7IFwKKwlta2RpciAkKHRvcF9idWlsZGRpcikvJCRzcmNkbWFuZGlyOyBcCisJZm9yIGZpbGUgaW4gJCRzcmNkbWFuZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCh0b3Bfc3JjZGlyKS8kJGZpbGU7IHRoZW4gXAorCSAgICBlY2hvICJjcCAkKHRvcF9zcmNkaXIpLyQkZmlsZSAkKHRvcF9idWlsZGRpcikvJCRzcmNkbWFuZGlyLyQkZmlsZSI7IFwKKwkgICAgY3AgJCh0b3Bfc3JjZGlyKS8kJGZpbGUgJCh0b3BfYnVpbGRkaXIpLyQkc3JjZG1hbmRpci8kJGZpbGU7IFwKKwkgIGZpOyBcCisJZG9uZQorCitodG1sOiBzb3VyY2VkLW1hbnBhZ2VzICQoSFRNTFBBR0VTKQorCisuMy5odG1sOgorCSQoTUFOMkhUTUwpCisKK3BkZjogc291cmNlZC1tYW5wYWdlcyAkKFBERlBBR0VTKQorCisuMy5wZGY6CisJQChmb289YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5bMC05XSQkLy9nJ2A7IFwKKwlncm9mZiAtVHBzIC1tYW4gJDwgPiQkZm9vLnBzOyBcCisJcHMycGRmICQkZm9vLnBzICRAOyBcCisJcm0gJCRmb28ucHM7IFwKKwllY2hvICJjb252ZXJ0ZWQgJDwgdG8gJEAiKQorCisjIE1ha2UgZmlsZXMgbmFtZWQgKi5kaXN0IHJlcGxhY2UgdGhlIGZpbGUgd2l0aG91dCAuZGlzdCBleHRlbnNpb24KK2Rpc3QtaG9vazoKKwlmaW5kICQoZGlzdGRpcikgLW5hbWUgIiouZGlzdCIgLWV4ZWMgcm0ge30gXDsKKwkoZGlzdGl0PWBmaW5kICQoc3JjZGlyKSAtbmFtZSAiKi5kaXN0ImA7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RpdDsgZG8gXAorCSAgc3RyaXA9YGVjaG8gJCRmaWxlIHwgc2VkIC1lIHMvXiQoc3JjZGlyKS8vIC1lIHMvXC5kaXN0Ly9gOyBcCisJICBjcCAkJGZpbGUgJChkaXN0ZGlyKSQkc3RyaXA7IFwKKwlkb25lKQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5pbmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1ODBiNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLmluYwpAQCAtMCwwICsxLDIzNyBAQAorCitDU09VUkNFUyA9IGFyZXNfX2Nsb3NlX3NvY2tldHMuYwlcCisgIGFyZXNfX2dldF9ob3N0ZW50LmMJCQlcCisgIGFyZXNfX3JlYWRfbGluZS5jCQkJXAorICBhcmVzX190aW1ldmFsLmMJCQlcCisgIGFyZXNfY2FuY2VsLmMJCQkJXAorICBhcmVzX2RhdGEuYwkJCQlcCisgIGFyZXNfZGVzdHJveS5jCQkJXAorICBhcmVzX2V4cGFuZF9uYW1lLmMJCQlcCisgIGFyZXNfZXhwYW5kX3N0cmluZy5jCQkJXAorICBhcmVzX2Zkcy5jCQkJCVwKKyAgYXJlc19mcmVlX2hvc3RlbnQuYwkJCVwKKyAgYXJlc19mcmVlX3N0cmluZy5jCQkJXAorICBhcmVzX2dldGVudi5jCQkJCVwKKyAgYXJlc19nZXRob3N0YnlhZGRyLmMJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZS5jCQkJXAorICBhcmVzX2dldG5hbWVpbmZvLmMJCQlcCisgIGFyZXNfZ2V0c29jay5jCQkJXAorICBhcmVzX2luaXQuYwkJCQlcCisgIGFyZXNfbGlicmFyeV9pbml0LmMJCQlcCisgIGFyZXNfbGxpc3QuYwkJCQlcCisgIGFyZXNfbWtxdWVyeS5jCQkJXAorICBhcmVzX2NyZWF0ZV9xdWVyeS5jCQkJXAorICBhcmVzX25vd2Fybi5jCQkJCVwKKyAgYXJlc19vcHRpb25zLmMJCQlcCisgIGFyZXNfcGFyc2VfYV9yZXBseS5jCQkJXAorICBhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYwkJXAorICBhcmVzX3BhcnNlX214X3JlcGx5LmMJCQlcCisgIGFyZXNfcGFyc2VfbmFwdHJfcmVwbHkuYwkJXAorICBhcmVzX3BhcnNlX25zX3JlcGx5LmMJCQlcCisgIGFyZXNfcGFyc2VfcHRyX3JlcGx5LmMJCVwKKyAgYXJlc19wYXJzZV9zb2FfcmVwbHkuYwkJXAorICBhcmVzX3BhcnNlX3Nydl9yZXBseS5jCQlcCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5LmMJCVwKKyAgYXJlc19wbGF0Zm9ybS5jCQkJXAorICBhcmVzX3Byb2Nlc3MuYwkJCVwKKyAgYXJlc19xdWVyeS5jCQkJCVwKKyAgYXJlc19zZWFyY2guYwkJCQlcCisgIGFyZXNfc2VuZC5jCQkJCVwKKyAgYXJlc19zdHJjYXNlY21wLmMJCQlcCisgIGFyZXNfc3RyZHVwLmMJCQkJXAorICBhcmVzX3N0cmVycm9yLmMJCQlcCisgIGFyZXNfdGltZW91dC5jCQkJXAorICBhcmVzX3ZlcnNpb24uYwkJCVwKKyAgYXJlc193cml0ZXYuYwkJCQlcCisgIGJpdG5jbXAuYwkJCQlcCisgIGluZXRfbmV0X3B0b24uYwkJCVwKKyAgaW5ldF9udG9wLmMJCQkJXAorICB3aW5kb3dzX3BvcnQuYworCitISEVBREVSUyA9IGFyZXMuaAkJCVwKKyAgYXJlc19idWlsZC5oCQkJCVwKKyAgYXJlc19kYXRhLmgJCQkJXAorICBhcmVzX2Rucy5oCQkJCVwKKyAgYXJlc19nZXRlbnYuaAkJCQlcCisgIGFyZXNfaW5ldF9uZXRfcHRvbi5oCQlcCisgIGFyZXNfaXBobHBhcGkuaAkJCVwKKyAgYXJlc19pcHY2LmgJCQkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC5oCQkJXAorICBhcmVzX2xsaXN0LmgJCQkJXAorICBhcmVzX25vd2Fybi5oCQkJCVwKKyAgYXJlc19wbGF0Zm9ybS5oCQkJXAorICBhcmVzX3ByaXZhdGUuaAkJCVwKKyAgYXJlc19ydWxlcy5oCQkJCVwKKyAgYXJlc19zdHJjYXNlY21wLmgJCQlcCisgIGFyZXNfc3RyZHVwLmgJCQkJXAorICBhcmVzX3ZlcnNpb24uaAkJCVwKKyAgYXJlc193cml0ZXYuaAkJCQlcCisgIGJpdG5jbXAuaAkJCQlcCisgIG5hbWVzZXIuaAkJCQlcCisgIGFyZXNfc2V0dXAuaAkJCQlcCisgIHNldHVwX29uY2UuaAorCitNQU5QQUdFUyA9IGFyZXNfY2FuY2VsLjMJCVwKKyAgYXJlc19kZXN0cm95LjMJCQlcCisgIGFyZXNfZGVzdHJveV9vcHRpb25zLjMJCVwKKyAgYXJlc19kdXAuMwkJCQlcCisgIGFyZXNfZXhwYW5kX25hbWUuMwkJCVwKKyAgYXJlc19leHBhbmRfc3RyaW5nLjMJCQlcCisgIGFyZXNfZmRzLjMJCQkJXAorICBhcmVzX2ZyZWVfZGF0YS4zCQkJXAorICBhcmVzX2ZyZWVfaG9zdGVudC4zCQkJXAorICBhcmVzX2ZyZWVfc3RyaW5nLjMJCQlcCisgIGFyZXNfZ2V0X3NlcnZlcnMuMwkJCVwKKyAgYXJlc19nZXRfc2VydmVyc19wb3J0cy4zCQkJXAorICBhcmVzX2dldGhvc3RieWFkZHIuMwkJCVwKKyAgYXJlc19nZXRob3N0YnluYW1lLjMJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlLjMJCVwKKyAgYXJlc19nZXRuYW1laW5mby4zCQkJXAorICBhcmVzX2dldHNvY2suMwkJCVwKKyAgYXJlc19pbml0LjMJCQkJXAorICBhcmVzX2luaXRfb3B0aW9ucy4zCQkJXAorICBhcmVzX2xpYnJhcnlfY2xlYW51cC4zCQlcCisgIGFyZXNfbGlicmFyeV9pbml0LjMJCQlcCisgIGFyZXNfbWtxdWVyeS4zCQkJXAorICBhcmVzX2NyZWF0ZV9xdWVyeS4zCQkJXAorICBhcmVzX3BhcnNlX2FfcmVwbHkuMwkJCVwKKyAgYXJlc19wYXJzZV9hYWFhX3JlcGx5LjMJCVwKKyAgYXJlc19wYXJzZV9teF9yZXBseS4zCQkJXAorICBhcmVzX3BhcnNlX25hcHRyX3JlcGx5LjMJCVwKKyAgYXJlc19wYXJzZV9uc19yZXBseS4zCQkJXAorICBhcmVzX3BhcnNlX3B0cl9yZXBseS4zCQlcCisgIGFyZXNfcGFyc2Vfc29hX3JlcGx5LjMJCVwKKyAgYXJlc19wYXJzZV9zcnZfcmVwbHkuMwkJXAorICBhcmVzX3BhcnNlX3R4dF9yZXBseS4zCQlcCisgIGFyZXNfcHJvY2Vzcy4zCQkJXAorICBhcmVzX3F1ZXJ5LjMJCQkJXAorICBhcmVzX3NhdmVfb3B0aW9ucy4zCQkJXAorICBhcmVzX3NlYXJjaC4zCQkJCVwKKyAgYXJlc19zZW5kLjMJCQkJXAorICBhcmVzX3NldF9sb2NhbF9kZXYuMwkJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA0LjMJCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNi4zCQkJXAorICBhcmVzX3NldF9zZXJ2ZXJzLjMJCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfY3N2LjMJCVwKKyAgYXJlc19zZXRfc2VydmVyc19wb3J0cy4zCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2LjMJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrLjMJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjay4zCVwKKyAgYXJlc19zZXRfc29ydGxpc3QuMwkJCVwKKyAgYXJlc19zdHJlcnJvci4zCQkJXAorICBhcmVzX3RpbWVvdXQuMwkJCVwKKyAgYXJlc192ZXJzaW9uLjMJCSAgICAgICAgXAorICBhcmVzX2luZXRfcHRvbi4zICAgICAgICAgICAgICAgICAgICAgIFwKKyAgYXJlc19pbmV0X250b3AuMworCitIVE1MUEFHRVMgPSBhcmVzX2NhbmNlbC5odG1sCQlcCisgIGFyZXNfZGVzdHJveS5odG1sCQkJXAorICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucy5odG1sCQlcCisgIGFyZXNfZHVwLmh0bWwJCQkJXAorICBhcmVzX2V4cGFuZF9uYW1lLmh0bWwJCQlcCisgIGFyZXNfZXhwYW5kX3N0cmluZy5odG1sCQlcCisgIGFyZXNfZmRzLmh0bWwJCQkJXAorICBhcmVzX2ZyZWVfZGF0YS5odG1sCQkJXAorICBhcmVzX2ZyZWVfaG9zdGVudC5odG1sCQlcCisgIGFyZXNfZnJlZV9zdHJpbmcuaHRtbAkJCVwKKyAgYXJlc19nZXRfc2VydmVycy5odG1sCQkJXAorICBhcmVzX2dldF9zZXJ2ZXJzX3BvcnRzLmh0bWwJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5YWRkci5odG1sCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZS5odG1sCQlcCisgIGFyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlLmh0bWwJCVwKKyAgYXJlc19nZXRuYW1laW5mby5odG1sCQkJXAorICBhcmVzX2dldHNvY2suaHRtbAkJCVwKKyAgYXJlc19pbml0Lmh0bWwJCQlcCisgIGFyZXNfaW5pdF9vcHRpb25zLmh0bWwJCVwKKyAgYXJlc19saWJyYXJ5X2NsZWFudXAuaHRtbAkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC5odG1sCQlcCisgIGFyZXNfbWtxdWVyeS5odG1sCQkJXAorICBhcmVzX2NyZWF0ZV9xdWVyeS5odG1sCQkJXAorICBhcmVzX3BhcnNlX2FfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX2FhYWFfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX214X3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wYXJzZV9uc19yZXBseS5odG1sCQlcCisgIGFyZXNfcGFyc2VfcHRyX3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wYXJzZV9zb2FfcmVwbHkuaHRtbAkJXAorICBhcmVzX3BhcnNlX3Nydl9yZXBseS5odG1sCQlcCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5Lmh0bWwJCVwKKyAgYXJlc19wcm9jZXNzLmh0bWwJCQlcCisgIGFyZXNfcXVlcnkuaHRtbAkJCVwKKyAgYXJlc19zYXZlX29wdGlvbnMuaHRtbAkJXAorICBhcmVzX3NlYXJjaC5odG1sCQkJXAorICBhcmVzX3NlbmQuaHRtbAkJCVwKKyAgYXJlc19zZXRfbG9jYWxfZGV2Lmh0bWwJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA0Lmh0bWwJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA2Lmh0bWwJCVwKKyAgYXJlc19zZXRfc2VydmVycy5odG1sCQkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX2Nzdi5odG1sCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMuaHRtbAkJCVwKKyAgYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3YuaHRtbAkJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrLmh0bWwJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjay5odG1sCQlcCisgIGFyZXNfc2V0X3NvcnRsaXN0Lmh0bWwJCQlcCisgIGFyZXNfc3RyZXJyb3IuaHRtbAkJCVwKKyAgYXJlc190aW1lb3V0Lmh0bWwJCQlcCisgIGFyZXNfdmVyc2lvbi5odG1sICAgICAgICAgICAgICAgICAgICAgXAorICBhcmVzX2luZXRfcHRvbi5odG1sICAgICAgICAgICAgICAgICAgIFwKKyAgYXJlc19pbmV0X250b3AuaHRtbAorCitQREZQQUdFUyA9IGFyZXNfY2FuY2VsLnBkZgkJXAorICBhcmVzX2Rlc3Ryb3kucGRmCQkJXAorICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucy5wZGYJCVwKKyAgYXJlc19kdXAucGRmCQkJCVwKKyAgYXJlc19leHBhbmRfbmFtZS5wZGYJCQlcCisgIGFyZXNfZXhwYW5kX3N0cmluZy5wZGYJCVwKKyAgYXJlc19mZHMucGRmCQkJCVwKKyAgYXJlc19mcmVlX2RhdGEucGRmCQkJXAorICBhcmVzX2ZyZWVfaG9zdGVudC5wZGYJCQlcCisgIGFyZXNfZnJlZV9zdHJpbmcucGRmCQkJXAorICBhcmVzX2dldF9zZXJ2ZXJzLnBkZgkJCVwKKyAgYXJlc19nZXRfc2VydmVyc19wb3J0cy5wZGYJCQlcCisgIGFyZXNfZ2V0aG9zdGJ5YWRkci5wZGYJCVwKKyAgYXJlc19nZXRob3N0YnluYW1lLnBkZgkJXAorICBhcmVzX2dldGhvc3RieW5hbWVfZmlsZS5wZGYJCVwKKyAgYXJlc19nZXRuYW1laW5mby5wZGYJCQlcCisgIGFyZXNfZ2V0c29jay5wZGYJCQlcCisgIGFyZXNfaW5pdC5wZGYJCQkJXAorICBhcmVzX2luaXRfb3B0aW9ucy5wZGYJCQlcCisgIGFyZXNfbGlicmFyeV9jbGVhbnVwLnBkZgkJXAorICBhcmVzX2xpYnJhcnlfaW5pdC5wZGYJCQlcCisgIGFyZXNfbWtxdWVyeS5wZGYJCQlcCisgIGFyZXNfY3JlYXRlX3F1ZXJ5LnBkZgkJCVwKKyAgYXJlc19wYXJzZV9hX3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX2FhYWFfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfbXhfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfbnNfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfcHRyX3JlcGx5LnBkZgkJXAorICBhcmVzX3BhcnNlX3NvYV9yZXBseS5wZGYJCVwKKyAgYXJlc19wYXJzZV9zcnZfcmVwbHkucGRmCQlcCisgIGFyZXNfcGFyc2VfdHh0X3JlcGx5LnBkZgkJXAorICBhcmVzX3Byb2Nlc3MucGRmCQkJXAorICBhcmVzX3F1ZXJ5LnBkZgkJCVwKKyAgYXJlc19zYXZlX29wdGlvbnMucGRmCQkJXAorICBhcmVzX3NlYXJjaC5wZGYJCQlcCisgIGFyZXNfc2VuZC5wZGYJCQkJXAorICBhcmVzX3NldF9sb2NhbF9kZXYucGRmCQlcCisgIGFyZXNfc2V0X2xvY2FsX2lwNC5wZGYJCVwKKyAgYXJlc19zZXRfbG9jYWxfaXA2LnBkZgkJXAorICBhcmVzX3NldF9zZXJ2ZXJzLnBkZgkJCVwKKyAgYXJlc19zZXRfc2VydmVyc19jc3YucGRmCQlcCisgIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMucGRmCQkJXAorICBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2Nzdi5wZGYJCQlcCisgIGFyZXNfc2V0X3NvY2tldF9jYWxsYmFjay5wZGYJCVwKKyAgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjay5wZGYJCVwKKyAgYXJlc19zZXRfc29ydGxpc3QucGRmCQkJXAorICBhcmVzX3N0cmVycm9yLnBkZgkJCVwKKyAgYXJlc190aW1lb3V0LnBkZgkJCVwKKyAgYXJlc192ZXJzaW9uLnBkZiAgICAgICAgICAgICAgICAgICAgICBcCisgIGFyZXNfaW5ldF9wdG9uLnBkZiAgICAgICAgICAgICAgICAgICAgXAorICBhcmVzX2luZXRfbnRvcC5wZGYKKworU0FNUExFU09VUkNFUyA9IGFyZXNfZ2V0b3B0LmMJCVwKKyAgYXJlc19ub3dhcm4uYwkJCQlcCisgIGFyZXNfc3RyY2FzZWNtcC5jCisKK1NBTVBMRUhFQURFUlMgPSBhcmVzX2dldG9wdC5oCQlcCisgIGFyZXNfbm93YXJuLmgJCQkJXAorICBhcmVzX3N0cmNhc2VjbXAuaApkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvTWFrZWZpbGUubTMyIGIvYXAvYXBwL2MtYXJlcy9zcmMvTWFrZWZpbGUubTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2E1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5tMzIKQEAgLTAsMCArMSw3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIGxpYmNhcmVzLmEgd2l0aCBNaW5nVzMyIChHQ0MtMy4yKQorIyMgVXNlOiBtYWtlIC1mIE1ha2VmaWxlLm0zMiBbZGVtb3NdCisjIworIyMgUXVpY2sgaGFjayBieSBHdWVudGVyOyBjb21tZW50cyB0bzogL2Rldi9udWwKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQorCitMSUIJPSBsaWJjYXJlcy5hCisKK0FSCT0gJChDUk9TU1BSRUZJWClhcgorQ0MJPSAkKENST1NTUFJFRklYKWdjYworTEQJPSAkKENST1NTUFJFRklYKWdjYworUkFOTElCCT0gJChDUk9TU1BSRUZJWClyYW5saWIKKyNSTQk9IHJtIC1mCitDUAk9IGNwIC1hZnYKKworQ0ZMQUdTCT0gJChDQVJFU19DRkxBR19FWFRSQVMpIC1PMiAtV2FsbCAtSS4KK0NGTEFHUwkrPSAtRENBUkVTX1NUQVRJQ0xJQgorTERGTEFHUwk9ICQoQ0FSRVNfTERGTEFHX0VYVFJBUykgLXMKK0xJQlMJPSAtbHdzb2NrMzIKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIENTT1VSQ0VTIGFuZCBISEVBREVSUyBkZWZpbmVzCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitPQkpMSUIJOj0gJChwYXRzdWJzdCAlLmMsJS5vLCQoc3RyaXAgJChDU09VUkNFUykpKQorCisKKyQoTElCKTogJChPQkpMSUIpCisJJChBUikgY3J1ICRAICReCisJJChSQU5MSUIpICRACisKK2FsbDogJChMSUIpIGRlbW9zCisKK2RlbW9zOiBhZGlnLmV4ZSBhaG9zdC5leGUgYWNvdW50cnkuZXhlCisKK3RhZ3M6CisJZXRhZ3MgKi5bY2hdCisKKyUuZXhlOiAlLm8gYXJlc19nZXRvcHQubyAkKExJQikKKwkkKExEKSAkKExERkxBR1MpIC1vICRAICReICQoTElCUykKKworJChPQkpMSUIpOiBhcmVzLmggYXJlc19kbnMuaCBhcmVzX3ByaXZhdGUuaCBhcmVzX2J1aWxkLmggYXJlc19ydWxlcy5oCisKKy5jLm86CisJJChDQykgJChDRkxBR1MpIC1jICQ8CisKK2FyZXNfYnVpbGQuaDoKKwkkKENQKSBhcmVzX2J1aWxkLmguZGlzdCBhcmVzX2J1aWxkLmgKKworY2hlY2s6CisKK2luc3RhbGw6CisJJHt0b3Bfc3JjZGlyfS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0ke2xpYmRpcn0KKwkke3RvcF9zcmNkaXJ9L21raW5zdGFsbGRpcnMgJHtERVNURElSfSR7aW5jbHVkZWRpcn0KKwkke3RvcF9zcmNkaXJ9L21raW5zdGFsbGRpcnMgJHtERVNURElSfSR7bWFuZGlyfS9tYW4zCisJJHtJTlNUQUxMfSAtbSA2NDQgJChMSUIpICR7REVTVERJUn0ke2xpYmRpcn0KKwkke1JBTkxJQn0gJHtERVNURElSfSR7bGliZGlyfS8kKExJQikKKwljaG1vZCB1LXcgJHtERVNURElSfSR7bGliZGlyfS8kKExJQikKKwkke0lOU1RBTEx9IC1tIDQ0NCAke3NyY2Rpcn0vYXJlcy5oICR7REVTVERJUn0ke2luY2x1ZGVkaXJ9CisJJHtJTlNUQUxMfSAtbSA0NDQgJHtzcmNkaXJ9L2FyZXNfYnVpbGQuaCAke0RFU1RESVJ9JHtpbmNsdWRlZGlyfQorCSR7SU5TVEFMTH0gLW0gNDQ0ICR7c3JjZGlyfS9hcmVzX3J1bGVzLmggJHtERVNURElSfSR7aW5jbHVkZWRpcn0KKwkoZm9yIG1hbiBpbiAkKE1BTlBBR0VTKTsgZG8gXAorCSAgICR7SU5TVEFMTH0gLW0gNDQ0ICR7c3JjZGlyfS8kJHttYW59ICR7REVTVERJUn0ke21hbmRpcn0vbWFuMzsgXAorCWRvbmUpCisKK2NsZWFuOgorCSQoUk0pIGFyZXNfZ2V0b3B0Lm8gJChPQkpMSUIpICQoTElCKSBhZGlnLmV4ZSBhaG9zdC5leGUgYWNvdW50cnkuZXhlCisKK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIE1ha2VmaWxlCitpZmVxICIkKHdpbGRjYXJkIGFyZXNfYnVpbGQuaC5kaXN0KSIgImFyZXNfYnVpbGQuaC5kaXN0IgorCSQoUk0pIGFyZXNfYnVpbGQuaAorZW5kaWYKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLm1zdmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5tc3ZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNWUzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5tc3ZjCkBAIC0wLDAgKzEsNDcxIEBACisKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgYnkgRGFuaWVsIFN0ZW5iZXJnCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorIyBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorIyBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyMgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisjIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorIyBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorIyB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyMgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlIGZvciBidWlsZGluZyBjLWFyZXMgbGlicmFyaWVzIGFuZCBzYW1wbGUgcHJvZ3JhbXMgd2l0aCBNU1ZDLgorIworIyBVc2FnZTogbm1ha2UgL2YgbWFrZWZpbGUubXN2YyBDRkc9PGNvbmZpZz4gPHRhcmdldD4KKyMKKyMgPGNvbmZpZz4gbXVzdCBiZSBvbmUgb2Y6IFsgbGliLXJlbGVhc2UgfCBsaWItZGVidWcgfCBkbGwtcmVsZWFzZSB8IGRsbC1kZWJ1ZyB9CisjIDx0YXJnZXQ+IG11c3QgYmUgb25lIG9mOiBbIEFMTCB8IGMtYXJlcyB8IGFjb3VudHJ5IHwgYWRpZyB8IGFob3N0IHwgY2xlYW4gfQorIworIyBJZiBhIDx0YXJnZXQ+IG90aGVyIHRoYW4gQUxMIG9yIGNsZWFuIGlzIGdpdmVuLCA8Y29uZmlnPiBiZWNvbWVzIG1hbmRhdG9yeS4KKyMKKyMgSWYgbmVpdGhlciA8Y29uZmlnPiBub3IgPHRhcmdldD4gYXJlIHNwZWNpZmllZCB0aGlzIHJlc3VsdHMgaW4KKyMgYWxsIHRhcmdldHMgYmVpbmcgYnVpbHQgZm9yIGFsbCA8Y29uZmlnPiBjLWFyZXMgbGlicmFyeSB0eXBlcy4KKyMKKyMgVGhpcyBtYWtlZmlsZSBtdXN0IGJlIHByb2Nlc3NlZCBmcm9tIHRoZSBzdWJkaXIgd2hlcmUgaXQgaXMgbG9jYXRlZC4KKyMKKyMgQWxsIHJlc3VsdHMgYXJlIGdlbmVyYXRlZCBiZWxvdyBhIHN1YmRpcmVjdG9yeSBuYW1lZCBtc3ZjWFhYLgorIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkFNRSA9IGNhcmVzCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGMtYXJlcyBzdGF0aWMgYW5kIGR5bmFtaWMgbGlicmFyaWVzIGNvbW1vbiBiYXNlCisjIGZpbGUgbmFtZXMgZm9yIHJlbGVhc2UgYW5kIGRlYnVnIGNvbmZpZ3VyYXRpb25zCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTVEFfTElCX1JFTCA9IGxpYiQoTkFNRSkKK0RZTl9MSUJfUkVMID0gJChOQU1FKQorU1RBX0xJQl9EQkcgPSAkKFNUQV9MSUJfUkVMKWQKK0RZTl9MSUJfREJHID0gJChEWU5fTElCX1JFTClkCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCYXNlIG5hbWVzIGZvciBjLWFyZXMgRExMIGltcG9ydCBsaWJyYXJpZXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJTVBfTElCX1JFTCA9ICQoRFlOX0xJQl9SRUwpCitJTVBfTElCX0RCRyA9ICQoRFlOX0xJQl9EQkcpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVudGltZSBsaWJyYXJ5IHNlbGVjdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSVExJQiAgPSAvTUQKK1JUTElCRCA9IC9NRGQKKworIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyIKK1JUTElCICA9IC9NVAorUlRMSUJEID0gL01UZAorIUVORElGCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIFVTRV9XQVRUMzIgdG8gMSB0byB1c2UgdGhlIFdhdHQtMzIgdGNwL2lwIHN0YWNrLAorIyBvdGhlcndpc2UgV2luc29jayB0Y3AvaXAgc3RhY2sgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VTRV9XQVRUMzIgPSAwCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGV0ZWN0IGNvbXBpbGVyIHZlcnNpb24uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCishSU5DTFVERSAuXG1zdmNfdmVyLmluYworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVmVyaWZ5IHRoYXQgY3VycmVudCBzdWJkaXIgaXMgdGhlIGMtYXJlcyBzb3VyY2Ugb25lCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIUlGICEgRVhJU1QoLlxhcmVzX2luaXQuYykKKyEgIE1FU1NBR0UgQ2FuIG5vdCBwcm9jZXNzIE1ha2VmaWxlLm1zdmMgZnJvbSBvdXRzaWRlIG9mIGMtYXJlcyBzb3VyY2Ugc3ViZGlyZWN0b3J5LgorISAgTUVTU0FHRSBDaGFuZ2UgdG8gdGhlIHN1YmRpcmVjdG9yeSB3aGVyZSBNYWtlZmlsZS5tc3ZjIGlzIGZvdW5kLCBhbmQgdHJ5IGFnYWluLgorISAgRVJST1IgICBTZWUgcHJldmlvdXMgbWVzc2FnZS4KKyFFTkRJRgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCYXNlIHN1YmRpciBpcyB0aGUgY29tbW9uIHJvb3QgZnJvbSB3aGljaCBvdGhlciBzdWJkaXJzIHdpbGwgaGFuZywKKyMgdGhlIG5hbWUgZGVwZW5kcyBvbiBNU1ZDIHZlcnNpb24gYmVpbmcgdXNlZCB3aGVuIGJ1aWxkaW5nIGMtYXJlcy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JBU0VfRElSID0gLlwkKENDX1ZFUlNfU1RSKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3ViZGlyIGhvbGRpbmcgc291cmNlcyBmb3IgYWxsIHByb2plY3RzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1JDRElSID0gLgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmF1bHQgaW5zdGFsbGF0aW9uIHN1YmRpcnMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIUlGTkRFRiBJTlNUQUxMX0RJUgorSU5TVEFMTF9ESVIgPSAuCishRU5ESUYKKworIUlGTkRFRiBJTlNUQUxMX0RJUl9MSUIKK0lOU1RBTExfRElSX0xJQiA9ICQoSU5TVEFMTF9ESVIpXGxpYgorIUVORElGCisKKyFJRk5ERUYgSU5TVEFMTF9ESVJfSU5DCitJTlNUQUxMX0RJUl9JTkMgPSAkKElOU1RBTExfRElSKVxpbmNsdWRlCishRU5ESUYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZBTElEX0NGR1NFVCA9IEZBTFNFCishSUYgIiQoQ0ZHKSIgPT0gImxpYi1yZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAibGliLWRlYnVnIiB8fCBcCisgICAgIiQoQ0ZHKSIgPT0gImRsbC1yZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGxsLWRlYnVnIgorVkFMSURfQ0ZHU0VUID0gVFJVRQorIUVORElGCisKKyFJRiAiJChWQUxJRF9DRkdTRVQpIiA9PSAiRkFMU0UiICYmICIkKENGRykiICE9ICIiCishICBNRVNTQUdFIE1TVkMgYy1hcmVzIG1ha2VmaWxlCishICBNRVNTQUdFCishICBNRVNTQUdFIFVzYWdlOiBubWFrZSAvZiBtYWtlZmlsZS5tc3ZjIENGRz08Y29uZmlnPiA8dGFyZ2V0PgorISAgTUVTU0FHRQorISAgTUVTU0FHRSA8Y29uZmlnPiBtdXN0IGJlIG9uZSBvZjogWyBsaWItcmVsZWFzZSB8IGxpYi1kZWJ1ZyB8IGRsbC1yZWxlYXNlIHwgZGxsLWRlYnVnIH0KKyEgIE1FU1NBR0UgPHRhcmdldD4gbXVzdCBiZSBvbmUgb2Y6IFsgQUxMIHwgYy1hcmVzIHwgYWNvdW50cnkgfCBhZGlnIHwgYWhvc3QgfCBjbGVhbiB9CishICBNRVNTQUdFCishICBNRVNTQUdFIElmIGEgPHRhcmdldD4gb3RoZXIgdGhhbiBBTEwgb3IgY2xlYW4gaXMgZ2l2ZW4sIDxjb25maWc+IGJlY29tZXMgbWFuZGF0b3J5LgorISAgTUVTU0FHRQorISAgTUVTU0FHRSBJZiBuZWl0aGVyIDxjb25maWc+IG5vciA8dGFyZ2V0PiBhcmUgc3BlY2lmaWVkIHRoaXMgcmVzdWx0cyBpbgorISAgTUVTU0FHRSBhbGwgdGFyZ2V0cyBiZWluZyBidWlsdCBmb3IgYWxsIDxjb25maWc+IGMtYXJlcyBsaWJyYXJ5IHR5cGVzLgorISAgTUVTU0FHRQorISAgRVJST1IgQ2hvb3NlIGEgdmFsaWQgY29uZmlndXJhdGlvbi4KKyFFTkRJRgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2plY3Qgc3ViZGlycyBpbmRlcGVuZGVudCBvZiBjb25maWd1cmF0aW9uIGJlaW5nIHVzZWQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ0FSRVNfRElSID0gJChCQVNFX0RJUilcY2FyZXMKK1BST0cxX0RJUiA9ICQoQkFTRV9ESVIpXGFjb3VudHJ5CitQUk9HMl9ESVIgPSAkKEJBU0VfRElSKVxhZGlnCitQUk9HM19ESVIgPSAkKEJBU0VfRElSKVxhaG9zdAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdWJkaXJzIHdoaWNoIGFyZSBjb25maWd1cmF0aW9uIGRlcGVuZGVudCBhcmUgb25seQorIyBkZWZpbmVkIHdoZW4gYSB2YWxpZCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGdpdmVuLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIUlGICIkKFZBTElEX0NGR1NFVCkiID09ICJUUlVFIgorQ0FSRVNfT1VURElSID0gJChDQVJFU19ESVIpXCQoQ0ZHKQorUFJPRzFfT1VURElSID0gJChQUk9HMV9ESVIpXCQoQ0ZHKQorUFJPRzJfT1VURElSID0gJChQUk9HMl9ESVIpXCQoQ0ZHKQorUFJPRzNfT1VURElSID0gJChQUk9HM19ESVIpXCQoQ0ZHKQorQ0FSRVNfT0JKRElSID0gJChDQVJFU19PVVRESVIpXG9iagorUFJPRzFfT0JKRElSID0gJChQUk9HMV9PVVRESVIpXG9iagorUFJPRzJfT0JKRElSID0gJChQUk9HMl9PVVRESVIpXG9iagorUFJPRzNfT0JKRElSID0gJChQUk9HM19PVVRESVIpXG9iagorIUVMU0UKKyFVTkRFRiBDQVJFU19PVVRESVIKKyFVTkRFRiBQUk9HMV9PVVRESVIKKyFVTkRFRiBQUk9HMl9PVVRESVIKKyFVTkRFRiBQUk9HM19PVVRESVIKKyFVTkRFRiBDQVJFU19PQkpESVIKKyFVTkRFRiBQUk9HMV9PQkpESVIKKyFVTkRFRiBQUk9HMl9PQkpESVIKKyFVTkRFRiBQUk9HM19PQkpESVIKKyFFTkRJRgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0dGluZ3MgdGhhdCBkZXBlbmQgb24gdGNwL2lwIHN0YWNrCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIUlGICIkKFVTRV9XQVRUMzIpIiA9PSAiMSIKK0NGTEFHUyAgPSAvVVdJTjMyIC9EV0FUVDMyIC9JJChXQVRUX1JPT1QpXGluYworRVhfTElCU19SRUwgPSAkKFdBVFRfUk9PVClcbGliXHdhdHRjcHZjX2ltcC5saWIKK0VYX0xJQlNfREJHID0gJChXQVRUX1JPT1QpXGxpYlx3YXR0Y3B2Y19pbXBfZC5saWIKKyFFTFNFCitDRkxBR1MgID0gL0RXSU4zMgorRVhfTElCU19SRUwgPSB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIKK0VYX0xJQlNfREJHID0gd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliCishRU5ESUYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTd2l0Y2hlcyB0aGF0IGRlcGVuZCBvbiBjb21waWxlciB2ZXJzaW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyFJRiAkKENDX1ZFUlNfTlVNKSA9PSA2MAorUERCX05PTkUgICAgICAgICAgICA9IC9wZGI6bm9uZQorUERCVFlQRV9DT05TT0xJREFURSA9IC9wZGJ0eXBlOmNvbnNvbGlkYXRlCishRUxTRQorIVVOREVGIFBEQl9OT05FCishVU5ERUYgUERCVFlQRV9DT05TT0xJREFURQorIUVORElGCisKKyFJRiAkKENDX1ZFUlNfTlVNKSA8PSA3MAorUlRfRVJST1JfQ0hFQ0tJTkcgPSAvR1oKKyFFTFNFCitSVF9FUlJPUl9DSEVDS0lORyA9IC9SVENzdQorIUVORElGCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBc3NvcnRlZCBjb21tYW5kcyBhbmQgZmxhZ3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDQ19DTURfUkVMID0gY2wuZXhlIC9ub2xvZ28gJChSVExJQikgL0ROREVCVUcgL08yCitDQ19DTURfREJHID0gY2wuZXhlIC9ub2xvZ28gJChSVExJQkQpIC9EX0RFQlVHIC9PZCAvWmkgJChSVF9FUlJPUl9DSEVDS0lORykKK0NDX0NGTEFHUyAgPSAkKENGTEFHUykgL0kuIC9XMyAvRUhzYyAvRkQKKworUkNfQ01EX1JFTCA9IHJjLmV4ZSAvbCAweDQwOSAvZCAiTkRFQlVHIgorUkNfQ01EX0RCRyA9IHJjLmV4ZSAvbCAweDQwOSAvZCAiX0RFQlVHIgorCitMSU5LX0NNRF9MSUIgPSBsaW5rLmV4ZSAvbGliIC9ub2xvZ28KK0xJTktfQ01EX0RMTCA9IGxpbmsuZXhlIC9kbGwgL25vbG9nbyAvaW5jcmVtZW50YWw6bm8gL2ZpeGVkOm5vCitMSU5LX0NNRF9FWEUgPSBsaW5rLmV4ZSAvbm9sb2dvIC9pbmNyZW1lbnRhbDpubyAvZml4ZWQ6bm8gL3N1YnN5c3RlbTpjb25zb2xlCisKK0xJTktfQ01EX0VYRV9SRUwgPSAkKExJTktfQ01EX0VYRSkgL3JlbGVhc2UgJChQREJfTk9ORSkKK0xJTktfQ01EX0VYRV9EQkcgPSAkKExJTktfQ01EX0VYRSkgL2RlYnVnICQoUERCVFlQRV9DT05TT0xJREFURSkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBkZXBlbmRlbnQgc2V0dGluZ3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyFJRiAiJChDRkcpIiA9PSAibGliLXJlbGVhc2UiCitDQVJFU19UQVJHRVQgPSAkKFNUQV9MSUJfUkVMKS5saWIKK0NBUkVTX0NGTEFHUyA9IC9EQ0FSRVNfQlVJTERJTkdfTElCUkFSWSAvRENBUkVTX1NUQVRJQ0xJQgorQ0FSRVNfTEZMQUdTID0KK1NQUk9HX0NGTEFHUyA9IC9EQ0FSRVNfU1RBVElDTElCCitTUFJPR19MRkxBR1MgPSAvbGlicGF0aDokKENBUkVTX09VVERJUikgJChFWF9MSUJTX1JFTCkgJChTVEFfTElCX1JFTCkubGliCitDQVJFU19MSU5LICAgPSAkKExJTktfQ01EX0xJQikKK1NQUk9HX0xJTksgICA9ICQoTElOS19DTURfRVhFX1JFTCkKK0NDX0NNRCAgICAgICA9ICQoQ0NfQ01EX1JFTCkKKyFFTkRJRgorCishSUYgIiQoQ0ZHKSIgPT0gImxpYi1kZWJ1ZyIKK0NBUkVTX1RBUkdFVCA9ICQoU1RBX0xJQl9EQkcpLmxpYgorQ0FSRVNfQ0ZMQUdTID0gL0RDQVJFU19CVUlMRElOR19MSUJSQVJZIC9EQ0FSRVNfU1RBVElDTElCIC9EREVCVUdCVUlMRAorQ0FSRVNfTEZMQUdTID0KK1NQUk9HX0NGTEFHUyA9IC9EQ0FSRVNfU1RBVElDTElCCitTUFJPR19MRkxBR1MgPSAvbGlicGF0aDokKENBUkVTX09VVERJUikgJChFWF9MSUJTX0RCRykgJChTVEFfTElCX0RCRykubGliCitDQVJFU19MSU5LICAgPSAkKExJTktfQ01EX0xJQikKK1NQUk9HX0xJTksgICA9ICQoTElOS19DTURfRVhFX0RCRykKK0NDX0NNRCAgICAgICA9ICQoQ0NfQ01EX0RCRykKKyFFTkRJRgorCishSUYgIiQoQ0ZHKSIgPT0gImRsbC1yZWxlYXNlIgorQ0FSRVNfVEFSR0VUID0gJChEWU5fTElCX1JFTCkuZGxsCitDQVJFU19DRkxBR1MgPSAvRENBUkVTX0JVSUxESU5HX0xJQlJBUlkKK0NBUkVTX0xGTEFHUyA9IC9yZWxlYXNlICQoRVhfTElCU19SRUwpIC9pbXBsaWI6JChDQVJFU19PVVRESVIpXCQoSU1QX0xJQl9SRUwpLmxpYiAkKFBEQl9OT05FKQorU1BST0dfQ0ZMQUdTID0KK1NQUk9HX0xGTEFHUyA9IC9saWJwYXRoOiQoQ0FSRVNfT1VURElSKSAkKEVYX0xJQlNfUkVMKSAkKElNUF9MSUJfUkVMKS5saWIKK0NBUkVTX0xJTksgICA9ICQoTElOS19DTURfRExMKQorU1BST0dfTElOSyAgID0gJChMSU5LX0NNRF9FWEVfUkVMKQorQ0NfQ01EICAgICAgID0gJChDQ19DTURfUkVMKQorVVNFX1JFU19GSUxFID0gVFJVRQorUkNfQ01EICAgICAgID0gJChSQ19DTURfUkVMKQorIUVORElGCisKKyFJRiAiJChDRkcpIiA9PSAiZGxsLWRlYnVnIgorQ0FSRVNfVEFSR0VUID0gJChEWU5fTElCX0RCRykuZGxsCitDQVJFU19DRkxBR1MgPSAvRENBUkVTX0JVSUxESU5HX0xJQlJBUlkgL0RERUJVR0JVSUxECitDQVJFU19MRkxBR1MgPSAvZGVidWcgJChFWF9MSUJTX0RCRykgL2ltcGxpYjokKENBUkVTX09VVERJUilcJChJTVBfTElCX0RCRykubGliIC9wZGI6JChDQVJFU19PVVRESVIpXCQoRFlOX0xJQl9EQkcpLnBkYiAkKFBEQlRZUEVfQ09OU09MSURBVEUpCitTUFJPR19DRkxBR1MgPQorU1BST0dfTEZMQUdTID0gL2xpYnBhdGg6JChDQVJFU19PVVRESVIpICQoRVhfTElCU19EQkcpICQoSU1QX0xJQl9EQkcpLmxpYgorQ0FSRVNfTElOSyAgID0gJChMSU5LX0NNRF9ETEwpCitTUFJPR19MSU5LICAgPSAkKExJTktfQ01EX0VYRV9EQkcpCitDQ19DTUQgICAgICAgPSAkKENDX0NNRF9EQkcpCitVU0VfUkVTX0ZJTEUgPSBUUlVFCitSQ19DTUQgICAgICAgPSAkKFJDX0NNRF9EQkcpCishRU5ESUYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgbGlzdHMgb2Ygc291cmNlIGZpbGVzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyFJTkNMVURFIC5cTWFrZWZpbGUuaW5jCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCdWlsZCBsaXN0cyBvZiBvYmplY3QgZmlsZXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCishSUYgIiQoVkFMSURfQ0ZHU0VUKSIgPT0gIlRSVUUiCisKKyFJRiBbRUNITyBDQVJFU19PQkpTPV4kKENBUkVTX09CSkRJUilcJChDU09VUkNFUzogPSAkKENBUkVTX09CSkRJUl4pXCkgPiAuXGNhcmVzX29ianMuaW5jXSA9PSAwCishSU5DTFVERSAuXGNhcmVzX29ianMuaW5jCishSUYgW0RFTCAuXGNhcmVzX29ianMuaW5jXQorIUVORElGCishRUxTRQorIUVSUk9SIFByb2JsZW0gZ2VuZXJhdGluZyBDQVJFU19PQkpTIGxpc3QuCishRU5ESUYKK0NBUkVTX09CSlMgPSAkKENBUkVTX09CSlM6LmM9Lm9iaikKKyFJRiAiJChVU0VfUkVTX0ZJTEUpIiA9PSAiVFJVRSIKK0NBUkVTX09CSlMgPSAkKENBUkVTX09CSlMpICQoQ0FSRVNfT0JKRElSKVxjYXJlcy5yZXMKKyFFTkRJRgorCishSUYgW0VDSE8gUFJPRzFfT0JKUz1eJChQUk9HMV9PQkpESVIpXCQoU0FNUExFU09VUkNFUzogPSAkKFBST0cxX09CSkRJUl4pXCkgPiAuXHByb2cxX29ianMuaW5jXSA9PSAwCishSU5DTFVERSAuXHByb2cxX29ianMuaW5jCishSUYgW0RFTCAuXHByb2cxX29ianMuaW5jXQorIUVORElGCishRUxTRQorIUVSUk9SIFByb2JsZW0gZ2VuZXJhdGluZyBQUk9HMV9PQkpTIGxpc3QuCishRU5ESUYKK1BST0cxX09CSlMgPSAkKFBST0cxX09CSlM6LmM9Lm9iaikKK1BST0cxX09CSlMgPSAkKFBST0cxX09CSlMpICQoUFJPRzFfT0JKRElSKVxhY291bnRyeS5vYmoKKworIUlGIFtFQ0hPIFBST0cyX09CSlM9XiQoUFJPRzJfT0JKRElSKVwkKFNBTVBMRVNPVVJDRVM6ID0gJChQUk9HMl9PQkpESVJeKVwpID4gLlxwcm9nMl9vYmpzLmluY10gPT0gMAorIUlOQ0xVREUgLlxwcm9nMl9vYmpzLmluYworIUlGIFtERUwgLlxwcm9nMl9vYmpzLmluY10KKyFFTkRJRgorIUVMU0UKKyFFUlJPUiBQcm9ibGVtIGdlbmVyYXRpbmcgUFJPRzJfT0JKUyBsaXN0LgorIUVORElGCitQUk9HMl9PQkpTID0gJChQUk9HMl9PQkpTOi5jPS5vYmopCitQUk9HMl9PQkpTID0gJChQUk9HMl9PQkpTKSAkKFBST0cyX09CSkRJUilcYWRpZy5vYmoKKworIUlGIFtFQ0hPIFBST0czX09CSlM9XiQoUFJPRzNfT0JKRElSKVwkKFNBTVBMRVNPVVJDRVM6ID0gJChQUk9HM19PQkpESVJeKVwpID4gLlxwcm9nM19vYmpzLmluY10gPT0gMAorIUlOQ0xVREUgLlxwcm9nM19vYmpzLmluYworIUlGIFtERUwgLlxwcm9nM19vYmpzLmluY10KKyFFTkRJRgorIUVMU0UKKyFFUlJPUiBQcm9ibGVtIGdlbmVyYXRpbmcgUFJPRzNfT0JKUyBsaXN0LgorIUVORElGCitQUk9HM19PQkpTID0gJChQUk9HM19PQkpTOi5jPS5vYmopCitQUk9HM19PQkpTID0gJChQUk9HM19PQkpTKSAkKFBST0czX09CSkRJUilcYWhvc3Qub2JqCisKKyFFTkRJRgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9ubHkgb3VyIGN1c3RvbSBpbmZlcmVuY2UgcnVsZXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAucmMKKworeyQoU1JDRElSKX0ucmN7JChDQVJFU19PQkpESVIpfS5yZXM6CisgICAgJChSQ19DTUQpIC9GbyAkQCAkPAorCit7JChTUkNESVIpfS5jeyQoQ0FSRVNfT0JKRElSKX0ub2JqOgorICAgICQoQ0NfQ01EKSAkKENDX0NGTEFHUykgJChDQVJFU19DRkxBR1MpIC9GbyRAIC9GZCQoQEQpXCAvYyAkPAorCit7JChTUkNESVIpfS5jeyQoUFJPRzFfT0JKRElSKX0ub2JqOgorICAgICQoQ0NfQ01EKSAkKENDX0NGTEFHUykgJChTUFJPR19DRkxBR1MpIC9GbyRAIC9GZCQoQEQpXCAvYyAkPAorCit7JChTUkNESVIpfS5jeyQoUFJPRzJfT0JKRElSKX0ub2JqOgorICAgICQoQ0NfQ01EKSAkKENDX0NGTEFHUykgJChTUFJPR19DRkxBR1MpIC9GbyRAIC9GZCQoQEQpXCAvYyAkPAorCit7JChTUkNESVIpfS5jeyQoUFJPRzNfT0JKRElSKX0ub2JqOgorICAgICQoQ0NfQ01EKSAkKENDX0NGTEFHUykgJChTUFJPR19DRkxBR1MpIC9GbyRAIC9GZCQoQEQpXCAvYyAkPAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgRGVmYXVsdCB0YXJnZXQgd2hlbiBubyBDRkcgbGlicmFyeSB0eXBlIGhhcyBiZWVuIHNwZWNpZmllZCwgICAjCisjIHJlc3VsdHMgaW4gYnVpbGRpbmcgdGFyZ2V0IEFMTCBmb3IgYWxsIGMtYXJlcyBsaWJyYXJ5IHR5cGVzLiAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyFJRiAiJChWQUxJRF9DRkdTRVQpIiA9PSAiRkFMU0UiCisKK0FMTDoKKyAgICAkKE1BS0UpIC9mIC5cTWFrZWZpbGUubXN2YyAgQ0ZHPWxpYi1yZWxlYXNlICBBTEwKKyAgICAkKE1BS0UpIC9mIC5cTWFrZWZpbGUubXN2YyAgQ0ZHPWxpYi1kZWJ1ZyAgICBBTEwKKyAgICAkKE1BS0UpIC9mIC5cTWFrZWZpbGUubXN2YyAgQ0ZHPWRsbC1yZWxlYXNlICBBTEwKKyAgICAkKE1BS0UpIC9mIC5cTWFrZWZpbGUubXN2YyAgQ0ZHPWRsbC1kZWJ1ZyAgICBBTEwKKworY2xlYW46CisgICAgQC1STURJUiAvUyAvUSAkKEJBU0VfRElSKSA+TlVMIDI+JjEKKworaW5zdGFsbDoKKyAgICBAJChNQUtFKSAvbm9sb2dvIC9mIC5cTWFrZWZpbGUubXN2YyAgQ0ZHPWxpYi1yZWxlYXNlICBpbnN0YWxsCisgICAgQCQoTUFLRSkgL25vbG9nbyAvZiAuXE1ha2VmaWxlLm1zdmMgIENGRz1saWItZGVidWcgICAgaW5zdGFsbAorICAgIEAkKE1BS0UpIC9ub2xvZ28gL2YgLlxNYWtlZmlsZS5tc3ZjICBDRkc9ZGxsLXJlbGVhc2UgIGluc3RhbGwKKyAgICBAJChNQUtFKSAvbm9sb2dvIC9mIC5cTWFrZWZpbGUubXN2YyAgQ0ZHPWRsbC1kZWJ1ZyAgICBpbnN0YWxsCisKKyFFTkRJRgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUYXJnZXRzIG9ubHkgYXZhaWxhYmxlIHdoZW4gYSBwcm9wZXIgQ0ZHIGxpYnJhcnkgdHlwZSBoYXMgYmVlbiBnaXZlbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIUlGICIkKFZBTElEX0NGR1NFVCkiID09ICJUUlVFIgorCitBTEw6IGMtYXJlcyBhY291bnRyeSBhZGlnIGFob3N0CisgICAgQAorCitjLWFyZXM6ICQoSEhFQURFUlMpICQoQ1NPVVJDRVMpICQoQ0FSRVNfT0JKRElSKSAkKENBUkVTX09CSlMpICQoQ0FSRVNfT1VURElSKQorICAgICQoQ0FSRVNfTElOSykgJChDQVJFU19MRkxBR1MpIC9vdXQ6JChDQVJFU19PVVRESVIpXCQoQ0FSRVNfVEFSR0VUKSAkKENBUkVTX09CSlMpCishICAgSUYgIiQoVVNFX1JFU19GSUxFKSIgPT0gIlRSVUUiCisgICAgQGlmIGV4aXN0ICQoQ0FSRVNfT1VURElSKVwkKENBUkVTX1RBUkdFVCkubWFuaWZlc3QgbXQgLW5vbG9nbyAtbWFuaWZlc3QgJChDQVJFU19PVVRESVIpXCQoQ0FSRVNfVEFSR0VUKS5tYW5pZmVzdCAtb3V0cHV0cmVzb3VyY2U6JChDQVJFU19PVVRESVIpXCQoQ0FSRVNfVEFSR0VUKTsyCishICAgRU5ESUYKKworYWNvdW50cnk6IGMtYXJlcyBhY291bnRyeS5jICQoU0FNUExFU09VUkNFUykgJChTQU1QTEVIRUFERVJTKSAkKFBST0cxX09CSkRJUikgJChQUk9HMV9PQkpTKSAkKFBST0cxX09VVERJUikKKyAgICAkKFNQUk9HX0xJTkspICQoU1BST0dfTEZMQUdTKSAvb3V0OiQoUFJPRzFfT1VURElSKVxhY291bnRyeS5leGUgJChQUk9HMV9PQkpTKQorICAgIEBpZiBleGlzdCAkKFBST0cxX09VVERJUilcYWNvdW50cnkuZXhlLm1hbmlmZXN0IG10IC1ub2xvZ28gLW1hbmlmZXN0ICQoUFJPRzFfT1VURElSKVxhY291bnRyeS5leGUubWFuaWZlc3QgLW91dHB1dHJlc291cmNlOiQoUFJPRzFfT1VURElSKVxhY291bnRyeS5leGU7MQorCithZGlnOiBjLWFyZXMgYWRpZy5jICQoU0FNUExFU09VUkNFUykgJChTQU1QTEVIRUFERVJTKSAkKFBST0cyX09CSkRJUikgJChQUk9HMl9PQkpTKSAkKFBST0cyX09VVERJUikKKyAgICAkKFNQUk9HX0xJTkspICQoU1BST0dfTEZMQUdTKSAvb3V0OiQoUFJPRzJfT1VURElSKVxhZGlnLmV4ZSAkKFBST0cyX09CSlMpCisgICAgQGlmIGV4aXN0ICQoUFJPRzJfT1VURElSKVxhZGlnLmV4ZS5tYW5pZmVzdCBtdCAtbm9sb2dvIC1tYW5pZmVzdCAkKFBST0cyX09VVERJUilcYWRpZy5leGUubWFuaWZlc3QgLW91dHB1dHJlc291cmNlOiQoUFJPRzJfT1VURElSKVxhZGlnLmV4ZTsxCisKK2Fob3N0OiBjLWFyZXMgYWhvc3QuYyAkKFNBTVBMRVNPVVJDRVMpICQoU0FNUExFSEVBREVSUykgJChQUk9HM19PQkpESVIpICQoUFJPRzNfT0JKUykgJChQUk9HM19PVVRESVIpCisgICAgJChTUFJPR19MSU5LKSAkKFNQUk9HX0xGTEFHUykgL291dDokKFBST0czX09VVERJUilcYWhvc3QuZXhlICQoUFJPRzNfT0JKUykKKyAgICBAaWYgZXhpc3QgJChQUk9HM19PVVRESVIpXGFob3N0LmV4ZS5tYW5pZmVzdCBtdCAtbm9sb2dvIC1tYW5pZmVzdCAkKFBST0czX09VVERJUilcYWhvc3QuZXhlLm1hbmlmZXN0IC1vdXRwdXRyZXNvdXJjZTokKFBST0czX09VVERJUilcYWhvc3QuZXhlOzEKKworJChDQVJFU19PVVRESVIpOiAkKENBUkVTX0RJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoQ0FSRVNfT1VURElSKSBta2RpciAkKENBUkVTX09VVERJUikKKworJChQUk9HMV9PVVRESVIpOiAkKFBST0cxX0RJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoUFJPRzFfT1VURElSKSBta2RpciAkKFBST0cxX09VVERJUikKKworJChQUk9HMl9PVVRESVIpOiAkKFBST0cyX0RJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoUFJPRzJfT1VURElSKSBta2RpciAkKFBST0cyX09VVERJUikKKworJChQUk9HM19PVVRESVIpOiAkKFBST0czX0RJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoUFJPRzNfT1VURElSKSBta2RpciAkKFBST0czX09VVERJUikKKworJChDQVJFU19PQkpESVIpOiAkKENBUkVTX09VVERJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoQ0FSRVNfT0JKRElSKSBta2RpciAkKENBUkVTX09CSkRJUikKKworJChQUk9HMV9PQkpESVIpOiAkKFBST0cxX09VVERJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoUFJPRzFfT0JKRElSKSBta2RpciAkKFBST0cxX09CSkRJUikKKworJChQUk9HMl9PQkpESVIpOiAkKFBST0cyX09VVERJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoUFJPRzJfT0JKRElSKSBta2RpciAkKFBST0cyX09CSkRJUikKKworJChQUk9HM19PQkpESVIpOiAkKFBST0czX09VVERJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoUFJPRzNfT0JKRElSKSBta2RpciAkKFBST0czX09CSkRJUikKKworY2xlYW46CisgICAgQC1STURJUiAvUyAvUSAkKENBUkVTX09VVERJUikgPk5VTCAyPiYxCisgICAgQC1STURJUiAvUyAvUSAkKFBST0cxX09VVERJUikgPk5VTCAyPiYxCisgICAgQC1STURJUiAvUyAvUSAkKFBST0cyX09VVERJUikgPk5VTCAyPiYxCisgICAgQC1STURJUiAvUyAvUSAkKFBST0czX09VVERJUikgPk5VTCAyPiYxCisKK2luc3RhbGw6CisgICAgQGlmIG5vdCBleGlzdCAkKENBUkVTX09VVERJUilcJChDQVJFU19UQVJHRVQpIFwKKyAgICAgICAgJChNQUtFKSAvZiAuXE1ha2VmaWxlLm1zdmMgQ0ZHPSQoQ0ZHKSBjLWFyZXMKKyAgICBAaWYgbm90IGV4aXN0ICIkKElOU1RBTExfRElSKSIgICAgIG1rZGlyICIkKElOU1RBTExfRElSKSIKKyAgICBAaWYgbm90IGV4aXN0ICIkKElOU1RBTExfRElSX0xJQikiIG1rZGlyICIkKElOU1RBTExfRElSX0xJQikiCisgICAgQGlmIG5vdCBleGlzdCAiJChJTlNUQUxMX0RJUl9JTkMpIiBta2RpciAiJChJTlNUQUxMX0RJUl9JTkMpIgorICAgIEBjb3B5IC95ICQoQ0FSRVNfT1VURElSKVwqLiogICAgICAiJChJTlNUQUxMX0RJUl9MSUIpIiA+TlVMCisgICAgQGNvcHkgL3kgJChTUkNESVIpXGFyZXMuaCAgICAgICAgICIkKElOU1RBTExfRElSX0lOQykiID5OVUwKKyAgICBAY29weSAveSAkKFNSQ0RJUilcYXJlc19idWlsZC5oICAgIiQoSU5TVEFMTF9ESVJfSU5DKSIgPk5VTAorICAgIEBjb3B5IC95ICQoU1JDRElSKVxhcmVzX3J1bGVzLmggICAiJChJTlNUQUxMX0RJUl9JTkMpIiA+TlVMCisgICAgQGNvcHkgL3kgJChTUkNESVIpXGFyZXNfdmVyc2lvbi5oICIkKElOU1RBTExfRElSX0lOQykiID5OVUwKKyAgICBAZWNobyBJbnN0YWxsZWQgYy1hcmVzICQoQ0ZHKQorCishRU5ESUYKKworJChCQVNFX0RJUik6CisgICAgQGlmIG5vdCBleGlzdCAkKEJBU0VfRElSKSBta2RpciAkKEJBU0VfRElSKQorCiskKENBUkVTX0RJUik6ICQoQkFTRV9ESVIpCisgICAgQGlmIG5vdCBleGlzdCAkKENBUkVTX0RJUikgbWtkaXIgJChDQVJFU19ESVIpCisKKyQoUFJPRzFfRElSKTogJChCQVNFX0RJUikKKyAgICBAaWYgbm90IGV4aXN0ICQoUFJPRzFfRElSKSBta2RpciAkKFBST0cxX0RJUikKKworJChQUk9HMl9ESVIpOiAkKEJBU0VfRElSKQorICAgIEBpZiBub3QgZXhpc3QgJChQUk9HMl9ESVIpIG1rZGlyICQoUFJPRzJfRElSKQorCiskKFBST0czX0RJUik6ICQoQkFTRV9ESVIpCisgICAgQGlmIG5vdCBleGlzdCAkKFBST0czX0RJUikgbWtkaXIgJChQUk9HM19ESVIpCisKKyMgRW5kIG9mIE1ha2VmaWxlLm1zdmMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL01ha2VmaWxlLm5ldHdhcmUgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5uZXR3YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGY4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9NYWtlZmlsZS5uZXR3YXJlCkBAIC0wLDAgKzEsNDMyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIGxpYmNhcmVzIChOZXRXYXJlIHZlcnNpb24gLSBnbnUgbWFrZSkKKyMjIFVzZTogbWFrZSAtZiBNYWtlZmlsZS5uZXR3YXJlCisjIworIyMgQ29tbWVudHMgdG86IEd1ZW50ZXIgS25hdWYgaHR0cDovL3d3dy5na253LmRlL3BocGJiCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBOb3ZlbGwgTkRLLgoraWZuZGVmIE5ES0JBU0UKK05ES0JBU0UJPSBjOi9ub3ZlbGwKK2VuZGlmCisKK2lmbmRlZiBJTlNURElSCitJTlNURElSCT0gLi4vYXJlcy0kKExJQkNBUkVTX1ZFUlNJT05fU1RSKS1iaW4tbncKK2VuZGlmCisKKyMgRWRpdCB0aGUgdmFycyBiZWxvdyB0byBjaGFuZ2UgTkxNIHRhcmdldCBzZXR0aW5ncy4KK1RBUkdFVFMgPSBhZGlnLm5sbSBhaG9zdC5ubG0gYWNvdW50cnkubmxtCitMVEFSR0VUID0gbGliY2FyZXMuJChMSUJFWFQpCitWRVJTSU9OCT0gJChMSUJDQVJFU19WRVJTSU9OKQorQ09QWVIJPSAkKExJQkNBUkVTX0NPUFlSSUdIVF9TVFIpCitERVNDUgk9IGNVUkwgJChzdWJzdCAuZGVmLCwkKG5vdGRpciAkQCkpICQoTElCQ0FSRVNfVkVSU0lPTl9TVFIpIC0gaHR0cDovL2N1cmwuaGF4eC5zZQorTVRTQUZFCT0gWUVTCitTVEFDSwk9IDY0MDAwCitTQ1JFRU4JPSBub25lCisjRVhQT1JUUwk9CisjIENvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IGRvbnQgd2FudCB0byBsb2FkIHByb3RlY3RlZCBhdXRvbWF0aWNhbGx5LgorI0xEUklORwk9IDMKKworIyBFZGl0IHRoZSB2YXIgYmVsb3cgdG8gcG9pbnQgdG8geW91ciBsaWIgYXJjaGl0ZWN0dXJlLgoraWZuZGVmIExJQkFSQ0gKK0xJQkFSQ0ggPSBMSUJDCitlbmRpZgorCisjIG11c3QgYmUgZXF1YWwgdG8gTkRFQlVHIG9yIERFQlVHLCBDVVJMREVCVUcKK2lmbmRlZiBEQgorREIJPSBOREVCVUcKK2VuZGlmCisjIE9wdGltaXphdGlvbjogLU88bj4gb3IgZGVidWdnaW5nOiAtZworaWZlcSAoJChEQiksTkRFQlVHKQorCU9QVAk9IC1PMgorCU9CSkRJUgk9IHJlbGVhc2UKK2Vsc2UKKwlPUFQJPSAtZworCU9CSkRJUgk9IGRlYnVnCitlbmRpZgorCisjIEluY2x1ZGUgdGhlIHZlcnNpb24gaW5mbyByZXRyaWV2ZWQgZnJvbSBjdXJsdmVyLmgKKy1pbmNsdWRlICQoT0JKRElSKS92ZXJzaW9uLmluYworCisjIFRoZSBmb2xsb3dpbmcgbGluZXMgZGVmaW5lcyB5b3VyIGNvbXBpbGVyLgoraWZkZWYgQ1dGb2xkZXIKKwlNRVRST1dFUktTID0gJChDV0ZvbGRlcikKK2VuZGlmCitpZmRlZiBNRVRST1dFUktTCisJIyBNV0NXX1BBVEggPSAkKHN1YnN0IFwsLywkKE1FVFJPV0VSS1MpKS9Ob3ZlbGwgU3VwcG9ydAorCU1XQ1dfUEFUSCA9ICQoc3Vic3QgXCwvLCQoTUVUUk9XRVJLUykpL05vdmVsbCBTdXBwb3J0L01ldHJvd2Vya3MgU3VwcG9ydAorCUNDID0gbXdjY25sbQorZWxzZQorCUNDID0gZ2NjCitlbmRpZgorIyBhIG5hdGl2ZSB3aW4zMiBhd2sgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBoZXJlOgorIyBodHRwOi8vd3d3LmdrbncubmV0L2RldmVsb3BtZW50L3ByZ3Rvb2xzL2F3ay0yMDA3MDUwMS56aXAKK0FXSwk9IGF3aworWUFDQwk9IGJpc29uIC15CitDUAk9IGNwIC1hZnYKK01LRElSCT0gbWtkaXIKKyMgUk0JPSBybSAtZgorIyBpZiB5b3Ugd2FudCB0byBtYXJrIHRoZSB0YXJnZXQgYXMgTVRTQUZFIHlvdSB3aWxsIG5lZWQgYSB0b29sIGZvcgorIyBnZW5lcmF0aW5nIHRoZSB4ZGMgZGF0YSBmb3IgdGhlIGxpbmtlcjsgaGVyZSdzIGEgbWluaW1hbCB0b29sOgorIyBodHRwOi8vd3d3LmdrbncubmV0L2RldmVsb3BtZW50L3ByZ3Rvb2xzL21reGRjLnppcAorTVBLWERDCT0gbWt4ZGMKKworIyBHbG9iYWwgZmxhZ3MgZm9yIGFsbCBjb21waWxlcnMKK0NGTEFHUwkrPSAkKE9QVCkgLUQkKERCKSAtRE5FVFdBUkUgLURIQVZFX0NPTkZJR19IIC1ub3N0ZGluYworCitpZmVxICgkKENDKSxtd2NjbmxtKQorTEQJPSBtd2xkbmxtCitMREZMQUdTCT0gLW5vc3RkbGliICQoUFJFTFVERSkgJChPQkpFWEUpICQoPDouZGVmPS5vKSAtbyAkQCAtY29tbWFuZGZpbGUKK0FSCT0gbXdsZG5sbQorQVJGTEFHUwk9IC1ub3N0ZGxpYiAtdHlwZSBsaWJyYXJ5IC1vCitMSUJFWFQJPSBsaWIKKyNSQU5MSUIJPQorQ0ZMQUdTCSs9IC1tc2dzdHlsZSBnY2MgLWdjY2luYyAtaW5saW5lIG9mZiAtb3B0IG5vaW50cmluc2ljcyAtcHJvYyA1ODYKK0NGTEFHUwkrPSAtcmVsYXhfcG9pbnRlcnMKKyNDRkxBR1MJKz0gLXcgb24KK2lmZXEgKCQoTElCQVJDSCksTElCQykKKwlQUkVMVURFID0gJChTREtfTElCQykvaW1wb3J0cy9saWJjcHJlLm8KKwlDRkxBR1MgKz0gLWFsaWduIDQKK2Vsc2UKKwkjIFBSRUxVREUgPSAkKFNES19DTElCKS9pbXBvcnRzL2NsaWJwcmUubworCSMgdG8gYXZvaWQgdGhlIF9faW5pdF8qIC8gX19kZWluaXRfKiB3aG9lcyBkb250IHVzZSBwcmVsdWRlIGZyb20gTkRLCisJUFJFTFVERSA9ICIkKE1XQ1dfUEFUSCkvbGlicmFyaWVzL3J1bnRpbWUvcHJlbHVkZS5vYmoiCisJIyBDRkxBR1MgKz0gLWluY2x1ZGUgIiQoTVdDV19QQVRIKS9oZWFkZXJzL25sbV9jbGliX3ByZWZpeC5oIgorCUNGTEFHUyArPSAtYWxpZ24gMQorZW5kaWYKK2Vsc2UKK0xECT0gbmxtY29udgorTERGTEFHUwk9IC1UCitBUgk9IGFyCitBUkZMQUdTCT0gLWNxCitMSUJFWFQJPSBhCitSQU5MSUIJPSByYW5saWIKK0NGTEFHUyAgKz0gLW0zMgorQ0ZMQUdTICArPSAtZm5vLWJ1aWx0aW4gLWZuby1zdHJpY3QtYWxpYXNpbmcKK2lmZXEgKCQoZmluZHN0cmluZyBnY2MsJChDQykpLGdjYykKK0NGTEFHUyAgKz0gLWZwY2Mtc3RydWN0LXJldHVybgorZW5kaWYKK0NGTEFHUyAgKz0gLVdhbGwgIyAtcGVkYW50aWMKK2lmZXEgKCQoTElCQVJDSCksTElCQykKKwlQUkVMVURFID0gJChTREtfTElCQykvaW1wb3J0cy9saWJjcHJlLmdjYy5vCitlbHNlCisJIyBQUkVMVURFID0gJChTREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLmdjYy5vCisJIyB0byBhdm9pZCB0aGUgX19pbml0XyogLyBfX2RlaW5pdF8qIHdob2VzIGRvbnQgdXNlIHByZWx1ZGUgZnJvbSBOREsKKwkjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvbWtfbmxtL2djY19wcmUuemlwCisJUFJFTFVERSA9ICQoTkRLX1JPT1QpL3ByZS9wcmVsdWRlLm8KKwlDRkxBR1MgKz0gLWluY2x1ZGUgJChOREtCQVNFKS9ubG1jb252L2dlbmxtLmgKK2VuZGlmCitlbmRpZgorCitOREtfUk9PVCA9ICQoTkRLQkFTRSkvbmRrCitTREtfQ0xJQiA9ICQoTkRLX1JPT1QpL253c2RrCitTREtfTElCQyA9ICQoTkRLX1JPT1QpL2xpYmMKKworaWZlcSAoJChMSUJBUkNIKSxMSUJDKQorCUlOQ0xVREVTICs9IC1JJChTREtfTElCQykvaW5jbHVkZQorCSMgSU5DTFVERVMgKz0gLUkkKFNES19MSUJDKS9pbmNsdWRlL25rcworCSMgSU5DTFVERVMgKz0gLUkkKFNES19MSUJDKS9pbmNsdWRlL3dpbnNvY2sKKwlDRkxBR1MgKz0gLURfUE9TSVhfU09VUkNFCitlbHNlCisJSU5DTFVERVMgKz0gLUkkKFNES19DTElCKS9pbmNsdWRlL25sbQorCSMgSU5DTFVERVMgKz0gLUkkKFNES19DTElCKS9pbmNsdWRlL25sbS9vYnNvbGV0ZQorCSMgSU5DTFVERVMgKz0gLUkkKFNES19DTElCKS9pbmNsdWRlCitlbmRpZgoraWZlcSAoJChEQiksQ1VSTERFQlVHKQorSU5DTFVERVMgKz0gLUkuLi9pbmNsdWRlCitlbmRpZgorQ0ZMQUdTCSs9IC1JLiAkKElOQ0xVREVTKQorCitpZmVxICgkKE1UU0FGRSksWUVTKQorCVhEQ09QVCA9IC1uCitlbmRpZgoraWZlcSAoJChNVFNBRkUpLE5PKQorCVhEQ09QVCA9IC11CitlbmRpZgorCitpZmVxICgkKGZpbmRzdHJpbmcgL3NoLCQoU0hFTEwpKSwvc2gpCitETAk9ICcKKyMtaW5jbHVkZSAkKE5ES0JBU0UpL25sbWNvbnYvbmNwZnMuaW5jCitlbmRpZgorCisjIE1ha2VmaWxlLmluYyBwcm92aWRlcyB0aGUgQ1NPVVJDRVMgYW5kIEhIRUFERVJTIGRlZmluZXMKK2luY2x1ZGUgTWFrZWZpbGUuaW5jCisKK09CSkxJQgk6PSAkKHBhdHN1YnN0ICUuYywkKE9CSkRJUikvJS5vLCQoc3RyaXAgJChDU09VUkNFUykpKQorT0JKRVhFCT0gJChPQkpMSUIpICQoT0JKRElSKS9hcmVzX2dldG9wdC5vCisKKy5QSE9OWTogbGliIG5sbSBwcmVidWlsZCBkaXN0IGluc3RhbGwgY2xlYW4KKworbGliOiBwcmVidWlsZCAkKExUQVJHRVQpCisKK25sbTogcHJlYnVpbGQgJChUQVJHRVRTKQorCitwcmVidWlsZDogJChPQkpESVIpIGFyZXNfYnVpbGQuaCAkKE9CSkRJUikvdmVyc2lvbi5pbmMgYXJlc19jb25maWcuaAorCitpbnN0YWxsOiAkKElOU1RESVIpIGFsbAorCUAkKENQKSAqLm5sbSAkKElOU1RESVIpCisJQCQoQ1ApIC4uL0NIQU5HRVMgJChJTlNURElSKQorCUAkKENQKSAuLi9DT1BZSU5HICQoSU5TVERJUikKKwlAJChDUCkgLi4vUkVBRE1FICQoSU5TVERJUikKKwlAJChDUCkgLi4vUkVMRUFTRS1OT1RFUyAkKElOU1RESVIpCisKK2NsZWFuOgorCS0kKFJNKSAkKExUQVJHRVQpICQoVEFSR0VUUykgYXJlc19jb25maWcuaAorCS0kKFJNKSAtciAkKE9CSkRJUikKKwktJChSTSkgLXIgYXJwYQorCislLiQoTElCRVhUKTogJChPQkpMSUIpCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlALSQoUk0pICRACisJQCQoQVIpICQoQVJGTEFHUykgJEAgJF4KK2lmZGVmIFJBTkxJQgorCUAkKFJBTkxJQikgJEAKK2VuZGlmCisKKyUubmxtOiAkKE9CSkRJUikvJS5kZWYgJChPQkpESVIpLyUubyAkKE9CSkRJUikvJS54ZGMgJChPQkpFWEUpCisJQGVjaG8gTGlua2luZyAkQAorCUAtJChSTSkgJEAKKwlAJChMRCkgJChMREZMQUdTKSAkPAorCiskKE9CSkRJUikgJChJTlNURElSKToKKwlAJChNS0RJUikgJEAKKworJChPQkpESVIpLyUubzogJS5jCisjCUBlY2hvIENvbXBpbGluZyAkPAorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCiskKE9CSkRJUikvdmVyc2lvbi5pbmM6IGFyZXNfdmVyc2lvbi5oICQoT0JKRElSKQorCUBlY2hvIENyZWF0aW5nICRACisJQCQoQVdLKSAtZiBnZXRfdmVyLmF3ayAkPCA+ICRACisKKyQoT0JKRElSKS8lLnhkYzogTWFrZWZpbGUubmV0d2FyZQorCUBlY2hvIENyZWF0aW5nICRACisJQCQoTVBLWERDKSAkKFhEQ09QVCkgJEAKKworJChPQkpESVIpLyUuZGVmOiBNYWtlZmlsZS5uZXR3YXJlCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAZWNobyAkKERMKSMgREVGIGZpbGUgZm9yIGxpbmtpbmcgd2l0aCAkKExEKSQoREwpID4gJEAKKwlAZWNobyAkKERMKSMgRG8gbm90IGVkaXQgdGhpcyBmaWxlIC0gaXQgaXMgY3JlYXRlZCBieSBtYWtlISQoREwpID4+ICRACisJQGVjaG8gJChETCkjIEFsbCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0ISEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpIyQoREwpID4+ICRACisJQGVjaG8gJChETCljb3B5cmlnaHQgIiQoQ09QWVIpIiQoREwpID4+ICRACisJQGVjaG8gJChETClkZXNjcmlwdGlvbiAiJChERVNDUikiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKXZlcnNpb24gJChWRVJTSU9OKSQoREwpID4+ICRACitpZmRlZiBOTE1UWVBFCisJQGVjaG8gJChETCl0eXBlICQoTkxNVFlQRSkkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFNUQUNLCisJQGVjaG8gJChETClzdGFjayAkKFNUQUNLKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgU0NSRUVOCisJQGVjaG8gJChETClzY3JlZW5uYW1lICIkKFNDUkVFTikiJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKXNjcmVlbm5hbWUgIkRFRkFVTFQiJChETCkgPj4gJEAKK2VuZGlmCitpZmVxICgkKERCKSxERUJVRykKKwlAZWNobyAkKERMKWRlYnVnJChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETCl0aHJlYWRuYW1lICIkXiIkKERMKSA+PiAkQAoraWZkZWYgWERDT1BUCisJQGVjaG8gJChETCl4ZGNkYXRhICQoQDouZGVmPS54ZGMpJChETCkgPj4gJEAKK2VuZGlmCitpZmVxICgkKExEUklORyksMCkKKwlAZWNobyAkKERMKWZsYWdfb24gMTYkKERMKSA+PiAkQAorZW5kaWYKK2lmZXEgKCQoTERSSU5HKSwzKQorCUBlY2hvICQoREwpZmxhZ19vbiA1MTIkKERMKSA+PiAkQAorZW5kaWYKK2lmZXEgKCQoTElCQVJDSCksQ0xJQikKKwlAZWNobyAkKERMKXN0YXJ0IF9QcmVsdWRlJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWV4aXQgX1N0b3AkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKFNES19DTElCKS9pbXBvcnRzL2NsaWIuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChTREtfQ0xJQikvaW1wb3J0cy90aHJlYWRzLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoU0RLX0NMSUIpL2ltcG9ydHMvbmxtbGliLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoU0RLX0NMSUIpL2ltcG9ydHMvc29ja2xpYi5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpbW9kdWxlIGNsaWIkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpZmxhZ19vbiA2NCQoREwpID4+ICRACisJQGVjaG8gJChETClwc2V1ZG9wcmVlbXB0aW9uJChETCkgPj4gJEAKKwlAZWNobyAkKERMKXN0YXJ0IF9MaWJDUHJlbHVkZSQoREwpID4+ICRACisJQGVjaG8gJChETClleGl0IF9MaWJDUG9zdGx1ZGUkKERMKSA+PiAkQAorCUBlY2hvICQoREwpY2hlY2sgX0xpYkNDaGVja1VubG9hZCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoU0RLX0xJQkMpL2ltcG9ydHMvbGliYy5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKFNES19MSUJDKS9pbXBvcnRzL25ldHdhcmUuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW1vZHVsZSBsaWJjJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBNT0RVTEVTCisJQGVjaG8gJChETCltb2R1bGUgJChNT0RVTEVTKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgRVhQT1JUUworCUBlY2hvICQoREwpZXhwb3J0ICQoRVhQT1JUUykkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIElNUE9SVFMKKwlAZWNobyAkKERMKWltcG9ydCAkKElNUE9SVFMpJChETCkgPj4gJEAKK2VuZGlmCitpZmVxICgkKExEKSxubG1jb252KQorCUBlY2hvICQoREwpaW5wdXQgJChQUkVMVURFKSQoREwpID4+ICRACisJQGVjaG8gJChETClpbnB1dCAkKE9CSkVYRSkkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW5wdXQgJChAOi5kZWY9Lm8pJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW91dHB1dCAkKG5vdGRpciAkKEA6LmRlZj0ubmxtKSkkKERMKSA+PiAkQAorZW5kaWYKKworYXJlc19jb25maWcuaDogTWFrZWZpbGUubmV0d2FyZQorCUBlY2hvIENyZWF0aW5nICRACisJQGVjaG8gJChETCkvKiAkQCBmb3IgTmV0V2FyZSB0YXJnZXQuJChETCkgPiAkQAorCUBlY2hvICQoREwpKiogRG8gbm90IGVkaXQgdGhpcyBmaWxlIC0gaXQgaXMgY3JlYXRlZCBieSBtYWtlISQoREwpID4+ICRACisJQGVjaG8gJChETCkqKiBBbGwgeW91ciBjaGFuZ2VzIHdpbGwgYmUgbG9zdCEhJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSovJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNpZm5kZWYgTkVUV0FSRSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZXJyb3IgVGhpcyAkKG5vdGRpciAkQCkgaXMgY3JlYXRlZCBmb3IgTmV0V2FyZSBwbGF0Zm9ybSEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2VuZGlmJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgVkVSU0lPTiAiJChMSUJDQVJFU19WRVJTSU9OX1NUUikiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImEgc3VpdGFibGUgY3VybCBtYWlsaW5nIGxpc3QgPT4gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLyIkKERMKSA+PiAkQAoraWZlcSAoJChMSUJBUkNIKSxDTElCKQorCUBlY2hvICQoREwpI2RlZmluZSBPUyAiaTU4Ni1wYy1jbGliLU5ldFdhcmUiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJJQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUk5JQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBORVREQl9VU0VfSU5URVJORVQgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIGNoYXIgKiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgY2hhciQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkciQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9RVUFMX0FSRzIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1RZUEVfQVJHMiBjaGFyICokKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1RZUEVfUkVUViBpbnQkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBPUyAiaTU4Ni1wYy1saWJjLU5ldFdhcmUiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9ETEZDTl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0RMT1BFTiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTE9OR0xPTkcgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RESU5UX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJMQ0FUIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUkxDUFkgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSVE9MTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0FGX0lORVQ2IDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1BGX0lORVQ2IDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJVQ1RfSU42X0FERFIgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgdm9pZCAqJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgc2l6ZV90JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkciQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1FVQUxfQVJHMiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIHZvaWQgKiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIHNzaXplX3QkKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9BU1NFUlRfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9FUlJOT19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0VSUl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0ZDTlRMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VURU5WIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9HRVRQUk9UT0JZTkFNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9HTVRJTUVfUiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9JTkVUX0FERFIgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfSU9DVEwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfUkVDViAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TRUxFQ1QgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0VORCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TRVRKTVBfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TSUdOQUwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0lHTkFMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NPQ0tFVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVERMSUJfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJEVVAgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSRlRJTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSU1RSIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlVDVF9BRERSSU5GTyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfSU9DVExfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVElNRV9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1VOQU1FIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1VOSVNURF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1VUSU1FIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1VUSU1FX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfV1JJVEVWIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTVERDX0hFQURFUlMgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxJChETCkgPj4gJEAKK2lmZGVmIE5XX1dJTlNPQ0sKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVCAxJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NPQ0tJT19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX05FVERCX0ggMSQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpI2lmZGVmIF9fR05VQ19fJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2Vsc2UkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19DOTkgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZW5kaWYkKERMKSA+PiAkQAorCitGT1JDRTogOworCithcmVzX2J1aWxkLmg6IE1ha2VmaWxlLm5ldHdhcmUgRk9SQ0UKKwlAZWNobyBDcmVhdGluZyAkQAorCUBlY2hvICQoREwpLyogJEAgaW50ZW5kZWQgZm9yIE5ldFdhcmUgdGFyZ2V0LiQoREwpID4gJEAKKwlAZWNobyAkKERMKSoqIERvIG5vdCBlZGl0IHRoaXMgZmlsZSAtIGl0IGlzIGNyZWF0ZWQgYnkgbWFrZSEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpKiogQWxsIHlvdXIgY2hhbmdlcyB3aWxsIGJlIGxvc3QhISQoREwpID4+ICRACisJQGVjaG8gJChETCkqLyQoREwpID4+ICRACisJQGVjaG8gJChETCkjaWZuZGVmIE5FVFdBUkUkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2Vycm9yIFRoaXMgJChub3RkaXIgJEApIGlzIGNyZWF0ZWQgZm9yIE5ldFdhcmUgcGxhdGZvcm0hJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlbmRpZiQoREwpID4+ICRACisJQGVjaG8gJChETCkjaWZuZGVmIF9fQ0FSRVNfQlVJTERfSCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIF9fQ0FSRVNfQlVJTERfSCQoREwpID4+ICRACitpZmVxICgkKExJQkFSQ0gpLENMSUIpCisJQGVjaG8gJChETCkjZGVmaW5lIENBUkVTX1RZUEVPRl9BUkVTX1NPQ0tMRU5fVCBpbnQkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1QgdW5zaWduZWQgaW50JChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETCl0eXBlZGVmIENBUkVTX1RZUEVPRl9BUkVTX1NPQ0tMRU5fVCBhcmVzX3NvY2tsZW5fdDskKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2VuZGlmIC8qIF9fQ0FSRVNfQlVJTERfSCAqLyQoREwpID4+ICRACmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9ORVdTIGIvYXAvYXBwL2MtYXJlcy9zcmMvTkVXUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWEyZWVlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvTkVXUwpAQCAtMCwwICsxLDIxIEBACitNYWpvciBjaGFuZ2VzIHNpbmNlOgorKiBzZWUgdGhlIENIQU5HRVMgZmlsZQorCitNYWpvciBjaGFuZ2VzIGluIHJlbGVhc2UgMS4xLjE6CisqIGFyZXMgc2hvdWxkIG5vdyBjb21waWxlIGFzIEMrKyBjb2RlIChubyBsb25nZXIgdXNlcyByZXNlcnZlZCB3b3JkCisgICJjbGFzcyIpLgorKiBBZGRlZCBTUlYgc3VwcG9ydCB0byBhZGlnIHRlc3QgcHJvZ3JhbS4KKyogRml4ZWQgYSBmZXcgZXJyb3IgaGFuZGxpbmcgYnVncyBpbiBxdWVyeSBwcm9jZXNzaW5nLgorCitNYWpvciBjaGFuZ2VzIGluIHJlbGVhc2UgMS4xLjA6CisqIEFkZGVkIGFyZXNfZnJlZV9zdHJpbmcoKSBmdW5jdGlvbiBzbyB0aGF0IG1lbW9yeSBjYW4gYmUgZnJlZWQgaW4gdGhlCisgIHNhbWUgbGF5ZXIgYXMgaXQgaXMgYWxsb2NhdGVkLCBhIGRlc2lyYWJsZSBmZWF0dXJlIGluIHNvbWUKKyAgZW52aXJvbm1lbnRzLgorKiBBIGZldyBvZiB0aGUgYXJlc19kbnMuaCBtYWNyb3MgYXJlIGZpeGVkIHRvIHVzZSB0aGUgcHJvcGVyIGJpdHdpc2UKKyAgb3BlcmF0b3IuCisqIEZpeGVkIGEgY291cGxlIG9mIGZlbmNlcG9zdHMgZml4ZWQgaW4gYXJlc19leHBhbmRfbmFtZSgpJ3MKKyAgYm91bmRzLWNoZWNraW5nLgorKiBJbiBwcm9jZXNzX3RpbWVvdXRzKCksIGV4dHJhY3QgcXVlcnktPm5leHQgYmVmb3JlIGNhbGxpbmcKKyAgbmV4dF9zZXJ2ZXIoKSBhbmQgcG9zc2libHkgZnJlZWluZyB0aGUgcXVlcnkgc3RydWN0dXJlLgorKiBDYXN0ZWQgYXJndW1lbnRzIHRvIGN0eXBlIG1hY3JvcyBjYXN0ZWQgdG8gdW5zaWduZWQgY2hhciwgc2luY2Ugbm90CisgIGFsbCBjaGFyIHZhbHVlcyBhcmUgdmFsaWQgaW5wdXRzIHRvIHRob3NlIG1hY3JvcyBhY2NvcmRpbmcgdG8gQU5TSS4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL1JFQURNRS5jYXJlcyBiL2FwL2FwcC9jLWFyZXMvc3JjL1JFQURNRS5jYXJlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGVlNDZlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvUkVBRE1FLmNhcmVzCkBAIC0wLDAgKzEsMTUgQEAKK2MtYXJlcworPT09PT09CisKK1RoaXMgcGFja2FnZSBpcyBiYXNlZCBvbiBhcmVzIDEuMS4xICh3cml0dGVuIGJ5IEdyZWcgSHVkc29uKS4gRGFuaWVsIFN0ZW5iZXJnCitkZWNpZGVkIHRvIGZvcmsgYW5kIHJlbGVhc2UgYSBzZXBhcmF0ZSBwcm9qZWN0IHNpbmNlIHRoZSBvcmlnaW5hbCBhcmVzIGF1dGhvcgorZGlkbid0IHdhbnQgdGhlIGltcHJvdmVtZW50cyB0aGF0IHdlcmUgdml0YWwgZm9yIG91ciB1c2Ugb2YgaXQuCisKK1RoaXMgcGFja2FnZSBpcyBkdWJiZWQgJ2MtYXJlcycgc2luY2UgRGFuaWVsIHdhbnRlZCB0aGlzIGZvciB1c2Ugd2l0aGluIHRoZQorY3VybCBwcm9qZWN0IChoZW5jZSB0aGUgbGV0dGVyIEMpIGFuZCBpdCBtYWtlcyBhIG5pY2UgcHVuLiBjLWFyZXMgaXMgbm90IEFQSQorY29tcGF0aWJsZSB3aXRoIGFyZXM6IGEgbmV3IG5hbWUgbWFrZXMgdGhhdCBtb3JlIG9idmlvdXMgdG8gdGhlIHB1YmxpYy4KKworVGhlIG9yaWdpbmFsIGxpYmFyZXMgd2FzIGRpc3RyaWJ1dGVkIGF0CitmdHA6Ly9hdGhlbmEtZGlzdC5taXQuZWR1OnB1Yi9BVEhFTkEvYXJlcyAod2hpY2ggc2VlbXMgdG8gbm90IGJlIGFsaXZlCithbnltb3JlKS4gIEEgbG9jYWwgY29weSBvZiB0aGUgb3JpZ2luYWwgYXJlcyBwYWNrYWdlIGlzIGtlcHQgaGVyZToKK2h0dHBzOi8vYy1hcmVzLmhheHguc2UvZG93bmxvYWQvYXJlcy0xLjEuMS50YXIuZ3oKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL1JFQURNRS5tZCBiL2FwL2FwcC9jLWFyZXMvc3JjL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGYzYTcxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNjQgQEAKK2MtYXJlcworPT09PT09CisKK1shW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL2MtYXJlcy9jLWFyZXMuc3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvYy1hcmVzL2MtYXJlcykKK1shW1dpbmRvd3MgQnVpbGQgU3RhdHVzXShodHRwczovL2NpLmFwcHZleW9yLmNvbS9hcGkvcHJvamVjdHMvc3RhdHVzLzAzaTcxNTE3NzJlcTN3bjMvYnJhbmNoL21hc3Rlcj9zdmc9dHJ1ZSldKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL3Byb2plY3QvYy1hcmVzL2MtYXJlcykKK1shW0NvdmVyYWdlIFN0YXR1c10oaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vcmVwb3MvYy1hcmVzL2MtYXJlcy9iYWRnZS5zdmc/YnJhbmNoPW1hc3RlciZzZXJ2aWNlPWdpdGh1YildKGh0dHBzOi8vY292ZXJhbGxzLmlvL2dpdGh1Yi9jLWFyZXMvYy1hcmVzP2JyYW5jaD1tYXN0ZXIpCitbIVtDSUkgQmVzdCBQcmFjdGljZXNdKGh0dHBzOi8vYmVzdHByYWN0aWNlcy5jb3JlaW5mcmFzdHJ1Y3R1cmUub3JnL3Byb2plY3RzLzI5MS9iYWRnZSldKGh0dHBzOi8vYmVzdHByYWN0aWNlcy5jb3JlaW5mcmFzdHJ1Y3R1cmUub3JnL3Byb2plY3RzLzI5MSkKKworVGhpcyBpcyBjLWFyZXMsIGFuIGFzeW5jaHJvbm91cyByZXNvbHZlciBsaWJyYXJ5LiAgSXQgaXMgaW50ZW5kZWQgZm9yCithcHBsaWNhdGlvbnMgd2hpY2ggbmVlZCB0byBwZXJmb3JtIEROUyBxdWVyaWVzIHdpdGhvdXQgYmxvY2tpbmcsIG9yIG5lZWQgdG8KK3BlcmZvcm0gbXVsdGlwbGUgRE5TIHF1ZXJpZXMgaW4gcGFyYWxsZWwuICBUaGUgcHJpbWFyeSBleGFtcGxlcyBvZiBzdWNoCithcHBsaWNhdGlvbnMgYXJlIHNlcnZlcnMgd2hpY2ggY29tbXVuaWNhdGUgd2l0aCBtdWx0aXBsZSBjbGllbnRzIGFuZCBwcm9ncmFtcword2l0aCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLgorCitUaGUgZnVsbCBzb3VyY2UgY29kZSBpcyBhdmFpbGFibGUgaW4gdGhlICdjLWFyZXMnIHJlbGVhc2UgYXJjaGl2ZXMsIGFuZCBpbiBhCitnaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdGh1Yi5jb20vYy1hcmVzL2MtYXJlcworCitJZiB5b3UgZmluZCBidWdzLCBjb3JyZWN0IGZsYXdzLCBoYXZlIHF1ZXN0aW9ucyBvciBoYXZlIGNvbW1lbnRzIGluIGdlbmVyYWwgaW4KK3JlZ2FyZCB0byBjLWFyZXMgKG9yIGJ5IGFsbCBtZWFucyB0aGUgb3JpZ2luYWwgYXJlcyB0b28pLCBnZXQgaW4gdG91Y2ggd2l0aCB1cworb24gdGhlIGMtYXJlcyBtYWlsaW5nIGxpc3Q6IGh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jLWFyZXMKKworYy1hcmVzIGlzIG9mIGNvdXJzZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBNSVQtc3R5bGUgbGljZW5zZSBhcyB0aGUKK29yaWdpbmFsIGFyZXMuCisKK1lvdSdsbCBmaW5kIGFsbCBjLWFyZXMgZGV0YWlscyBhbmQgbmV3cyBoZXJlOgorICAgICAgICBodHRwczovL2MtYXJlcy5oYXh4LnNlLworCisKK05vdGVzIGZvciBjLWFyZXMgaGFja2VycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGRpc3RyaWJ1dGVkIGBhcmVzX2J1aWxkLmhgIGZpbGUgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIG9uIHN5c3RlbXMKKyAgd2hpY2ggY2FuIG5vdCBydW4gdGhlIGFsc28gZGlzdHJpYnV0ZWQgY29uZmlndXJlIHNjcmlwdC4KKworKiBUaGUgZGlzdHJpYnV0ZWQgYGFyZXNfYnVpbGQuaGAgZmlsZSBpcyBnZW5lcmF0ZWQgYXMgYSBjb3B5IG9mIGBhcmVzX2J1aWxkLmguZGlzdGAKKyAgd2hlbiB0aGUgYy1hcmVzIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiBhcmNoaXZlIGZpbGUgaXMgb3JpZ2luYWxseSBjcmVhdGVkLgorCisqIElmIHlvdSBjaGVjayBvdXQgZnJvbSBnaXQgb24gYSBub24tY29uZmlndXJlIHBsYXRmb3JtLCB5b3UgbXVzdCBydW4gdGhlCisgIGFwcHJvcHJpYXRlIGBidWlsZGNvbmYqYCBzY3JpcHQgdG8gc2V0IHVwIGBhcmVzX2J1aWxkLmhgIGFuZCBvdGhlciBsb2NhbCBmaWxlcworICBiZWZvcmUgYmVpbmcgYWJsZSB0byBjb21waWxlIHRoZSBsaWJyYXJ5LgorCisqIE9uIHN5c3RlbXMgY2FwYWJsZSBvZiBydW5uaW5nIHRoZSBgY29uZmlndXJlYCBzY3JpcHQsIHRoZSBgY29uZmlndXJlYCBwcm9jZXNzCisgIHdpbGwgb3ZlcndyaXRlIHRoZSBkaXN0cmlidXRlZCBgYXJlc19idWlsZC5oYCBmaWxlIHdpdGggb25lIHRoYXQgaXMgc3VpdGFibGUKKyAgYW5kIHNwZWNpZmljIHRvIHRoZSBsaWJyYXJ5IGJlaW5nIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0LCB0aGlzIG5ldyBmaWxlIGlzCisgIGdlbmVyYXRlZCBmcm9tIHRoZSBgYXJlc19idWlsZC5oLmluYCB0ZW1wbGF0ZSBmaWxlLgorCisqIElmIHlvdSBpbnRlbmQgdG8gZGlzdHJpYnV0ZSBhbiBhbHJlYWR5IGNvbXBpbGVkIGMtYXJlcyBsaWJyYXJ5IHlvdSAqKk1VU1QqKgorICBhbHNvIGRpc3RyaWJ1dGUgYWxvbmcgd2l0aCBpdCB0aGUgZ2VuZXJhdGVkIGBhcmVzX2J1aWxkLmhgIHdoaWNoIGhhcyBiZWVuCisgIHVzZWQgdG8gY29tcGlsZSBpdC4gT3RoZXJ3aXNlIHRoZSBsaWJyYXJ5IHdpbGwgYmUgb2Ygbm8gdXNlIGZvciB0aGUgdXNlcnMgb2YKKyAgdGhlIGxpYnJhcnkgdGhhdCB5b3UgaGF2ZSBidWlsdC4gSXQgaXMgKip5b3VyKiogcmVzcG9uc2liaWxpdHkgdG8gcHJvdmlkZSB0aGlzCisgIGZpbGUuIE5vIG9uZSBhdCB0aGUgYy1hcmVzIHByb2plY3QgY2FuIGtub3cgaG93IHlvdSBoYXZlIGJ1aWx0IHRoZSBsaWJyYXJ5LgorCisqIEZpbGUgYGFyZXNfYnVpbGQuaGAgaW5jbHVkZXMgcGxhdGZvcm0gYW5kIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW50IGluZm8sCisgIGFuZCBtdXN0IG5vdCBiZSBtb2RpZmllZCBieSBhbnlvbmUuIENvbmZpZ3VyZSBzY3JpcHQgZ2VuZXJhdGVzIGl0IGZvciB5b3UuCisKKyogV2UgY2Fubm90IGFzc3VtZSBhbnl0aGluZyBlbHNlIGJ1dCB2ZXJ5IGJhc2ljIGNvbXBpbGVyIGZlYXR1cmVzIGJlaW5nCisgIHByZXNlbnQuIFdoaWxlIGMtYXJlcyByZXF1aXJlcyBhbiBBTlNJIEMgY29tcGlsZXIgdG8gYnVpbGQsIHNvbWUgb2YgdGhlCisgIGVhcmxpZXIgQU5TSSBjb21waWxlcnMgY2xlYXJseSBjYW4ndCBkZWFsIHdpdGggc29tZSBwcmVwcm9jZXNzb3Igb3BlcmF0b3JzLgorCisqIE5ld2xpbmVzIG11c3QgcmVtYWluIHVuaXgtc3R5bGUgZm9yIG9sZGVyIGNvbXBpbGVycycgc2FrZS4KKworKiBDb21tZW50cyBtdXN0IGJlIHdyaXR0ZW4gaW4gdGhlIG9sZC1zdHlsZSAvKiB1bm5lc3RlZCBDLWZhc2hpb24gKi8KKworKiBUcnkgdG8ga2VlcCBsaW5lIGxlbmd0aHMgYmVsb3cgODAgY29sdW1ucy4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL1JFQURNRS5tc3ZjIGIvYXAvYXBwL2MtYXJlcy9zcmMvUkVBRE1FLm1zdmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmODcwMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL1JFQURNRS5tc3ZjCkBAIC0wLDAgKzEsMTQyIEBACisKKworICAgICAgICAgICAgICAgICAgICAgICAgICBfX18gICAgICAgX18gXyBfIF9fIF9fXyAgX19fIAorICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IF9fXyAvIF9gIHwgJ19fLyBfIFwvIF9ffAorICAgICAgICAgICAgICAgICAgICAgICAgfCAoXyAgfF9fX3wgKF98IHwgfCB8ICBfXy9cX18gXAorICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198ICAgICBcX18sX3xffCAgXF9fX3x8X19fLworCisKKyAgICAgICAgICAgICAgICBIb3cgdG8gYnVpbGQgYy1hcmVzIHVzaW5nIE1TVkMgb3IgVmlzdWFsIFN0dWRpbworICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworICBIb3cgdG8gYnVpbGQgdXNpbmcgTVNWQyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgT3BlbiBhIGNvbW1hbmQgcHJvbXB0IHdpbmRvdyBhbmQgZW5zdXJlIHRoYXQgdGhlIGVudmlyb25tZW50IGlzIHByb3Blcmx5CisgIHNldCB1cCBpbiBvcmRlciB0byB1c2UgTVNWQyBvciBWaXN1YWwgU3R1ZGlvIGNvbXBpbGVyIHRvb2xzLgorCisgIENoYW5nZSB0byBjLWFyZXMgc291cmNlIGZvbGRlciB3aGVyZSBNYWtlZmlsZS5tc3ZjIGZpbGUgaXMgbG9jYXRlZCBhbmQgcnVuOgorCisgID4gbm1ha2UgLWYgTWFrZWZpbGUubXN2YworCisgIFRoaXMgd2lsbCBidWlsZCBhbGwgYy1hcmVzIGxpYnJhcmllcyBhcyB3ZWxsIGFzIHRocmVlIHNhbXBsZSBwcm9ncmFtcy4KKworICBPbmNlIHRoZSBhYm92ZSBjb21tYW5kIGhhcyBmaW5pc2hlZCBhIG5ldyBmb2xkZXIgbmFtZWQgTVNWQ1hYIHdpbGwgZXhpc3QKKyAgYmVsb3cgdGhlIGZvbGRlciB3aGVyZSBtYWtlZmlsZS5tc3ZjIGlzIGZvdW5kLiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyCisgIGRlcGVuZHMgb24gdGhlIE1TVkMgY29tcGlsZXIgdmVyc2lvbiBiZWluZyB1c2VkIHRvIGJ1aWxkIGMtYXJlcy4KKworICBCZWxvdyB0aGUgTVNWQ1hYIGZvbGRlciB0aGVyZSB3aWxsIGV4aXN0IGZvdXIgZm9sZGVycyBuYW1lZCAnY2FyZXMnLAorICAnYWhvc3QnLCAnYWNvdW50cnknLCBhbmQgJ2FkaWcnLiBUaGUgJ2NhcmVzJyBmb2xkZXIgaXMgdGhlIG9uZSB0aGF0CisgIGhvbGRzIHRoZSBjLWFyZXMgbGlicmFyaWVzIHlvdSBoYXZlIGp1c3QgZ2VuZXJhdGVkLCB0aGUgb3RoZXIgdGhyZWUKKyAgaG9sZCBzYW1wbGUgcHJvZ3JhbXMgdGhhdCB1c2UgdGhlIGxpYnJhcmllcy4KKworICBUaGUgYWJvdmUgY29tbWFuZCBidWlsZHMgZm91ciB2ZXJzaW9ucyBvZiB0aGUgYy1hcmVzIGxpYnJhcnksIGR5bmFtaWMKKyAgYW5kIHN0YXRpYyB2ZXJzaW9ucyBhbmQgZWFjaCBvbmUgaW4gcmVsZWFzZSBhbmQgZGVidWcgZmxhdm91cnMuIEVhY2gKKyAgb2YgdGhlc2UgaXMgZm91bmQgaW4gZm9sZGVycyBuYW1lZCBkbGwtcmVsZWFzZSwgZGxsLWRlYnVnLCBsaWItcmVsZWFzZSwKKyAgYW5kIGxpYi1kZWJ1Zywgd2hpY2ggaGFuZyBmcm9tIHRoZSAnY2FyZXMnIGZvbGRlciBtZW50aW9uZWQgYWJvdmUuIEVhY2gKKyAgc2FtcGxlIHByb2dyYW0gYWxzbyBoYXMgZm9sZGVycyB3aXRoIHRoZSBzYW1lIG5hbWVzIHRvIHJlZmxlY3Qgd2hpY2gKKyAgbGlicmFyeSB2ZXJzaW9uIGl0IGlzIHVzaW5nLgorCisKKyAgSG93IHRvIGluc3RhbGwgdXNpbmcgTVNWQyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJbiBvcmRlciB0byBhbGxvdyBlYXN5IHVzYWdlIG9mIGMtYXJlcyBsaWJyYXJpZXMgaXQgbWF5IGJlIGNvbnZlbmllbnQgdG8KKyAgaW5zdGFsbCBjLWFyZXMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMgdG8gYSBjb21tb24gc3ViZGlyZWN0b3J5IHRyZWUuCisKKyAgT25jZSB0aGF0IGMtYXJlcyBsaWJyYXJpZXMgaGF2ZSBiZWVuIGJ1aWx0IHVzaW5nIHByb2NlZHVyZSBkZXNjcmliZWQgYWJvdmUsCisgIHVzZSBzYW1lIGNvbW1hbmQgcHJvbXB0IHdpbmRvdyB0byBkZWZpbmUgZW52aXJvbm1lbnQgdmFyaWFibGUgSU5TVEFMTF9ESVIKKyAgdG8gZGVzaWduYXRlIHRoZSB0b3Agc3ViZGlyZWN0b3J5IHdoZXJlIGluc3RhbGxhdGlvbiBvZiBjLWFyZXMgbGlicmFyaWVzIGFuZAorICBoZWFkZXIgZmlsZXMgd2lsbCBiZSBkb25lLgorCisgID4gc2V0IElOU1RBTExfRElSPWM6XGMtYXJlcworCisgIEFmdGVyd2FyZHMsIHJ1biBmb2xsb3dpbmcgY29tbWFuZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBpbnN0YWxsYXRpb246CisKKyAgPiBubWFrZSAtZiBNYWtlZmlsZS5tc3ZjIGluc3RhbGwKKworICBJbnN0YWxsYXRpb24gcHJvY2VkdXJlIHdpbGwgY29weSBjLWFyZXMgbGlicmFyaWVzIHRvIHN1YmRpcmVjdG9yeSAnbGliJyBhbmQKKyAgYy1hcmVzIGhlYWRlciBmaWxlcyB0byBzdWJkaXJlY3RvcnkgJ2luY2x1ZGUnIGJlbG93IHRoZSBJTlNUQUxMX0RJUiBzdWJkaXIuCisKKyAgV2hlbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBJTlNUQUxMX0RJUiBpcyBub3QgZGVmaW5lZCwgaW5zdGFsbGF0aW9uIGlzIGRvbmUKKyAgdG8gYy1hcmVzIHNvdXJjZSBmb2xkZXIgd2hlcmUgTWFrZWZpbGUubXN2YyBmaWxlIGlzIGxvY2F0ZWQuCisKKworICBIb3cgdG8gYnVpbGQgdXNpbmcgVmlzdWFsIFN0dWRpbyA2IElERQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEEgVkMrKyA2LjAgcmVmZXJlbmNlIHdvcmtzcGFjZSAodmM2YXdzLmRzdykgaXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgJ3ZjJworICBmb2xkZXIgdG8gYWxsb3cgcHJvcGVyIGJ1aWxkaW5nIG9mIHRoZSBsaWJyYXJ5IGFuZCBzYW1wbGUgcHJvZ3JhbXMuCisKKyAgMSkgT3BlbiB0aGUgdmM2YXdzLmRzdyB3b3Jrc3BhY2Ugd2l0aCBNU1ZDNidzIElERS4KKyAgMikgU2VsZWN0ICdCdWlsZCcgZnJvbSB0b3AgbWVudS4KKyAgMykgU2VsZWN0ICdCYXRjaCBCdWlsZCcgZnJvbSBkcm9wZG93biBtZW51LgorICA0KSBNYWtlIHN1cmUgdGhhdCB0aGUgc2l4dGVlbiBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zIGFyZSAnY2hlY2tlZCcuCisgIDUpIENsaWNrIG9uIHRoZSAnQnVpbGQnIGJ1dHRvbi4KKyAgNikgT25jZSB0aGUgc2l4dGVlbiBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zIGFyZSBidWlsdCB5b3UgYXJlIGRvbmUuCisKKyAgRHluYW1pYyBhbmQgc3RhdGljIGMtYXJlcyBsaWJyYXJpZXMgYXJlIGJ1aWx0IGluIGRlYnVnIGFuZCByZWxlYXNlIGZsYXZvdXJzLAorICBhbmQgY2FuIGJlIGxvY2F0ZWQgZWFjaCBvbmUgaW4gaXRzIG93biBzdWJkaXJlY3RvcnksIGRsbC1kZWJ1ZywgZGxsLXJlbGVhc2UsCisgIGxpYi1kZWJ1ZyBhbmQgbGliLXJlbGVhc2UsIGFsbCBvZiB0aGVtIGJlbG93IHRoZSAndmNcY2FyZXMnIHN1YmRpcmVjdG9yeS4KKworICBJbiB0aGUgc2FtZSB3YXkgZm91ciBleGVjdXRhYmxlIHZlcnNpb25zIG9mIGVhY2ggc2FtcGxlIHByb2dyYW0gYXJlIGJ1aWx0LAorICBlYWNoIHVzaW5nIGl0cyByZXNwZWN0aXZlIGxpYnJhcnkuIFRoZSByZXN1bHRpbmcgc2FtcGxlIGV4ZWN1dGFibGVzIGFyZQorICBsb2NhdGVkIGluIGl0cyBvd24gc3ViZGlyZWN0b3J5LCBkbGwtZGVidWcsIGRsbC1yZWxlYXNlLCBsaWItZGVidWcgYW5kCisgIGxpYi1yZWxlYXNlLCBiZWxvdyB0aGUgJ3ZjXGFjb3VudHJ5JywgJ3ZjXGFkaWcnIGFuZCAndmNcYWhvc3QnZm9sZGVycy4KKworICBUaGVzZSByZWZlcmVuY2UgVkMrKyA2LjAgY29uZmlndXJhdGlvbnMgYXJlIGdlbmVyYXRlZCB1c2luZyB0aGUgZHluYW1pYyBDUlQuCisKKworICBIb3cgdG8gYnVpbGQgdXNpbmcgVmlzdWFsIFN0dWRpbyAyMDAzIG9yIG5ld2VyIElERQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEZpcnN0IHlvdSBoYXZlIHRvIGNvbnZlcnQgdGhlIFZDKysgNi4wIHJlZmVyZW5jZSB3b3Jrc3BhY2UgYW5kIHByb2plY3QgZmlsZXMKKyAgdG8gdGhlIFZpc3VhbCBTdHVkaW8gSURFIHZlcnNpb24geW91IGFyZSB1c2luZywgZm9sbG93aW5nIG5leHQgc3RlcHM6CisKKyAgMSkgT3BlbiB2Y1x2YzZhd3MuZHN3IHdpdGggVlMyMFhYLgorICAyKSBBbGxvdyBWUzIwWFggdG8gdXBkYXRlIGFsbCBwcm9qZWN0cyBhbmQgd29ya3NwYWNlcy4KKyAgMykgU2F2ZSBBTEwgYW5kIGNsb3NlIFZTMjBYWC4KKyAgNCkgT3BlbiB2Y1x2YzZhd3Muc2xuIHdpdGggVlMyMFhYLgorICA1KSBTZWxlY3QgYmF0Y2ggYnVpbGQsIGNoZWNrICdhbGwnIHByb2plY3RzIGFuZCBjbGljayAnYnVpbGQnIGJ1dHRvbi4KKworICBTYW1lIGNvbW1lbnRzIHJlbGF0aXZlIHRvIGdlbmVyYXRlZCBmaWxlcyBhbmQgZm9sZGVycyBhcyBkb25lIGFib3ZlIGZvcgorICBWaXN1YWwgU3R1ZGlvIDYgSURFIGFwcGx5IGhlcmUuCisKKworICBSZWxhdGlvbnNoaXAgYmV0d2VlbiBjLWFyZXMgbGlicmFyeSBmaWxlIG5hbWVzIGFuZCB2ZXJzaW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGMtYXJlcyBzdGF0aWMgcmVsZWFzZSBsaWJyYXJ5IHZlcnNpb24gZmlsZXM6CisKKyAgICAgIGxpYmNhcmVzLmxpYiAtPiBzdGF0aWMgcmVsZWFzZSBsaWJyYXJ5CisKKyAgYy1hcmVzIHN0YXRpYyBkZWJ1ZyBsaWJyYXJ5IHZlcnNpb24gZmlsZXM6CisKKyAgICAgIGxpYmNhcmVzZC5saWIgLT4gc3RhdGljIGRlYnVnIGxpYnJhcnkKKworICBjLWFyZXMgZHluYW1pYyByZWxlYXNlIGxpYnJhcnkgdmVyc2lvbiBmaWxlczoKKworICAgICAgY2FyZXMuZGxsIC0+IGR5bmFtaWMgcmVsZWFzZSBsaWJyYXJ5CisgICAgICBjYXJlcy5saWIgLT4gaW1wb3J0IGxpYnJhcnkgZm9yIHRoZSBkeW5hbWljIHJlbGVhc2UgbGlicmFyeQorICAgICAgY2FyZXMuZXhwIC0+IGV4cG9ydCBmaWxlIGZvciB0aGUgZHluYW1pYyByZWxlYXNlIGxpYnJhcnkKKworICBjLWFyZXMgZHluYW1pYyBkZWJ1ZyBsaWJyYXJ5IHZlcnNpb24gZmlsZXM6CisKKyAgICAgIGNhcmVzZC5kbGwgLT4gZHluYW1pYyBkZWJ1ZyBsaWJyYXJ5CisgICAgICBjYXJlc2QubGliIC0+IGltcG9ydCBsaWJyYXJ5IGZvciB0aGUgZHluYW1pYyBkZWJ1ZyBsaWJyYXJ5CisgICAgICBjYXJlc2QuZXhwIC0+IGV4cG9ydCBmaWxlIGZvciB0aGUgZHluYW1pYyBkZWJ1ZyBsaWJyYXJ5CisgICAgICBjYXJlc2QucGRiIC0+IGRlYnVnIHN5bWJvbCBmaWxlIGZvciB0aGUgZHluYW1pYyBkZWJ1ZyBsaWJyYXJ5CisKKworICBIb3cgdG8gdXNlIGMtYXJlcyBzdGF0aWMgbGlicmFyaWVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBXaGVuIHVzaW5nIHRoZSBjLWFyZXMgc3RhdGljIGxpYnJhcnkgaW4geW91ciBwcm9ncmFtLCB5b3Ugd2lsbCBoYXZlIHRvCisgIGRlZmluZSBwcmVwcm9jZXNzb3Igc3ltYm9sIENBUkVTX1NUQVRJQ0xJQiB3aGlsZSBidWlsZGluZyB5b3VyIHByb2dyYW0sCisgIG90aGVyd2lzZSB5b3Ugd2lsbCBnZXQgZXJyb3JzIGF0IGxpbmthZ2Ugc3RhZ2UuCisKKworSGF2ZSBGdW4hCisgCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9SRUxFQVNFLU5PVEVTIGIvYXAvYXBwL2MtYXJlcy9zcmMvUkVMRUFTRS1OT1RFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZiMDIzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvUkVMRUFTRS1OT1RFUwpAQCAtMCwwICsxLDQ2IEBACitjLWFyZXMgdmVyc2lvbiAxLjEyLjAKKworQ2hhbmdlczoKKworIG8gYXBpOiBhZGQgQVJFU19PUFRfTk9ST1RBVEUgb3B0bWFzayB2YWx1ZQorIAorQnVnIGZpeGVzOgorCisgbyBDVkUtMjAxNi01MTgwOiBhcmVzX2NyZWF0ZV9xdWVyeSBzaW5nbGUgYnl0ZSBvdXQgb2YgYnVmZmVyIHdyaXRlIFs0XQorIG8gY29uZmlndXJlOiBhY2tub3dsZWRnZSAtLWRpc2FibGUtdGVzdHMgWzFdCisgbyBtYW4gcGFnZXM6IGZpeCB0eXBvcyBkZXRlY3RlZCBieSBMaW50aWFuCisgbyB0ZXN0OiBhZGQgbWlzc2luZyAjaW5jbHVkZXMgZm9yIGRucy1wcm90by5jYworIG8gdGVzdDogYXZvaWQgaW42YWRkcl8qIGNvbnN0YW50cworIG8gdGVzdDogQnVpbGQgd2l0aCBNaW5HVyBvbiBBcHBWZXlvcgorIG8gTWFrZWZpbGUubTMyOiBhZGQgc3VwcG9ydCBmb3IgZXh0cmEgZmxhZ3MKKyBvIE1ha2VmaWxlLm0zMjogYWRkIHN1cHBvcnQgZm9yIENST1NTUFJFRklYCisgbyBjb25maWd1cmU6IGNoZWNrIGlmIHRlc3RzIGNhbiBnZXQgYnVpbHQgYmVmb3JlIGVuYWJsZWQKKyBvIGFyZXNfbGlicmFyeV9jbGVhbnVwOiByZXNldCBhcmVzX3JlYWxsb2MgdG9vCisgbyBhaG9zdC5jOiBhZGQgY2FzdCB0byBmaXggQysrIGNvbXBpbGUKKyBvIHRlc3Q6IE9ubHkgcGFzcyB1bnVzZWQgYXJncyB0byBHb29nbGVUZXN0CisgbyBidWlsZDogY29tbW9uaXplIE1TVkMgdmVyc2lvbiBkZXRlY3Rpb24KKyBvIG1zdmNfdmVyLmluYzogc3VwcG9ydCBWaXN1YWwgU3R1ZGlvIDIwMTUgVXBkYXRlIDEsIDIsIDMKKyBvIHRlc3Q6IGZvciBBRl9VTlNQRUMsIHJldHVybiBDTkFNRSBvbmx5IGZvciBBQUFBLCBidXQgdmFsaWQgQSByZWNvcmQKKyBvIGFyZXNfZ2V0bmFtZWluZm86IGV4cGxpY2l0bHkgY2xlYXIgc3RydWN0IHNlcnZlbnQgYmVmb3JlIHVzZQorIG8gdGVzdDogVXBkYXRlIGZ1enppbmcgZnVuY3Rpb24gcHJvdG90eXBlCisgbyBpbml0OiBmaXggbnNvcnQgaW5pdGlhbGl6YXRpb24KKyBvIHRlc3Q6IGFkZCBmdXp6aW5nIGNoZWNrIHNjcmlwdCB0byB0ZXN0cworIG8gd2ViOiBodHRwID0+IGh0dHBzCisgbyByZWFkX3RjcF9kYXRhOiByZW1vdmUgc3VwZXJmbHVvdXMgTlVMTCBjaGVjaworIG8gTElDRU5TRS5tZDogYWRkIGEgc3RhbmQtYWxvbmUgbGljZW5zZSBmaWxlCisgbyBTRUNVUklUWS5tZDogc3VnZ2VzdGVkICJzZWN1cml0eSBwcm9jZXNzIiBmb3IgdGhlIHByb2plY3QKKyBvIGFyZXNfaW5pdF9vcHRpb25zOiBvbmx5IHByb3BhZ2F0ZSBpbml0IGZhaWx1cmVzIGZyb20gb3B0aW9ucyBbMl0KKyBvIGhlYWRlcnM6IHJlbW92ZSBjaGVja3MgZm9yIGFuZCBkZWZpbmVzIG9mIHZhcmlhYmxlIHNpemVzCisgbyB0ZXN0OiBmaXggZ01vY2sgdG8gd29yayB3aXRoIGdjYyA+PSA2LnggWzNdCisgCitUaGFua3MgZ28gdG8gdGhlc2UgZnJpZW5kbHkgcGVvcGxlIGZvciB0aGVpciBlZmZvcnRzIGFuZCBjb250cmlidXRpb25zOgorCisgIEFsZXhhbmRlciBEcmFjaGV2c2tpeSwgQnJhZCBIb3VzZSwgQ2hyaXMgQXJhbWFuLCBEYW5pZWwgU3RlbmJlcmcsCisgIERhdmlkIERyeXNkYWxlLCBHcmVnb3IgSmFzbnksIFN2YW50ZSBLYXJsc3NvbiwgVmlrdG9yIFN6YWthdHMKKworUmVmZXJlbmNlcyB0byBidWcgcmVwb3J0cyBhbmQgZGlzY3Vzc2lvbnMgb24gaXNzdWVzOgorCisgWzFdID0gaHR0cHM6Ly9naXRodWIuY29tL2MtYXJlcy9jLWFyZXMvaXNzdWVzLzQ0CisgWzJdID0gaHR0cHM6Ly9naXRodWIuY29tL2MtYXJlcy9jLWFyZXMvaXNzdWVzLzYwCisgWzNdID0gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9nb29nbGV0ZXN0L2lzc3Vlcy83MDUjaXNzdWVjb21tZW50LTIzNTA2NzkxNworIFs0XSA9IGh0dHBzOi8vYy1hcmVzLmhheHguc2UvYWR2XzIwMTYwOTI5Lmh0bWwKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL1RPRE8gYi9hcC9hcHAvYy1hcmVzL3NyYy9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzFjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9UT0RPCkBAIC0wLDAgKzEsMjMgQEAKK1RPRE8KKz09PT0KKworYXJlc19yZWluaXQoKQorCistIFRvIGFsbG93IGFuIGFwcCB0byBmb3JjZSBhIHJlLXJlYWQgb2YgL2V0Yy9yZXNvbHYuY29uZiBldGMsIHByZXR0eSBtdWNoCisgIGxpa2UgdGhlIHJlc19pbml0KCkgcmVzb2x2ZXIgZnVuY3Rpb24gb2ZmZXJzCisKK2FyZXNfZ2V0aG9zdGJ5bmFtZQorCistIFdoZW4gYnVpbHQgdG8gc3VwcG9ydCBJUHY2LCBpdCBuZWVkcyB0byBhbHNvIHN1cHBvcnQgUEZfVU5TUEVDIG9yIHNpbWlsYXIsCisgIHNvIHRoYXQgYW4gYXBwbGljYXRpb24gY2FuIGFzayBmb3IgYW55IHByb3RvY29sIGFuZCB0aGVuIGMtYXJlcyB3b3VsZCByZXR1cm4KKyAgYWxsIGtub3duIHJlc29sdmVzIGFuZCBub3QganVzdCBleHBsaWNpdGx5IElQdjQgX29yXyBJUHY2IHJlc29sdmVzLgorCithcmVzX3Byb2Nlc3MKKworLSBVcG9uIG5leHQgQUJJIGJyZWFrYWdlIGFyZXNfcHJvY2VzcygpIHNob3VsZCBiZSBjaGFuZ2VkIHRvIHJldHVybiAnaW50JworICBhbmQgcmV0dXJuIEFSRVNfRU5PVElOSVRJQUxJWkVEIGlmIGFyZXNfbGlicmFyeV9pbml0KCkgaGFzIG5vdCBiZWVuIGNhbGxlZC4KKworYXJlc19wcm9jZXNzX2ZkCisKKy0gVXBvbiBuZXh0IEFCSSBicmVha2FnZSBhcmVzX3Byb2Nlc3NfZmQoKSBzaG91bGQgYmUgY2hhbmdlZCB0byByZXR1cm4KKyAgJ2ludCcgYW5kIHJldHVybiBBUkVTX0VOT1RJTklUSUFMSVpFRCBpZiBsaWJyYXJ5IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FjaW5jbHVkZS5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjU1MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMTkxNSBAQAorCisKK2RubCBDVVJMX0NIRUNLX0RFRiAoU1lNQk9MLCBbSU5DTFVERVNdLCBbU0lMRU5UXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVXNlIHRoZSBDIHByZXByb2Nlc3NvciB0byBmaW5kIG91dCBpZiB0aGUgZ2l2ZW4gb2JqZWN0LXN0eWxlIHN5bWJvbAorZG5sIGlzIGRlZmluZWQgYW5kIGdldCBpdHMgZXhwYW5zaW9uLiBUaGlzIG1hY3JvIHdpbGwgbm90IHVzZSBkZWZhdWx0CitkbmwgaW5jbHVkZXMgZXZlbiBpZiBubyBJTkNMVURFUyBhcmd1bWVudCBpcyBnaXZlbi4gVGhpcyBtYWNybyB3aWxsIHJ1bgorZG5sIHNpbGVudGx5IHdoZW4gaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50cy4gSWYgdGhlIGV4cGFuc2lvbiB3b3VsZAorZG5sIHJlc3VsdCBpbiBhIHNldCBvZiBkb3VibGUtcXVvdGVkIHN0cmluZ3MgdGhlIHJldHVybmVkIGV4cGFuc2lvbiB3aWxsCitkbmwgYWN0dWFsbHkgYmUgYSBzaW5nbGUgZG91YmxlLXF1b3RlZCBzdHJpbmcgY29uY2F0ZW5hdGluZyBhbGwgdGhlbS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfREVGXSwgWworICBBU19WQVJfUFVTSERFRihbYWNfSGF2ZURlZl0sIFtjdXJsX2N2X2hhdmVfZGVmXyQxXSlkbmwKKyAgQVNfVkFSX1BVU0hERUYoW2FjX0RlZl0sIFtjdXJsX2N2X2RlZl8kMV0pZG5sCisgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC5dKQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW0dSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuXSkKKyAgZmkKKyAgaWZlbHNlKCQzLCxbQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gb2YgJDFdKV0pCisgIHRtcF9leHA9IiIKKyAgQUNfUFJFUFJPQ19JRkVMU0UoWworICAgIEFDX0xBTkdfU09VUkNFKAoraWZlbHNlKCQyLCwsWyQyXSlbWworI2lmZGVmICQxCitDVVJMX0RFRl9UT0tFTiAkMQorI2VuZGlmCisgICAgXV0pCisgIF0sWworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bWyBdXVtbIF1dKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bWyJdXVtbIF1dKltbIl1dLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIiQxIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisgIF0pCisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIEFTX1ZBUl9TRVQoYWNfSGF2ZURlZiwgbm8pCisgICAgaWZlbHNlKCQzLCxbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgIGVsc2UKKyAgICBBU19WQVJfU0VUKGFjX0hhdmVEZWYsIHllcykKKyAgICBBU19WQVJfU0VUKGFjX0RlZiwgJHRtcF9leHApCisgICAgaWZlbHNlKCQzLCxbQUNfTVNHX1JFU1VMVChbJHRtcF9leHBdKV0pCisgIGZpCisgIEFTX1ZBUl9QT1BERUYoW2FjX0RlZl0pZG5sCisgIEFTX1ZBUl9QT1BERUYoW2FjX0hhdmVEZWZdKWRubAorXSkKKworCitkbmwgQ1VSTF9DSEVDS19ERUZfQ0MgKFNZTUJPTCwgW0lOQ0xVREVTXSwgW1NJTEVOVF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFVzZSB0aGUgQyBjb21waWxlciB0byBmaW5kIG91dCBvbmx5IGlmIHRoZSBnaXZlbiBzeW1ib2wgaXMgZGVmaW5lZAorZG5sIG9yIG5vdCwgdGhpcyBjYW4gbm90IGZpbmQgb3V0IGl0cyBleHBhbnNpb24uIFRoaXMgbWFjcm8gd2lsbCBub3QgdXNlCitkbmwgZGVmYXVsdCBpbmNsdWRlcyBldmVuIGlmIG5vIElOQ0xVREVTIGFyZ3VtZW50IGlzIGdpdmVuLiBUaGlzIG1hY3JvCitkbmwgd2lsbCBydW4gc2lsZW50bHkgd2hlbiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19ERUZfQ0NdLCBbCisgIEFTX1ZBUl9QVVNIREVGKFthY19IYXZlRGVmXSwgW2N1cmxfY3ZfaGF2ZV9kZWZfJDFdKWRubAorICBpZmVsc2UoJDMsLFtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjb21waWxlciBkZWZpbml0aW9uIG9mICQxXSldKQorICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgQUNfTEFOR19TT1VSQ0UoCitpZmVsc2UoJDIsLCxbJDJdKVtbCitpbnQgbWFpbiAodm9pZCkKK3sKKyNpZmRlZiAkMQorICByZXR1cm4gMDsKKyNlbHNlCisgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKK30KKyAgICBdXSkKKyAgXSxbCisgICAgdHN0X3N5bWJvbF9kZWZpbmVkPSJ5ZXMiCisgIF0sWworICAgIHRzdF9zeW1ib2xfZGVmaW5lZD0ibm8iCisgIF0pCisgIGlmIHRlc3QgIiR0c3Rfc3ltYm9sX2RlZmluZWQiID0gInllcyI7IHRoZW4KKyAgICBBU19WQVJfU0VUKGFjX0hhdmVEZWYsIHllcykKKyAgICBpZmVsc2UoJDMsLFtBQ19NU0dfUkVTVUxUKFt5ZXNdKV0pCisgIGVsc2UKKyAgICBBU19WQVJfU0VUKGFjX0hhdmVEZWYsIG5vKQorICAgIGlmZWxzZSgkMywsW0FDX01TR19SRVNVTFQoW25vXSldKQorICBmaQorICBBU19WQVJfUE9QREVGKFthY19IYXZlRGVmXSlkbmwKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0xJQl9YTkVUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBYL09wZW4gbmV0d29yayBsaWJyYXJ5IGlzIHJlcXVpcmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfTElCX1hORVRdLCBbCisgIEFDX01TR19DSEVDS0lORyhbaWYgWC9PcGVuIG5ldHdvcmsgbGlicmFyeSBpcyByZXF1aXJlZF0pCisgIHRzdF9saWJfeG5ldF9yZXF1aXJlZD0ibm8iCisgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1NPVVJDRShbWworaW50IG1haW4gKHZvaWQpCit7CisjaWYgZGVmaW5lZChfX2hwdXgpICYmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgJiYgKF9YT1BFTl9TT1VSQ0UgPj0gNjAwKQorICByZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoX19ocHV4KSAmJiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQpCisgIHJldHVybiAwOworI2Vsc2UKKyAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorfQorICAgIF1dKQorICBdLFsKKyAgICB0c3RfbGliX3huZXRfcmVxdWlyZWQ9InllcyIKKyAgICBMSUJTPSIkTElCUyAtbHhuZXQiCisgIF0pCisgIEFDX01TR19SRVNVTFQoWyR0c3RfbGliX3huZXRfcmVxdWlyZWRdKQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQUlYX0FMTF9TT1VSQ0UKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJvdmlkZXMgYSByZXBsYWNlbWVudCBvZiB0cmFkaXRpb25hbCBBQ19BSVggd2l0aAorZG5sIGFuIHVuaWZvcm0gYmVoYXZpb3VyIGFjcm9zcyBhbGwgYXV0b2NvbmYgdmVyc2lvbnMsCitkbmwgYW5kIHdpdGggb3VyIG93biBwbGFjZW1lbnQgcnVsZXMuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19BSVhfQUxMX1NPVVJDRV0sIFsKKyAgQUhfVkVSQkFUSU0oW19BTExfU09VUkNFXSwKKyAgICBbLyogRGVmaW5lIHRvIDEgaWYgT1MgaXMgQUlYLiAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyAgdW5kZWYgX0FMTF9TT1VSQ0UKKyNlbmRpZl0pCisgIEFDX0JFRk9SRShbJDBdLCBbQUNfU1lTX0xBUkdFRklMRV0pZG5sCisgIEFDX0JFRk9SRShbJDBdLCBbQ0FSRVNfQ09ORklHVVJFX1JFRU5UUkFOVF0pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgT1MgaXMgQUlYICh0byBkZWZpbmUgX0FMTF9TT1VSQ0UpXSkKKyAgQUNfRUdSRVBfQ1BQKFt5ZXNfdGhpc19pc19haXhdLFsKKyNpZmRlZiBfQUlYCisgICB5ZXNfdGhpc19pc19haXgKKyNlbmRpZgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORShfQUxMX1NPVVJDRSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBdKQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgd2luZG93cy5oIGhlYWRlcgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XU10sIFsKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3aW5kb3dzLmhdLCBbYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisgICAgICBdXSxbWworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pCisgICAgICAgIEhBVkVfV0lORE9XU19IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqV0lOVkVSOworI2VuZGlmCisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiBpbgorICAgIHllcykKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1dJTkRPV1NfSCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5kb3dzLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChXSU4zMl9MRUFOX0FORF9NRUFOLCAxLAorICAgICAgICBbRGVmaW5lIHRvIGF2b2lkIGF1dG9tYXRpYyBpbmNsdXNpb24gb2Ygd2luc29jay5oXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTkFUSVZFX1dJTkRPV1MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgYnVpbGRpbmcgYSBuYXRpdmUgV2luZG93cyB0YXJnZXQKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTkFUSVZFX1dJTkRPV1NdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTkRPV1NdKWRubAorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBidWlsZCB0YXJnZXQgaXMgYSBuYXRpdmUgV2luZG93cyBvbmVdLCBbYWNfY3ZfbmF0aXZlX3dpbmRvd3NdLCBbCisgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID0gIm5vIjsgdGhlbgorICAgICAgYWNfY3ZfbmF0aXZlX3dpbmRvd3M9Im5vIgorICAgIGVsc2UKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX01JTkdXMzJDRV9fKSB8fCBcCisgICAoZGVmaW5lZChfTVNDX1ZFUikgJiYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkpKQorICAgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgICBOb3QgYSBuYXRpdmUgV2luZG93cyBidWlsZCB0YXJnZXQuCisjZW5kaWYKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgYWNfY3ZfbmF0aXZlX3dpbmRvd3M9InllcyIKKyAgICAgIF0sWworICAgICAgICBhY19jdl9uYXRpdmVfd2luZG93cz0ibm8iCisgICAgICBdKQorICAgIGZpCisgIF0pCisgIEFNX0NPTkRJVElPTkFMKERPSU5HX05BVElWRV9XSU5ET1dTLCB0ZXN0ICJ4JGFjX2N2X25hdGl2ZV93aW5kb3dzIiA9IHh5ZXMpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBjb21waWxhYmxlIGFuZCB2YWxpZCB3aW5zb2NrLmggaGVhZGVyCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5ET1dTXSlkbmwKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3aW5zb2NrLmhdLCBbYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jay5oPgorICAgICAgXV0sW1sKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTlNPQ0tfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT1XU0FDbGVhbnVwKCk7CisjZW5kaWYKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giIGluCisgICAgeWVzKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfV0lOU09DS19ILCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2suaCBoZWFkZXIgZmlsZS5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DSzIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGFibGUgYW5kIHZhbGlkIHdpbnNvY2syLmggaGVhZGVyCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XU10pZG5sCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2luc29jazIuaF0sIFthY19jdl9oZWFkZXJfd2luc29jazJfaF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykgfHwgZGVmaW5lZChfX01JTkdXMzJDRV9fKQorICAgICAgICBIQVZFX1dJTlNPQ0syX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9MipJUFBST1RPX0VTUDsKKyNlbmRpZgorICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9XSU5TT0NLMl9ILCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2syLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfSEVBREVSX1dTMlRDUElQCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBjb21waWxhYmxlIGFuZCB2YWxpZCB3czJ0Y3BpcC5oIGhlYWRlcgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19IRUFERVJfV1MyVENQSVBdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0syXSlkbmwKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3czJ0Y3BpcC5oXSwgW2FjX2N2X2hlYWRlcl93czJ0Y3BpcF9oXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisgICAgICBdXSxbWworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykKKyAgICAgICAgSEFWRV9XUzJUQ1BJUF9IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqSVBfUEtUSU5GTzsKKyNlbmRpZgorICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfd3MydGNwaXBfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9XUzJUQ1BJUF9ILCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdzMnRjcGlwLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfSEVBREVSX01BTExPQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgbWFsbG9jLmggaGVhZGVyLAorZG5sIGFuZCBjaGVjayBpZiBpdCBpcyBuZWVkZWQgZXZlbiB3aXRoIHN0ZGxpYi5oCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0hFQURFUl9NQUxMT0NdLCBbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbWFsbG9jLmhdLCBbYWNfY3ZfaGVhZGVyX21hbGxvY19oXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPG1hbGxvYy5oPgorICAgICAgXV0sW1sKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfbWFsbG9jX2g9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl9tYWxsb2NfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9tYWxsb2NfaCIgPSAieWVzIjsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX01BTExPQ19ILCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZS5dKQorICAgICMKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgIF1dLFtbCisgICAgICAgIHZvaWQgKnAgPSBtYWxsb2MoMTApOworICAgICAgICB2b2lkICpxID0gY2FsbG9jKDEwLDEwKTsKKyAgICAgICAgZnJlZShwKTsKKyAgICAgICAgZnJlZShxKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgY3VybF9jdl9uZWVkX2hlYWRlcl9tYWxsb2NfaD0ibm8iCisgICAgXSxbCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21hbGxvY19oPSJ5ZXMiCisgICAgXSkKKyAgICAjCisgICAgY2FzZSAiJGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWFsbG9jX2giIGluCisgICAgICB5ZXMpCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChORUVEX01BTExPQ19ILCAxLAorICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oXSkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0hFQURFUl9NRU1PUlkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGFibGUgYW5kIHZhbGlkIG1lbW9yeS5oIGhlYWRlciwKK2RubCBhbmQgY2hlY2sgaWYgaXQgaXMgbmVlZGVkIGV2ZW4gd2l0aCBzdGRsaWIuaCBmb3IKK2RubCBtZW1vcnkgcmVsYXRlZCBmdW5jdGlvbnMuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0hFQURFUl9NRU1PUlldLCBbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbWVtb3J5LmhdLCBbYWNfY3ZfaGVhZGVyX21lbW9yeV9oXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPG1lbW9yeS5oPgorICAgICAgXV0sW1sKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfbWVtb3J5X2g9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl9tZW1vcnlfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9tZW1vcnlfaCIgPSAieWVzIjsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX01FTU9SWV9ILCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZS5dKQorICAgICMKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgIF1dLFtbCisgICAgICAgIHZvaWQgKnAgPSBtYWxsb2MoMTApOworICAgICAgICB2b2lkICpxID0gY2FsbG9jKDEwLDEwKTsKKyAgICAgICAgZnJlZShwKTsKKyAgICAgICAgZnJlZShxKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgY3VybF9jdl9uZWVkX2hlYWRlcl9tZW1vcnlfaD0ibm8iCisgICAgXSxbCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21lbW9yeV9oPSJ5ZXMiCisgICAgXSkKKyAgICAjCisgICAgY2FzZSAiJGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWVtb3J5X2giIGluCisgICAgICB5ZXMpCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChORUVEX01FTU9SWV9ILCAxLAorICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWVtb3J5LmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oXSkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfR0VUTkFNRUlORk8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBpZiB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24gaXMgYXZhaWxhYmxlLAorZG5sIGFuZCBjaGVjayB0aGUgdHlwZXMgb2YgZml2ZSBvZiBpdHMgYXJndW1lbnRzLgorZG5sIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBIQVZFX0dFVE5BTUVJTkZPIHdpbGwgYmUKK2RubCBkZWZpbmVkLCBkZWZpbmluZyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBpbgorZG5sIEdFVE5BTUVJTkZPX1RZUEVfQVJHMSwgR0VUTkFNRUlORk9fVFlQRV9BUkcyLAorZG5sIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgYW5kIEdFVE5BTUVJTkZPX1RZUEVfQVJHNywKK2RubCBhbmQgYWxzbyBkZWZpbmluZyB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgZmlyc3QKK2RubCBhcmd1bWVudCBpbiBHRVROQU1FSU5GT19RVUFMX0FSRzEuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfR0VUTkFNRUlORk9dLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dTMlRDUElQXSlkbmwKKyAgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmggbmV0ZGIuaCkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBnZXRuYW1laW5mb10pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2dldG5hbWVpbmZvXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9nZXRuYW1laW5mbyIgIT0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2RlZXBlciBmb3IgZ2V0bmFtZWluZm9dKQorICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgXV0sW1sKKyAgICAgICAgZ2V0bmFtZWluZm8oKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW2J1dCBzdGlsbCBub10pCisgICAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X2dldG5hbWVpbmZvIiAhPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZGVlcGVyIGFuZCBkZWVwZXIgZm9yIGdldG5hbWVpbmZvXSkKKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNlbmRpZgorICAgICAgXV0sW1sKKyAgICAgICAgZ2V0bmFtZWluZm8oMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtidXQgc3RpbGwgbm9dKQorICAgICAgY3VybF9jdl9nZXRuYW1laW5mbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9nZXRuYW1laW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt0eXBlcyBvZiBhcmd1bWVudHMgZm9yIGdldG5hbWVpbmZvXSwKKyAgICAgIFtjdXJsX2N2X2Z1bmNfZ2V0bmFtZWluZm9fYXJnc10sIFsKKyAgICAgIGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzPSJ1bmtub3duIgorICAgICAgZm9yIGduaV9hcmcxIGluICdzdHJ1Y3Qgc29ja2FkZHIgKicgJ2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqJyAndm9pZCAqJzsgZG8KKyAgICAgICAgZm9yIGduaV9hcmcyIGluICdzb2NrbGVuX3QnICdzaXplX3QnICdpbnQnOyBkbworICAgICAgICAgIGZvciBnbmlfYXJnNDYgaW4gJ3NpemVfdCcgJ2ludCcgJ3NvY2tsZW5fdCcgJ3Vuc2lnbmVkIGludCcgJ0RXT1JEJzsgZG8KKyAgICAgICAgICAgIGZvciBnbmlfYXJnNyBpbiAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaWYgKCFkZWZpbmVkKF9XSU4zMl9XSU5OVCkpIHx8IChfV0lOMzJfV0lOTlQgPCAweDA1MDEpCisjdW5kZWYgX1dJTjMyX1dJTk5UCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDEKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBHTklDQUxMQ09OViBXU0FBUEkKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjZGVmaW5lIEdOSUNBTExDT05WCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBHTklDQUxMQ09OViBnZXRuYW1laW5mbygkZ25pX2FyZzEsICRnbmlfYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosICRnbmlfYXJnNDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCAkZ25pX2FyZzQ2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnNyk7CisgICAgICAgICAgICAgICAgICBdXSxbWworICAgICAgICAgICAgICAgICAgICAkZ25pX2FyZzIgc2FsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgJGduaV9hcmc0NiBob3N0bGVuPTA7CisgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnNDYgc2Vydmxlbj0wOworICAgICAgICAgICAgICAgICAgICAkZ25pX2FyZzcgZmxhZ3M9MDsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlcyA9IGdldG5hbWVpbmZvKDAsIHNhbGVuLCAwLCBob3N0bGVuLCAwLCBzZXJ2bGVuLCBmbGFncyk7CisgICAgICAgICAgICAgICAgICBdXSkKKyAgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgIGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzPSIkZ25pX2FyZzEsJGduaV9hcmcyLCRnbmlfYXJnNDYsJGduaV9hcmc3IgorICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisgICAgXSkgIyBBQy1DQUNIRS1DSEVDSworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfZ2V0bmFtZWluZm9fYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19XQVJOKFtDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciBnZXRuYW1laW5mbyBhcmdzXSkKKyAgICAgIEFDX01TR19XQVJOKFtIQVZFX0dFVE5BTUVJTkZPIHdpbGwgbm90IGJlIGRlZmluZWRdKQorICAgIGVsc2UKKyAgICAgIGduaV9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfZ2V0bmFtZWluZm9fYXJncyIgfCBzZWQgJ3MvXCovXCovZydgCisgICAgICBJRlM9JGduaV9wcmV2X0lGUworICAgICAgc2hpZnQKKyAgICAgICMKKyAgICAgIGduaV9xdWFsX3R5cGVfYXJnMT0kWzFdCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR0VUTkFNRUlORk9fVFlQRV9BUkcyLCAkWzJdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYsICRbM10sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEdFVE5BTUVJTkZPX1RZUEVfQVJHNywgJFs0XSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uXSkKKyAgICAgICMKKyAgICAgIHByZXZfc2hfb3B0cz0kLQorICAgICAgIworICAgICAgY2FzZSAkcHJldl9zaF9vcHRzIGluCisgICAgICAgICpmKikKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNldCAtZgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBjYXNlICIkZ25pX3F1YWxfdHlwZV9hcmcxIiBpbgorICAgICAgICBjb25zdCopCisgICAgICAgICAgZ25pX3F1YWxfYXJnMT1jb25zdAorICAgICAgICAgIGduaV90eXBlX2FyZzE9YGVjaG8gJGduaV9xdWFsX3R5cGVfYXJnMSB8IHNlZCAncy9eY29uc3QgLy8nYAorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGduaV9xdWFsX2FyZzE9CisgICAgICAgICAgZ25pX3R5cGVfYXJnMT0kZ25pX3F1YWxfdHlwZV9hcmcxCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR0VUTkFNRUlORk9fUVVBTF9BUkcxLCAkZ25pX3F1YWxfYXJnMSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR0VUTkFNRUlORk9fVFlQRV9BUkcxLCAkZ25pX3R5cGVfYXJnMSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uXSkKKyAgICAgICMKKyAgICAgIGNhc2UgJHByZXZfc2hfb3B0cyBpbgorICAgICAgICAqZiopCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZXQgK2YKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfR0VUTkFNRUlORk8sIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24uXSkKKyAgICAgIGFjX2N2X2Z1bmNfZ2V0bmFtZWluZm89InllcyIKKyAgICBmaQorICBmaQorXSkKKworCitkbmwgVFlQRV9TT0NLQUREUl9TVE9SQUdFCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS4gTW9zdCBJUHY2LWVuYWJsZWQKK2RubCBob3N0cyBoYXZlIGl0LCBidXQgQUlYIDQuMyBpcyBvbmUga25vd24gZXhjZXB0aW9uLgorCitBQ19ERUZVTihbVFlQRV9TT0NLQUREUl9TVE9SQUdFXSwKK1sKKyAgIEFDX0NIRUNLX1RZUEUoW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlXSwKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UsIDEsCisgICAgICAgICAgICAgICAgICBbaWYgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaXMgZGVmaW5lZF0pLCAsCisgICBbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjZW5kaWYKKyAgIF0pCitdKQorCisKK2RubCBDVVJMX0NIRUNLX05JX1dJVEhTQ09QRUlECitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciB3b3JraW5nIE5JX1dJVEhTQ09QRUlEIGluIGdldG5hbWVpbmZvKCkKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTklfV0lUSFNDT1BFSURdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfRlVOQ19HRVROQU1FSU5GT10pZG5sCisgIEFDX1JFUVVJUkUoW1RZUEVfU09DS0FERFJfU1RPUkFHRV0pZG5sCisgIEFDX0NIRUNLX0hFQURFUlMoc3RkaW8uaCBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmggXAorICAgICAgICAgICAgICAgICAgIG5ldGRiLmggbmV0aW5ldC9pbi5oIGFycGEvaW5ldC5oKQorICAjCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBOSV9XSVRIU0NPUEVJRF0sCisgICAgW2FjX2N2X3dvcmtpbmdfbmlfd2l0aHNjb3BlaWRdLCBbCisgICAgQUNfUlVOX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElPX0gKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChOSV9XSVRIU0NPUEVJRCkgJiYgZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorI2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7CisjZWxzZQorICAgICAgICB1bnNpZ25lZCBjaGFyIHNhWzI1Nl07CisjZW5kaWYKKyAgICAgICAgY2hhciBob3N0YnVmW05JX01BWEhPU1RdOworICAgICAgICBpbnQgcmM7CisgICAgICAgIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzYWxlbiA9IChHRVROQU1FSU5GT19UWVBFX0FSRzIpc2l6ZW9mKHNhKTsKKyAgICAgICAgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBob3N0bGVuID0gKEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYpc2l6ZW9mKGhvc3RidWYpOworICAgICAgICBHRVROQU1FSU5GT19UWVBFX0FSRzcgZmxhZ3MgPSBOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJWIHwgTklfV0lUSFNDT1BFSUQ7CisgICAgICAgIGludCBmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOworICAgICAgICBpZihmZCA8IDApIHsKKyAgICAgICAgICBwZXJyb3IoInNvY2tldCgpIik7CisgICAgICAgICAgcmV0dXJuIDE7IC8qIEVycm9yIGNyZWF0aW5nIHNvY2tldCAqLworICAgICAgICB9CisgICAgICAgIHJjID0gZ2V0c29ja25hbWUoZmQsIChHRVROQU1FSU5GT19UWVBFX0FSRzEpJnNhLCAmc2FsZW4pOworICAgICAgICBpZihyYykgeworICAgICAgICAgIHBlcnJvcigiZ2V0c29ja25hbWUoKSIpOworICAgICAgICAgIHJldHVybiAyOyAvKiBFcnJvciByZXRyaWV2aW5nIHNvY2tldCBuYW1lICovCisgICAgICAgIH0KKyAgICAgICAgcmMgPSBnZXRuYW1laW5mbygoR0VUTkFNRUlORk9fVFlQRV9BUkcxKSZzYSwgc2FsZW4sIGhvc3RidWYsIGhvc3RsZW4sIE5VTEwsIDAsIGZsYWdzKTsKKyAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICBwcmludGYoInJjID0gJXNcbiIsIGdhaV9zdHJlcnJvcihyYykpOworICAgICAgICAgIHJldHVybiAzOyAvKiBFcnJvciB0cmFuc2xhdGluZyBzb2NrZXQgYWRkcmVzcyAqLworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOyAvKiBPaywgTklfV0lUSFNDT1BFSUQgd29ya3MgKi8KKyNlbHNlCisgICAgICAgIHJldHVybiA0OyAvKiBFcnJvciwgTklfV0lUSFNDT1BFSUQgbm90IGRlZmluZWQgb3Igbm8gZ2V0bmFtZWluZm8oKSAqLworI2VuZGlmCisgICAgICBdXSkgIyBBQy1MQU5HLVBST0dSQU0KKyAgICBdLFsKKyAgICAgICMgRXhpdCBjb2RlID09IDAuIFByb2dyYW0gd29ya2VkLgorICAgICAgYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZD0ieWVzIgorICAgIF0sWworICAgICAgIyBFeGl0IGNvZGUgIT0gMC4gUHJvZ3JhbSBmYWlsZWQuCisgICAgICBhY19jdl93b3JraW5nX25pX3dpdGhzY29wZWlkPSJubyIKKyAgICBdLFsKKyAgICAgICMgUHJvZ3JhbSBpcyBub3QgcnVuIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiBTbyB3ZSBhc3N1bWUKKyAgICAgICMgTklfV0lUSFNDT1BFSUQgd2lsbCB3b3JrIGlmIHdlIGFyZSBhYmxlIHRvIGNvbXBpbGUgaXQuCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgICBdXSxbWworICAgICAgICAgIHVuc2lnbmVkIGludCBkdW1teT0gTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSViB8IE5JX1dJVEhTQ09QRUlEOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBhY19jdl93b3JraW5nX25pX3dpdGhzY29wZWlkPSJ5ZXMiCisgICAgICBdLFsKKyAgICAgICAgYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZD0ibm8iCisgICAgICBdKSAjIEFDLUNPTVBJTEUtSUZFTFNFCisgICAgXSkgIyBBQy1SVU4tSUZFTFNFCisgIF0pICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgY2FzZSAiJGFjX2N2X3dvcmtpbmdfbmlfd2l0aHNjb3BlaWQiIGluCisgICAgeWVzKQorICAgICAgQUNfREVGSU5FKEhBVkVfTklfV0lUSFNDT1BFSUQsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiBOSV9XSVRIU0NPUEVJRCBleGlzdHMgYW5kIHdvcmtzLl0pCisgICAgICA7OworICBlc2FjCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfUkVDVgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGlmIHRoZSBzb2NrZXQgcmVjdigpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwKK2RubCBhbmQgY2hlY2sgaXRzIHJldHVybiB0eXBlIGFuZCB0aGUgdHlwZXMgb2YgaXRzCitkbmwgYXJndW1lbnRzLiBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgSEFWRV9SRUNWCitkbmwgd2lsbCBiZSBkZWZpbmVkLCBkZWZpbmluZyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cworZG5sIGluIFJFQ1ZfVFlQRV9BUkcxLCBSRUNWX1RZUEVfQVJHMiwgUkVDVl9UWVBFX0FSRzMKK2RubCBhbmQgUkVDVl9UWVBFX0FSRzQsIGRlZmluaW5nIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbgorZG5sIHJldHVybiB2YWx1ZSBpbiBSRUNWX1RZUEVfUkVUVi4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19SRUNWXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DSzJdKWRubAorICBBQ19DSEVDS19IRUFERVJTKHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciByZWN2XSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNlbmRpZgorICAgIF1dLFtbCisgICAgICByZWN2KDAsIDAsIDAsIDApOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGN1cmxfY3ZfcmVjdj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgY3VybF9jdl9yZWN2PSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9yZWN2IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3R5cGVzIG9mIGFyZ3MgYW5kIHJldHVybiB0eXBlIGZvciByZWN2XSwKKyAgICAgIFtjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzXSwgWworICAgICAgY3VybF9jdl9mdW5jX3JlY3ZfYXJncz0idW5rbm93biIKKyAgICAgIGZvciByZWN2X3JldHYgaW4gJ2ludCcgJ3NzaXplX3QnOyBkbworICAgICAgICBmb3IgcmVjdl9hcmcxIGluICdpbnQnICdzc2l6ZV90JyAnU09DS0VUJzsgZG8KKyAgICAgICAgICBmb3IgcmVjdl9hcmcyIGluICdjaGFyIConICd2b2lkIConOyBkbworICAgICAgICAgICAgZm9yIHJlY3ZfYXJnMyBpbiAnc2l6ZV90JyAnaW50JyAnc29ja2xlbl90JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgZm9yIHJlY3ZfYXJnNCBpbiAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3JlY3ZfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBSRUNWQ0FMTENPTlYgUEFTQ0FMCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZGVmaW5lIFJFQ1ZDQUxMQ09OVgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuICRyZWN2X3JldHYgUkVDVkNBTExDT05WCisgICAgICAgICAgICAgICAgICAgICAgcmVjdigkcmVjdl9hcmcxLCAkcmVjdl9hcmcyLCAkcmVjdl9hcmczLCAkcmVjdl9hcmc0KTsKKyAgICAgICAgICAgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgICAgICAgICAgICAkcmVjdl9hcmcxIHM9MDsKKyAgICAgICAgICAgICAgICAgICAgICAkcmVjdl9hcmcyIGJ1Zj0wOworICAgICAgICAgICAgICAgICAgICAgICRyZWN2X2FyZzMgbGVuPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHJlY3ZfYXJnNCBmbGFncz0wOworICAgICAgICAgICAgICAgICAgICAgICRyZWN2X3JldHYgcmVzID0gcmVjdihzLCBidWYsIGxlbiwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICBdXSkKKyAgICAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzPSIkcmVjdl9hcmcxLCRyZWN2X2FyZzIsJHJlY3ZfYXJnMywkcmVjdl9hcmc0LCRyZWN2X3JldHYiCisgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBkb25lCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICBdKSAjIEFDLUNBQ0hFLUNIRUNLCisgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHJlY3YgYXJnc10pCisgICAgZWxzZQorICAgICAgcmVjdl9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kcmVjdl9wcmV2X0lGUworICAgICAgc2hpZnQKKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWX1RZUEVfQVJHMSwgJFsxXSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdi5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZfVFlQRV9BUkcyLCAkWzJdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciByZWN2Ll0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVl9UWVBFX0FSRzMsICRbM10sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWX1RZUEVfQVJHNCwgJFs0XSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdi5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZfVFlQRV9SRVRWLCAkWzVdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdi5dKQorICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfUkVDViwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2IGZ1bmN0aW9uLl0pCisgICAgICBhY19jdl9mdW5jX3JlY3Y9InllcyIKKyAgICBmaQorICBlbHNlCisgICAgQUNfTVNHX0VSUk9SKFtVbmFibGUgdG8gbGluayBmdW5jdGlvbiByZWN2XSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19TRU5ECitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRlc3QgaWYgdGhlIHNvY2tldCBzZW5kKCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLAorZG5sIGFuZCBjaGVjayBpdHMgcmV0dXJuIHR5cGUgYW5kIHRoZSB0eXBlcyBvZiBpdHMKK2RubCBhcmd1bWVudHMuIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBIQVZFX1NFTkQKK2RubCB3aWxsIGJlIGRlZmluZWQsIGRlZmluaW5nIHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzCitkbmwgaW4gU0VORF9UWVBFX0FSRzEsIFNFTkRfVFlQRV9BUkcyLCBTRU5EX1RZUEVfQVJHMworZG5sIGFuZCBTRU5EX1RZUEVfQVJHNCwgZGVmaW5pbmcgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uCitkbmwgcmV0dXJuIHZhbHVlIGluIFNFTkRfVFlQRV9SRVRWLCBhbmQgYWxzbyBkZWZpbmluZyB0aGUKK2RubCB0eXBlIHF1YWxpZmllciBvZiBzZWNvbmQgYXJndW1lbnQgaW4gU0VORF9RVUFMX0FSRzIuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU0VORF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DS10pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0syXSlkbmwKKyAgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmgpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2VuZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKyAgICBdXSxbWworICAgICAgc2VuZCgwLCAwLCAwLCAwKTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjdXJsX2N2X3NlbmQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGN1cmxfY3Zfc2VuZD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3Zfc2VuZCIgPSAieWVzIjsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt0eXBlcyBvZiBhcmdzIGFuZCByZXR1cm4gdHlwZSBmb3Igc2VuZF0sCisgICAgICBbY3VybF9jdl9mdW5jX3NlbmRfYXJnc10sIFsKKyAgICAgIGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3M9InVua25vd24iCisgICAgICBmb3Igc2VuZF9yZXR2IGluICdpbnQnICdzc2l6ZV90JzsgZG8KKyAgICAgICAgZm9yIHNlbmRfYXJnMSBpbiAnaW50JyAnc3NpemVfdCcgJ1NPQ0tFVCc7IGRvCisgICAgICAgICAgZm9yIHNlbmRfYXJnMiBpbiAnY2hhciAqJyAndm9pZCAqJyAnY29uc3QgY2hhciAqJyAnY29uc3Qgdm9pZCAqJzsgZG8KKyAgICAgICAgICAgIGZvciBzZW5kX2FyZzMgaW4gJ3NpemVfdCcgJ2ludCcgJ3NvY2tsZW5fdCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgIGZvciBzZW5kX2FyZzQgaW4gJ2ludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgICAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNkZWZpbmUgU0VORENBTExDT05WIFBBU0NBTAorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2RlZmluZSBTRU5EQ0FMTENPTlYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiAkc2VuZF9yZXR2IFNFTkRDQUxMQ09OVgorICAgICAgICAgICAgICAgICAgICAgIHNlbmQoJHNlbmRfYXJnMSwgJHNlbmRfYXJnMiwgJHNlbmRfYXJnMywgJHNlbmRfYXJnNCk7CisgICAgICAgICAgICAgICAgICAgIF1dLFtbCisgICAgICAgICAgICAgICAgICAgICAgJHNlbmRfYXJnMSBzPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHNlbmRfYXJnMyBsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgICAkc2VuZF9hcmc0IGZsYWdzPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHNlbmRfcmV0diByZXMgPSBzZW5kKHMsIDAsIGxlbiwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICBdXSkKKyAgICAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzPSIkc2VuZF9hcmcxLCRzZW5kX2FyZzIsJHNlbmRfYXJnMywkc2VuZF9hcmc0LCRzZW5kX3JldHYiCisgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBkb25lCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICBdKSAjIEFDLUNBQ0hFLUNIRUNLCisgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHNlbmQgYXJnc10pCisgICAgZWxzZQorICAgICAgc2VuZF9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kc2VuZF9wcmV2X0lGUworICAgICAgc2hpZnQKKyAgICAgICMKKyAgICAgIHNlbmRfcXVhbF90eXBlX2FyZzI9JFsyXQorICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNFTkRfVFlQRV9BUkcxLCAkWzFdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0VORF9UWVBFX0FSRzMsICRbM10sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHNlbmQuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRU5EX1RZUEVfQVJHNCwgJFs0XSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3Igc2VuZC5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNFTkRfVFlQRV9SRVRWLCAkWzVdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC5dKQorICAgICAgIworICAgICAgcHJldl9zaF9vcHRzPSQtCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0IC1mCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIGNhc2UgIiRzZW5kX3F1YWxfdHlwZV9hcmcyIiBpbgorICAgICAgICBjb25zdCopCisgICAgICAgICAgc2VuZF9xdWFsX2FyZzI9Y29uc3QKKyAgICAgICAgICBzZW5kX3R5cGVfYXJnMj1gZWNobyAkc2VuZF9xdWFsX3R5cGVfYXJnMiB8IHNlZCAncy9eY29uc3QgLy8nYAorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNlbmRfcXVhbF9hcmcyPQorICAgICAgICAgIHNlbmRfdHlwZV9hcmcyPSRzZW5kX3F1YWxfdHlwZV9hcmcyCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0VORF9RVUFMX0FSRzIsICRzZW5kX3F1YWxfYXJnMiwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDIgZm9yIHNlbmQuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRU5EX1RZUEVfQVJHMiwgJHNlbmRfdHlwZV9hcmcyLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLl0pCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0ICtmCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NFTkQsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi5dKQorICAgICAgYWNfY3ZfZnVuY19zZW5kPSJ5ZXMiCisgICAgZmkKKyAgZWxzZQorICAgIEFDX01TR19FUlJPUihbVW5hYmxlIHRvIGxpbmsgZnVuY3Rpb24gc2VuZF0pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfUkVDVkZST00KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBpZiB0aGUgc29ja2V0IHJlY3Zmcm9tKCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLAorZG5sIGFuZCBjaGVjayBpdHMgcmV0dXJuIHR5cGUgYW5kIHRoZSB0eXBlcyBvZiBpdHMKK2RubCBhcmd1bWVudHMuIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBIQVZFX1JFQ1ZGUk9NCitkbmwgd2lsbCBiZSBkZWZpbmVkLCBkZWZpbmluZyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cworZG5sIGluIFJFQ1ZGUk9NX1RZUEVfQVJHMSwgUkVDVkZST01fVFlQRV9BUkcyLCBhbmQgc28gb24KK2RubCB0byBSRUNWRlJPTV9UWVBFX0FSRzYsIGRlZmluaW5nIGFsc28gdGhlIHR5cGUgb2YgdGhlCitkbmwgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIGluIFJFQ1ZGUk9NX1RZUEVfUkVUVi4KK2RubCBOb3RpY2UgdGhhdCB0aGUgdHlwZXMgcmV0dXJuZWQgZm9yIHBvaW50ZXIgYXJndW1lbnRzCitkbmwgd2lsbCBhY3R1YWxseSBiZSB0aGUgdHlwZSBwb2ludGVkIGJ5IHRoZSBwb2ludGVyLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1JFQ1ZGUk9NXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DSzJdKWRubAorICBBQ19DSEVDS19IRUFERVJTKHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciByZWN2ZnJvbV0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKyAgICBdXSxbWworICAgICAgcmVjdmZyb20oMCwgMCwgMCwgMCwgMCwgMCk7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY3VybF9jdl9yZWN2ZnJvbT0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgY3VybF9jdl9yZWN2ZnJvbT0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfcmVjdmZyb20iID0gInllcyI7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHJlY3Zmcm9tXSwKKyAgICAgIFtjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJnc10sIFsKKyAgICAgIGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzPSJ1bmtub3duIgorICAgICAgZm9yIHJlY3Zmcm9tX3JldHYgaW4gJ2ludCcgJ3NzaXplX3QnOyBkbworICAgICAgICBmb3IgcmVjdmZyb21fYXJnMSBpbiAnaW50JyAnc3NpemVfdCcgJ1NPQ0tFVCc7IGRvCisgICAgICAgICAgZm9yIHJlY3Zmcm9tX2FyZzIgaW4gJ2NoYXIgKicgJ3ZvaWQgKic7IGRvCisgICAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnMyBpbiAnc2l6ZV90JyAnaW50JyAnc29ja2xlbl90JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgZm9yIHJlY3Zmcm9tX2FyZzQgaW4gJ2ludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgICAgZm9yIHJlY3Zmcm9tX2FyZzUgaW4gJ3N0cnVjdCBzb2NrYWRkciAqJyAndm9pZCAqJyAnY29uc3Qgc3RydWN0IHNvY2thZGRyIConOyBkbworICAgICAgICAgICAgICAgICAgZm9yIHJlY3Zmcm9tX2FyZzYgaW4gJ3NvY2tsZW5fdCAqJyAnaW50IConICd1bnNpZ25lZCBpbnQgKicgJ3NpemVfdCAqJyAndm9pZCAqJzsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNkZWZpbmUgUkVDVkZST01DQUxMQ09OViBQQVNDQUwKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNkZWZpbmUgUkVDVkZST01DQUxMQ09OVgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiAkcmVjdmZyb21fcmV0diBSRUNWRlJPTUNBTExDT05WCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Zmcm9tKCRyZWN2ZnJvbV9hcmcxLCAkcmVjdmZyb21fYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzMsICRyZWN2ZnJvbV9hcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnNSwgJHJlY3Zmcm9tX2FyZzYpOworICAgICAgICAgICAgICAgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzEgcz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnMiBidWY9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzMgbGVuPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmc0IGZsYWdzPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmc1IGFkZHI9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzYgYWRkcmxlbj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fcmV0diByZXM9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVjdmZyb20ocywgYnVmLCBsZW4sIGZsYWdzLCBhZGRyLCBhZGRybGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF1dKQorICAgICAgICAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3M9IiRyZWN2ZnJvbV9hcmcxLCRyZWN2ZnJvbV9hcmcyLCRyZWN2ZnJvbV9hcmczLCRyZWN2ZnJvbV9hcmc0LCRyZWN2ZnJvbV9hcmc1LCRyZWN2ZnJvbV9hcmc2LCRyZWN2ZnJvbV9yZXR2IgorICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisgICAgXSkgIyBBQy1DQUNIRS1DSEVDSworICAgICMgTmVhcmx5IGxhc3QgbWludXRlIGNoYW5nZSBmb3IgdGhpcyByZWxlYXNlIHN0YXJ0cyBoZXJlCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfUkVDVkZST00sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3Zmcm9tIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19yZWN2ZnJvbT0ieWVzIgorICAgICMgTmVhcmx5IGxhc3QgbWludXRlIGNoYW5nZSBmb3IgdGhpcyByZWxlYXNlIGVuZHMgaGVyZQorICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19XQVJOKFtDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciByZWN2ZnJvbSBhcmdzXSkKKyAgICBlbHNlCisgICAgICByZWN2ZnJvbV9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncyIgfCBzZWQgJ3MvXCovXCovZydgCisgICAgICBJRlM9JHJlY3Zmcm9tX3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworICAgICAgcmVjdmZyb21fcHRydF9hcmcyPSRbMl0KKyAgICAgIHJlY3Zmcm9tX3F1YWxfcHRydF9hcmc1PSRbNV0KKyAgICAgIHJlY3Zmcm9tX3B0cnRfYXJnNj0kWzZdCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9BUkcxLCAkWzFdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2ZnJvbS5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZGUk9NX1RZUEVfQVJHMywgJFszXSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzQsICRbNF0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9SRVRWLCAkWzddLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uXSkKKyAgICAgICMKKyAgICAgIHByZXZfc2hfb3B0cz0kLQorICAgICAgIworICAgICAgY2FzZSAkcHJldl9zaF9vcHRzIGluCisgICAgICAgICpmKikKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNldCAtZgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBjYXNlICIkcmVjdmZyb21fcXVhbF9wdHJ0X2FyZzUiIGluCisgICAgICAgIGNvbnN0KikKKyAgICAgICAgICByZWN2ZnJvbV9xdWFsX2FyZzU9Y29uc3QKKyAgICAgICAgICByZWN2ZnJvbV9wdHJ0X2FyZzU9YGVjaG8gJHJlY3Zmcm9tX3F1YWxfcHRydF9hcmc1IHwgc2VkICdzL15jb25zdCAvLydgCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgcmVjdmZyb21fcXVhbF9hcmc1PQorICAgICAgICAgIHJlY3Zmcm9tX3B0cnRfYXJnNT0kcmVjdmZyb21fcXVhbF9wdHJ0X2FyZzUKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIHJlY3Zmcm9tX3R5cGVfYXJnMj1gZWNobyAkcmVjdmZyb21fcHRydF9hcmcyIHwgc2VkICdzLyBcKi8vJ2AKKyAgICAgIHJlY3Zmcm9tX3R5cGVfYXJnNT1gZWNobyAkcmVjdmZyb21fcHRydF9hcmc1IHwgc2VkICdzLyBcKi8vJ2AKKyAgICAgIHJlY3Zmcm9tX3R5cGVfYXJnNj1gZWNobyAkcmVjdmZyb21fcHRydF9hcmc2IHwgc2VkICdzLyBcKi8vJ2AKKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzIsICRyZWN2ZnJvbV90eXBlX2FyZzIsCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20uXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9RVUFMX0FSRzUsICRyZWN2ZnJvbV9xdWFsX2FyZzUsCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9BUkc1LCAkcmVjdmZyb21fdHlwZV9hcmc1LAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9BUkc2LCAkcmVjdmZyb21fdHlwZV9hcmc2LAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tLl0pCisgICAgICAjCisgICAgICBpZiB0ZXN0ICIkcmVjdmZyb21fdHlwZV9hcmcyIiA9ICJ2b2lkIjsgdGhlbgorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUQsIDEsCisgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuXSkKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcmVjdmZyb21fdHlwZV9hcmc1IiA9ICJ2b2lkIjsgdGhlbgorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9BUkc1X0lTX1ZPSUQsIDEsCisgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuXSkKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcmVjdmZyb21fdHlwZV9hcmc2IiA9ICJ2b2lkIjsgdGhlbgorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUQsIDEsCisgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuXSkKKyAgICAgIGZpCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0ICtmCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1JFQ1ZGUk9NLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3Zmcm9tIGZ1bmN0aW9uLl0pCisgICAgICBhY19jdl9mdW5jX3JlY3Zmcm9tPSJ5ZXMiCisgICAgZmkKKyAgZWxzZQorICAgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gbGluayBmdW5jdGlvbiByZWN2ZnJvbV0pCisgICAgQUNfTVNHX1dBUk4oW1lvdXIgc3lzdGVtIHdpbGwgYmUgdnVsbmVyYWJsZSB0byBzb21lIGZvcm1zIG9mIEROUyBjYWNoZSBwb2lzb25pbmddKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19NU0dfTk9TSUdOQUwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIE1TR19OT1NJR05BTAorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19NU0dfTk9TSUdOQUxdLCBbCisgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIE1TR19OT1NJR05BTF0sIFthY19jdl9tc2dfbm9zaWduYWxdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2VuZGlmCisgICAgICBdXSxbWworICAgICAgICBpbnQgZmxhZz1NU0dfTk9TSUdOQUw7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X21zZ19ub3NpZ25hbD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfbXNnX25vc2lnbmFsPSJubyIKKyAgICBdKQorICBdKQorICBjYXNlICIkYWNfY3ZfbXNnX25vc2lnbmFsIiBpbgorICAgIHllcykKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX01TR19OT1NJR05BTCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19TVFJVQ1RfVElNRVZBTAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgdGltZXZhbCBzdHJ1Y3QKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfU1RSVUNUX1RJTUVWQUxdLCBbCisgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DS10pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0syXSlkbmwKKyAgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdHlwZXMuaCBzeXMvdGltZS5oIHRpbWUuaCBzeXMvc29ja2V0LmgpCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHRpbWV2YWxdLCBbYWNfY3Zfc3RydWN0X3RpbWV2YWxdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisgICAgICBdXSxbWworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0czsKKyAgICAgICAgdHMudHZfc2VjICA9IDA7CisgICAgICAgIHRzLnR2X3VzZWMgPSAwOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9zdHJ1Y3RfdGltZXZhbD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3Zfc3RydWN0X3RpbWV2YWw9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9zdHJ1Y3RfdGltZXZhbCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVFJVQ1RfVElNRVZBTCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB0aW1ldmFsIHN0cnVjdC5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgVFlQRV9TSUdfQVRPTUlDX1QKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIHNpZ19hdG9taWNfdCB0eXBlIGlzIGF2YWlsYWJsZSwgYW5kCitkbmwgdmVyaWZ5IGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZCBhcyB2b2xhdGlsZS4KKworQUNfREVGVU4oW1RZUEVfU0lHX0FUT01JQ19UXSwgWworICBBQ19DSEVDS19IRUFERVJTKHNpZ25hbC5oKQorICBBQ19DSEVDS19UWVBFKFtzaWdfYXRvbWljX3RdLFsKKyAgICBBQ19ERUZJTkUoSEFWRV9TSUdfQVRPTUlDX1QsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLl0pCisgIF0sICxbCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisgIF0pCisgIGNhc2UgIiRhY19jdl90eXBlX3NpZ19hdG9taWNfdCIgaW4KKyAgICB5ZXMpCisgICAgICAjCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGVdKQorICAgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX1NJR05BTF9ICisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGR1bW15ID0gMDsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBhY19jdl9zaWdfYXRvbWljX3Rfdm9sYXRpbGU9Im5vIgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIGFjX2N2X3NpZ19hdG9taWNfdF92b2xhdGlsZT0ieWVzIgorICAgICAgXSkKKyAgICAgICMKKyAgICAgIGlmIHRlc3QgIiRhY19jdl9zaWdfYXRvbWljX3Rfdm9sYXRpbGUiID0gInllcyI7IHRoZW4KKyAgICAgICAgQUNfREVGSU5FKEhBVkVfU0lHX0FUT01JQ19UX1ZPTEFUSUxFLCAxLAorICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlLl0pCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgVFlQRV9JTl9BRERSX1QKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGluX2FkZHJfdDogaXQgaXMgdXNlZCB0byByZWNlaXZlIHRoZSByZXR1cm4gY29kZSBvZiBpbmV0X2FkZHIoKQorZG5sIGFuZCBhIGZldyBvdGhlciB0aGluZ3MuCisKK0FDX0RFRlVOKFtUWVBFX0lOX0FERFJfVF0sIFsKKyAgQUNfQ0hFQ0tfVFlQRShbaW5fYWRkcl90XSwgLFsKKyAgICBkbmwgaW5fYWRkcl90IG5vdCBhdmFpbGFibGUKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIGluX2FkZHJfdCBlcXVpdmFsZW50XSwKKyAgICAgIFtjdXJsX2N2X2luX2FkZHJfdF9lcXVpdl0sIFsKKyAgICAgIGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2PSJ1bmtub3duIgorICAgICAgZm9yIHQgaW4gInVuc2lnbmVkIGxvbmciIGludCBzaXplX3QgdW5zaWduZWQgbG9uZzsgZG8KKyAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2IiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICBdXSxbWworICAgICAgICAgICAgICAkdCBkYXRhID0gaW5ldF9hZGRyICgiMS4yLjMuNCIpOworICAgICAgICAgICAgXV0pCisgICAgICAgICAgXSxbCisgICAgICAgICAgICBjdXJsX2N2X2luX2FkZHJfdF9lcXVpdj0iJHQiCisgICAgICAgICAgXSkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBdKQorICAgIGNhc2UgIiRjdXJsX2N2X2luX2FkZHJfdF9lcXVpdiIgaW4KKyAgICAgIHVua25vd24pCisgICAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBpbl9hZGRyX3RdKQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKGluX2FkZHJfdCwgJGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2LAorICAgICAgICAgIFtUeXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBpbl9hZGRyX3Qgd2hlbiBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBpdC5dKQorICAgICAgICA7OworICAgIGVzYWMKKyAgXSxbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjZW5kaWYKKyAgXSkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19DTE9DS19HRVRUSU1FX01PTk9UT05JQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiBtb25vdG9uaWMgY2xvY2tfZ2V0dGltZSBpcyBhdmFpbGFibGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUNdLCBbCisgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSlkbmwKKyAgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdHlwZXMuaCBzeXMvdGltZS5oIHRpbWUuaCkKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbW9ub3RvbmljIGNsb2NrX2dldHRpbWVdKQorICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorICAgIF1dLFtbCisgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisgICAgICAodm9pZCljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWU9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ibm8iCisgIF0pCisgIGRubCBEZWZpbml0aW9uIG9mIEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgaXMgaW50ZW50aW9uYWxseSBwb3N0cG9uZWQKKyAgZG5sIHVudGlsIGxpYnJhcnkgbGlua2luZyBhbmQgcnVuLXRpbWUgY2hlY2tzIGZvciBjbG9ja19nZXR0aW1lIHN1Y2NlZWQuCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0xJQlNfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgSWYgbW9ub3RvbmljIGNsb2NrX2dldHRpbWUgaXMgYXZhaWxhYmxlIHRoZW4sCitkbmwgY2hlY2sgYW5kIHByZXBlbmRlZCB0byBMSUJTIGFueSBuZWVkZWQgbGlicmFyaWVzLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19MSUJTX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0ZVTkNfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUNdKWRubAorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWUiID0gInllcyI7IHRoZW4KKyAgICAjCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgY2xvY2tfZ2V0dGltZSBpbiBsaWJyYXJpZXNdKQorICAgICMKKyAgICBjdXJsX2N2X3NhdmVfTElCUz0iJExJQlMiCisgICAgY3VybF9jdl9nY2xrX0xJQlM9InVua25vd24iCisgICAgIworICAgIGZvciB4X3hsaWJzIGluICcnICctbHJ0JyAnLWxwb3NpeDQnIDsgZG8KKyAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2djbGtfTElCUyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJHhfeGxpYnMiOyB0aGVuCisgICAgICAgICAgTElCUz0iJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgICBlbHNlCisgICAgICAgICAgTElCUz0iJHhfeGxpYnMgJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgICBmaQorICAgICAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorICAgICAgICAgIF1dLFtbCisgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisgICAgICAgICAgICAodm9pZCljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKTsKKyAgICAgICAgICBdXSkKKyAgICAgICAgXSxbCisgICAgICAgICAgY3VybF9jdl9nY2xrX0xJQlM9IiR4X3hsaWJzIgorICAgICAgICBdKQorICAgICAgZmkKKyAgICBkb25lCisgICAgIworICAgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKyAgICAjCisgICAgY2FzZSBYLSIkY3VybF9jdl9nY2xrX0xJQlMiIGluCisgICAgICBYLXVua25vd24pCisgICAgICAgIEFDX01TR19SRVNVTFQoW2Nhbm5vdCBmaW5kIGNsb2NrX2dldHRpbWVdKQorICAgICAgICBBQ19NU0dfV0FSTihbSEFWRV9DTE9DS19HRVRUSU1FX01PTk9UT05JQyB3aWxsIG5vdCBiZSBkZWZpbmVkXSkKKyAgICAgICAgYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lPSJubyIKKyAgICAgICAgOzsKKyAgICAgIFgtKQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtubyBhZGRpdGlvbmFsIGxpYiByZXF1aXJlZF0pCisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ieWVzIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAteiAiJGN1cmxfY3Zfc2F2ZV9MSUJTIjsgdGhlbgorICAgICAgICAgIExJQlM9IiRjdXJsX2N2X2djbGtfTElCUyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIExJQlM9IiRjdXJsX2N2X2djbGtfTElCUyAkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgICAgIGZpCisgICAgICAgIEFDX01TR19SRVNVTFQoWyRjdXJsX2N2X2djbGtfTElCU10pCisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ieWVzIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAjCisgICAgZG5sIG9ubHkgZG8gcnVudGltZSB2ZXJpZmljYXRpb24gd2hlbiBub3QgY3Jvc3MtY29tcGlsaW5nCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgICAgdGVzdCAiJGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZSIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBtb25vdG9uaWMgY2xvY2tfZ2V0dGltZSB3b3Jrc10pCisgICAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorICAgICAgICBdXSxbWworICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICAgICBpZiAoMCA9PSBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKSkKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIEFDX01TR19XQVJOKFtIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIHdpbGwgbm90IGJlIGRlZmluZWRdKQorICAgICAgICBhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWU9Im5vIgorICAgICAgICBMSUJTPSIkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgICBdKQorICAgIGZpCisgICAgIworICAgIGNhc2UgIiRhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWUiIGluCisgICAgICB5ZXMpCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDLCAxLAorICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2tfZ2V0dGltZSBmdW5jdGlvbiBhbmQgbW9ub3RvbmljIHRpbWVyLl0pCisgICAgICAgIDs7CisgICAgZXNhYworICAgICMKKyAgZmkKKyAgIworXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfTElCU19DT05ORUNUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBuZXR3b3JrIGNvbm5lY3QgZnVuY3Rpb24gaXMgYWxyZWFkeSBhdmFpbGFibGUKK2RubCB1c2luZyBjdXJyZW50IGxpYnJhcmllcyBvciBpZiBhbm90aGVyIG9uZSBpcyByZXF1aXJlZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0xJQlNfQ09OTkVDVF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfV0lOU09DSzJdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjb25uZWN0IGluIGxpYnJhcmllc10pCisgIHRzdF9jb25uZWN0X3NhdmVfTElCUz0iJExJQlMiCisgIHRzdF9jb25uZWN0X25lZWRfTElCUz0idW5rbm93biIKKyAgZm9yIHRzdF9saWIgaW4gJycgJy1sc29ja2V0JyA7IGRvCisgICAgaWYgdGVzdCAiJHRzdF9jb25uZWN0X25lZWRfTElCUyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIExJQlM9IiR0c3RfbGliICR0c3RfY29ubmVjdF9zYXZlX0xJQlMiCisgICAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAgICNpZm5kZWYgSEFWRV9XSU5ET1dTX0gKKyAgICAgICAgICAgIGludCBjb25uZWN0KGludCwgdm9pZCosIGludCk7CisgICAgICAgICAgI2VuZGlmCisgICAgICAgIF1dLFtbCisgICAgICAgICAgaWYoMCAhPSBjb25uZWN0KDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIHRzdF9jb25uZWN0X25lZWRfTElCUz0iJHRzdF9saWIiCisgICAgICBdKQorICAgIGZpCisgIGRvbmUKKyAgTElCUz0iJHRzdF9jb25uZWN0X3NhdmVfTElCUyIKKyAgIworICBjYXNlIFgtIiR0c3RfY29ubmVjdF9uZWVkX0xJQlMiIGluCisgICAgWC11bmtub3duKQorICAgICAgQUNfTVNHX1JFU1VMVChbY2Fubm90IGZpbmQgY29ubmVjdF0pCisgICAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIGNvbm5lY3QgZnVuY3Rpb24gaW4gbGlicmFyaWVzLl0pCisgICAgICA7OworICAgIFgtKQorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX01TR19SRVNVTFQoWyR0c3RfY29ubmVjdF9uZWVkX0xJQlNdKQorICAgICAgTElCUz0iJHRzdF9jb25uZWN0X25lZWRfTElCUyAkdHN0X2Nvbm5lY3Rfc2F2ZV9MSUJTIgorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ0FSRVNfREVGSU5FX1VOUVVPVEVEIChWQVJJQUJMRSwgW1ZBTFVFXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTGlrZSBBQ19ERUZJTkVfVU5RVU9URUQgdGhpcyBtYWNybyB3aWxsIGRlZmluZSBhIEMgcHJlcHJvY2Vzc29yCitkbmwgc3ltYm9sIHRoYXQgY2FuIGJlIGZ1cnRoZXIgdXNlZCBpbiBjdXN0b20gdGVtcGxhdGUgY29uZmlndXJhdGlvbgorZG5sIGZpbGVzLiBUaGlzIG1hY3JvLCB1bmxpa2UgQUNfREVGSU5FX1VOUVVPVEVELCBkb2VzIG5vdCB1c2UgYSB0aGlyZAorZG5sIGFyZ3VtZW50IGZvciB0aGUgZGVzY3JpcHRpb24uIFN5bWJvbCBkZWZpbml0aW9ucyBkb25lIHdpdGggdGhpcworZG5sIG1hY3JvIGFyZSBpbnRlbmRlZCB0byBiZSBleGNsdXNpdmVseSB1c2VkIGluIGhhbmRjcmFmdGVkICouaC5pbgorZG5sIHRlbXBsYXRlIGZpbGVzLiBDb250cmFyeSB0byB3aGF0IEFDX0RFRklORV9VTlFVT1RFRCBkb2VzLCB0aGlzIG9uZQorZG5sIHByZXZlbnRzIGF1dG9oZWFkZXIgZ2VuZXJhdGlvbiBhbmQgaW5zZXJ0aW9uIG9mIHN5bWJvbCB0ZW1wbGF0ZQorZG5sIHN0dWIgYW5kIGRlZmluaXRpb24gaW50byB0aGUgZmlyc3QgY29uZmlndXJhdGlvbiBoZWFkZXIgZmlsZS4gRG8KK2RubCBub3QgdXNlIHRoaXMgbWFjcm8gYXMgYSByZXBsYWNlbWVudCBmb3IgQUNfREVGSU5FX1VOUVVPVEVELCBlYWNoCitkbmwgb25lIHNlcnZlcyBkaWZmZXJlbnQgZnVuY3Rpb25hbCBuZWVkcy4KKworQUNfREVGVU4oW0NBUkVTX0RFRklORV9VTlFVT1RFRF0sIFsKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCitbQCU6QGRlZmluZV0gJDEgaWZlbHNlKCQjLCAyLCBbJDJdLCAxKQorX0VPRgorXSkKKworZG5sIENBUkVTX0NPTkZJR1VSRV9BUkVTX1NPQ0tMRU5fVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIG91dCBzdWl0YWJsZSBhcmVzX3NvY2tsZW5fdCBkYXRhIHR5cGUgZGVmaW5pdGlvbiBhbmQgc2l6ZSwgbWFraW5nCitkbmwgYXBwcm9wcmlhdGUgZGVmaW5pdGlvbnMgZm9yIHRlbXBsYXRlIGZpbGUgYXJlc19idWlsZC5oLmluCitkbmwgdG8gcHJvcGVybHkgY29uZmlndXJlIGFuZCB1c2UgdGhlIGxpYnJhcnkuCitkbmwKK2RubCBUaGUgbmVlZCBmb3IgdGhlIGFyZXNfc29ja2xlbl90IGRlZmluaXRpb24gYXJpc2VzIG1haW5seSB0byBwcm9wZXJseQorZG5sIGludGVyZmFjZSBIUC1VWCBzeXN0ZW1zIHdoaWNoIG9uIG9uZSBoYW5kIGhhdmUgYSB0eXBlZGVmJ2VkIHNvY2tsZW5fdAorZG5sIGRhdGEgdHlwZSB3aGljaCBpcyAzMiBvciA2NC1CaXQgd2lkZSBkZXBlbmRpbmcgb24gdGhlIGRhdGEgbW9kZWwgYmVpbmcKK2RubCB1c2VkLCBhbmQgdGhhdCBvbiB0aGUgb3RoZXIgaGFuZCBpcyBvbmx5IGFjdHVhbGx5IHVzZWQgd2hlbiBpbnRlcmZhY2luZworZG5sIHRoZSBYL09wZW4gc29ja2V0cyBwcm92aWRlZCBpbiB0aGUgeG5ldCBsaWJyYXJ5LgorCitBQ19ERUZVTihbQ0FSRVNfQ09ORklHVVJFX0FSRVNfU09DS0xFTl9UXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19XUzJUQ1BJUF0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NZU19TT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19QUkVQUk9DRVNTX0NBTExDT05WXSlkbmwKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhcmVzX3NvY2tsZW5fdCBkYXRhIHR5cGVdKQorICBjYXJlc190eXBlb2ZfYXJlc19zb2NrbGVuX3Q9InVua25vd24iCisgIGZvciBhcmcxIGluIGludCBTT0NLRVQ7IGRvCisgICAgZm9yIGFyZzIgaW4gJ3N0cnVjdCBzb2NrYWRkcicgdm9pZDsgZG8KKyAgICAgIGZvciB0IGluIHNvY2tsZW5fdCBpbnQgc2l6ZV90ICd1bnNpZ25lZCBpbnQnIGxvbmcgJ3Vuc2lnbmVkIGxvbmcnIHZvaWQ7IGRvCisgICAgICAgIGlmIHRlc3QgIiRjYXJlc190eXBlb2ZfYXJlc19zb2NrbGVuX3QiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICAgICAgICRjYXJlc19pbmNsdWRlc193czJ0Y3BpcAorICAgICAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAgICAgICAkY2FyZXNfcHJlcHJvY2Vzc19jYWxsY29udgorICAgICAgICAgICAgICBleHRlcm4gaW50IEZVTkNBTExDT05WIGdldHBlZXJuYW1lKCRhcmcxLCAkYXJnMiAqLCAkdCAqKTsKKyAgICAgICAgICAgIF1dLFtbCisgICAgICAgICAgICAgICR0ICpsZW5wdHIgPSAwOworICAgICAgICAgICAgICBpZigwICE9IGdldHBlZXJuYW1lKDAsIDAsIGxlbnB0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBdXSkKKyAgICAgICAgICBdLFsKKyAgICAgICAgICAgIGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdD0iJHQiCisgICAgICAgICAgXSkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgIGRvbmUKKyAgZm9yIHQgaW4gc29ja2xlbl90IGludDsgZG8KKyAgICBpZiB0ZXN0ICIkY2FyZXNfdHlwZW9mX2FyZXNfc29ja2xlbl90IiA9ICJ2b2lkIjsgdGhlbgorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAgIHR5cGVkZWYgJHQgYXJlc19zb2NrbGVuX3Q7CisgICAgICAgIF1dLFtbCisgICAgICAgICAgYXJlc19zb2NrbGVuX3QgZHVtbXk7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdD0iJHQiCisgICAgICBdKQorICAgIGZpCisgIGRvbmUKKyAgQUNfTVNHX1JFU1VMVChbJGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdF0pCisgIGlmIHRlc3QgIiRjYXJlc190eXBlb2ZfYXJlc19zb2NrbGVuX3QiID0gInZvaWQiIHx8CisgICAgdGVzdCAiJGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIGRhdGEgdHlwZSBmb3IgYXJlc19zb2NrbGVuX3QuXSkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW3NpemUgb2YgYXJlc19zb2NrbGVuX3RdKQorICBjYXJlc19zaXplb2ZfYXJlc19zb2NrbGVuX3Q9InVua25vd24iCisgIGNhcmVzX3B1bGxfaGVhZGVyc19zb2NrbGVuX3Q9InVua25vd24iCisgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgPSAieWVzIjsgdGhlbgorICAgIHRzdF9wdWxsX2hlYWRlcl9jaGVja3M9J25vbmUgd3MydGNwaXAnCisgICAgdHN0X3NpemVfY2hlY2tzPSc0JworICBlbHNlCisgICAgdHN0X3B1bGxfaGVhZGVyX2NoZWNrcz0nbm9uZSBzeXN0eXBlcyBzeXNzb2NrZXQnCisgICAgdHN0X3NpemVfY2hlY2tzPSc0IDggMicKKyAgZmkKKyAgZm9yIHRzdF9zaXplIGluICR0c3Rfc2l6ZV9jaGVja3M7IGRvCisgICAgZm9yIHRzdF9wdWxsX2hlYWRlcnMgaW4gJHRzdF9wdWxsX2hlYWRlcl9jaGVja3M7IGRvCisgICAgICBpZiB0ZXN0ICIkY2FyZXNfc2l6ZW9mX2FyZXNfc29ja2xlbl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICBjYXNlICR0c3RfcHVsbF9oZWFkZXJzIGluCisgICAgICAgICAgd3MydGNwaXApCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiRjYXJlc19pbmNsdWRlc193czJ0Y3BpcCIKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgc3lzdHlwZXMpCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiRjYXJlc19pbmNsdWRlc19zeXNfdHlwZXMiCisgICAgICAgICAgICA7OworICAgICAgICAgIHN5c3NvY2tldCkKKyAgICAgICAgICAgIHRtcF9pbmNsdWRlcz0iJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQiCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICAgJHRtcF9pbmNsdWRlcworICAgICAgICAgICAgdHlwZWRlZiAkY2FyZXNfdHlwZW9mX2FyZXNfc29ja2xlbl90IGFyZXNfc29ja2xlbl90OworICAgICAgICAgICAgdHlwZWRlZiBjaGFyIGR1bW15X2FycltzaXplb2YoYXJlc19zb2NrbGVuX3QpID09ICR0c3Rfc2l6ZSA/IDEgOiAtMV07CisgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgIGFyZXNfc29ja2xlbl90IGR1bW15OworICAgICAgICAgIF1dKQorICAgICAgICBdLFsKKyAgICAgICAgICBjYXJlc19zaXplb2ZfYXJlc19zb2NrbGVuX3Q9IiR0c3Rfc2l6ZSIKKyAgICAgICAgICBjYXJlc19wdWxsX2hlYWRlcnNfc29ja2xlbl90PSIkdHN0X3B1bGxfaGVhZGVycyIKKyAgICAgICAgXSkKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisgIEFDX01TR19SRVNVTFQoWyRjYXJlc19zaXplb2ZfYXJlc19zb2NrbGVuX3RdKQorICBpZiB0ZXN0ICIkY2FyZXNfc2l6ZW9mX2FyZXNfc29ja2xlbl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbY2Fubm90IGZpbmQgb3V0IHNpemUgb2YgYXJlc19zb2NrbGVuX3QuXSkKKyAgZmkKKyAgIworICBjYXNlICRjYXJlc19wdWxsX2hlYWRlcnNfc29ja2xlbl90IGluCisgICAgd3MydGNwaXApCisgICAgICBDQVJFU19ERUZJTkVfVU5RVU9URUQoW0NBUkVTX1BVTExfV1MyVENQSVBfSF0pCisgICAgICA7OworICAgIHN5c3R5cGVzKQorICAgICAgQ0FSRVNfREVGSU5FX1VOUVVPVEVEKFtDQVJFU19QVUxMX1NZU19UWVBFU19IXSkKKyAgICAgIDs7CisgICAgc3lzc29ja2V0KQorICAgICAgQ0FSRVNfREVGSU5FX1VOUVVPVEVEKFtDQVJFU19QVUxMX1NZU19UWVBFU19IXSkKKyAgICAgIENBUkVTX0RFRklORV9VTlFVT1RFRChbQ0FSRVNfUFVMTF9TWVNfU09DS0VUX0hdKQorICAgICAgOzsKKyAgZXNhYworICBDQVJFU19ERUZJTkVfVU5RVU9URUQoW0NBUkVTX1RZUEVPRl9BUkVTX1NPQ0tMRU5fVF0sIFskY2FyZXNfdHlwZW9mX2FyZXNfc29ja2xlbl90XSkKKyAgQ0FSRVNfREVGSU5FX1VOUVVPVEVEKFtDQVJFU19TSVpFT0ZfQVJFU19TT0NLTEVOX1RdLCBbJGNhcmVzX3NpemVvZl9hcmVzX3NvY2tsZW5fdF0pCitdKQorCisKK2RubCBUaGlzIG1hY3JvIGRldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBzdHJ1Y3QgZXhpc3RzIGluIHRoZSBzcGVjaWZpZWQgZmlsZQorZG5sIFN5bnRheDoKK2RubCBDQVJFU19DSEVDS19TVFJVQ1QoaGVhZGVycywgc3RydWN0IG5hbWUsIGlmIGZvdW5kLCBbaWYgbm90IGZvdW5kXSkKKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX1NUUlVDVF0sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3RydWN0ICQyXSkKKyAgQUNfVFJZX0NPTVBJTEUoWyQxXSwKKyAgICBbCisgICAgICBzdHJ1Y3QgJDIgc3RydWN0X2luc3RhbmNlOworICAgIF0sIGFjX3N0cnVjdD0ieWVzIiwgYWNfZm91bmQ9Im5vIikKKyAgaWYgdGVzdCAiJGFjX3N0cnVjdCIgPSAieWVzIiA7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAkMworICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAkNAorICBmaQorXSkKKworZG5sIFRoaXMgbWFjcm8gZGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGNvbnN0YW50IGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIGZpbGUKK2RubCBTeW50YXg6CitkbmwgQ0FSRVNfQ0hFQ0tfQ09OU1RBTlQoaGVhZGVycywgY29uc3RhbnQgbmFtZSwgaWYgZm91bmQsIFtpZiBub3QgZm91bmRdKQorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfQ09OU1RBTlRdLCBbCisgIEFDX01TR19DSEVDS0lORyhbZm9yICQyXSkKKyAgQUNfRUdSRVBfQ1BQKFZBUklBQkxFV0FTREVGSU5FRCwKKyAgIFsKKyAgICAgICQxCisKKyAgICAgICNpZmRlZiAkMgorICAgICAgICBWQVJJQUJMRVdBU0RFRklORUQKKyAgICAgICNlbHNlCisgICAgICAgIE5KRVQKKyAgICAgICNlbmRpZgorICAgIF0sIGFjX2NvbnN0YW50PSJ5ZXMiLCBhY19jb25zdGFudD0ibm8iCisgICkKKyAgaWYgdGVzdCAiJGFjX2NvbnN0YW50IiA9ICJ5ZXMiIDsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICQzCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICQ0CisgIGZpCitdKQorCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hY2xvY2FsLm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzVhYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYWNsb2NhbC5tNApAQCAtMCwwICsxLDEyMDkgQEAKKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjE1IC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCittNF9pZm5kZWYoW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW200X2RlZnVuKFtfQU1fQ09ORklHX01BQ1JPX0RJUlNdLCBbXSltNF9kZWZ1bihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbX0FNX0NPTkZJR19NQUNST19ESVJTKCRAKV0pXSkKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK200X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjldLCwKK1ttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42OS4KK1lvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIEl0IG1heSB3b3JrLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8uCitJZiB5b3UgaGF2ZSBwcm9ibGVtcywgeW91IG1heSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS4KK1RvIGRvIHNvLCB1c2UgdGhlIHByb2NlZHVyZSBkb2N1bWVudGVkIGJ5IHRoZSBwYWNrYWdlLCB0eXBpY2FsbHkgJ2F1dG9yZWNvbmYnLl0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX0FVVE9NQUtFX1ZFUlNJT04oVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KKyMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCisjIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQorQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAorW2FtX19hcGlfdmVyc2lvbj0nMS4xNScKK2RubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KK2RubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCittNF9pZihbJDFdLCBbMS4xNV0sIFtdLAorICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAorXSkKKworIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCisjIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCisjIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCittNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCisKKyMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKK1tBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjE1XSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQorCisjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBGb3IgcHJvamVjdHMgdXNpbmcgQUNfQ09ORklHX0FVWF9ESVIoW2Zvb10pLCBBdXRvY29uZiBzZXRzCisjICRhY19hdXhfZGlyIHRvICckc3JjZGlyL2ZvbycuICBJbiBvdGhlciBwcm9qZWN0cywgaXQgaXMgc2V0IHRvCisjICckc3JjZGlyJywgJyRzcmNkaXIvLi4nLCBvciAnJHNyY2Rpci8uLi8uLicuCisjCisjIE9mIGNvdXJzZSwgQXV0b21ha2UgbXVzdCBob25vciB0aGlzIHZhcmlhYmxlIHdoZW5ldmVyIGl0IGNhbGxzIGEKKyMgdG9vbCBmcm9tIHRoZSBhdXhpbGlhcnkgZGlyZWN0b3J5LiAgVGhlIHByb2JsZW0gaXMgdGhhdCAkc3JjZGlyIChhbmQKKyMgdGhlcmVmb3JlICRhY19hdXhfZGlyIGFzIHdlbGwpIGNhbiBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUsCisjIGRlcGVuZGluZyBvbiBob3cgY29uZmlndXJlIGlzIHJ1bi4gIFRoaXMgaXMgcHJldHR5IGFubm95aW5nLCBzaW5jZQorIyBpdCBtYWtlcyAkYWNfYXV4X2RpciBxdWl0ZSB1bnVzYWJsZSBpbiBzdWJkaXJlY3RvcmllczogaW4gdGhlIHRvcAorIyBzb3VyY2UgZGlyZWN0b3J5LCBhbnkgZm9ybSB3aWxsIHdvcmsgZmluZSwgYnV0IGluIHN1YmRpcmVjdG9yaWVzIGEKKyMgcmVsYXRpdmUgcGF0aCBuZWVkcyB0byBiZSBhZGp1c3RlZCBmaXJzdC4KKyMKKyMgJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGlmICRhY19hdXhfZGlyIGlzIHJlbGF0aXZlCisjICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcKKyMgICAgZmFpbHMgaWYgJGFjX2F1eF9kaXIgaXMgYWJzb2x1dGUsCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaW4gYSBWUEFUSCBidWlsZCB3aXRoCisjICAgICAgICAgIGEgcmVsYXRpdmUgJGFjX2F1eF9kaXIKKyMKKyMgVGhlIHJlYXNvbiBvZiB0aGUgbGF0dGVyIGZhaWx1cmUgaXMgdGhhdCAkdG9wX3NyY2RpciBhbmQgJGFjX2F1eF9kaXIKKyMgYXJlIGJvdGggcHJlZml4ZWQgYnkgJHNyY2Rpci4gIEluIGFuIGluLXNvdXJjZSBidWlsZCB0aGlzIGlzIHVzdWFsbHkKKyMgaGFybWxlc3MgYmVjYXVzZSAkc3JjZGlyIGlzICcuJywgYnV0IHRoaW5ncyB3aWxsIGJyb2tlIHdoZW4geW91CisjIHN0YXJ0IGEgVlBBVEggYnVpbGQgb3IgdXNlIGFuIGFic29sdXRlICRzcmNkaXIuCisjCisjIFNvIHdlIGNvdWxkIHVzZSBzb21ldGhpbmcgc2ltaWxhciB0byAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nLAorIyBpZmYgd2Ugc3RyaXAgdGhlIGxlYWRpbmcgJHNyY2RpciBmcm9tICRhY19hdXhfZGlyLiAgVGhhdCB3b3VsZCBiZToKKyMgICBhbV9hdXhfZGlyPSdcJCh0b3Bfc3JjZGlyKS8nYGV4cHIgIiRhY19hdXhfZGlyIiA6ICIkc3JjZGlyLy8qXCguKlwpImAKKyMgYW5kIHRoZW4gd2Ugd291bGQgZGVmaW5lICRNSVNTSU5HIGFzCisjICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCisjIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgTUlTU0lORyBpcyBub3QgY2FsbGVkIGZyb20gY29uZmlndXJlLCBiZWNhdXNlCisjIHVuZm9ydHVuYXRlbHkgJCh0b3Bfc3JjZGlyKSBoYXMgbm8gbWVhbmluZyBpbiBjb25maWd1cmUuCisjIEhvd2V2ZXIgdGhlcmUgYXJlIG90aGVyIHZhcmlhYmxlcywgbGlrZSBDQywgd2hpY2ggYXJlIG9mdGVuIHVzZWQgaW4KKyMgY29uZmlndXJlLCBhbmQgY291bGQgdGhlcmVmb3JlIG5vdCB1c2UgdGhpcyAiZml4ZWQiICRhY19hdXhfZGlyLgorIworIyBBbm90aGVyIHNvbHV0aW9uLCB1c2VkIGhlcmUsIGlzIHRvIGFsd2F5cyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4KKyMgYWJzb2x1dGUgUEFUSC4gIFRoZSBkcmF3YmFjayBpcyB0aGF0IHVzaW5nIGFic29sdXRlIHBhdGhzIHByZXZlbnQgYQorIyBjb25maWd1cmVkIHRyZWUgdG8gYmUgbW92ZWQgd2l0aG91dCByZWNvbmZpZ3VyYXRpb24uCisKK0FDX0RFRlVOKFtBTV9BVVhfRElSX0VYUEFORF0sCitbQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pZG5sCisjIEV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoLgorYW1fYXV4X2Rpcj1gY2QgIiRhY19hdXhfZGlyIiAmJiBwd2RgCitdKQorCisjIEFNX0NPTkRJVElPTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9DT05ESVRJT05BTChOQU1FLCBTSEVMTC1DT05ESVRJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgY29uZGl0aW9uYWwuCitBQ19ERUZVTihbQU1fQ09ORElUSU9OQUxdLAorW0FDX1BSRVJFUShbMi41Ml0pZG5sCisgbTRfaWYoWyQxXSwgW1RSVUVdLCAgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldLAorICAgICAgIFskMV0sIFtGQUxTRV0sIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSlkbmwKK0FDX1NVQlNUKFskMV9UUlVFXSlkbmwKK0FDX1NVQlNUKFskMV9GQUxTRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfVFJVRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfRkFMU0VdKWRubAorbTRfZGVmaW5lKFtfQU1fQ09ORF9WQUxVRV8kMV0sIFskMl0pZG5sCitpZiAkMjsgdGhlbgorICAkMV9UUlVFPQorICAkMV9GQUxTRT0nIycKK2Vsc2UKKyAgJDFfVFJVRT0nIycKKyAgJDFfRkFMU0U9CitmaQorQUNfQ09ORklHX0NPTU1BTkRTX1BSRSgKK1tpZiB0ZXN0IC16ICIkeyQxX1RSVUV9IiAmJiB0ZXN0IC16ICIkeyQxX0ZBTFNFfSI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtbY29uZGl0aW9uYWwgIiQxIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5Ll1dKQorZmldKV0pCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworCisjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nICdBQ19QUk9HX0NDJyBiZQorIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKKyMgd2lsbCB0aGluayBpdCBzZWVzIGEgKnVzZSosIGFuZCB0aGVyZWZvcmUgd2lsbCB0cmlnZ2VyIGFsbCBpdCdzCisjIEMgc3VwcG9ydCBtYWNoaW5lcnkuICBBbHNvIG5vdGUgdGhhdCBpdCBtZWFucyB0aGF0IGF1dG9zY2FuLCBzZWVpbmcKKyMgQ0MgZXRjLiBpbiB0aGUgTWFrZWZpbGUsIHdpbGwgYXNrIGZvciBhbiBBQ19QUk9HX0NDIHVzZS4uLgorCisKKyMgX0FNX0RFUEVOREVOQ0lFUyhOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBob3cgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgZGVwZW5kZW5jeSBjaGVja2luZy4KKyMgTkFNRSBpcyAiQ0MiLCAiQ1hYIiwgIk9CSkMiLCAiT0JKQ1hYIiwgIlVQQyIsIG9yICJHSkMiLgorIyBXZSB0cnkgYSBmZXcgdGVjaG5pcXVlcyBhbmQgdXNlIHRoYXQgdG8gc2V0IGEgc2luZ2xlIGNhY2hlIHZhcmlhYmxlLgorIworIyBXZSBkb24ndCBBQ19SRVFVSVJFIHRoZSBjb3JyZXNwb25kaW5nIEFDX1BST0dfQ0Mgc2luY2UgdGhlIGxhdHRlciB3YXMKKyMgbW9kaWZpZWQgdG8gaW52b2tlIF9BTV9ERVBFTkRFTkNJRVMoQ0MpOyB3ZSB3b3VsZCBoYXZlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZW5jeSwgYW5kIGdpdmVuIHRoYXQgdGhlIHVzZXIgaXMgbm90IGV4cGVjdGVkIHRvIHJ1biB0aGlzIG1hY3JvLAorIyBqdXN0IHJlbHkgb24gQUNfUFJPR19DQy4KK0FDX0RFRlVOKFtfQU1fREVQRU5ERU5DSUVTXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfREVQRElSXSlkbmwKK0FDX1JFUVVJUkUoW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSlkbmwKK0FDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCitBQ19SRVFVSVJFKFtBTV9ERVBfVFJBQ0tdKWRubAorCittNF9pZihbJDFdLCBbQ0NdLCAgIFtkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgIFskMV0sIFtDWFhdLCAgW2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgWyQxXSwgW09CSkNdLCBbZGVwY2M9IiRPQkpDIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgWyQxXSwgW09CSkNYWF0sIFtkZXBjYz0iJE9CSkNYWCIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgIFskMV0sIFtVUENdLCAgW2RlcGNjPSIkVVBDIiAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgWyQxXSwgW0dDSl0sICBbZGVwY2M9IiRHQ0oiICBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgICAgICAgICAgICAgICBbZGVwY2M9IiQkMSIgICBhbV9jb21waWxlcl9saXN0PV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjY10sCisgICAgICAgICAgICAgICBbYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdLAorW2lmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgJ0QnIC0tIGJlY2F1c2UgJy1NRCcgbWVhbnMgInB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCIuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCisgICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgQWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rICctYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKK10pCitBQ19TVUJTVChbJDFERVBNT0RFXSwgW2RlcG1vZGU9JGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSkKK0FNX0NPTkRJVElPTkFMKFthbV9fZmFzdGRlcCQxXSwgWworICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjM10pCitdKQorCisKKyMgQU1fU0VUX0RFUERJUgorIyAtLS0tLS0tLS0tLS0tCisjIENob29zZSBhIGRpcmVjdG9yeSBuYW1lIGZvciBkZXBlbmRlbmN5IGZpbGVzLgorIyBUaGlzIG1hY3JvIGlzIEFDX1JFUVVJUkVkIGluIF9BTV9ERVBFTkRFTkNJRVMuCitBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCitbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK0FDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK10pCisKKworIyBBTV9ERVBfVFJBQ0sKKyMgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKK1tBQ19BUkdfRU5BQkxFKFtkZXBlbmRlbmN5LXRyYWNraW5nXSwgW2RubAorQVNfSEVMUF9TVFJJTkcoCisgIFstLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nXSwKKyAgW2RvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnNdKQorQVNfSEVMUF9TVFJJTkcoCisgIFstLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZ10sCisgIFtzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGRdKV0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCisgIGFtX19ub2RlcD0nX25vJworZmkKK0FNX0NPTkRJVElPTkFMKFtBTURFUF0sIFt0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm9dKQorQUNfU1VCU1QoW0FNREVQQkFDS1NMQVNIXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFtBTURFUEJBQ0tTTEFTSF0pZG5sCitBQ19TVUJTVChbYW1fX25vZGVwXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFthbV9fbm9kZXBdKWRubAorXSkKKworIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKworIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1t7CisgICMgT2xkZXIgQXV0b2NvbmYgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkICdNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nICdtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YEFTX0RJUk5BTUUoWyIkZmlsZSJdKWAKKyAgICAgIEFTX01LRElSX1AoWyRkaXJwYXJ0LyRmZGlyXSkKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KK10pIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKworCisjIEFNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBvbmNlIC0tIHVzZSB2aWEgQUNfUkVRVUlSRS4KKyMKKyMgVGhpcyBjb2RlIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZworIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCAnLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCisjIG5lZWQgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBkZXBlbmRlbmN5IGhhbmRsaW5nIGNvZGUuCitBQ19ERUZVTihbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW0FDX0NPTkZJR19DT01NQU5EUyhbZGVwZmlsZXNdLAorICAgICBbdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKKyAgICAgW0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciJdKQorXSkKKworIyBEbyBhbGwgdGhlIHdvcmsgZm9yIEF1dG9tYWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoLiAgU29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCisjIHlvdXIgcGFja2FnZSBkb2VzIGNlcnRhaW4gdGhpbmdzLiAgQnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGEgYmlnIGRlYWwuCisKK2RubCBSZWRlZmluZSBBQ19QUk9HX0NDIHRvIGF1dG9tYXRpY2FsbHkgaW52b2tlIF9BTV9QUk9HX0NDX0NfTy4KK200X2RlZmluZShbQUNfUFJPR19DQ10sCittNF9kZWZuKFtBQ19QUk9HX0NDXSkKK1tfQU1fUFJPR19DQ19DX08KK10pCisKKyMgQU1fSU5JVF9BVVRPTUFLRShQQUNLQUdFLCBWRVJTSU9OLCBbTk8tREVGSU5FXSkKKyMgQU1fSU5JVF9BVVRPTUFLRShbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBjYWxsIHdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTiBhcmd1bWVudHMgaXMgdGhlIG9sZCBzdHlsZQorIyBjYWxsIChwcmUgYXV0b2NvbmYtMi41MCksIHdoaWNoIGlzIGJlaW5nIHBoYXNlZCBvdXQuICBQQUNLQUdFCisjIGFuZCBWRVJTSU9OIHNob3VsZCBub3cgYmUgcGFzc2VkIHRvIEFDX0lOSVQgYW5kIHJlbW92ZWQgZnJvbQorIyB0aGUgY2FsbCB0byBBTV9JTklUX0FVVE9NQUtFLgorIyBXZSBzdXBwb3J0IGJvdGggY2FsbCBzdHlsZXMgZm9yIHRoZSB0cmFuc2l0aW9uLiAgQWZ0ZXIKKyMgdGhlIG5leHQgQXV0b21ha2UgcmVsZWFzZSwgQXV0b2NvbmYgY2FuIG1ha2UgdGhlIEFDX0lOSVQKKyMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgorIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgorQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAorW0FDX1BSRVJFUShbMi42NV0pZG5sCitkbmwgQXV0b2NvbmYgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdworZG5sIHRoZSBvbmVzIHdlIGNhcmUgYWJvdXQuCittNF9wYXR0ZXJuX2FsbG93KFteQU1fW0EtWl0rRkxBR1MkXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBBQ19TVUJTVChbYW1fX2lzcmNdLCBbJyAtSSQoc3JjZGlyKSddKV9BTV9TVUJTVF9OT1RNQUtFKFthbV9faXNyY10pZG5sCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCitBQ19TVUJTVChbQ1lHUEFUSF9XXSkKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorZG5sIERpc3Rpbmd1aXNoIGJldHdlZW4gb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2FsbHMuCittNF9pZnZhbChbJDJdLAorW0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCisgICAgICAgICAgICAgWyQwOiB0d28tIGFuZCB0aHJlZS1hcmd1bWVudHMgZm9ybXMgYXJlIGRlcHJlY2F0ZWQuXSkKK200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWyQxXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFskMl0pXSwKK1tfQU1fU0VUX09QVElPTlMoWyQxXSlkbmwKK2RubCBEaWFnbm9zZSBvbGQtc3R5bGUgQUNfSU5JVCB3aXRoIG5ldy1zdHlsZSBBTV9BVVRPTUFLRV9JTklULgorbTRfaWYoCisgIG00X2lmZGVmKFtBQ19QQUNLQUdFX05BTUVdLCBbb2tdKTptNF9pZmRlZihbQUNfUEFDS0FHRV9WRVJTSU9OXSwgW29rXSksCisgIFtvazpva10sLAorICBbbTRfZmF0YWwoW0FDX0lOSVQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHBhY2thZ2UgYW5kIHZlcnNpb24gYXJndW1lbnRzXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWydBQ19QQUNLQUdFX1RBUk5BTUUnXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFsnQUNfUEFDS0FHRV9WRVJTSU9OJ10pXSlkbmwKKworX0FNX0lGX09QVElPTihbbm8tZGVmaW5lXSwsCitbQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFXSwgWyIkUEFDS0FHRSJdLCBbTmFtZSBvZiBwYWNrYWdlXSkKKyBBQ19ERUZJTkVfVU5RVU9URUQoW1ZFUlNJT05dLCBbIiRWRVJTSU9OIl0sIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCitBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAorQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAorQU1fTUlTU0lOR19QUk9HKFtBQ0xPQ0FMXSwgW2FjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259XSkKK0FNX01JU1NJTkdfUFJPRyhbQVVUT0NPTkZdLCBbYXV0b2NvbmZdKQorQU1fTUlTU0lOR19QUk9HKFtBVVRPTUFLRV0sIFthdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn1dKQorQU1fTUlTU0lOR19QUk9HKFtBVVRPSEVBREVSXSwgW2F1dG9oZWFkZXJdKQorQU1fTUlTU0lOR19QUk9HKFtNQUtFSU5GT10sIFttYWtlaW5mb10pCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NUUklQXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUtESVJfUF0pZG5sCisjIEZvciBiZXR0ZXIgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFRvIGJlIHJlbW92ZWQgb25jZSBBdXRvbWFrZSAxLjkueAorIyBkaWVzIG91dCBmb3IgZ29vZC4gIEZvciBtb3JlIGJhY2tncm91bmQsIHNlZToKKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDAxLmh0bWw+CisjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAxNC5odG1sPgorQUNfU1VCU1QoW21rZGlyX3BdLCBbJyQoTUtESVJfUCknXSkKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldCAoYW5kIHBvc3NpYmx5IHRoZSBUQVAgZHJpdmVyKS4gIFRoZQorIyBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uIHNvbWUgcGxhdGZvcm1zLgorQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCitBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAorX0FNX0lGX09QVElPTihbdGFyLXVzdGFyXSwgW19BTV9QUk9HX1RBUihbdXN0YXJdKV0sCisJICAgICAgW19BTV9JRl9PUFRJT04oW3Rhci1wYXhdLCBbX0FNX1BST0dfVEFSKFtwYXhdKV0sCisJCQkgICAgIFtfQU1fUFJPR19UQVIoW3Y3XSldKV0pCitfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DQ10sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoW0NDXSldLAorCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfQ0NdLAorCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhbQ0NdKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoW0NYWF0pXSwKKwkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sCisJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhbQ1hYXSldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ10pXSwKKwkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX09CSkNdLAorCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX09CSkNdKVtfQU1fREVQRU5ERU5DSUVTKFtPQkpDXSldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDWFhdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtPQkpDWFhdKV0sCisJCSAgW200X2RlZmluZShbQUNfUFJPR19PQkpDWFhdLAorCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX09CSkNYWF0pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSldKWRubAorXSkKK0FDX1JFUVVJUkUoW0FNX1NJTEVOVF9SVUxFU10pZG5sCitkbmwgVGhlIHRlc3RzdWl0ZSBkcml2ZXIgbWF5IG5lZWQgdG8ga25vdyBhYm91dCBFWEVFWFQsIHNvIGFkZCB0aGUKK2RubCAnYW1fX0VYRUVYVCcgY29uZGl0aW9uYWwgaWYgX0FNX0NPTVBJTEVSX0VYRUVYVCB3YXMgc2Vlbi4gIFRoaXMKK2RubCBtYWNybyBpcyBob29rZWQgb250byBfQUNfQ09NUElMRVJfRVhFRVhUIGVhcmx5LCBzZWUgYmVsb3cuCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKGRubAorW200X3Byb3ZpZGVfaWYoW19BTV9DT01QSUxFUl9FWEVFWFRdLAorICBbQU1fQ09ORElUSU9OQUwoW2FtX19FWEVFWFRdLCBbdGVzdCAtbiAiJEVYRUVYVCJdKV0pXSlkbmwKKworIyBQT1NJWCB3aWxsIHNheSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHRoYXQgcnVubmluZyAicm0gLWYiIHdpdGggbm8gYXJndW1lbnQKKyMgaXMgT0s7IGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gbWFrZSB0aGF0IGFzc3VtcHRpb24gaW4gb3VyIE1ha2VmaWxlCisjIHJlY2lwZXMuICBTbyB1c2UgYW4gYWdncmVzc2l2ZSBwcm9iZSB0byBjaGVjayB0aGF0IHRoZSB1c2FnZSB3ZSB3YW50IGlzCisjIGFjdHVhbGx5IHN1cHBvcnRlZCAiaW4gdGhlIHdpbGQiIHRvIGFuIGFjY2VwdGFibGUgZGVncmVlLgorIyBTZWUgYXV0b21ha2UgYnVnIzEwODI4LgorIyBUbyBtYWtlIGFueSBpc3N1ZSBtb3JlIHZpc2libGUsIGNhdXNlIHRoZSBydW5uaW5nIGNvbmZpZ3VyZSB0byBiZSBhYm9ydGVkCisjIGJ5IGRlZmF1bHQgaWYgdGhlICdybScgcHJvZ3JhbSBpbiB1c2UgZG9lc24ndCBtYXRjaCBvdXIgZXhwZWN0YXRpb25zOyB0aGUKKyMgdXNlciBjYW4gc3RpbGwgb3ZlcnJpZGUgdGhpcyB0aG91Z2guCitpZiBybSAtZiAmJiBybSAtZnIgJiYgcm0gLXJmOyB0aGVuIDogT0s7IGVsc2UKKyAgY2F0ID4mMiA8PCdFTkQnCitPb3BzIQorCitZb3VyICdybScgcHJvZ3JhbSBzZWVtcyB1bmFibGUgdG8gcnVuIHdpdGhvdXQgZmlsZSBvcGVyYW5kcyBzcGVjaWZpZWQKK29uIHRoZSBjb21tYW5kIGxpbmUsIGV2ZW4gd2hlbiB0aGUgJy1mJyBvcHRpb24gaXMgcHJlc2VudC4gIFRoaXMgaXMgY29udHJhcnkKK3RvIHRoZSBiZWhhdmlvdXIgb2YgbW9zdCBybSBwcm9ncmFtcyBvdXQgdGhlcmUsIGFuZCBub3QgY29uZm9ybWluZyB3aXRoCit0aGUgdXBjb21pbmcgUE9TSVggc3RhbmRhcmQ6IDxodHRwOi8vYXVzdGluZ3JvdXBidWdzLm5ldC92aWV3LnBocD9pZD01NDI+CisKK1BsZWFzZSB0ZWxsIGJ1Zy1hdXRvbWFrZUBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIHZhbHVlCitvZiB5b3VyICRQQVRIIGFuZCBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzIG1lc3NhZ2UuICBUaGlzCitjYW4gaGVscCB1cyBpbXByb3ZlIGZ1dHVyZSBhdXRvbWFrZSB2ZXJzaW9ucy4KKworRU5ECisgIGlmIHRlc3QgeCIkQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0iID0geCJ5ZXMiOyB0aGVuCisgICAgZWNobyAnQ29uZmlndXJhdGlvbiB3aWxsIHByb2NlZWQgYW55d2F5LCBzaW5jZSB5b3UgaGF2ZSBzZXQgdGhlJyA+JjIKKyAgICBlY2hvICdBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSB2YXJpYWJsZSB0byAieWVzIicgPiYyCisgICAgZWNobyA+JjIKKyAgZWxzZQorICAgIGNhdCA+JjIgPDwnRU5EJworQWJvcnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgdG8gZW5zdXJlIHlvdSB0YWtlIG5vdGljZSBvZiB0aGUgaXNzdWUuCisKK1lvdSBjYW4gZG93bmxvYWQgYW5kIGluc3RhbGwgR05VIGNvcmV1dGlscyB0byBnZXQgYW4gJ3JtJyBpbXBsZW1lbnRhdGlvbgordGhhdCBiZWhhdmVzIHByb3Blcmx5OiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8+LgorCitJZiB5b3Ugd2FudCB0byBjb21wbGV0ZSB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHVzaW5nIHlvdXIgcHJvYmxlbWF0aWMKKydybScgYW55d2F5LCBleHBvcnQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEFDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNCit0byAieWVzIiwgYW5kIHJlLXJ1biBjb25maWd1cmUuCisKK0VORAorICAgIEFDX01TR19FUlJPUihbWW91ciAncm0nIHByb2dyYW0gaXMgYmFkLCBzb3JyeS5dKQorICBmaQorZmkKK2RubCBUaGUgdHJhaWxpbmcgbmV3bGluZSBpbiB0aGlzIG1hY3JvJ3MgZGVmaW5pdGlvbiBpcyBkZWxpYmVyYXRlLCBmb3IKK2RubCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB0byBhbGxvdyB0cmFpbGluZyAnZG5sJy1zdHlsZSBjb21tZW50cworZG5sIGFmdGVyIHRoZSBBTV9JTklUX0FVVE9NQUtFIGludm9jYXRpb24uIFNlZSBhdXRvbWFrZSBidWcjMTY4NDEuCitdKQorCitkbmwgSG9vayBpbnRvICdfQUNfQ09NUElMRVJfRVhFRVhUJyBlYXJseSB0byBsZWFybiBpdHMgZXhwYW5zaW9uLiAgRG8gbm90CitkbmwgYWRkIHRoZSBjb25kaXRpb25hbCByaWdodCBoZXJlLCBhcyBfQUNfQ09NUElMRVJfRVhFRVhUIG1heSBiZSBmdXJ0aGVyCitkbmwgbWFuZ2xlZCBieSBBdXRvY29uZiBhbmQgcnVuIGluIGEgc2hlbGwgY29uZGl0aW9uYWwgc3RhdGVtZW50LgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK200X2RlZm4oW19BQ19DT01QSUxFUl9FWEVFWFRdKVttNF9wcm92aWRlKFtfQU1fQ09NUElMRVJfRVhFRVhUXSldKQorCisjIFdoZW4gY29uZmlnLnN0YXR1cyBnZW5lcmF0ZXMgYSBoZWFkZXIsIHdlIG11c3QgdXBkYXRlIHRoZSBzdGFtcC1oIGZpbGUuCisjIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29uZmlnIGhlYWRlcgorIyB0aGF0IGlzIGdlbmVyYXRlZC4gIFRoZSBzdGFtcCBmaWxlcyBhcmUgbnVtYmVyZWQgdG8gaGF2ZSBkaWZmZXJlbnQgbmFtZXMuCisKKyMgQXV0b2NvbmYgY2FsbHMgX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PSyAod2hlbiBkZWZpbmVkKSBpbiB0aGUKKyMgbG9vcCB3aGVyZSBjb25maWcuc3RhdHVzIGNyZWF0ZXMgdGhlIGhlYWRlcnMsIHNvIHdlIGNhbiBnZW5lcmF0ZQorIyBvdXIgc3RhbXAgZmlsZXMgdGhlcmUuCitBQ19ERUZVTihbX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PS10sCitbIyBDb21wdXRlICQxJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0kMQorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gQVNfRElSTkFNRShbIiRfYW1fYXJnIl0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1BST0dfSU5TVEFMTF9TSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lICRpbnN0YWxsX3NoLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TSF0sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAoraWYgdGVzdCB4IiR7aW5zdGFsbF9zaCtzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKK0FDX1NVQlNUKFtpbnN0YWxsX3NoXSldKQorCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKKyMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCitbcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKK0FDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCisKKyMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgRnJvbSBKaW0gTWV5ZXJpbmcKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX01BSU5UQUlORVJfTU9ERShbREVGQVVMVC1NT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb250cm9sIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLgorIyBEZWZhdWx0IGlzIHRvIGRpc2FibGUgdGhlbSwgdW5sZXNzICdlbmFibGUnIGlzIHBhc3NlZCBsaXRlcmFsbHkuCisjIEZvciBzeW1tZXRyeSwgJ2Rpc2FibGUnIG1heSBiZSBwYXNzZWQgYXMgd2VsbC4gIEFueXdheSwgdGhlIHVzZXIKKyMgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHdpdGggdGhlIC0tZW5hYmxlLy0tZGlzYWJsZSBzd2l0Y2guCitBQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKK1ttNF9jYXNlKG00X2RlZmF1bHQoWyQxXSwgW2Rpc2FibGVdKSwKKyAgICAgICBbZW5hYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtkaXNhYmxlXSldLAorICAgICAgIFtkaXNhYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKV0sCisgICAgICAgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKQorICAgICAgICBtNF93YXJuKFtzeW50YXhdLCBbdW5leHBlY3RlZCBhcmd1bWVudCB0byBBTUAmdEBfTUFJTlRBSU5FUl9NT0RFOiAkMV0pXSkKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXNdKQorICBkbmwgbWFpbnRhaW5lci1tb2RlJ3MgZGVmYXVsdCBpcyAnZGlzYWJsZScgdW5sZXNzICdlbmFibGUnIGlzIHBhc3NlZAorICBBQ19BUkdfRU5BQkxFKFttYWludGFpbmVyLW1vZGVdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1dYW1fbWFpbnRhaW5lcl9vdGhlclstbWFpbnRhaW5lci1tb2RlXSwKKyAgICAgIGFtX21haW50YWluZXJfb3RoZXJbIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCisgICAgICAoYW5kIHNvbWV0aW1lcyBjb25mdXNpbmcpIHRvIHRoZSBjYXN1YWwgaW5zdGFsbGVyXSldLAorICAgIFtVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWxdLAorICAgIFtVU0VfTUFJTlRBSU5FUl9NT0RFPV1tNF9pZihhbV9tYWludGFpbmVyX290aGVyLCBbZW5hYmxlXSwgW25vXSwgW3llc10pKQorICBBQ19NU0dfUkVTVUxUKFskVVNFX01BSU5UQUlORVJfTU9ERV0pCisgIEFNX0NPTkRJVElPTkFMKFtNQUlOVEFJTkVSX01PREVdLCBbdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllc10pCisgIE1BSU5UPSRNQUlOVEFJTkVSX01PREVfVFJVRQorICBBQ19TVUJTVChbTUFJTlRdKWRubAorXQorKQorCisjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fTUFLRV9JTkNMVURFKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGhvdyBtYWtlIHRyZWF0cyBpbmNsdWRlcy4KK0FDX0RFRlVOKFtBTV9NQUtFX0lOQ0xVREVdLAorW2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlXSkKK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gJ21ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYworZmkKK0FDX1NVQlNUKFthbV9faW5jbHVkZV0pCitBQ19TVUJTVChbYW1fX3F1b3RlXSkKK0FDX01TR19SRVNVTFQoWyRfYW1fcmVzdWx0XSkKK3JtIC1mIGNvbmZpbmMgY29uZm1mCitdKQorCisjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9NSVNTSU5HX1BST0coTkFNRSwgUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKK1tBQ19SRVFVSVJFKFtBTV9NSVNTSU5HX0hBU19SVU5dKQorJDE9JHskMS0iJHthbV9taXNzaW5nX3J1bn0kMiJ9CitBQ19TVUJTVCgkMSldKQorCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IGlzIG1vZGVybiBlbm91Z2guCisjIElmIGl0IGlzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1pcy1saWdodHdlaWdodCI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFsnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCitbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworIyBfQU1fU0VUX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgWzFdKV0pCisKKyMgX0FNX1NFVF9PUFRJT05TKE9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAorW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIF9BTV9QUk9HX0NDX0NfTworIyAtLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBQ19QUk9HX0NDX0NfTywgYnV0IGNoYW5nZWQgZm9yIGF1dG9tYWtlLiAgV2UgcmV3cml0ZSBBQ19QUk9HX0NDCisjIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCB0aGlzLgorQUNfREVGVU4oW19BTV9QUk9HX0NDX0NfT10sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbY29tcGlsZV0pZG5sCitBQ19MQU5HX1BVU0goW0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soCisgIFt3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXJdLAorICBbYW1fY3ZfcHJvZ19jY19jX29dLAorICBbQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKFtdKV0pCisgICMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgorICAjIEZvbGxvd2luZyBBQ19QUk9HX0NDX0NfTywgd2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lCisgICMgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLAorICAjIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KKyAgYW1fY3ZfcHJvZ19jY19jX289eWVzCisgIGZvciBhbV9pIGluIDEgMjsgZG8KKyAgICBpZiBBTV9SVU5fTE9HKFskQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dF0pIFwKKyAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQ7IHRoZW4KKyAgICAgIDogT0sKKyAgICBlbHNlCisgICAgICBhbV9jdl9wcm9nX2NjX2Nfbz1ubworICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIHJtIC1mIGNvcmUgY29uZnRlc3QqCisgIHVuc2V0IGFtX2ldKQoraWYgdGVzdCAiJGFtX2N2X3Byb2dfY2NfY19vIiAhPSB5ZXM7IHRoZW4KKyAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCisgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCisgICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorICAgQ0M9IiRhbV9hdXhfZGlyL2NvbXBpbGUgJENDIgorZmkKK0FDX0xBTkdfUE9QKFtDXSldKQorCisjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorQUNfREVGVU5fT05DRShbQU1fUFJPR19DQ19DX09dLCBbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1JVTl9MT0coQ09NTUFORCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gQ09NTUFORCwgc2F2ZSB0aGUgZXhpdCBzdGF0dXMgaW4gYWNfc3RhdHVzLCBhbmQgbG9nIGl0LgorIyAoVGhpcyBoYXMgYmVlbiBhZGFwdGVkIGZyb20gQXV0b2NvbmYncyBfQUNfUlVOX0xPRyBtYWNyby4pCitBQ19ERUZVTihbQU1fUlVOX0xPR10sCitbeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJDEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICgkMSkgPiZBU19NRVNTQUdFX0xPR19GRCAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH1dKQorCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9TQU5JVFlfQ0hFQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fU0FOSVRZX0NIRUNLXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZV0pCisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZl1dKikKKyAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lXSk7OworZXNhYworY2FzZSAkc3JjZGlyIGluCisgICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV1dKikKKyAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBzcmNkaXIgdmFsdWU6ICckc3JjZGlyJ10pOzsKK2VzYWMKKworIyBEbyAnc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworIyBkaXJlY3RvcnkpLgoraWYgKAorICAgYW1faGFzX3NsZXB0PW5vCisgICBmb3IgYW1fdHJ5IGluIDEgMjsgZG8KKyAgICAgZWNobyAidGltZXN0YW1wLCBzbGVwdDogJGFtX2hhc19zbGVwdCIgPiBjb25mdGVzdC5maWxlCisgICAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgICAgaWYgdGVzdCAiJFsqXSIgPSAiWCI7IHRoZW4KKwkjIC1MIGRpZG4ndCB3b3JrLgorCXNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICAgIGZpCisgICAgIGlmIHRlc3QgIiRbKl0iICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKwkmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisJIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorCSMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKwkjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisJIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorCUFDX01TR19FUlJPUihbbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorICBhbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAiJFsyXSIgPSBjb25mdGVzdC5maWxlIHx8IHRlc3QgJGFtX3RyeSAtZXEgMjsgdGhlbgorICAgICAgIGJyZWFrCisgICAgIGZpCisgICAgICMgSnVzdCBpbiBjYXNlLgorICAgICBzbGVlcCAxCisgICAgIGFtX2hhc19zbGVwdD15ZXMKKyAgIGRvbmUKKyAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCitmaQorQUNfTVNHX1JFU1VMVChbeWVzXSkKKyMgSWYgd2UgZGlkbid0IHNsZWVwLCB3ZSBzdGlsbCBuZWVkIHRvIGVuc3VyZSB0aW1lIHN0YW1wcyBvZiBjb25maWcuc3RhdHVzIGFuZAorIyBnZW5lcmF0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IG5ld2VyLgorYW1fc2xlZXBfcGlkPQoraWYgZ3JlcCAnc2xlcHQ6IG5vJyBjb25mdGVzdC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAoIHNsZWVwIDEgKSAmCisgIGFtX3NsZWVwX3BpZD0kIQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCisgIFtBQ19NU0dfQ0hFQ0tJTkcoW3RoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZV0pCisgICBpZiB0ZXN0IC1uICIkYW1fc2xlZXBfcGlkIjsgdGhlbgorICAgICAjIEhpZGUgd2FybmluZ3MgYWJvdXQgcmV1c2VkIFBJRHMuCisgICAgIHdhaXQgJGFtX3NsZWVwX3BpZCAyPi9kZXYvbnVsbAorICAgZmkKKyAgIEFDX01TR19SRVNVTFQoW2RvbmVdKV0pCitybSAtZiBjb25mdGVzdC5maWxlCitdKQorCisjIENvcHlyaWdodCAoQykgMjAwOS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fU0lMRU5UX1JVTEVTKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxlc3MgdmVyYm9zZSBidWlsZCBydWxlczsgd2l0aCB0aGUgZGVmYXVsdCBzZXQgdG8gREVGQVVMVAorIyAoInllcyIgYmVpbmcgbGVzcyB2ZXJib3NlLCAibm8iIG9yIGVtcHR5IGJlaW5nIHZlcmJvc2UpLgorQUNfREVGVU4oW0FNX1NJTEVOVF9SVUxFU10sCitbQUNfQVJHX0VOQUJMRShbc2lsZW50LXJ1bGVzXSwgW2RubAorQVNfSEVMUF9TVFJJTkcoCisgIFstLWVuYWJsZS1zaWxlbnQtcnVsZXNdLAorICBbbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0xIildKQorQVNfSEVMUF9TVFJJTkcoCisgIFstLWRpc2FibGUtc2lsZW50LXJ1bGVzXSwKKyAgW3ZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTAiKV0pZG5sCitdKQorY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiBAJTpAICgoKAorICB5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworICAgbm8pIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPW00X2lmKFskMV0sIFt5ZXNdLCBbMF0sIFsxXSk7OworZXNhYworZG5sCitkbmwgQSBmZXcgJ21ha2UnIGltcGxlbWVudGF0aW9ucyAoZS5nLiwgTm9uU3RvcCBPUyBhbmQgTmV4dFN0ZXApCitkbmwgZG8gbm90IHN1cHBvcnQgbmVzdGVkIHZhcmlhYmxlIGV4cGFuc2lvbnMuCitkbmwgU2VlIGF1dG9tYWtlIGJ1ZyM5OTI4IGFuZCBidWcjMTAyMzcuCithbV9tYWtlPSR7TUFLRS1tYWtlfQorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlc10sCisgICBbYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXNdLAorICAgW2lmIEFTX0VDSE8oW1snVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnXV0pIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaV0pCitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICBkbmwgVXNpbmcgJyRWJyBpbnN0ZWFkIG9mICckKFYpJyBicmVha3MgSVJJWCBtYWtlLgorICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQUNfU1VCU1QoW0FNX1ZdKWRubAorQU1fU1VCU1RfTk9UTUFLRShbQU1fVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WXSlkbmwKK0FNX1NVQlNUX05PVE1BS0UoW0FNX0RFRkFVTFRfVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WRVJCT1NJVFldKWRubAorQU1fQkFDS1NMQVNIPSdcJworQUNfU1VCU1QoW0FNX0JBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1fQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU1RSSVAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9uZSBpc3N1ZSB3aXRoIHZlbmRvciAnaW5zdGFsbCcgKGV2ZW4gR05VKSBpcyB0aGF0IHlvdSBjYW4ndAorIyBzcGVjaWZ5IHRoZSBwcm9ncmFtIHVzZWQgdG8gc3RyaXAgYmluYXJpZXMuICBUaGlzIGlzIGVzcGVjaWFsbHkKKyMgYW5ub3lpbmcgaW4gY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50cywgd2hlcmUgdGhlIGJ1aWxkJ3Mgc3RyaXAKKyMgaXMgdW5saWtlbHkgdG8gaGFuZGxlIHRoZSBob3N0J3MgYmluYXJpZXMuCisjIEZvcnR1bmF0ZWx5IGluc3RhbGwtc2ggd2lsbCBob25vciBhIFNUUklQUFJPRyB2YXJpYWJsZSwgc28gd2UKKyMgYWx3YXlzIHVzZSBpbnN0YWxsLXNoIGluICJtYWtlIGluc3RhbGwtc3RyaXAiLCBhbmQgaW5pdGlhbGl6ZQorIyBTVFJJUFBST0cgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIFNUUklQIHZhcmlhYmxlIChzZXQgYnkgdGhlIHVzZXIpLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0sCitbQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nICdzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gIm1ha2UgaW5zdGFsbC1zdHJpcCIuICBIb3dldmVyICdzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSAnU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2RubCBEb24ndCB0ZXN0IGZvciAkY3Jvc3NfY29tcGlsaW5nID0geWVzLCBiZWNhdXNlIGl0IG1pZ2h0IGJlICdtYXliZScuCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBBQ19DSEVDS19UT09MKFtTVFJJUF0sIFtzdHJpcF0sIDopCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKK0FDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBfQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KKyMgVGhpcyBtYWNybyBpcyB0cmFjZWQgYnkgQXV0b21ha2UuCitBQ19ERUZVTihbX0FNX1NVQlNUX05PVE1BS0VdKQorCisjIEFNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCitBQ19ERUZVTihbQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQorCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBfQU1fUFJPR19UQVIoRk9STUFUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgorIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiAndjcnLCAndXN0YXInLCBvciAncGF4Jy4KKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3RhcikgdGhhdCBpcyBhIGNvbW1hbmQKKyMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyMgJHRhcmRpci4KKyMgICAgIHRhcmRpcj1kaXJlY3RvcnkgJiYgJChhbV9fdGFyKSA+IHJlc3VsdC50YXIKKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3VudGFyKSB0aGF0IGV4dHJhY3Qgc3VjaAorIyBhIHRhcmJhbGwgcmVhZCBmcm9tIHN0ZGluLgorIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgorIworQUNfREVGVU4oW19BTV9QUk9HX1RBUl0sCitbIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKKyMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgorQUNfU1VCU1QoW0FNVEFSXSwgWyckJHtUQVItdGFyfSddKQorCisjIFdlJ2xsIGxvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJworCittNF9pZihbJDFdLCBbdjddLAorICBbYW1fX3Rhcj0nJCR7VEFSLXRhcn0gY2hvZiAtICIkJHRhcmRpciInIGFtX191bnRhcj0nJCR7VEFSLXRhcn0geGYgLSddLAorCisgIFttNF9jYXNlKFskMV0sCisgICAgW3VzdGFyXSwKKyAgICAgWyMgVGhlIFBPU0lYIDE5ODggJ3VzdGFyJyBmb3JtYXQgaXMgZGVmaW5lZCB3aXRoIGZpeGVkLXNpemUgZmllbGRzLgorICAgICAgIyBUaGVyZSBpcyBub3RhYmx5IGEgMjEgYml0cyBsaW1pdCBmb3IgdGhlIFVJRCBhbmQgdGhlIEdJRC4gIEluIGZhY3QsCisgICAgICAjIHRoZSAncGF4JyB1dGlsaXR5IGNhbiBoYW5nIG9uIGJpZ2dlciBVSUQvR0lEIChzZWUgYXV0b21ha2UgYnVnIzgzNDMKKyAgICAgICMgYW5kIGJ1ZyMxMzU4OCkuCisgICAgICBhbV9tYXhfdWlkPTIwOTcxNTEgIyAyXjIxIC0gMQorICAgICAgYW1fbWF4X2dpZD0kYW1fbWF4X3VpZAorICAgICAgIyBUaGUgJFVJRCBhbmQgJEdJRCB2YXJpYWJsZXMgYXJlIG5vdCBwb3J0YWJsZSwgc28gd2UgbmVlZCB0byByZXNvcnQKKyAgICAgICMgdG8gdGhlIFBPU0lYLW1hbmRhdGVkIGlkKDEpIHV0aWxpdHkuICBFcnJvcnMgaW4gdGhlICdpZCcgY2FsbHMKKyAgICAgICMgYmVsb3cgYXJlIGRlZmluaXRlbHkgdW5leHBlY3RlZCwgc28gYWxsb3cgdGhlIHVzZXJzIHRvIHNlZSB0aGVtCisgICAgICAjICh0aGF0IGlzLCBhdm9pZCBzdGRlcnIgcmVkaXJlY3Rpb24pLgorICAgICAgYW1fdWlkPWBpZCAtdSB8fCBlY2hvIHVua25vd25gCisgICAgICBhbV9naWQ9YGlkIC1nIHx8IGVjaG8gdW5rbm93bmAKKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBVSUQgJyRhbV91aWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXRdKQorICAgICAgaWYgdGVzdCAkYW1fdWlkIC1sZSAkYW1fbWF4X3VpZDsgdGhlbgorICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGVsc2UKKyAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgIF9hbV90b29scz1ub25lCisgICAgICBmaQorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEdJRCAnJGFtX2dpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdF0pCisgICAgICBpZiB0ZXN0ICRhbV9naWQgLWxlICRhbV9tYXhfZ2lkOyB0aGVuCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIF9hbV90b29scz1ub25lCisgICAgICBmaV0sCisKKyAgW3BheF0sCisgICAgW10sCisKKyAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQorCisgICMgR28gYWhlYWQgZXZlbiBpZiB3ZSBoYXZlIHRoZSB2YWx1ZSBhbHJlYWR5IGNhY2hlZC4gIFdlIGRvIHNvIGJlY2F1c2Ugd2UKKyAgIyBuZWVkIHRvIHNldCB0aGUgdmFsdWVzIGZvciB0aGUgJ2FtX190YXInIGFuZCAnYW1fX3VudGFyJyB2YXJpYWJsZXMuCisgIF9hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9CisKKyAgZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHM7IGRvCisgICAgY2FzZSAkX2FtX3Rvb2wgaW4KKyAgICBnbnV0YXIpCisgICAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7IGRvCisgICAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgICBkb25lCisgICAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKyAgICAgIDs7CisgICAgcGxhaW50YXIpCisgICAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorICAgICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KKyAgICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworICAgICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCisgICAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgICAgOzsKKyAgICBwYXgpCisgICAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSdwYXggLXInCisgICAgICA7OworICAgIGNwaW8pCisgICAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJworICAgICAgOzsKKyAgICBub25lKQorICAgICAgYW1fX3Rhcj1mYWxzZQorICAgICAgYW1fX3Rhcl89ZmFsc2UKKyAgICAgIGFtX191bnRhcj1mYWxzZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAgICMgYW5kIGFtX191bnRhciBzZXQuCisgICAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl8kMX0iICYmIGJyZWFrCisKKyAgICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MuCisgICAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAgIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKKyAgICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgorICAgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICAgIEFNX1JVTl9MT0coW2NhdCBjb25mdGVzdC5kaXIvZmlsZV0pCisgICAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgICBmaQorICBkb25lCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKworICBBQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCisgIEFDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKKworQUNfU1VCU1QoW2FtX190YXJdKQorQUNfU1VCU1QoW2FtX191bnRhcl0pCitdKSAjIF9BTV9QUk9HX1RBUgorCittNF9pbmNsdWRlKFttNC9heF9jb2RlX2NvdmVyYWdlLm00XSkKK200X2luY2x1ZGUoW200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNF0pCittNF9pbmNsdWRlKFttNC9jYXJlcy1jb21waWxlcnMubTRdKQorbTRfaW5jbHVkZShbbTQvY2FyZXMtY29uZm9wdHMubTRdKQorbTRfaW5jbHVkZShbbTQvY2FyZXMtZnVuY3Rpb25zLm00XSkKK200X2luY2x1ZGUoW200L2NhcmVzLW92ZXJyaWRlLm00XSkKK200X2luY2x1ZGUoW200L2NhcmVzLXJlZW50cmFudC5tNF0pCittNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKK200X2luY2x1ZGUoW200L2x0b3B0aW9ucy5tNF0pCittNF9pbmNsdWRlKFttNC9sdHN1Z2FyLm00XSkKK200X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCittNF9pbmNsdWRlKFttNC9sdH5vYnNvbGV0ZS5tNF0pCittNF9pbmNsdWRlKFttNC94Yy1hbS1pZmFjZS5tNF0pCittNF9pbmNsdWRlKFttNC94Yy1jYy1jaGVjay5tNF0pCittNF9pbmNsdWRlKFttNC94Yy1sdC1pZmFjZS5tNF0pCittNF9pbmNsdWRlKFttNC94Yy10cmFuc2xpdC5tNF0pCittNF9pbmNsdWRlKFttNC94Yy12YWwtZmxncy5tNF0pCittNF9pbmNsdWRlKFttNC96ejQwLXhjLW92ci5tNF0pCittNF9pbmNsdWRlKFttNC96ejUwLXhjLW92ci5tNF0pCittNF9pbmNsdWRlKFttNC96ejYwLXhjLW92ci5tNF0pCittNF9pbmNsdWRlKFthY2luY2x1ZGUubTRdKQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYWNvdW50cnkuMSBiL2FwL2FwcC9jLWFyZXMvc3JjL2Fjb3VudHJ5LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjNGUzNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2Fjb3VudHJ5LjEKQEAgLTAsMCArMSw1MyBAQAorLlRIIEFDT1VOVFJZICIxIiAiQXByaWwgMjAxMSIgImMtYXJlcyB1dGlsaXRpZXMiCisuU0ggTkFNRQorYWNvdW50cnkgXC0gcHJpbnQgdGhlIGNvdW50cnkgd2hlcmUgYW4gSVB2NCBhZGRyZXNzIG9yIGhvc3QgaXMgbG9jYXRlZAorLlNIIFNZTk9QU0lTCisuQiBhY291bnRyeQorW1xmSU9QVElPTlxmUl0uLi4gXGZJSE9TVFxmUi4uLgorLlNIIERFU0NSSVBUSU9OCisuUFAKKy5cIiBBZGQgYW55IGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gaGVyZQorLlBQCitQcmludCB0aGUgY291bnRyeSB3aGVyZSBIT1NUIChhbiBJUHY0IGFkZHJlc3Mgb3IgaG9zdG5hbWUpIGlzIGxvY2F0ZWQsCit1c2luZyB0aGUgY291bnRyaWVzLm5lcmQuZGsgRE5TIGRvbWFpbiB0byBpZGVudGlmeSB0aGUgY291bnRyeS4KKy5QUAorVGhpcyB1dGlsaXR5IGNvbWVzIHdpdGggdGhlIFxmQmNcLWFyZXNcZlIgYXN5bmNocm9ub3VzIHJlc29sdmVyIGxpYnJhcnkuCisuU0ggT1BUSU9OUworLlRQCitcZkJcLWRcZlIKK1ByaW50IHNvbWUgZXh0cmEgZGVidWdnaW5nIG91dHB1dC4KKy5UUAorXGZCXC1oXGZSLCBcZkJcLVwtaGVscFxmUgorRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisuVFAKK1xmQlwtdlxmUgorQmUgbW9yZSB2ZXJib3NlLiBQcmludCBleHRyYSBpbmZvcm1hdGlvbi4KKy5TSCAiUkVQT1JUSU5HIEJVR1MiCitSZXBvcnQgYnVncyB0byB0aGUgYy1hcmVzIG1haWxpbmcgbGlzdDoKK1xmQmh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jLWFyZXNcZlIKKy5TSCAiU0VFIEFMU08iCisuUFAKK2FkaWcoMSksIGFob3N0KDEpLgorLlBQCitUaGUgRE5TQkwgY291bnRyaWVzLm5lcmQuZGsKKy5icgorXGZCaHR0cDovL2NvdW50cmllcy5uZXJkLmRrL1xmUgorLlNIIENPUFlSSUdIVAorVGhpcyB1dGlsaXR5IGlzIGJhc2VkIG9uIGNvZGUvaWRlYXMgY29udGFpbmVkIGluIHNvZndhcmUgd3JpdHRlbiBieSBHcmVnIEh1ZHNvbiAoYXJlcykKK2NhcnJ5aW5nIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5icgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Citib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KK3N1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIE0uSS5ULiBtYWtlcyBubworcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuYnIKK05vIGZ1cnRoZXIgY29weXJpZ2h0IGNsYWltcyBhcmUgYmVpbmcgbWFkZSBieSB0aGUgYXV0aG9yKHMpIG9mIHRoaXMgdXRpbGl0eS4KKy5TSCBBVVRIT1IKK0dpc2xlIFZhbmVtCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hY291bnRyeS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYWNvdW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWEyMmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYWNvdW50cnkuYwpAQCAtMCwwICsxLDYyMSBAQAorLyoKKyAqCisgKiBJUC1hZGRyZXNzL2hvc3RuYW1lIHRvIGNvdW50cnkgY29udmVydGVyLgorICoKKyAqIFByb2JsZW07IHlvdSB3YW50IHRvIGtub3cgd2hlcmUgSVAgYS5iLmMuZCBpcyBsb2NhdGVkLgorICoKKyAqIFVzZSBhcmVzX2dldGhvc3RieW5hbWUgKCJkLmMuYi5hLnp6LmNvdW50cmllcy5uZXJkLmRrIikKKyAqIGFuZCBnZXQgdGhlIENOQU1FIChob3N0LT5oX25hbWUpLiBSZXN1bHQgd2lsbCBiZToKKyAqICAgQ05BTUUgPSB6ejxDQz4uY291bnRyaWVzLm5lcmQuZGsgd2l0aCBhZGRyZXNzIDEyNy4wLngueSAodmVyIDEpIG9yCisgKiAgIENOQU1FID0gPGEuYi5jLmQ+Lnp6LmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC54LnkgKHZlciAyKQorICoKKyAqIFRoZSAyIGxldHRlciBjb3VudHJ5IGNvZGUgaXMgaW4gPENDPiBhbmQgdGhlIElTTy0zMTY2IGNvdW50cnkKKyAqIG51bWJlciBpcyBpbiB4LnkgKG51bWJlciA9IHgqMjU2ICsgeSkuIFZlcnNpb24gMiBvZiB0aGUgcHJvdG9jb2wgaXMgbWlzc2luZworICogdGhlIDxDQz4gbnVtYmVyLgorICoKKyAqIFJlZjogaHR0cDovL2NvdW50cmllcy5uZXJkLmRrL21vcmUuaHRtbAorICoKKyAqIFdyaXR0ZW4gYnkgRy4gVmFuZW0gPGd2YW5lbUB5YWhvby5ubz4gMjAwNiwgMjAwNworICoKKyAqIE5CISBUaGlzIHByb2dyYW0gbWF5IG5vdCBiZSBiaWctZW5kaWFuIGF3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoV0FUVDMyKQorICAjaW5jbHVkZSA8d2luc29jay5oPgorI2Vsc2UKKyAgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfZ2V0b3B0LmgiCisjaW5jbHVkZSAiYXJlc19ub3dhcm4uaCIKKworI2lmbmRlZiBIQVZFX1NUUkRVUAorIyAgaW5jbHVkZSAiYXJlc19zdHJkdXAuaCIKKyMgIGRlZmluZSBzdHJkdXAocHRyKSBhcmVzX3N0cmR1cChwdHIpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NUUkNBU0VDTVAKKyMgIGluY2x1ZGUgImFyZXNfc3RyY2FzZWNtcC5oIgorIyAgZGVmaW5lIHN0cmNhc2VjbXAocDEscDIpIGFyZXNfc3RyY2FzZWNtcChwMSxwMikKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSTkNBU0VDTVAKKyMgIGluY2x1ZGUgImFyZXNfc3RyY2FzZWNtcC5oIgorIyAgZGVmaW5lIHN0cm5jYXNlY21wKHAxLHAyLG4pIGFyZXNfc3RybmNhc2VjbXAocDEscDIsbikKKyNlbmRpZgorCisjaWZuZGVmIElOQUREUl9OT05FCisjZGVmaW5lIElOQUREUl9OT05FIDB4ZmZmZmZmZmYKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2UgICAgICA9ICJhY291bnRyeSBbLXZoP10ge2hvc3R8YWRkcn0gLi4uXG4iOworc3RhdGljIGNvbnN0IGNoYXIgIG5lcmRfZm10W10gPSAiJXUuJXUuJXUuJXUuenouY291bnRyaWVzLm5lcmQuZGsiOworc3RhdGljIGNvbnN0IGNoYXIgKm5lcmRfdmVyMSAgPSBuZXJkX2ZtdCArIDE0OyAgLyogLmNvdW50cmllcy5uZXJkLmRrICovCitzdGF0aWMgY29uc3QgY2hhciAqbmVyZF92ZXIyICA9IG5lcmRfZm10ICsgMTE7ICAvKiAuenouY291bnRyaWVzLm5lcmQuZGsgKi8KK3N0YXRpYyBpbnQgICAgICAgICB2ZXJib3NlICAgID0gMDsKKworI2RlZmluZSBUUkFDRShmbXQpIGRvIHsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSA+IDApIFwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmIGZtdCA7ICAgXAorICAgICAgICAgICAgICAgICAgIH0gV0hJTEVfRkFMU0UKKworc3RhdGljIHZvaWQgd2FpdF9hcmVzKGFyZXNfY2hhbm5lbCBjaGFubmVsKTsKK3N0YXRpYyB2b2lkIGNhbGxiYWNrKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCk7CitzdGF0aWMgdm9pZCBjYWxsYmFjazIodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsIHN0cnVjdCBob3N0ZW50ICpob3N0KTsKK3N0YXRpYyB2b2lkIGZpbmRfY291bnRyeV9mcm9tX2NuYW1lKGNvbnN0IGNoYXIgKmNuYW1lLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKKworc3RhdGljIHZvaWQgQWJvcnQoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3MpOworICB2YV9lbmQoYXJncyk7CisgIGV4aXQoMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgYXJlc19jaGFubmVsIGNoYW5uZWw7CisgIGludCAgICBjaCwgc3RhdHVzOworCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoV0FUVDMyKQorICBXT1JEIHdWZXJzaW9uUmVxdWVzdGVkID0gTUFLRVdPUkQoVVNFX1dJTlNPQ0ssVVNFX1dJTlNPQ0spOworICBXU0FEQVRBIHdzYURhdGE7CisgIFdTQVN0YXJ0dXAod1ZlcnNpb25SZXF1ZXN0ZWQsICZ3c2FEYXRhKTsKKyNlbmRpZgorCisgIHN0YXR1cyA9IGFyZXNfbGlicmFyeV9pbml0KEFSRVNfTElCX0lOSVRfQUxMKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJhcmVzX2xpYnJhcnlfaW5pdDogJXNcbiIsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgd2hpbGUgKChjaCA9IGFyZXNfZ2V0b3B0KGFyZ2MsIGFyZ3YsICJkdmg/IikpICE9IC0xKQorICAgIHN3aXRjaCAoY2gpCisgICAgICB7CisgICAgICBjYXNlICdkJzoKKyNpZmRlZiBXQVRUMzIKKyAgICAgICAgZGJ1Z19pbml0KCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICd2JzoKKyAgICAgICAgdmVyYm9zZSsrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2gnOgorICAgICAgY2FzZSAnPyc6CisgICAgICBkZWZhdWx0OgorICAgICAgICBBYm9ydCh1c2FnZSk7CisgICAgICB9CisKKyAgYXJnYyAtPSBvcHRpbmQ7CisgIGFyZ3YgKz0gb3B0aW5kOworICBpZiAoYXJnYyA8IDEpCisgICAgIEFib3J0KHVzYWdlKTsKKworICBzdGF0dXMgPSBhcmVzX2luaXQoJmNoYW5uZWwpOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImFyZXNfaW5pdDogJXNcbiIsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgLyogSW5pdGlhdGUgdGhlIHF1ZXJpZXMsIG9uZSBwZXIgY29tbWFuZC1saW5lIGFyZ3VtZW50LiAqLworICBmb3IgKCA7ICphcmd2OyBhcmd2KyspCisgICAgeworICAgICAgc3RydWN0IGluX2FkZHIgYWRkcjsKKyAgICAgIGNoYXIgYnVmWzEwMF07CisKKyAgICAgIC8qIElmIHRoaXMgZmFpbHMsIGFzc3VtZSAnKmFyZ3YnIGlzIGEgaG9zdC1uYW1lIHRoYXQKKyAgICAgICAqIG11c3QgYmUgcmVzb2x2ZWQgZmlyc3QKKyAgICAgICAqLworICAgICAgaWYgKGFyZXNfaW5ldF9wdG9uKEFGX0lORVQsICphcmd2LCAmYWRkcikgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsLCAqYXJndiwgQUZfSU5FVCwgY2FsbGJhY2syLCAmYWRkcik7CisgICAgICAgICAgd2FpdF9hcmVzKGNoYW5uZWwpOworICAgICAgICAgIGlmIChhZGRyLnNfYWRkciA9PSBJTkFERFJfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gbG9va3VwICVzXG4iLCAqYXJndik7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIHNwcmludGYoYnVmLCBuZXJkX2ZtdCwKKyAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoYWRkci5zX2FkZHIgPj4gMjQpLAorICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSgoYWRkci5zX2FkZHIgPj4gMTYpICYgMjU1KSwKKyAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoKGFkZHIuc19hZGRyID4+IDgpICYgMjU1KSwKKyAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoYWRkci5zX2FkZHIgJiAyNTUpKTsKKyAgICAgIFRSQUNFKCgiTG9va2luZyB1cCAlcy4uLiIsIGJ1ZikpOworICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbCwgYnVmLCBBRl9JTkVULCBjYWxsYmFjaywgYnVmKTsKKyAgICB9CisKKyAgd2FpdF9hcmVzKGNoYW5uZWwpOworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisKKyAgYXJlc19saWJyYXJ5X2NsZWFudXAoKTsKKworI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKFdBVFQzMikKKyAgV1NBQ2xlYW51cCgpOworI2VuZGlmCisKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXYWl0IGZvciB0aGUgcXVlcmllcyB0byBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQgd2FpdF9hcmVzKGFyZXNfY2hhbm5lbCBjaGFubmVsKQoreworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHN0cnVjdCB0aW1ldmFsICp0dnAsIHR2OworICAgICAgZmRfc2V0IHJlYWRfZmRzLCB3cml0ZV9mZHM7CisgICAgICBpbnQgbmZkczsKKworICAgICAgRkRfWkVSTygmcmVhZF9mZHMpOworICAgICAgRkRfWkVSTygmd3JpdGVfZmRzKTsKKyAgICAgIG5mZHMgPSBhcmVzX2ZkcyhjaGFubmVsLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMpOworICAgICAgaWYgKG5mZHMgPT0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgICB0dnAgPSBhcmVzX3RpbWVvdXQoY2hhbm5lbCwgTlVMTCwgJnR2KTsKKyAgICAgIG5mZHMgPSBzZWxlY3QobmZkcywgJnJlYWRfZmRzLCAmd3JpdGVfZmRzLCBOVUxMLCB0dnApOworICAgICAgaWYgKG5mZHMgPCAwKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGFyZXNfcHJvY2VzcyhjaGFubmVsLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMpOworICAgIH0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHVzZWQgd2hlbiB3ZSBoYXZlIHRoZSBJUC1hZGRyZXNzIG9mIGludGVyZXN0LgorICogRXh0cmFjdCB0aGUgQ05BTUUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvdW50cnktY29kZSBmcm9tIGl0LgorICovCitzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgc3RydWN0IGhvc3RlbnQgKmhvc3QpCit7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSAoY29uc3QgY2hhciopYXJnOworICBjb25zdCBjaGFyICpjbmFtZTsKKyAgY2hhciBidWZbMjBdOworCisgICh2b2lkKXRpbWVvdXRzOworCisgIGlmICghaG9zdCB8fCBzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIHByaW50ZigiRmFpbGVkIHRvIGxvb2t1cCAlczogJXNcbiIsIG5hbWUsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIFRSQUNFKCgiXG5Gb3VuZCBhZGRyZXNzICVzLCBuYW1lICVzXG4iLAorICAgICAgICAgYXJlc19pbmV0X250b3AoQUZfSU5FVCwoY29uc3QgY2hhciopaG9zdC0+aF9hZGRyLGJ1ZixzaXplb2YoYnVmKSksCisgICAgICAgICBob3N0LT5oX25hbWUpKTsKKworICBjbmFtZSA9IGhvc3QtPmhfbmFtZTsgIC8qIENOQU1FIGdldHMgcHV0IGhlcmUgKi8KKyAgaWYgKCFjbmFtZSkKKyAgICBwcmludGYoIkZhaWxlZCB0byBnZXQgQ05BTUUgZm9yICVzXG4iLCBuYW1lKTsKKyAgZWxzZQorICAgIGZpbmRfY291bnRyeV9mcm9tX2NuYW1lKGNuYW1lLCAqKHN0cnVjdCBpbl9hZGRyKilob3N0LT5oX2FkZHIpOworfQorCisvKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgdXNlZCB0byBvYnRhaW4gdGhlIElQLWFkZHJlc3Mgb2YgdGhlIGhvc3Qgb2YgaW50ZXJlc3QuCisgKi8KK3N0YXRpYyB2b2lkIGNhbGxiYWNrMih2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgc3RydWN0IGhvc3RlbnQgKmhvc3QpCit7CisgIHN0cnVjdCBpbl9hZGRyICphZGRyID0gKHN0cnVjdCBpbl9hZGRyKikgYXJnOworCisgICh2b2lkKXRpbWVvdXRzOworICBpZiAoIWhvc3QgfHwgc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICBtZW1zZXQoYWRkciwgSU5BRERSX05PTkUsIHNpemVvZigqYWRkcikpOworICBlbHNlCisgICAgbWVtY3B5KGFkZHIsIGhvc3QtPmhfYWRkciwgc2l6ZW9mKCphZGRyKSk7Cit9CisKK3N0cnVjdCBzZWFyY2hfbGlzdCB7CisgICAgICAgaW50ICAgICAgICAgY291bnRyeV9udW1iZXI7IC8qIElTTy0zMTY2IGNvdW50cnkgbnVtYmVyICovCisgICAgICAgY2hhciAgICAgICAgc2hvcnRfbmFtZVszXTsgIC8qIEEyIHNob3J0IGNvdW50cnkgY29kZSAqLworICAgICAgIGNvbnN0IGNoYXIgKmxvbmdfbmFtZTsgICAgICAvKiBub3JtYWwgY291bnRyeSBuYW1lICovCisgICAgIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VhcmNoX2xpc3QgKmxpc3RfbG9va3VwKGludCBudW1iZXIsIGNvbnN0IHN0cnVjdCBzZWFyY2hfbGlzdCAqbGlzdCwgaW50IG51bSkKK3sKKyAgd2hpbGUgKG51bSA+IDAgJiYgbGlzdC0+bG9uZ19uYW1lKQorICAgIHsKKyAgICAgIGlmIChsaXN0LT5jb3VudHJ5X251bWJlciA9PSBudW1iZXIpCisgICAgICAgIHJldHVybiAobGlzdCk7CisgICAgICBudW0tLTsKKyAgICAgIGxpc3QrKzsKKyAgICB9CisgIHJldHVybiAoTlVMTCk7Cit9CisKKy8qCisgKiBSZWY6IGZ0cDovL2Z0cC5yaXBlLm5ldC9pc28zMTY2LWNvdW50cnljb2Rlcy50eHQKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZWFyY2hfbGlzdCBjb3VudHJ5X2xpc3RbXSA9IHsKKyAgICAgICB7ICAgNCwgImFmIiwgIkFmZ2hhbmlzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI0OCwgImF4IiwgIsVsYW5kIElzbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAgOCwgImFsIiwgIkFsYmFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAxMiwgImR6IiwgIkFsZ2VyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAxNiwgImFzIiwgIkFtZXJpY2FuIFNhbW9hIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAyMCwgImFkIiwgIkFuZG9ycmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAyNCwgImFvIiwgIkFuZ29sYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY2MCwgImFpIiwgIkFuZ3VpbGxhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAxMCwgImFxIiwgIkFudGFyY3RpY2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAyOCwgImFnIiwgIkFudGlndWEgJiBCYXJidWRhIiAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAzMiwgImFyIiwgIkFyZ2VudGluYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA1MSwgImFtIiwgIkFybWVuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUzMywgImF3IiwgIkFydWJhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAzNiwgImF1IiwgIkF1c3RyYWxpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA0MCwgImF0IiwgIkF1c3RyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICAzMSwgImF6IiwgIkF6ZXJiYWlqYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA0NCwgImJzIiwgIkJhaGFtYXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA0OCwgImJoIiwgIkJhaHJhaW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA1MCwgImJkIiwgIkJhbmdsYWRlc2giICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA1MiwgImJiIiwgIkJhcmJhZG9zIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDExMiwgImJ5IiwgIkJlbGFydXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA1NiwgImJlIiwgIkJlbGdpdW0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA4NCwgImJ6IiwgIkJlbGl6ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIwNCwgImJqIiwgIkJlbmluIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA2MCwgImJtIiwgIkJlcm11ZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA2NCwgImJ0IiwgIkJodXRhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA2OCwgImJvIiwgIkJvbGl2aWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA3MCwgImJhIiwgIkJvc25pYSAmIEhlcnplZ293aW5hIiAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA3MiwgImJ3IiwgIkJvdHN3YW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA3NCwgImJ2IiwgIkJvdXZldCBJc2xhbmQiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA3NiwgImJyIiwgIkJyYXppbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA4NiwgImlvIiwgIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSIgICAgICAgfSwKKyAgICAgICB7ICA5NiwgImJuIiwgIkJydW5laSBEYXJ1c3NhbGFtIiAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDEwMCwgImJnIiwgIkJ1bGdhcmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg1NCwgImJmIiwgIkJ1cmtpbmEgRmFzbyIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDEwOCwgImJpIiwgIkJ1cnVuZGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDExNiwgImtoIiwgIkNhbWJvZGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDEyMCwgImNtIiwgIkNhbWVyb29uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDEyNCwgImNhIiwgIkNhbmFkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDEzMiwgImN2IiwgIkNhcGUgVmVyZGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDEzNiwgImt5IiwgIkNheW1hbiBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE0MCwgImNmIiwgIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE0OCwgInRkIiwgIkNoYWQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE1MiwgImNsIiwgIkNoaWxlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE1NiwgImNuIiwgIkNoaW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE2MiwgImN4IiwgIkNocmlzdG1hcyBJc2xhbmQiICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE2NiwgImNjIiwgIkNvY29zIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE3MCwgImNvIiwgIkNvbG9tYmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE3NCwgImttIiwgIkNvbW9yb3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE3OCwgImNnIiwgIkNvbmdvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE4MCwgImNkIiwgIkNvbmdvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE4NCwgImNrIiwgIkNvb2sgSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE4OCwgImNyIiwgIkNvc3RhIFJpY2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM4NCwgImNpIiwgIkNvdGUgZCdJdm9pcmUiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE5MSwgImhyIiwgIkNyb2F0aWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE5MiwgImN1IiwgIkN1YmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE5NiwgImN5IiwgIkN5cHJ1cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIwMywgImN6IiwgIkN6ZWNoIFJlcHVibGljIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIwOCwgImRrIiwgIkRlbm1hcmsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI2MiwgImRqIiwgIkRqaWJvdXRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIxMiwgImRtIiwgIkRvbWluaWNhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIxNCwgImRvIiwgIkRvbWluaWNhbiBSZXB1YmxpYyIgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIxOCwgImVjIiwgIkVjdWFkb3IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDgxOCwgImVnIiwgIkVneXB0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIyMiwgInN2IiwgIkVsIFNhbHZhZG9yIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIyNiwgImdxIiwgIkVxdWF0b3JpYWwgR3VpbmVhIiAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIzMiwgImVyIiwgIkVyaXRyZWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIzMywgImVlIiwgIkVzdG9uaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIzMSwgImV0IiwgIkV0aGlvcGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIzOCwgImZrIiwgIkZhbGtsYW5kIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIzNCwgImZvIiwgIkZhcm9lIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI0MiwgImZqIiwgIkZpamkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI0NiwgImZpIiwgIkZpbmxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI1MCwgImZyIiwgIkZyYW5jZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI0OSwgImZ4IiwgIkZyYW5jZSwgTWV0cm9wb2xpdGFuIiAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI1NCwgImdmIiwgIkZyZW5jaCBHdWlhbmEiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI1OCwgInBmIiwgIkZyZW5jaCBQb2x5bmVzaWEiICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI2MCwgInRmIiwgIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIgICAgICAgICAgfSwKKyAgICAgICB7IDI2NiwgImdhIiwgIkdhYm9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI3MCwgImdtIiwgIkdhbWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI2OCwgImdlIiwgIkdlb3JnaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI3NiwgImRlIiwgIkdlcm1hbnkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI4OCwgImdoIiwgIkdoYW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI5MiwgImdpIiwgIkdpYnJhbHRhciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMwMCwgImdyIiwgIkdyZWVjZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMwNCwgImdsIiwgIkdyZWVubGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMwOCwgImdkIiwgIkdyZW5hZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMxMiwgImdwIiwgIkd1YWRlbG91cGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMxNiwgImd1IiwgIkd1YW0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMyMCwgImd0IiwgIkd1YXRlbWFsYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMyNCwgImduIiwgIkd1aW5lYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYyNCwgImd3IiwgIkd1aW5lYS1CaXNzYXUiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMyOCwgImd5IiwgIkd1eWFuYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMzMiwgImh0IiwgIkhhaXRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDMzNCwgImhtIiwgIkhlYXJkICYgTWMgRG9uYWxkIElzbGFuZHMiICAgICAgICAgICAgfSwKKyAgICAgICB7IDMzNiwgInZhIiwgIlZhdGljYW4gQ2l0eSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM0MCwgImhuIiwgIkhvbmR1cmFzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM0NCwgImhrIiwgIkhvbmcga29uZyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM0OCwgImh1IiwgIkh1bmdhcnkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM1MiwgImlzIiwgIkljZWxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM1NiwgImluIiwgIkluZGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM2MCwgImlkIiwgIkluZG9uZXNpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM2NCwgImlyIiwgIklyYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM2OCwgImlxIiwgIklyYXEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM3MiwgImllIiwgIklyZWxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM3NiwgImlsIiwgIklzcmFlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM4MCwgIml0IiwgIkl0YWx5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM4OCwgImptIiwgIkphbWFpY2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM5MiwgImpwIiwgIkphcGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQwMCwgImpvIiwgIkpvcmRhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDM5OCwgImt6IiwgIkthemFraHN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQwNCwgImtlIiwgIktlbnlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI5NiwgImtpIiwgIktpcmliYXRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQwOCwgImtwIiwgIktvcmVhIChub3J0aCkiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQxMCwgImtyIiwgIktvcmVhIChzb3V0aCkiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQxNCwgImt3IiwgIkt1d2FpdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQxNywgImtnIiwgIkt5cmd5enN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQxOCwgImxhIiwgIkxhb3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQyOCwgImx2IiwgIkxhdHZpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQyMiwgImxiIiwgIkxlYmFub24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQyNiwgImxzIiwgIkxlc290aG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQzMCwgImxyIiwgIkxpYmVyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQzNCwgImx5IiwgIkxpYnlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQzOCwgImxpIiwgIkxpZWNodGVuc3RlaW4iICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ0MCwgImx0IiwgIkxpdGh1YW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ0MiwgImx1IiwgIkx1eGVtYm91cmciICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ0NiwgIm1vIiwgIk1hY2FvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDgwNywgIm1rIiwgIk1hY2Vkb25pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ1MCwgIm1nIiwgIk1hZGFnYXNjYXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ1NCwgIm13IiwgIk1hbGF3aSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ1OCwgIm15IiwgIk1hbGF5c2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ2MiwgIm12IiwgIk1hbGRpdmVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ2NiwgIm1sIiwgIk1hbGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ3MCwgIm10IiwgIk1hbHRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU4NCwgIm1oIiwgIk1hcnNoYWxsIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ3NCwgIm1xIiwgIk1hcnRpbmlxdWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ3OCwgIm1yIiwgIk1hdXJpdGFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ4MCwgIm11IiwgIk1hdXJpdGl1cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE3NSwgInl0IiwgIk1heW90dGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ4NCwgIm14IiwgIk1leGljbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU4MywgImZtIiwgIk1pY3JvbmVzaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ5OCwgIm1kIiwgIk1vbGRvdmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ5MiwgIm1jIiwgIk1vbmFjbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDQ5NiwgIm1uIiwgIk1vbmdvbGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUwMCwgIm1zIiwgIk1vbnRzZXJyYXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUwNCwgIm1hIiwgIk1vcm9jY28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUwOCwgIm16IiwgIk1vemFtYmlxdWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDEwNCwgIm1tIiwgIk15YW5tYXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUxNiwgIm5hIiwgIk5hbWliaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUyMCwgIm5yIiwgIk5hdXJ1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUyNCwgIm5wIiwgIk5lcGFsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUyOCwgIm5sIiwgIk5ldGhlcmxhbmRzIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUzMCwgImFuIiwgIk5ldGhlcmxhbmRzIEFudGlsbGVzIiAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU0MCwgIm5jIiwgIk5ldyBDYWxlZG9uaWEiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU1NCwgIm56IiwgIk5ldyBaZWFsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU1OCwgIm5pIiwgIk5pY2FyYWd1YSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU2MiwgIm5lIiwgIk5pZ2VyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU2NiwgIm5nIiwgIk5pZ2VyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU3MCwgIm51IiwgIk5pdWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU3NCwgIm5mIiwgIk5vcmZvbGsgSXNsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU4MCwgIm1wIiwgIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU3OCwgIm5vIiwgIk5vcndheSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDUxMiwgIm9tIiwgIk9tYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU4NiwgInBrIiwgIlBha2lzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU4NSwgInB3IiwgIlBhbGF1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDI3NSwgInBzIiwgIlBhbGVzdGluaWFuIFRlcnJpdG9yeSIgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU5MSwgInBhIiwgIlBhbmFtYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU5OCwgInBnIiwgIlBhcHVhIE5ldyBHdWluZWEiICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYwMCwgInB5IiwgIlBhcmFndWF5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYwNCwgInBlIiwgIlBlcnUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYwOCwgInBoIiwgIlBoaWxpcHBpbmVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYxMiwgInBuIiwgIlBpdGNhaXJuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYxNiwgInBsIiwgIlBvbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYyMCwgInB0IiwgIlBvcnR1Z2FsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYzMCwgInByIiwgIlB1ZXJ0byBSaWNvIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYzNCwgInFhIiwgIlFhdGFyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYzOCwgInJlIiwgIlJldW5pb24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY0MiwgInJvIiwgIlJvbWFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY0MywgInJ1IiwgIlJ1c3NpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY0NiwgInJ3IiwgIlJ3YW5kYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY1OSwgImtuIiwgIlNhaW50IEtpdHRzICYgTmV2aXMiICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY2MiwgImxjIiwgIlNhaW50IEx1Y2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY3MCwgInZjIiwgIlNhaW50IFZpbmNlbnQiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg4MiwgIndzIiwgIlNhbW9hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY3NCwgInNtIiwgIlNhbiBNYXJpbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY3OCwgInN0IiwgIlNhbyBUb21lICYgUHJpbmNpcGUiICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY4MiwgInNhIiwgIlNhdWRpIEFyYWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY4NiwgInNuIiwgIlNlbmVnYWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg5MSwgImNzIiwgIlNlcmJpYSBhbmQgTW9udGVuZWdybyIgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY5MCwgInNjIiwgIlNleWNoZWxsZXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY5NCwgInNsIiwgIlNpZXJyYSBMZW9uZSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcwMiwgInNnIiwgIlNpbmdhcG9yZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcwMywgInNrIiwgIlNsb3Zha2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcwNSwgInNpIiwgIlNsb3ZlbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA5MCwgInNiIiwgIlNvbG9tb24gSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcwNiwgInNvIiwgIlNvbWFsaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcxMCwgInphIiwgIlNvdXRoIEFmcmljYSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDIzOSwgImdzIiwgIlNvdXRoIEdlb3JnaWEiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcyNCwgImVzIiwgIlNwYWluIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE0NCwgImxrIiwgIlNyaSBMYW5rYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY1NCwgInNoIiwgIlN0LiBIZWxlbmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDY2NiwgInBtIiwgIlN0LiBQaWVycmUgJiBNaXF1ZWxvbiIgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDczNiwgInNkIiwgIlN1ZGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc0MCwgInNyIiwgIlN1cmluYW1lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc0NCwgInNqIiwgIlN2YWxiYXJkICYgSmFuIE1heWVuIElzbGFuZHMiICAgICAgICAgfSwKKyAgICAgICB7IDc0OCwgInN6IiwgIlN3YXppbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc1MiwgInNlIiwgIlN3ZWRlbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc1NiwgImNoIiwgIlN3aXR6ZXJsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc2MCwgInN5IiwgIlN5cmlhbiBBcmFiIFJlcHVibGljIiAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDYyNiwgInRsIiwgIlRpbW9yLUxlc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDE1OCwgInR3IiwgIlRhaXdhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc2MiwgInRqIiwgIlRhamlraXN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDgzNCwgInR6IiwgIlRhbnphbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc2NCwgInRoIiwgIlRoYWlsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc2OCwgInRnIiwgIlRvZ28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc3MiwgInRrIiwgIlRva2VsYXUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc3NiwgInRvIiwgIlRvbmdhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc4MCwgInR0IiwgIlRyaW5pZGFkICYgVG9iYWdvIiAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc4OCwgInRuIiwgIlR1bmlzaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc5MiwgInRyIiwgIlR1cmtleSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc5NSwgInRtIiwgIlR1cmttZW5pc3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc5NiwgInRjIiwgIlR1cmtzICYgQ2FpY29zIElzbGFuZHMiICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc5OCwgInR2IiwgIlR1dmFsdSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDgwMCwgInVnIiwgIlVnYW5kYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDgwNCwgInVhIiwgIlVrcmFpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDc4NCwgImFlIiwgIlVuaXRlZCBBcmFiIEVtaXJhdGVzIiAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDgyNiwgImdiIiwgIlVuaXRlZCBLaW5nZG9tIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg0MCwgInVzIiwgIlVuaXRlZCBTdGF0ZXMiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU4MSwgInVtIiwgIlVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kcyIgfSwKKyAgICAgICB7IDg1OCwgInV5IiwgIlVydWd1YXkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg2MCwgInV6IiwgIlV6YmVraXN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDU0OCwgInZ1IiwgIlZhbnVhdHUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg2MiwgInZlIiwgIlZlbmV6dWVsYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcwNCwgInZuIiwgIlZpZXRuYW0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7ICA5MiwgInZnIiwgIlZpcmdpbiBJc2xhbmRzIChCcml0aXNoKSIgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg1MCwgInZpIiwgIlZpcmdpbiBJc2xhbmRzIChVUykiICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg3NiwgIndmIiwgIldhbGxpcyAmIEZ1dHVuYSBJc2xhbmRzIiAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDczMiwgImVoIiwgIldlc3Rlcm4gU2FoYXJhIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg4NywgInllIiwgIlllbWVuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDg5NCwgInptIiwgIlphbWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICB7IDcxNiwgInp3IiwgIlppbWJhYndlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICB9OworCisvKgorICogQ2hlY2sgaWYgc3RhcnQgb2YgJ3N0cicgaXMgc2ltcGx5IGFuIElQdjQgYWRkcmVzcy4KKyAqLworI2RlZmluZSBCWVRFX09LKHgpICgoeCkgPj0gMCAmJiAoeCkgPD0gMjU1KQorCitzdGF0aWMgaW50IGlzX2FkZHIoY2hhciAqc3RyLCBjaGFyICoqZW5kKQoreworICBpbnQgYTAsIGExLCBhMiwgYTMsIG51bSwgcmMgPSAwLCBsZW5ndGggPSAwOworCisgIG51bSA9IHNzY2FuZihzdHIsIiUzZC4lM2QuJTNkLiUzZCVuIiwmYTAsJmExLCZhMiwmYTMsJmxlbmd0aCk7CisgIGlmKCAobnVtID09IDQpICYmCisgICAgICBCWVRFX09LKGEwKSAmJiBCWVRFX09LKGExKSAmJiBCWVRFX09LKGEyKSAmJiBCWVRFX09LKGEzKSAmJgorICAgICAgbGVuZ3RoID49ICgzKzQpKQorICAgIHsKKyAgICAgIHJjID0gMTsKKyAgICAgICplbmQgPSBzdHIgKyBsZW5ndGg7CisgICAgfQorICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBjb3VudHJ5LWNvZGUgYW5kIG5hbWUgZnJvbSB0aGUgQ05BTUUuIEUuZy46CisgKiAgIHZlcnNpb24gMTogQ05BTUUgPSB6em5vLmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC4yLjY2CisgKiAgICAgICAgICAgICAgeWllbGRzIGNjb2RlX0EiID0gIm5vIiBhbmQgY251bWJlciA1NzggKDIuNjYpLgorICogICB2ZXJzaW9uIDI6IENOQU1FID0gPGEuYi5jLmQ+Lnp6LmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC4yLjY2CisgKiAgICAgICAgICAgICAgeWllbGRzIGNudW1iZXIgNTc4ICgyLjY2KS4gY2NvZGVfQSBpcyAiIjsKKyAqLworc3RhdGljIHZvaWQgZmluZF9jb3VudHJ5X2Zyb21fY25hbWUoY29uc3QgY2hhciAqY25hbWUsIHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIGNvbnN0IHN0cnVjdCBzZWFyY2hfbGlzdCAqY291bnRyeTsKKyAgY2hhciAgY2NvZGVfQTJbM10sICpjY29weSwgKmRvdF80OworICBpbnQgICBjbnVtYmVyLCB6MCwgejEsIHZlcl8xLCB2ZXJfMjsKKyAgdW5zaWduZWQgbG9uZyBpcDsKKworICBpcCA9IG50b2hsKGFkZHIuc19hZGRyKTsKKyAgejAgPSBUT0xPV0VSKGNuYW1lWzBdKTsKKyAgejEgPSBUT0xPV0VSKGNuYW1lWzFdKTsKKyAgY2NvcHkgPSBzdHJkdXAoY25hbWUpOworICBkb3RfNCA9IE5VTEw7CisKKyAgdmVyXzEgPSAoejAgPT0gJ3onICYmIHoxID09ICd6JyAmJiAhc3RyY2FzZWNtcChjbmFtZSs0LG5lcmRfdmVyMSkpOworICB2ZXJfMiA9IChpc19hZGRyKGNjb3B5LCZkb3RfNCkgJiYgIXN0cmNhc2VjbXAoZG90XzQsbmVyZF92ZXIyKSk7CisKKyAgaWYgKHZlcl8xKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNocihjbmFtZSwgJy4nKTsKKyAgICAgIGlmIChkb3QgIT0gY25hbWUrNCkKKyAgICAgICAgeworICAgICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBDTkFNRSAlcyAodmVyXzEpXG4iLCBjbmFtZSk7CisgICAgICAgICAgZnJlZShjY29weSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICBlbHNlIGlmICh2ZXJfMikKKyAgICB7CisgICAgICB6MCA9IFRPTE9XRVIoZG90XzRbMV0pOworICAgICAgejEgPSBUT0xPV0VSKGRvdF80WzJdKTsKKyAgICAgIGlmICh6MCAhPSAneicgJiYgejEgIT0gJ3onKQorICAgICAgICB7CisgICAgICAgICAgcHJpbnRmKCJVbmV4cGVjdGVkIENOQU1FICVzICh2ZXJfMilcbiIsIGNuYW1lKTsKKyAgICAgICAgICBmcmVlKGNjb3B5KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgQ05BTUUgJXMgKHZlcj8pXG4iLCBjbmFtZSk7CisgICAgICBmcmVlKGNjb3B5KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHZlcl8xKQorICAgIHsKKyAgICAgIGNjb2RlX0EyWzBdID0gKGNoYXIpVE9MT1dFUihjbmFtZVsyXSk7CisgICAgICBjY29kZV9BMlsxXSA9IChjaGFyKVRPTE9XRVIoY25hbWVbM10pOworICAgICAgY2NvZGVfQTJbMl0gPSAnXDAnOworICAgIH0KKyAgZWxzZQorICAgIGNjb2RlX0EyWzBdID0gJ1wwJzsKKworICBjbnVtYmVyID0gaXAgJiAweEZGRkY7CisKKyAgVFJBQ0UoKCJGb3VuZCBjb3VudHJ5LWNvZGUgYCVzJywgbnVtYmVyICVkXG4iLAorICAgICAgICAgdmVyXzEgPyBjY29kZV9BMiA6ICI8bi9hPiIsIGNudW1iZXIpKTsKKworICBjb3VudHJ5ID0gbGlzdF9sb29rdXAoY251bWJlciwgY291bnRyeV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNvdW50cnlfbGlzdCkgLyBzaXplb2YoY291bnRyeV9saXN0WzBdKSk7CisgIGlmICghY291bnRyeSkKKyAgICBwcmludGYoIk5hbWUgZm9yIGNvdW50cnktbnVtYmVyICVkIG5vdCBmb3VuZC5cbiIsIGNudW1iZXIpOworICBlbHNlCisgICAgeworICAgICAgaWYgKHZlcl8xKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChjb3VudHJ5LT5zaG9ydF9uYW1lWzBdICE9IGNjb2RlX0EyWzBdKSB8fAorICAgICAgICAgICAgICAoY291bnRyeS0+c2hvcnRfbmFtZVsxXSAhPSBjY29kZV9BMlsxXSkgfHwKKyAgICAgICAgICAgICAgKGNvdW50cnktPnNob3J0X25hbWVbMl0gIT0gY2NvZGVfQTJbMl0pKQorICAgICAgICAgICAgcHJpbnRmKCJzaG9ydC1uYW1lIG1pc21hdGNoOyAlcyB2cyAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBjb3VudHJ5LT5zaG9ydF9uYW1lLCBjY29kZV9BMik7CisgICAgICAgIH0KKyAgICAgIHByaW50ZigiJXMgKCVzKSwgbnVtYmVyICVkLlxuIiwKKyAgICAgICAgICAgICBjb3VudHJ5LT5sb25nX25hbWUsIGNvdW50cnktPnNob3J0X25hbWUsIGNudW1iZXIpOworICAgIH0KKyAgZnJlZShjY29weSk7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hZGlnLjEgYi9hcC9hcHAvYy1hcmVzL3NyYy9hZGlnLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlOTY4OQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FkaWcuMQpAQCAtMCwwICsxLDcxIEBACisuVEggQURJRyAiMSIgIkFwcmlsIDIwMTEiICJjLWFyZXMgdXRpbGl0aWVzIgorLlNIIE5BTUUKK2FkaWcgXC0gcHJpbnQgaW5mb3JtYXRpb24gY29sbGVjdGVkIGZyb20gRG9tYWluIE5hbWUgU3lzdGVtIChETlMpIHNlcnZlcnMKKy5TSCBTWU5PUFNJUworLkIgYWRpZworW1xmSU9QVElPTlxmUl0uLi4gXGZJTkFNRVxmUi4uLgorLlNIIERFU0NSSVBUSU9OCisuUFAKKy5cIiBBZGQgYW55IGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gaGVyZQorLlBQCitTZW5kIHF1ZXJpZXMgdG8gRE5TIHNlcnZlcnMgYWJvdXQgXGZJTkFNRVxmUiBhbmQgcHJpbnQgcmVjZWl2ZWQKK2luZm9ybWF0aW9uLCB3aGVyZSBcZklOQU1FXGZSIGlzIGEgdmFsaWQgRE5TIG5hbWUgKGUuZy4gd3d3LmV4YW1wbGUuY29tLAorMS4yLjMuMTAuaW4tYWRkci5hcnBhKS4KKy5QUAorVGhpcyB1dGlsaXR5IGNvbWVzIHdpdGggdGhlIFxmQmNcLWFyZXNcZlIgYXN5bmNocm9ub3VzIHJlc29sdmVyIGxpYnJhcnkuCisuU0ggT1BUSU9OUworLlRQCitcZkJcLWNcZlIgY2xhc3MKK1NldCB0aGUgcXVlcnkgY2xhc3MuCitQb3NzaWJsZSB2YWx1ZXMgZm9yIGNsYXNzIGFyZQorTlksIENIQU9TLCBIUywgSU4gKGRlZmF1bHQpLgorLlRQCitcZkJcLWRcZlIKK1ByaW50IHNvbWUgZXh0cmEgZGVidWdnaW5nIG91dHB1dC4KKy5UUAorXGZCXC1mXGZSIGZsYWcKK0FkZCBhIGZsYWcuCitQb3NzaWJsZSB2YWx1ZXMgZm9yIGZsYWcgYXJlCitpZ250Yywgbm9hbGlhc2VzLCBub3JlY3Vyc2UsIHByaW1hcnksIHN0YXlvcGVuLCB1c2V2Yy4KKy5UUAorXGZCXC1oXGZSLCBcZkJcLVwtaGVscFxmUgorRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisuVFAKK1xmQlwtVFxmUiBwb3J0CitVc2Ugc3BlY2lmaWVkIFRDUCBwb3J0IHRvIGNvbm5lY3QgdG8gRE5TIHNlcnZlci4KKy5UUAorXGZCXC1zXGZSIHNlcnZlcgorQ29ubmVjdCB0byBzcGVjaWZpZWQgRE5TIHNlcnZlciwgaW5zdGVhZCBvZiB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBvbmUocykuCisuVFAKK1xmQlwtdFxmUiB0eXBlCitRdWVyeSByZWNvcmRzIG9mIHNwZWNpZmllZCB0eXBlLgorUG9zc2libGUgdmFsdWVzIGZvciB0eXBlIGFyZQorQSAoZGVmYXVsdCksIEFBQUEsIEFGU0RCLCBBTlksIEFYRlIsIENOQU1FLCBHUE9TLCBISU5GTywgSVNETiwgS0VZLCBMT0MsIE1BSUxBLAorTUFJTEIsIE1CLCBNRCwgTUYsIE1HLCBNSU5GTywgTVIsIE1YLCBOQVBUUiwgTlMsIE5TQVAsIE5TQVBfUFRSLCBOVUxMLAorUFRSLCBQWCwgUlAsIFJULCBTSUcsIFNPQSwgU1JWLCBUWFQsIFdLUywgWDI1LAorLlRQCitcZkJcLVVcZlIgcG9ydAorVXNlIHNwZWNpZmllZCBVRFAgcG9ydCB0byBjb25uZWN0IHRvIEROUyBzZXJ2ZXIuCisuU0ggIlJFUE9SVElORyBCVUdTIgorUmVwb3J0IGJ1Z3MgdG8gdGhlIGMtYXJlcyBtYWlsaW5nIGxpc3Q6CitcZkJodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzXGZSCisuU0ggIlNFRSBBTFNPIgorLlBQCithY291bnRyeSgxKSwgYWhvc3QoMSkuCisuU0ggQ09QWVJJR0hUCitUaGlzIHV0aWxpdHkgaXMgYmFzZWQgb24gY29kZS9pZGVhcyBjb250YWluZWQgaW4gc29md2FyZSB3cml0dGVuIGJ5IEdyZWcgSHVkc29uIChhcmVzKQorY2FycnlpbmcgdGhlIGZvbGxvd2luZyBub3RpY2U6CisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLmJyCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKK2JvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gTS5JLlQuIG1ha2VzIG5vCityZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5icgorTm8gZnVydGhlciBjb3B5cmlnaHQgY2xhaW1zIGFyZSBiZWluZyBtYWRlIGJ5IHRoZSBhdXRob3Iocykgb2YgdGhpcyB1dGlsaXR5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYWRpZy5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYWRpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Y2VmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hZGlnLmMKQEAgLTAsMCArMSwxMDU2IEBACisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorI2luY2x1ZGUgImFyZXNfZ2V0b3B0LmgiCisjaW5jbHVkZSAiYXJlc19ub3dhcm4uaCIKKworI2lmbmRlZiBIQVZFX1NUUkRVUAorIyAgaW5jbHVkZSAiYXJlc19zdHJkdXAuaCIKKyMgIGRlZmluZSBzdHJkdXAocHRyKSBhcmVzX3N0cmR1cChwdHIpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NUUkNBU0VDTVAKKyMgIGluY2x1ZGUgImFyZXNfc3RyY2FzZWNtcC5oIgorIyAgZGVmaW5lIHN0cmNhc2VjbXAocDEscDIpIGFyZXNfc3RyY2FzZWNtcChwMSxwMikKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSTkNBU0VDTVAKKyMgIGluY2x1ZGUgImFyZXNfc3RyY2FzZWNtcC5oIgorIyAgZGVmaW5lIHN0cm5jYXNlY21wKHAxLHAyLG4pIGFyZXNfc3RybmNhc2VjbXAocDEscDIsbikKKyNlbmRpZgorCisjaWZkZWYgV0FUVDMyCisjdW5kZWYgV0lOMzIgIC8qIFJlZGVmaW5lZCBpbiBNaW5nVyBoZWFkZXJzICovCisjZW5kaWYKKworI2lmbmRlZiBUX1NSVgorIyAgZGVmaW5lIFRfU1JWICAgICAzMyAvKiBTZXJ2ZXIgc2VsZWN0aW9uICovCisjZW5kaWYKKyNpZm5kZWYgVF9OQVBUUgorIyAgZGVmaW5lIFRfTkFQVFIgICAzNSAvKiBOYW1pbmcgYXV0aG9yaXR5IHBvaW50ZXIgKi8KKyNlbmRpZgorI2lmbmRlZiBUX0RTCisjICBkZWZpbmUgVF9EUyAgICAgIDQzIC8qIERlbGVnYXRpb24gU2lnbmVyIChSRkM0MDM0KSAqLworI2VuZGlmCisjaWZuZGVmIFRfU1NIRlAKKyMgIGRlZmluZSBUX1NTSEZQICAgNDQgLyogU1NIIEtleSBGaW5nZXJwcmludCAoUkZDNDI1NSkgKi8KKyNlbmRpZgorI2lmbmRlZiBUX1JSU0lHCisjICBkZWZpbmUgVF9SUlNJRyAgIDQ2IC8qIFJlc291cmNlIFJlY29yZCBTaWduYXR1cmUgKFJGQzQwMzQpICovCisjZW5kaWYKKyNpZm5kZWYgVF9OU0VDCisjICBkZWZpbmUgVF9OU0VDICAgIDQ3IC8qIE5leHQgU2VjdXJlIChSRkM0MDM0KSAqLworI2VuZGlmCisjaWZuZGVmIFRfRE5TS0VZCisjICBkZWZpbmUgVF9ETlNLRVkgIDQ4IC8qIEROUyBQdWJsaWMgS2V5IChSRkM0MDM0KSAqLworI2VuZGlmCisKK3N0cnVjdCBudiB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCB2YWx1ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnYgZmxhZ3NbXSA9IHsKKyAgeyAidXNldmMiLCAgICAgICAgICAgIEFSRVNfRkxBR19VU0VWQyB9LAorICB7ICJwcmltYXJ5IiwgICAgICAgICAgQVJFU19GTEFHX1BSSU1BUlkgfSwKKyAgeyAiaWdudGMiLCAgICAgICAgICAgIEFSRVNfRkxBR19JR05UQyB9LAorICB7ICJub3JlY3Vyc2UiLCAgICAgICAgQVJFU19GTEFHX05PUkVDVVJTRSB9LAorICB7ICJzdGF5b3BlbiIsICAgICAgICAgQVJFU19GTEFHX1NUQVlPUEVOIH0sCisgIHsgIm5vYWxpYXNlcyIsICAgICAgICBBUkVTX0ZMQUdfTk9BTElBU0VTIH0KK307CitzdGF0aWMgY29uc3QgaW50IG5mbGFncyA9IHNpemVvZihmbGFncykgLyBzaXplb2YoZmxhZ3NbMF0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG52IGNsYXNzZXNbXSA9IHsKKyAgeyAiSU4iLCAgICAgICBDX0lOIH0sCisgIHsgIkNIQU9TIiwgICAgQ19DSEFPUyB9LAorICB7ICJIUyIsICAgICAgIENfSFMgfSwKKyAgeyAiQU5ZIiwgICAgICBDX0FOWSB9Cit9Oworc3RhdGljIGNvbnN0IGludCBuY2xhc3NlcyA9IHNpemVvZihjbGFzc2VzKSAvIHNpemVvZihjbGFzc2VzWzBdKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBudiB0eXBlc1tdID0geworICB7ICJBIiwgICAgICAgIFRfQSB9LAorICB7ICJOUyIsICAgICAgIFRfTlMgfSwKKyAgeyAiTUQiLCAgICAgICBUX01EIH0sCisgIHsgIk1GIiwgICAgICAgVF9NRiB9LAorICB7ICJDTkFNRSIsICAgIFRfQ05BTUUgfSwKKyAgeyAiU09BIiwgICAgICBUX1NPQSB9LAorICB7ICJNQiIsICAgICAgIFRfTUIgfSwKKyAgeyAiTUciLCAgICAgICBUX01HIH0sCisgIHsgIk1SIiwgICAgICAgVF9NUiB9LAorICB7ICJOVUxMIiwgICAgIFRfTlVMTCB9LAorICB7ICJXS1MiLCAgICAgIFRfV0tTIH0sCisgIHsgIlBUUiIsICAgICAgVF9QVFIgfSwKKyAgeyAiSElORk8iLCAgICBUX0hJTkZPIH0sCisgIHsgIk1JTkZPIiwgICAgVF9NSU5GTyB9LAorICB7ICJNWCIsICAgICAgIFRfTVggfSwKKyAgeyAiVFhUIiwgICAgICBUX1RYVCB9LAorICB7ICJSUCIsICAgICAgIFRfUlAgfSwKKyAgeyAiQUZTREIiLCAgICBUX0FGU0RCIH0sCisgIHsgIlgyNSIsICAgICAgVF9YMjUgfSwKKyAgeyAiSVNETiIsICAgICBUX0lTRE4gfSwKKyAgeyAiUlQiLCAgICAgICBUX1JUIH0sCisgIHsgIk5TQVAiLCAgICAgVF9OU0FQIH0sCisgIHsgIk5TQVBfUFRSIiwgVF9OU0FQX1BUUiB9LAorICB7ICJTSUciLCAgICAgIFRfU0lHIH0sCisgIHsgIktFWSIsICAgICAgVF9LRVkgfSwKKyAgeyAiUFgiLCAgICAgICBUX1BYIH0sCisgIHsgIkdQT1MiLCAgICAgVF9HUE9TIH0sCisgIHsgIkFBQUEiLCAgICAgVF9BQUFBIH0sCisgIHsgIkxPQyIsICAgICAgVF9MT0MgfSwKKyAgeyAiU1JWIiwgICAgICBUX1NSViB9LAorICB7ICJBWEZSIiwgICAgIFRfQVhGUiB9LAorICB7ICJNQUlMQiIsICAgIFRfTUFJTEIgfSwKKyAgeyAiTUFJTEEiLCAgICBUX01BSUxBIH0sCisgIHsgIk5BUFRSIiwgICAgVF9OQVBUUiB9LAorICB7ICJEUyIsICAgICAgIFRfRFMgfSwKKyAgeyAiU1NIRlAiLCAgICBUX1NTSEZQIH0sCisgIHsgIlJSU0lHIiwgICAgVF9SUlNJRyB9LAorICB7ICJOU0VDIiwgICAgIFRfTlNFQyB9LAorICB7ICJETlNLRVkiLCAgIFRfRE5TS0VZIH0sCisgIHsgIkFOWSIsICAgICAgVF9BTlkgfQorfTsKK3N0YXRpYyBjb25zdCBpbnQgbnR5cGVzID0gc2l6ZW9mKHR5cGVzKSAvIHNpemVvZih0eXBlc1swXSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpvcGNvZGVzW10gPSB7CisgICJRVUVSWSIsICJJUVVFUlkiLCAiU1RBVFVTIiwgIihyZXNlcnZlZCkiLCAiTk9USUZZIiwKKyAgIih1bmtub3duKSIsICIodW5rbm93bikiLCAiKHVua25vd24pIiwgIih1bmtub3duKSIsCisgICJVUERBVEVBIiwgIlVQREFURUQiLCAiVVBEQVRFREEiLCAiVVBEQVRFTSIsICJVUERBVEVNQSIsCisgICJaT05FSU5JVCIsICJaT05FUkVGIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnJjb2Rlc1tdID0geworICAiTk9FUlJPUiIsICJGT1JNRVJSIiwgIlNFUlZGQUlMIiwgIk5YRE9NQUlOIiwgIk5PVElNUCIsICJSRUZVU0VEIiwKKyAgIih1bmtub3duKSIsICIodW5rbm93bikiLCAiKHVua25vd24pIiwgIih1bmtub3duKSIsICIodW5rbm93bikiLAorICAiKHVua25vd24pIiwgIih1bmtub3duKSIsICIodW5rbm93bikiLCAiKHVua25vd24pIiwgIk5PQ0hBTkdFIgorfTsKKworc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbik7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqZGlzcGxheV9xdWVzdGlvbihjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuKTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpkaXNwbGF5X3JyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbik7CitzdGF0aWMgY29uc3QgY2hhciAqdHlwZV9uYW1lKGludCB0eXBlKTsKK3N0YXRpYyBjb25zdCBjaGFyICpjbGFzc19uYW1lKGludCBkbnNjbGFzcyk7CitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWRkcl9saXN0KHN0cnVjdCBhcmVzX2FkZHJfbm9kZSAqaGVhZCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfYWRkcl9saXN0KHN0cnVjdCBhcmVzX2FkZHJfbm9kZSAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX2FkZHJfbm9kZSAqbm9kZSk7CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsOworICBpbnQgYywgaSwgb3B0bWFzayA9IEFSRVNfT1BUX0ZMQUdTLCBkbnNjbGFzcyA9IENfSU4sIHR5cGUgPSBUX0E7CisgIGludCBzdGF0dXMsIG5mZHMsIGNvdW50OworICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdGlvbnM7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ZW50OworICBmZF9zZXQgcmVhZF9mZHMsIHdyaXRlX2ZkczsKKyAgc3RydWN0IHRpbWV2YWwgKnR2cCwgdHY7CisgIHN0cnVjdCBhcmVzX2FkZHJfbm9kZSAqc3J2ciwgKnNlcnZlcnMgPSBOVUxMOworCWNoYXIgKiBhcmVzX2RldiA9IE5VTEw7CisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgV09SRCB3VmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKFVTRV9XSU5TT0NLLFVTRV9XSU5TT0NLKTsKKyAgV1NBREFUQSB3c2FEYXRhOworICBXU0FTdGFydHVwKHdWZXJzaW9uUmVxdWVzdGVkLCAmd3NhRGF0YSk7CisjZW5kaWYKKworICBzdGF0dXMgPSBhcmVzX2xpYnJhcnlfaW5pdChBUkVTX0xJQl9JTklUX0FMTCk7CisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiYXJlc19saWJyYXJ5X2luaXQ6ICVzXG4iLCBhcmVzX3N0cmVycm9yKHN0YXR1cykpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIG9wdGlvbnMuZmxhZ3MgPSBBUkVTX0ZMQUdfTk9DSEVDS1JFU1A7CisgIG9wdGlvbnMuc2VydmVycyA9IE5VTEw7CisgIG9wdGlvbnMubnNlcnZlcnMgPSAwOworICB3aGlsZSAoKGMgPSBhcmVzX2dldG9wdChhcmdjLCBhcmd2LCAiZGY6czpjOnQ6VDpVOmk6IikpICE9IC0xKQorICAgIHsKKyAgICAgIHN3aXRjaCAoYykKKyAgICAgICAgeworICAgICAgICBjYXNlICdkJzoKKyNpZmRlZiBXQVRUMzIKKyAgICAgICAgICBkYnVnX2luaXQoKTsKKyNlbmRpZgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgIC8qIEFkZCBhIGZsYWcuICovCisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5mbGFnczsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoc3RyY21wKGZsYWdzW2ldLm5hbWUsIG9wdGFyZykgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoaSA8IG5mbGFncykKKyAgICAgICAgICAgIG9wdGlvbnMuZmxhZ3MgfD0gZmxhZ3NbaV0udmFsdWU7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICBicmVhazsKKwkJICAjaWYgMQorCQljYXNlICdpJzoKKyAgICAgICAgICAKKyAgICAgICAgICBhcmVzX2RldiA9IChjaGFyICogKXN0cmR1cChvcHRhcmcpOworCQkgIGZwcmludGYoc3RkZXJyLCAiYXJlc19kZXYgaXMgJXNcbiIsIGFyZXNfZGV2KTsKKyAgICAgICAgICBicmVhazsKKwkJICAjZW5kaWYKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgLyogVXNlci1zcGVjaWZpZWQgbmFtZSBzZXJ2ZXJzIG92ZXJyaWRlIGRlZmF1bHQgb25lcy4gKi8KKyAgICAgICAgICBzcnZyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXJlc19hZGRyX25vZGUpKTsKKyAgICAgICAgICBpZiAoIXNydnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeSFcbiIpOworICAgICAgICAgICAgICBkZXN0cm95X2FkZHJfbGlzdChzZXJ2ZXJzKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgYXBwZW5kX2FkZHJfbGlzdCgmc2VydmVycywgc3J2cik7CisgICAgICAgICAgaWYgKGFyZXNfaW5ldF9wdG9uKEFGX0lORVQsIG9wdGFyZywgJnNydnItPmFkZHIuYWRkcjQpID4gMCkKKyAgICAgICAgICAgIHNydnItPmZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgZWxzZSBpZiAoYXJlc19pbmV0X3B0b24oQUZfSU5FVDYsIG9wdGFyZywgJnNydnItPmFkZHIuYWRkcjYpID4gMCkKKyAgICAgICAgICAgIHNydnItPmZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaG9zdGVudCA9IGdldGhvc3RieW5hbWUob3B0YXJnKTsKKyAgICAgICAgICAgICAgaWYgKCFob3N0ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWRpZzogc2VydmVyICVzIG5vdCBmb3VuZC5cbiIsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICBkZXN0cm95X2FkZHJfbGlzdChzZXJ2ZXJzKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc3dpdGNoIChob3N0ZW50LT5oX2FkZHJ0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgICAgICAgICAgc3J2ci0+ZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzcnZyLT5hZGRyLmFkZHI0LCBob3N0ZW50LT5oX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3J2ci0+YWRkci5hZGRyNCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgICAgIHNydnItPmZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnNydnItPmFkZHIuYWRkcjYsIGhvc3RlbnQtPmhfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzcnZyLT5hZGRyLmFkZHI2KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgImFkaWc6IHNlcnZlciAlcyB1bnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseS5cbiIsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lfYWRkcl9saXN0KHNlcnZlcnMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogTm90aWNlIHRoYXQgY2FsbGluZyBhcmVzX2luaXRfb3B0aW9ucygpIHdpdGhvdXQgc2VydmVycyBpbiB0aGUKKyAgICAgICAgICAgKiBvcHRpb25zIHN0cnVjdCBhbmQgd2l0aCBBUkVTX09QVF9TRVJWRVJTIHNldCBzaW11bHRhbmVvdXNseSBpbgorICAgICAgICAgICAqIHRoZSBvcHRpb25zIG1hc2ssIHJlc3VsdHMgaW4gYW4gaW5pdGlhbGl6YXRpb24gd2l0aCBubyBzZXJ2ZXJzLgorICAgICAgICAgICAqIFdoZW4gYWx0ZXJuYXRpdmUgbmFtZSBzZXJ2ZXJzIGhhdmUgYmVlbiBzcGVjaWZpZWQgdGhlc2UgYXJlIHNldAorICAgICAgICAgICAqIGxhdGVyIGNhbGxpbmcgYXJlc19zZXRfc2VydmVycygpIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIHNlcnZlcgorICAgICAgICAgICAqIGNvbmZpZ3VyYXRpb24uIFRvIHByZXZlbnQgaW5pdGlhbCBjb25maWd1cmF0aW9uIHdpdGggZGVmYXVsdAorICAgICAgICAgICAqIHNlcnZlcnMgdGhhdCB3aWxsIGJlIGRpc2NhcmRlZCBsYXRlciwgQVJFU19PUFRfU0VSVkVSUyBpcyBzZXQuCisgICAgICAgICAgICogSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQgaGVyZSB0aGUgcmVzdWx0IHNoYWxsIGJlIHRoZSBzYW1lIGJ1dAorICAgICAgICAgICAqIGFyZXNfaW5pdF9vcHRpb25zKCkgd2lsbCBkbyBuZWVkbGVzcyB3b3JrLiAqLworICAgICAgICAgIG9wdG1hc2sgfD0gQVJFU19PUFRfU0VSVkVSUzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAvKiBTZXQgdGhlIHF1ZXJ5IGNsYXNzLiAqLworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuY2xhc3NlczsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChjbGFzc2VzW2ldLm5hbWUsIG9wdGFyZykgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoaSA8IG5jbGFzc2VzKQorICAgICAgICAgICAgZG5zY2xhc3MgPSBjbGFzc2VzW2ldLnZhbHVlOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgLyogU2V0IHRoZSBxdWVyeSB0eXBlLiAqLworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodHlwZXNbaV0ubmFtZSwgb3B0YXJnKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChpIDwgbnR5cGVzKQorICAgICAgICAgICAgdHlwZSA9IHR5cGVzW2ldLnZhbHVlOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAgLyogU2V0IHRoZSBUQ1AgcG9ydCBudW1iZXIuICovCisgICAgICAgICAgaWYgKCFJU0RJR0lUKCpvcHRhcmcpKQorICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICBvcHRpb25zLnRjcF9wb3J0ID0gKHVuc2lnbmVkIHNob3J0KXN0cnRvbChvcHRhcmcsIE5VTEwsIDApOworICAgICAgICAgIG9wdG1hc2sgfD0gQVJFU19PUFRfVENQX1BPUlQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnVSc6CisgICAgICAgICAgLyogU2V0IHRoZSBVRFAgcG9ydCBudW1iZXIuICovCisgICAgICAgICAgaWYgKCFJU0RJR0lUKCpvcHRhcmcpKQorICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICBvcHRpb25zLnVkcF9wb3J0ID0gKHVuc2lnbmVkIHNob3J0KXN0cnRvbChvcHRhcmcsIE5VTEwsIDApOworICAgICAgICAgIG9wdG1hc2sgfD0gQVJFU19PUFRfVURQX1BPUlQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgIGFyZ2MgLT0gb3B0aW5kOworICBhcmd2ICs9IG9wdGluZDsKKyAgaWYgKGFyZ2MgPT0gMCkKKyAgICB1c2FnZSgpOworCisgIHN0YXR1cyA9IGFyZXNfaW5pdF9vcHRpb25zKCZjaGFubmVsLCAmb3B0aW9ucywgb3B0bWFzaywgYXJlc19kZXYpOworCisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiYXJlc19pbml0X29wdGlvbnM6ICVzXG4iLAorICAgICAgICAgICAgICBhcmVzX3N0cmVycm9yKHN0YXR1cykpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIGlmKHNlcnZlcnMpCisgICAgeworICAgICAgc3RhdHVzID0gYXJlc19zZXRfc2VydmVycyhjaGFubmVsLCBzZXJ2ZXJzKTsKKyAgICAgIGRlc3Ryb3lfYWRkcl9saXN0KHNlcnZlcnMpOworICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFyZXNfaW5pdF9vcHRpb25zOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogSW5pdGlhdGUgdGhlIHF1ZXJpZXMsIG9uZSBwZXIgY29tbWFuZC1saW5lIGFyZ3VtZW50LiAgSWYgdGhlcmUgaXMKKyAgICogb25seSBvbmUgcXVlcnkgdG8gZG8sIHN1cHBseSBOVUxMIGFzIHRoZSBjYWxsYmFjayBhcmd1bWVudDsKKyAgICogb3RoZXJ3aXNlLCBzdXBwbHkgdGhlIHF1ZXJ5IG5hbWUgYXMgYW4gYXJndW1lbnQgc28gd2UgY2FuCisgICAqIGRpc3Rpbmd1aXNoIHJlc3BvbnNlcyBmb3IgdGhlIHVzZXIgd2hlbiBwcmludGluZyB0aGVtIG91dC4KKyAgICovCisgIGlmIChhcmdjID09IDEpCisgICAgYXJlc19xdWVyeShjaGFubmVsLCAqYXJndiwgZG5zY2xhc3MsIHR5cGUsIGNhbGxiYWNrLCAoY2hhciAqKSBOVUxMKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoOyAqYXJndjsgYXJndisrKQorICAgICAgICBhcmVzX3F1ZXJ5KGNoYW5uZWwsICphcmd2LCBkbnNjbGFzcywgdHlwZSwgY2FsbGJhY2ssICphcmd2KTsKKyAgICB9CisKKyAgLyogV2FpdCBmb3IgYWxsIHF1ZXJpZXMgdG8gY29tcGxldGUuICovCisgIGZvciAoOzspCisgICAgeworICAgICAgRkRfWkVSTygmcmVhZF9mZHMpOworICAgICAgRkRfWkVSTygmd3JpdGVfZmRzKTsKKyAgICAgIG5mZHMgPSBhcmVzX2ZkcyhjaGFubmVsLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMpOworICAgICAgaWYgKG5mZHMgPT0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgICB0dnAgPSBhcmVzX3RpbWVvdXQoY2hhbm5lbCwgTlVMTCwgJnR2KTsKKyAgICAgIGNvdW50ID0gc2VsZWN0KG5mZHMsICZyZWFkX2ZkcywgJndyaXRlX2ZkcywgTlVMTCwgdHZwKTsKKyAgICAgIGlmIChjb3VudCA8IDAgJiYgKHN0YXR1cyA9IFNPQ0tFUlJOTykgIT0gRUlOVkFMKQorICAgICAgICB7CisgICAgICAgICAgcHJpbnRmKCJzZWxlY3QgZmFpbDogJWQiLCBzdGF0dXMpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICBhcmVzX3Byb2Nlc3MoY2hhbm5lbCwgJnJlYWRfZmRzLCAmd3JpdGVfZmRzKTsKKyAgICB9CisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworCisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCk7CisKKyNpZmRlZiBVU0VfV0lOU09DSworICBXU0FDbGVhbnVwKCk7CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbikKK3sKKyAgY2hhciAqbmFtZSA9IChjaGFyICopIGFyZzsKKyAgaW50IGlkLCBxciwgb3Bjb2RlLCBhYSwgdGMsIHJkLCByYSwgcmNvZGU7CisgIHVuc2lnbmVkIGludCBxZGNvdW50LCBhbmNvdW50LCBuc2NvdW50LCBhcmNvdW50LCBpOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyOworCisgICh2b2lkKSB0aW1lb3V0czsKKworICAvKiBEaXNwbGF5IHRoZSBxdWVyeSBuYW1lIGlmIGdpdmVuLiAqLworICBpZiAobmFtZSkKKyAgICBwcmludGYoIkFuc3dlciBmb3IgcXVlcnkgJXM6XG4iLCBuYW1lKTsKKworICAvKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlcmUgd2FzIGFuIGVycm9yLCBidXQgb25seSBzdG9wIGlmCisgICAqIHdlIGFjdHVhbGx5IGRpZG4ndCBnZXQgYW4gYW5zd2VyIGJ1ZmZlci4KKyAgICovCisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIHByaW50ZigiJXNcbiIsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CisgICAgICBpZiAoIWFidWYpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogV29uJ3QgaGFwcGVuLCBidXQgY2hlY2sgYW55d2F5LCBmb3Igc2FmZXR5LiAqLworICBpZiAoYWxlbiA8IEhGSVhFRFNaKQorICAgIHJldHVybjsKKworICAvKiBQYXJzZSB0aGUgYW5zd2VyIGhlYWRlci4gKi8KKyAgaWQgPSBETlNfSEVBREVSX1FJRChhYnVmKTsKKyAgcXIgPSBETlNfSEVBREVSX1FSKGFidWYpOworICBvcGNvZGUgPSBETlNfSEVBREVSX09QQ09ERShhYnVmKTsKKyAgYWEgPSBETlNfSEVBREVSX0FBKGFidWYpOworICB0YyA9IEROU19IRUFERVJfVEMoYWJ1Zik7CisgIHJkID0gRE5TX0hFQURFUl9SRChhYnVmKTsKKyAgcmEgPSBETlNfSEVBREVSX1JBKGFidWYpOworICByY29kZSA9IEROU19IRUFERVJfUkNPREUoYWJ1Zik7CisgIHFkY291bnQgPSBETlNfSEVBREVSX1FEQ09VTlQoYWJ1Zik7CisgIGFuY291bnQgPSBETlNfSEVBREVSX0FOQ09VTlQoYWJ1Zik7CisgIG5zY291bnQgPSBETlNfSEVBREVSX05TQ09VTlQoYWJ1Zik7CisgIGFyY291bnQgPSBETlNfSEVBREVSX0FSQ09VTlQoYWJ1Zik7CisKKyAgLyogRGlzcGxheSB0aGUgYW5zd2VyIGhlYWRlci4gKi8KKyAgcHJpbnRmKCJpZDogJWRcbiIsIGlkKTsKKyAgcHJpbnRmKCJmbGFnczogJXMlcyVzJXMlc1xuIiwKKyAgICAgICAgIHFyID8gInFyICIgOiAiIiwKKyAgICAgICAgIGFhID8gImFhICIgOiAiIiwKKyAgICAgICAgIHRjID8gInRjICIgOiAiIiwKKyAgICAgICAgIHJkID8gInJkICIgOiAiIiwKKyAgICAgICAgIHJhID8gInJhICIgOiAiIik7CisgIHByaW50Zigib3Bjb2RlOiAlc1xuIiwgb3Bjb2Rlc1tvcGNvZGVdKTsKKyAgcHJpbnRmKCJyY29kZTogJXNcbiIsIHJjb2Rlc1tyY29kZV0pOworCisgIC8qIERpc3BsYXkgdGhlIHF1ZXN0aW9ucy4gKi8KKyAgcHJpbnRmKCJRdWVzdGlvbnM6XG4iKTsKKyAgYXB0ciA9IGFidWYgKyBIRklYRURTWjsKKyAgZm9yIChpID0gMDsgaSA8IHFkY291bnQ7IGkrKykKKyAgICB7CisgICAgICBhcHRyID0gZGlzcGxheV9xdWVzdGlvbihhcHRyLCBhYnVmLCBhbGVuKTsKKyAgICAgIGlmIChhcHRyID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogRGlzcGxheSB0aGUgYW5zd2Vycy4gKi8KKyAgcHJpbnRmKCJBbnN3ZXJzOlxuIik7CisgIGZvciAoaSA9IDA7IGkgPCBhbmNvdW50OyBpKyspCisgICAgeworICAgICAgYXB0ciA9IGRpc3BsYXlfcnIoYXB0ciwgYWJ1ZiwgYWxlbik7CisgICAgICBpZiAoYXB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIERpc3BsYXkgdGhlIE5TIHJlY29yZHMuICovCisgIHByaW50ZigiTlMgcmVjb3JkczpcbiIpOworICBmb3IgKGkgPSAwOyBpIDwgbnNjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGFwdHIgPSBkaXNwbGF5X3JyKGFwdHIsIGFidWYsIGFsZW4pOworICAgICAgaWYgKGFwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBEaXNwbGF5IHRoZSBhZGRpdGlvbmFsIHJlY29yZHMuICovCisgIHByaW50ZigiQWRkaXRpb25hbCByZWNvcmRzOlxuIik7CisgIGZvciAoaSA9IDA7IGkgPCBhcmNvdW50OyBpKyspCisgICAgeworICAgICAgYXB0ciA9IGRpc3BsYXlfcnIoYXB0ciwgYWJ1ZiwgYWxlbik7CisgICAgICBpZiAoYXB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqZGlzcGxheV9xdWVzdGlvbihjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuKQoreworICBjaGFyICpuYW1lOworICBpbnQgdHlwZSwgZG5zY2xhc3MsIHN0YXR1czsKKyAgbG9uZyBsZW47CisKKyAgLyogUGFyc2UgdGhlIHF1ZXN0aW9uIG5hbWUuICovCisgIHN0YXR1cyA9IGFyZXNfZXhwYW5kX25hbWUoYXB0ciwgYWJ1ZiwgYWxlbiwgJm5hbWUsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXR1cm4gTlVMTDsKKyAgYXB0ciArPSBsZW47CisKKyAgLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgYWZ0ZXIgdGhlIG5hbWUgZm9yIHRoZSBmaXhlZCBwYXJ0CisgICAqIG9mIHRoZSBxdWVzdGlvbi4KKyAgICovCisgIGlmIChhcHRyICsgUUZJWEVEU1ogPiBhYnVmICsgYWxlbikKKyAgICB7CisgICAgICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIC8qIFBhcnNlIHRoZSBxdWVzdGlvbiB0eXBlIGFuZCBjbGFzcy4gKi8KKyAgdHlwZSA9IEROU19RVUVTVElPTl9UWVBFKGFwdHIpOworICBkbnNjbGFzcyA9IEROU19RVUVTVElPTl9DTEFTUyhhcHRyKTsKKyAgYXB0ciArPSBRRklYRURTWjsKKworICAvKiBEaXNwbGF5IHRoZSBxdWVzdGlvbiwgaW4gYSBmb3JtYXQgc29ydCBvZiBzaW1pbGFyIHRvIGhvdyB3ZSB3aWxsCisgICAqIGRpc3BsYXkgUlJzLgorICAgKi8KKyAgcHJpbnRmKCJcdCUtMTVzLlx0IiwgbmFtZSk7CisgIGlmIChkbnNjbGFzcyAhPSBDX0lOKQorICAgIHByaW50ZigiXHQlcyIsIGNsYXNzX25hbWUoZG5zY2xhc3MpKTsKKyAgcHJpbnRmKCJcdCVzXG4iLCB0eXBlX25hbWUodHlwZSkpOworICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUpOworICByZXR1cm4gYXB0cjsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRpc3BsYXlfcnIoY29uc3QgdW5zaWduZWQgY2hhciAqYXB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgdHlwZSwgZG5zY2xhc3MsIHR0bCwgZGxlbiwgc3RhdHVzOworICBsb25nIGxlbjsKKyAgY2hhciBhZGRyWzQ2XTsKKyAgdW5pb24geworICAgIHVuc2lnbmVkIGNoYXIgKiBhc191Y2hhcjsKKyAgICAgICAgICAgICBjaGFyICogYXNfY2hhcjsKKyAgfSBuYW1lOworCisgIC8qIFBhcnNlIHRoZSBSUiBuYW1lLiAqLworICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9uYW1lKGFwdHIsIGFidWYsIGFsZW4sICZuYW1lLmFzX2NoYXIsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXR1cm4gTlVMTDsKKyAgYXB0ciArPSBsZW47CisKKyAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBkYXRhIGFmdGVyIHRoZSBSUiBuYW1lIGZvciB0aGUgZml4ZWQKKyAgICogcGFydCBvZiB0aGUgUlIuCisgICAqLworICBpZiAoYXB0ciArIFJSRklYRURTWiA+IGFidWYgKyBhbGVuKQorICAgIHsKKyAgICAgIGFyZXNfZnJlZV9zdHJpbmcobmFtZS5hc19jaGFyKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAvKiBQYXJzZSB0aGUgZml4ZWQgcGFydCBvZiB0aGUgUlIsIGFuZCBhZHZhbmNlIHRvIHRoZSBSUiBkYXRhCisgICAqIGZpZWxkLiAqLworICB0eXBlID0gRE5TX1JSX1RZUEUoYXB0cik7CisgIGRuc2NsYXNzID0gRE5TX1JSX0NMQVNTKGFwdHIpOworICB0dGwgPSBETlNfUlJfVFRMKGFwdHIpOworICBkbGVuID0gRE5TX1JSX0xFTihhcHRyKTsKKyAgYXB0ciArPSBSUkZJWEVEU1o7CisgIGlmIChhcHRyICsgZGxlbiA+IGFidWYgKyBhbGVuKQorICAgIHsKKyAgICAgIGFyZXNfZnJlZV9zdHJpbmcobmFtZS5hc19jaGFyKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAvKiBEaXNwbGF5IHRoZSBSUiBuYW1lLCBjbGFzcywgYW5kIHR5cGUuICovCisgIHByaW50ZigiXHQlLTE1cy5cdCVkIiwgbmFtZS5hc19jaGFyLCB0dGwpOworICBpZiAoZG5zY2xhc3MgIT0gQ19JTikKKyAgICBwcmludGYoIlx0JXMiLCBjbGFzc19uYW1lKGRuc2NsYXNzKSk7CisgIHByaW50ZigiXHQlcyIsIHR5cGVfbmFtZSh0eXBlKSk7CisgIGFyZXNfZnJlZV9zdHJpbmcobmFtZS5hc19jaGFyKTsKKworICAvKiBEaXNwbGF5IHRoZSBSUiBkYXRhLiAgRG9uJ3QgdG91Y2ggYXB0ci4gKi8KKyAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICBjYXNlIFRfQ05BTUU6CisgICAgY2FzZSBUX01COgorICAgIGNhc2UgVF9NRDoKKyAgICBjYXNlIFRfTUY6CisgICAgY2FzZSBUX01HOgorICAgIGNhc2UgVF9NUjoKKyAgICBjYXNlIFRfTlM6CisgICAgY2FzZSBUX1BUUjoKKyAgICAgIC8qIEZvciB0aGVzZSB0eXBlcywgdGhlIFJSIGRhdGEgaXMganVzdCBhIGRvbWFpbiBuYW1lLiAqLworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZShhcHRyLCBhYnVmLCBhbGVuLCAmbmFtZS5hc19jaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHQlcy4iLCBuYW1lLmFzX2NoYXIpOworICAgICAgYXJlc19mcmVlX3N0cmluZyhuYW1lLmFzX2NoYXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRfSElORk86CisgICAgICAvKiBUaGUgUlIgZGF0YSBpcyB0d28gbGVuZ3RoLWNvdW50ZWQgY2hhcmFjdGVyIHN0cmluZ3MuICovCisgICAgICBwID0gYXB0cjsKKyAgICAgIGxlbiA9ICpwOworICAgICAgaWYgKHAgKyBsZW4gKyAxID4gYXB0ciArIGRsZW4pCisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHAsIGFidWYsIGFsZW4sICZuYW1lLmFzX3VjaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHQlcyIsIG5hbWUuYXNfY2hhcik7CisgICAgICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUuYXNfY2hhcik7CisgICAgICBwICs9IGxlbjsKKyAgICAgIGxlbiA9ICpwOworICAgICAgaWYgKHAgKyBsZW4gKyAxID4gYXB0ciArIGRsZW4pCisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHAsIGFidWYsIGFsZW4sICZuYW1lLmFzX3VjaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHQlcyIsIG5hbWUuYXNfY2hhcik7CisgICAgICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUuYXNfY2hhcik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVF9NSU5GTzoKKyAgICAgIC8qIFRoZSBSUiBkYXRhIGlzIHR3byBkb21haW4gbmFtZXMuICovCisgICAgICBwID0gYXB0cjsKKyAgICAgIHN0YXR1cyA9IGFyZXNfZXhwYW5kX25hbWUocCwgYWJ1ZiwgYWxlbiwgJm5hbWUuYXNfY2hhciwgJmxlbik7CisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBwcmludGYoIlx0JXMuIiwgbmFtZS5hc19jaGFyKTsKKyAgICAgIGFyZXNfZnJlZV9zdHJpbmcobmFtZS5hc19jaGFyKTsKKyAgICAgIHAgKz0gbGVuOworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZShwLCBhYnVmLCBhbGVuLCAmbmFtZS5hc19jaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHQlcy4iLCBuYW1lLmFzX2NoYXIpOworICAgICAgYXJlc19mcmVlX3N0cmluZyhuYW1lLmFzX2NoYXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRfTVg6CisgICAgICAvKiBUaGUgUlIgZGF0YSBpcyB0d28gYnl0ZXMgZ2l2aW5nIGEgcHJlZmVyZW5jZSBvcmRlcmluZywgYW5kCisgICAgICAgKiB0aGVuIGEgZG9tYWluIG5hbWUuCisgICAgICAgKi8KKyAgICAgIGlmIChkbGVuIDwgMikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBwcmludGYoIlx0JWQiLCAoaW50KUROU19fMTZCSVQoYXB0cikpOworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZShhcHRyICsgMiwgYWJ1ZiwgYWxlbiwgJm5hbWUuYXNfY2hhciwgJmxlbik7CisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBwcmludGYoIlx0JXMuIiwgbmFtZS5hc19jaGFyKTsKKyAgICAgIGFyZXNfZnJlZV9zdHJpbmcobmFtZS5hc19jaGFyKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUX1NPQToKKyAgICAgIC8qIFRoZSBSUiBkYXRhIGlzIHR3byBkb21haW4gbmFtZXMgYW5kIHRoZW4gZml2ZSBmb3VyLWJ5dGUKKyAgICAgICAqIG51bWJlcnMgZ2l2aW5nIHRoZSBzZXJpYWwgbnVtYmVyIGFuZCBzb21lIHRpbWVvdXRzLgorICAgICAgICovCisgICAgICBwID0gYXB0cjsKKyAgICAgIHN0YXR1cyA9IGFyZXNfZXhwYW5kX25hbWUocCwgYWJ1ZiwgYWxlbiwgJm5hbWUuYXNfY2hhciwgJmxlbik7CisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBwcmludGYoIlx0JXMuXG4iLCBuYW1lLmFzX2NoYXIpOworICAgICAgYXJlc19mcmVlX3N0cmluZyhuYW1lLmFzX2NoYXIpOworICAgICAgcCArPSBsZW47CisgICAgICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9uYW1lKHAsIGFidWYsIGFsZW4sICZuYW1lLmFzX2NoYXIsICZsZW4pOworICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgcHJpbnRmKCJcdFx0XHRcdFx0XHQlcy5cbiIsIG5hbWUuYXNfY2hhcik7CisgICAgICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUuYXNfY2hhcik7CisgICAgICBwICs9IGxlbjsKKyAgICAgIGlmIChwICsgMjAgPiBhcHRyICsgZGxlbikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBwcmludGYoIlx0XHRcdFx0XHRcdCggJXUgJXUgJXUgJXUgJXUgKSIsCisgICAgICAgICAgICAgRE5TX18zMkJJVChwKSwgRE5TX18zMkJJVChwKzQpLAorICAgICAgICAgICAgIEROU19fMzJCSVQocCs4KSwgRE5TX18zMkJJVChwKzEyKSwKKyAgICAgICAgICAgICBETlNfXzMyQklUKHArMTYpKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUX1RYVDoKKyAgICAgIC8qIFRoZSBSUiBkYXRhIGlzIG9uZSBvciBtb3JlIGxlbmd0aC1jb3VudGVkIGNoYXJhY3RlcgorICAgICAgICogc3RyaW5ncy4gKi8KKyAgICAgIHAgPSBhcHRyOworICAgICAgd2hpbGUgKHAgPCBhcHRyICsgZGxlbikKKyAgICAgICAgeworICAgICAgICAgIGxlbiA9ICpwOworICAgICAgICAgIGlmIChwICsgbGVuICsgMSA+IGFwdHIgKyBkbGVuKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHAsIGFidWYsIGFsZW4sICZuYW1lLmFzX3VjaGFyLCAmbGVuKTsKKyAgICAgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgIHByaW50ZigiXHQlcyIsIG5hbWUuYXNfY2hhcik7CisgICAgICAgICAgYXJlc19mcmVlX3N0cmluZyhuYW1lLmFzX2NoYXIpOworICAgICAgICAgIHAgKz0gbGVuOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgVF9BOgorICAgICAgLyogVGhlIFJSIGRhdGEgaXMgYSBmb3VyLWJ5dGUgSW50ZXJuZXQgYWRkcmVzcy4gKi8KKyAgICAgIGlmIChkbGVuICE9IDQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgcHJpbnRmKCJcdCVzIiwgYXJlc19pbmV0X250b3AoQUZfSU5FVCxhcHRyLGFkZHIsc2l6ZW9mKGFkZHIpKSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVF9BQUFBOgorICAgICAgLyogVGhlIFJSIGRhdGEgaXMgYSAxNi1ieXRlIElQdjYgYWRkcmVzcy4gKi8KKyAgICAgIGlmIChkbGVuICE9IDE2KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHQlcyIsIGFyZXNfaW5ldF9udG9wKEFGX0lORVQ2LGFwdHIsYWRkcixzaXplb2YoYWRkcikpKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUX1dLUzoKKyAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUX1NSVjoKKyAgICAgIC8qIFRoZSBSUiBkYXRhIGlzIHRocmVlIHR3by1ieXRlIG51bWJlcnMgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICogcHJpb3JpdHksIHdlaWdodCwgYW5kIHBvcnQsIGZvbGxvd2VkIGJ5IGEgZG9tYWluIG5hbWUuCisgICAgICAgKi8KKworICAgICAgcHJpbnRmKCJcdCVkIiwgKGludClETlNfXzE2QklUKGFwdHIpKTsKKyAgICAgIHByaW50ZigiICVkIiwgKGludClETlNfXzE2QklUKGFwdHIgKyAyKSk7CisgICAgICBwcmludGYoIiAlZCIsIChpbnQpRE5TX18xNkJJVChhcHRyICsgNCkpOworCisgICAgICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9uYW1lKGFwdHIgKyA2LCBhYnVmLCBhbGVuLCAmbmFtZS5hc19jaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHQlcy4iLCBuYW1lLmFzX2NoYXIpOworICAgICAgYXJlc19mcmVlX3N0cmluZyhuYW1lLmFzX2NoYXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRfTkFQVFI6CisKKyAgICAgIHByaW50ZigiXHQlZCIsIChpbnQpRE5TX18xNkJJVChhcHRyKSk7IC8qIG9yZGVyICovCisgICAgICBwcmludGYoIiAlZFxuIiwgKGludClETlNfXzE2QklUKGFwdHIgKyAyKSk7IC8qIHByZWZlcmVuY2UgKi8KKworICAgICAgcCA9IGFwdHIgKyA0OworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHAsIGFidWYsIGFsZW4sICZuYW1lLmFzX3VjaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHRcdFx0XHRcdFx0JXNcbiIsIG5hbWUuYXNfY2hhcik7CisgICAgICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUuYXNfY2hhcik7CisgICAgICBwICs9IGxlbjsKKworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHAsIGFidWYsIGFsZW4sICZuYW1lLmFzX3VjaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHRcdFx0XHRcdFx0JXNcbiIsIG5hbWUuYXNfY2hhcik7CisgICAgICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUuYXNfY2hhcik7CisgICAgICBwICs9IGxlbjsKKworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHAsIGFidWYsIGFsZW4sICZuYW1lLmFzX3VjaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHRcdFx0XHRcdFx0JXNcbiIsIG5hbWUuYXNfY2hhcik7CisgICAgICBhcmVzX2ZyZWVfc3RyaW5nKG5hbWUuYXNfY2hhcik7CisgICAgICBwICs9IGxlbjsKKworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZShwLCBhYnVmLCBhbGVuLCAmbmFtZS5hc19jaGFyLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHByaW50ZigiXHRcdFx0XHRcdFx0JXMiLCBuYW1lLmFzX2NoYXIpOworICAgICAgYXJlc19mcmVlX3N0cmluZyhuYW1lLmFzX2NoYXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRfRFM6CisgICAgY2FzZSBUX1NTSEZQOgorICAgIGNhc2UgVF9SUlNJRzoKKyAgICBjYXNlIFRfTlNFQzoKKyAgICBjYXNlIFRfRE5TS0VZOgorICAgICAgcHJpbnRmKCJcdFtSUiB0eXBlIHBhcnNpbmcgdW5hdmFpbGFibGVdIik7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBwcmludGYoIlx0W1Vua25vd24gUlI7IGNhbm5vdCBwYXJzZV0iKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcHJpbnRmKCJcbiIpOworCisgIHJldHVybiBhcHRyICsgZGxlbjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnR5cGVfbmFtZShpbnQgdHlwZSkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorICAgIHsKKyAgICAgIGlmICh0eXBlc1tpXS52YWx1ZSA9PSB0eXBlKQorICAgICAgICByZXR1cm4gdHlwZXNbaV0ubmFtZTsKKyAgICB9CisgIHJldHVybiAiKHVua25vd24pIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUoaW50IGRuc2NsYXNzKQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbmNsYXNzZXM7IGkrKykKKyAgICB7CisgICAgICBpZiAoY2xhc3Nlc1tpXS52YWx1ZSA9PSBkbnNjbGFzcykKKyAgICAgICAgcmV0dXJuIGNsYXNzZXNbaV0ubmFtZTsKKyAgICB9CisgIHJldHVybiAiKHVua25vd24pIjsKK30KKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogYWRpZyBbLWYgZmxhZ10gWy1zIHNlcnZlcl0gWy1jIGNsYXNzXSAiCisgICAgICAgICAgIlstdCB0eXBlXSBbLXAgcG9ydF0gbmFtZSAuLi5cbiIpOworICBleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2FkZHJfbGlzdChzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKmhlYWQpCit7CisgIHdoaWxlKGhlYWQpCisgICAgeworICAgICAgc3RydWN0IGFyZXNfYWRkcl9ub2RlICpkZXRhY2hlZCA9IGhlYWQ7CisgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKKyAgICAgIGZyZWUoZGV0YWNoZWQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYXBwZW5kX2FkZHJfbGlzdChzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKm5vZGUpCit7CisgIHN0cnVjdCBhcmVzX2FkZHJfbm9kZSAqbGFzdDsKKyAgbm9kZS0+bmV4dCA9IE5VTEw7CisgIGlmKCpoZWFkKQorICAgIHsKKyAgICAgIGxhc3QgPSAqaGVhZDsKKyAgICAgIHdoaWxlKGxhc3QtPm5leHQpCisgICAgICAgIGxhc3QgPSBsYXN0LT5uZXh0OworICAgICAgbGFzdC0+bmV4dCA9IG5vZGU7CisgICAgfQorICBlbHNlCisgICAgKmhlYWQgPSBub2RlOworfQorCitpbnQgY29tcGF0X2dldGhvc3RieW5hbWUyKGNvbnN0IGNoYXIgKm5hbWUgLGNvbnN0IGNoYXIgKmRldl9uYW1lLCBpbnQgZmFtaWx5KQoreworICAgIGFyZXNfY2hhbm5lbCBjaGFubmVsOworICAgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0aW9uczsKKyAgICBpbnQgb3B0bWFzayA9IEFSRVNfT1BUX0ZMQUdTLCBkbnNjbGFzcyA9IENfSU4sIHR5cGUgPSBUX0E7CisgICAgZmRfc2V0IHJlYWRfZmRzLCB3cml0ZV9mZHM7CisgICAgaW50IHN0YXR1cywgbmZkcywgY291bnQ7CisgICAgc3RydWN0IHRpbWV2YWwgKnR2cCwgdHY7CisgICAgCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgICBXT1JEIHdWZXJzaW9uUmVxdWVzdGVkID0gTUFLRVdPUkQoVVNFX1dJTlNPQ0ssVVNFX1dJTlNPQ0spOworICAgIFdTQURBVEEgd3NhRGF0YTsKKyAgICBXU0FTdGFydHVwKHdWZXJzaW9uUmVxdWVzdGVkLCAmd3NhRGF0YSk7CisjZW5kaWYKKyAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHR5cGUgPSBUX0E7CisgICAgZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICB0eXBlID0gVF9BQUFBOworICAgIG9wdGlvbnMuZmxhZ3MgPSBBUkVTX0ZMQUdfTk9DSEVDS1JFU1A7CisgICAgb3B0aW9ucy5zZXJ2ZXJzID0gTlVMTDsKKyAgICBvcHRpb25zLm5zZXJ2ZXJzID0gMDsKKyAgICBzdGF0dXMgPSBhcmVzX2luaXRfb3B0aW9ucygmY2hhbm5lbCwgJm9wdGlvbnMsIG9wdG1hc2ssIGRldl9uYW1lKTsKKyAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImFyZXNfaW5pdF9vcHRpb25zOiAlc1xuIiwKKyAgICAgICAgICAgICAgYXJlc19zdHJlcnJvcihzdGF0dXMpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBhcmVzX3F1ZXJ5KGNoYW5uZWwsIG5hbWUsIGRuc2NsYXNzLCB0eXBlLCBjYWxsYmFjaywgTlVMTCk7ICAvKiBXYWl0IGZvciBhbGwgcXVlcmllcyB0byBjb21wbGV0ZS4gKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgICAgRkRfWkVSTygmcmVhZF9mZHMpOworICAgICAgICBGRF9aRVJPKCZ3cml0ZV9mZHMpOworICAgICAgICBuZmRzID0gYXJlc19mZHMoY2hhbm5lbCwgJnJlYWRfZmRzLCAmd3JpdGVfZmRzKTsKKyAgICAgICAgaWYgKG5mZHMgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB0dnAgPSBhcmVzX3RpbWVvdXQoY2hhbm5lbCwgTlVMTCwgJnR2KTsKKyAgICAgICAgY291bnQgPSBzZWxlY3QobmZkcywgJnJlYWRfZmRzLCAmd3JpdGVfZmRzLCBOVUxMLCB0dnApOworICAgICAgICBpZiAoY291bnQgPCAwICYmIChzdGF0dXMgPSBTT0NLRVJSTk8pICE9IEVJTlZBTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJzZWxlY3QgZmFpbDogJWQiLCBzdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgYXJlc19wcm9jZXNzKGNoYW5uZWwsICZyZWFkX2ZkcywgJndyaXRlX2Zkcyk7CisgICAgfQorICAgIGFyZXNfZGVzdHJveShjaGFubmVsKTsKKyAgICBhcmVzX2xpYnJhcnlfY2xlYW51cCgpOworI2lmZGVmIFVTRV9XSU5TT0NLCisgIFdTQUNsZWFudXAoKTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KKworaW50IHNob3dvbmVfbWFyayA9IDA7CitzdHJ1Y3QgaG9zdGVudCBzaG93b25lOworCit2b2lkIGZyZWVfaG9zdGVudChzdHJ1Y3QgaG9zdGVudCogaG9zdCl7CisgICAgaWYoaG9zdCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgY2hhciAqKnBwdHI7CisgICAgaWYoaG9zdC0+aF9uYW1lKQorICAgICAgICBmcmVlKGhvc3QtPmhfbmFtZSk7CisgICAgaWYoaG9zdC0+aF9hbGlhc2VzKXsKKyAgICAgICAgZm9yKHBwdHIgPSBob3N0LT5oX2FsaWFzZXM7ICpwcHRyICE9IE5VTEw7IHBwdHIrKykKKyAgICAgICAgICAgIGZyZWUoKnBwdHIpOworICAgICAgICBmcmVlKGhvc3QtPmhfYWxpYXNlcyk7CisgICAgfQorICAgIGlmKGhvc3QtPmhfYWRkcl9saXN0KXsKKyAgICAgICAgZm9yKHBwdHIgPSBob3N0LT5oX2FkZHJfbGlzdDsgKnBwdHIgIT0gTlVMTDsgcHB0cisrKQorICAgICAgICAgICAgZnJlZSgqcHB0cik7CisgICAgICAgIGZyZWUoaG9zdC0+aF9hZGRyX2xpc3QpOworICAgIH0KKyAgICBob3N0LT5oX25hbWUgPSBOVUxMOworICAgIGhvc3QtPmhfYWxpYXNlcyA9IE5VTEw7CisgICAgaG9zdC0+aF9hZGRydHlwZSA9IDA7CisgICAgaG9zdC0+aF9sZW5ndGggPSAwOworICAgIGhvc3QtPmhfYWRkcl9saXN0ID0gTlVMTDsKK30KK3ZvaWQgZG5zX2NhbGxiYWNrICh2b2lkKiBhcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgc3RydWN0IGhvc3RlbnQqIGhvc3QpICAvL2FyZXMgILSmwO3N6rPJo6y3tbvYRE5TveLO9rXE0MXPogoreworICAgIGNoYXIgKnB0ciwgKipwcHRyOworICAgIGNoYXIgc3RyWzMwXTsKKyAgICBpbnQgbGVuID0gMDsKKyAgICBjaGFyICpob3N0bmFtZSA9IE5VTEw7CisgICAgY2hhciAqKmFsaWFzZXMgPSBOVUxMOworICAgIGNoYXIgKiphZGRyX2xpc3QgPSBOVUxMOworICAgIGludCBpID0gMDsKKyAgICBwcmludGYoImRuc19jYWxsYmFja1xuIik7CisgICAgaWYoc3RhdHVzID09IEFSRVNfU1VDQ0VTUyl7CisgICAgCisgICAgICAgIHNob3dvbmUuaF9hZGRydHlwZSA9IGhvc3QtPmhfYWRkcnR5cGU7CisgICAgICAgIHNob3dvbmUuaF9sZW5ndGggPSBob3N0LT5oX2xlbmd0aDsKKyAgICAgICAgaWYoc3RybGVuKGhvc3QtPmhfbmFtZSkpeworICAgICAgICAgICAgcHJpbnRmKCJob3N0LT5oX25hbWUgPSAlc1xuIiwgaG9zdC0+aF9uYW1lKTsKKyAgICAgICAgICAgIGhvc3RuYW1lID0gbWFsbG9jKHN0cmxlbihob3N0LT5oX25hbWUpICsgMSk7CisgICAgICAgICAgICBtZW1jcHkoaG9zdG5hbWUsIGhvc3QtPmhfbmFtZSwgc3RybGVuKGhvc3QtPmhfbmFtZSkpOworICAgICAgICAgICAgaG9zdG5hbWVbc3RybGVuKGhvc3QtPmhfbmFtZSldID0gJ1wwJzsKKyAgICAgICAgICAgIHNob3dvbmUuaF9uYW1lID0gaG9zdG5hbWU7CisgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgIHNob3dvbmUuaF9uYW1lID0gTlVMTDsKKyAgICAKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGZvcihwcHRyID0gaG9zdC0+aF9hbGlhc2VzOyAqcHB0ciAhPSBOVUxMOyBwcHRyKyspeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgICAgIGlmKGkgIT0gMCl7CisgICAgICAgICAgICBhbGlhc2VzID0gKGNoYXIgKiopbWFsbG9jKChpKzEpICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICBmb3IocHB0ciA9IGhvc3QtPmhfYWxpYXNlczsgKnBwdHIgIT0gTlVMTDsgcHB0cisrKXsKKyAgICAgICAgICAgICAgICBhbGlhc2VzW2ldID0gbWFsbG9jKHN0cmxlbigqcHB0cikgKyAxKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoYWxpYXNlc1tpXSwgKnBwdHIsIHN0cmxlbigqcHB0cikpOworICAgICAgICAgICAgICAgIGFsaWFzZXNbaV1bc3RybGVuKCpwcHRyKV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFsaWFzZXNbaV0gPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHNob3dvbmUuaF9hbGlhc2VzID0gYWxpYXNlczsKKworICAgICAgICBzd2l0Y2goaG9zdC0+aF9hZGRydHlwZSl7CisgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgZm9yKHBwdHIgPSBob3N0LT5oX2FkZHJfbGlzdDsgKnBwdHIgIT0gTlVMTDsgcHB0cisrKXsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgaW5ldF9udG9wKGhvc3QtPmhfYWRkcnR5cGUsICpwcHRyLCBzdHIsIHNpemVvZihzdHIpKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlx0IGFkZHJlc3M6ICVzICwgJWQsICV4XG4iLCBzdHIsIHN0cmxlbihzdHIpLCAqcHB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihpICE9IDApeworICAgICAgICAgICAgICAgIGFkZHJfbGlzdCA9IChjaGFyICoqKW1hbGxvYygoaSsxKSAqIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBmb3IocHB0ciA9IGhvc3QtPmhfYWRkcl9saXN0OyAqcHB0ciAhPSBOVUxMOyBwcHRyKyspeworICAgICAgICAgICAgICAgICAgICBhZGRyX2xpc3RbaV0gPSBtYWxsb2MoaG9zdC0+aF9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcl9saXN0W2ldLCAqcHB0ciwgaG9zdC0+aF9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZHJfbGlzdFtpXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaG93b25lLmhfYWRkcl9saXN0ID0gYWRkcl9saXN0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzaG93b25lX21hcmsgPSAyOworICAgIH0KKyAgICBlbHNleworICAgICAgICAvL3ByaW50ZigibG9va3VwIGZhaWxlZDogICVkXG4iLCBzdGF0dXMpOworICAgICAgICBzaG93b25lX21hcmsgPSAzOworICAgIH0KKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoguq/K/cP7s8ajuiBjb21wYXRfZ2V0aG9zdGJ5bmFtZTMKKyoguabE3MPoyvajuiDWuLaozfi/2r340NBkbnPH68fzCisqILLOyv3LtcP3o7og0/LD+6Oszfi/2sP7o6zQrdLp1+WjrLvYtfe6r8r9CisqILe1ILvYINa1o7ogcworKiDG5Mv8y7XD96O6ILLOyv1kZXax2NDrysfWuNXr1NltYWxsb2OjrGMtYXJlc7/izOG5qbXEvdO/2sTau+FmcmVlKGRldikKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGhvc3RlbnQgKmNvbXBhdF9nZXRob3N0YnluYW1lMyhjaGFyICpuYW1lLCBjaGFyICpkZXYsIGludCBmYW1pbHkpCit7CisgICAgYXJlc19jaGFubmVsIGNoYW5uZWw7CisgICAgaW50IG5mZHMsIGNvdW50OworICAgIGludCBzdGF0dXM7CisgICAgZmRfc2V0IHJlYWRlcnMsIHdyaXRlcnM7CisgICAgc3RydWN0IHRpbWV2YWwgKnR2cCwgdHY7CisgICAgc3RydWN0IGFyZXNfb3B0aW9ucyBvcHRpb25zOworICAgIGludCBvcHRtYXNrID0gQVJFU19PUFRfRkxBR1MsIGRuc2NsYXNzID0gQ19JTiwgdHlwZSA9IFRfQTsKKworICAgIGlmIChzdHJsZW4obmFtZSkgPT0gMCB8fCBzdHJsZW4oZGV2KSA9PSAwKSB7CisgICAgICAgIHByaW50ZigiXHRpbnZhbGlkIG5hbWUgIG9yIGRldiBcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb3B0aW9ucy5zZXJ2ZXJzID0gTlVMTDsKKyAgICBvcHRpb25zLm5zZXJ2ZXJzID0gMDsKKyAgICBzdGF0dXMgPSBhcmVzX2luaXRfb3B0aW9ucygmY2hhbm5lbCwgJm9wdGlvbnMsIG9wdG1hc2ssIGRldik7CisgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJhcmVzX2luaXRfb3B0aW9uczogJXNcbiIsCisgICAgICAgICAgICAgIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB3aGlsZShzaG93b25lX21hcmsgIT0gMCl7CisgICAgICAgIHNsZWVwKDEpOworICAgIH0KKyAgICBzaG93b25lX21hcmsgPSAxOworICAgIG1lbXNldCgmc2hvd29uZSwgMCwgc2l6ZW9mKHNob3dvbmUpKTsKKyAgICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbCwgbmFtZSwgZmFtaWx5LCBkbnNfY2FsbGJhY2ssIE5VTEwpOyAgLy+0q7XduPhjLWFyZXMgY2hhbm5hbCC6zSC72LX3CisgICAvLyBtYWluX2xvb3AoJmNoYW5uZWwpOyAgIC8v1vezzNDyysK8/tGtu7cKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBGRF9aRVJPKCZyZWFkZXJzKTsKKyAgICAgICAgRkRfWkVSTygmd3JpdGVycyk7CisgICAgICAgIG5mZHMgPSBhcmVzX2ZkcyhjaGFubmVsLCAmcmVhZGVycywgJndyaXRlcnMpOyAgIC8vu/HIoWFyZXMgY2hhbm5lbMq508O1xEZECisgICAgICAgIGlmIChuZmRzID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdHZwID0gYXJlc190aW1lb3V0KGNoYW5uZWwsIE5VTEwsICZ0dik7ICAgICAgIAorICAgICAgICBjb3VudCA9IHNlbGVjdChuZmRzLCAmcmVhZGVycywgJndyaXRlcnMsIE5VTEwsIHR2cCk7ICAgLy+9q2FyZXO1xFNPQ0tFVCBGRCC808jrysK8/tGtu7cKKyAgICAgICAgaWYgKGNvdW50IDwgMCAmJiAoc3RhdHVzID0gU09DS0VSUk5PKSAhPSBFSU5WQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50Zigic2VsZWN0IGZhaWw6ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIHNob3dvbmVfbWFyayA9IDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBhcmVzX3Byb2Nlc3MoY2hhbm5lbCwgJnJlYWRlcnMsICZ3cml0ZXJzKTsgIC8vINPQysK8/reiyfogvbvTyWFyZXMgtKbA7QorICAgIH0KKyAgICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgICAgYXJlc19saWJyYXJ5X2NsZWFudXAoKTsKKyAgICB3aGlsZShzaG93b25lX21hcmsgPT0gMSl7CisgICAgICAgIHNsZWVwKDEpOworICAgIH0KKyAgICBpZiAoc2hvd29uZV9tYXJrID09IDIpeworICAgICAgICBzaG93b25lX21hcmsgPSAwOworICAgICAgICByZXR1cm4gJnNob3dvbmU7CisgICAgfQorICAgIGlmKHNob3dvbmVfbWFyayA9PSAzKQorICAgIHsKKyAgICAgICAgc2hvd29uZV9tYXJrID0gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIHByaW50ZigiYWRpZyB1bmV4cGVjdCBlcnJvciBzaG93b25lX21hcmsgPSAlZFxuIiwgc2hvd29uZV9tYXJrKTsKKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2Fob3N0LjEgYi9hcC9hcHAvYy1hcmVzL3NyYy9haG9zdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4M2NmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9haG9zdC4xCkBAIC0wLDAgKzEsNTggQEAKKy5USCBBSE9TVCAiMSIgIkFwcmlsIDIwMTEiICJjLWFyZXMgdXRpbGl0aWVzIgorLlNIIE5BTUUKK2Fob3N0IFwtIHByaW50IHRoZSBBIG9yIEFBQUEgcmVjb3JkIGFzc29jaWF0ZWQgd2l0aCBhIGhvc3RuYW1lIG9yIElQIGFkZHJlc3MKKy5TSCBTWU5PUFNJUworLkIgYWhvc3QKK1tcZklPUFRJT05cZlJdLi4uIFxmSUhPU1RcZlIuLi4KKy5TSCBERVNDUklQVElPTgorLlBQCisuXCIgQWRkIGFueSBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGhlcmUKKy5QUAorTG9vayB1cCB0aGUgRE5TIEEgb3IgQUFBQSByZWNvcmQgYXNzb2NpYXRlZCB3aXRoIEhPU1QgKGEgaG9zdG5hbWUgb3IgYW4KK0lQIGFkZHJlc3MpLgorLlBQCitUaGlzIHV0aWxpdHkgY29tZXMgd2l0aCB0aGUgXGZCY1wtYXJlc1xmUiBhc3luY2hyb25vdXMgcmVzb2x2ZXIgbGlicmFyeS4KKy5TSCBPUFRJT05TCisuVFAKK1xmQlwtZFxmUgorUHJpbnQgc29tZSBleHRyYSBkZWJ1Z2dpbmcgb3V0cHV0LgorLlRQCitcZkJcLWhcZlIsIFxmQlwtXC1oZWxwXGZSCitEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKy5UUAorXGZCXC10XGZSIHR5cGUKK0lmIHR5cGUgaXMgImEiLCBwcmludCB0aGUgQSByZWNvcmQgKGRlZmF1bHQpLgorSWYgdHlwZSBpcyAiYWFhYSIsIHByaW50IHRoZSBBQUFBIHJlY29yZC4KK0lmIHR5cGUgaXMgInUiLCBsb29rIGZvciBlaXRoZXIgQUFBQSBvciBBIHJlY29yZCAoaW4gdGhhdCBvcmRlcikuCisuVFAKK1xmQlwtc1xmUiBcZklkb21haW5cZlAKK1NwZWNpZnkgdGhlIFxmSWRvbWFpblxmUCB0byBzZWFyY2ggaW5zdGVhZCBvZiB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbQorLmJyCisvZXRjL3Jlc29sdi5jb25mLiBUaGlzIG9wdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gcGxhdGZvcm1zIHRoYXQgdXNlCisuYnIKKy9ldGMvcmVzb2x2LmNvbmYKK2ZvciBETlMgY29uZmlndXJhdGlvbjsgaXQgaGFzIG5vIGVmZmVjdCBvbiBvdGhlciBwbGF0Zm9ybXMgKHN1Y2ggYXMgV2luMzIKK29yIEFuZHJvaWQpLgorLlNIICJSRVBPUlRJTkcgQlVHUyIKK1JlcG9ydCBidWdzIHRvIHRoZSBjLWFyZXMgbWFpbGluZyBsaXN0OgorXGZCaHR0cDovL2Nvb2wuaGF4eC5zZS9tYWlsbWFuL2xpc3RpbmZvL2MtYXJlc1xmUgorLlNIICJTRUUgQUxTTyIKKy5QUAorYWNvdW50cnkoMSksIGFkaWcoMSkuCisuU0ggQ09QWVJJR0hUCitUaGlzIHV0aWxpdHkgaXMgYmFzZWQgb24gY29kZS9pZGVhcyBjb250YWluZWQgaW4gc29md2FyZSB3cml0dGVuIGJ5IEdyZWcgSHVkc29uIChhcmVzKQorY2FycnlpbmcgdGhlIGZvbGxvd2luZyBub3RpY2U6CisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLmJyCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKK2JvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gTS5JLlQuIG1ha2VzIG5vCityZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5icgorTm8gZnVydGhlciBjb3B5cmlnaHQgY2xhaW1zIGFyZSBiZWluZyBtYWRlIGJ5IHRoZSBhdXRob3Iocykgb2YgdGhpcyB1dGlsaXR5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYWhvc3QuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2Fob3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExM2FjZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2Fob3N0LmMKQEAgLTAsMCArMSwyMTMgQEAKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWYgIWRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoV0FUVDMyKQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfZG5zLmgiCisjaW5jbHVkZSAiYXJlc19nZXRvcHQuaCIKKyNpbmNsdWRlICJhcmVzX2lwdjYuaCIKKyNpbmNsdWRlICJhcmVzX25vd2Fybi5oIgorCisjaWZuZGVmIEhBVkVfU1RSRFVQCisjICBpbmNsdWRlICJhcmVzX3N0cmR1cC5oIgorIyAgZGVmaW5lIHN0cmR1cChwdHIpIGFyZXNfc3RyZHVwKHB0cikKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSQ0FTRUNNUAorIyAgaW5jbHVkZSAiYXJlc19zdHJjYXNlY21wLmgiCisjICBkZWZpbmUgc3RyY2FzZWNtcChwMSxwMikgYXJlc19zdHJjYXNlY21wKHAxLHAyKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TVFJOQ0FTRUNNUAorIyAgaW5jbHVkZSAiYXJlc19zdHJjYXNlY21wLmgiCisjICBkZWZpbmUgc3RybmNhc2VjbXAocDEscDIsbikgYXJlc19zdHJuY2FzZWNtcChwMSxwMixuKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNhbGxiYWNrKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCk7CitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKTsKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0aW9uczsKKyAgaW50IG9wdG1hc2sgPSAwOworICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKKyAgaW50IHN0YXR1cywgbmZkcywgYywgYWRkcl9mYW1pbHkgPSBBRl9JTkVUOworICBmZF9zZXQgcmVhZF9mZHMsIHdyaXRlX2ZkczsKKyAgc3RydWN0IHRpbWV2YWwgKnR2cCwgdHY7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI0OworICBzdHJ1Y3QgYXJlc19pbjZfYWRkciBhZGRyNjsKKwljaGFyICphcmVzX2RldiA9IE5VTEw7CisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgV09SRCB3VmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKFVTRV9XSU5TT0NLLFVTRV9XSU5TT0NLKTsKKyAgV1NBREFUQSB3c2FEYXRhOworICBXU0FTdGFydHVwKHdWZXJzaW9uUmVxdWVzdGVkLCAmd3NhRGF0YSk7CisjZW5kaWYKKworICBtZW1zZXQoJm9wdGlvbnMsIDAsIHNpemVvZihvcHRpb25zKSk7CisKKyAgc3RhdHVzID0gYXJlc19saWJyYXJ5X2luaXQoQVJFU19MSUJfSU5JVF9OT05FKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJhcmVzX2xpYnJhcnlfaW5pdDogJXNcbiIsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgd2hpbGUgKChjID0gYXJlc19nZXRvcHQoYXJnYyxhcmd2LCJkdDpoczppOiIpKSAhPSAtMSkKKyAgICB7CisgICAgICBzd2l0Y2ggKGMpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAnZCc6CisjaWZkZWYgV0FUVDMyCisgICAgICAgICAgZGJ1Z19pbml0KCk7CisjZW5kaWYKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgb3B0bWFzayB8PSBBUkVTX09QVF9ET01BSU5TOworICAgICAgICAgIG9wdGlvbnMubmRvbWFpbnMrKzsKKyAgICAgICAgICBvcHRpb25zLmRvbWFpbnMgPSAoY2hhciAqKilyZWFsbG9jKG9wdGlvbnMuZG9tYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubmRvbWFpbnMgKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgICAgb3B0aW9ucy5kb21haW5zW29wdGlvbnMubmRvbWFpbnMgLSAxXSA9IHN0cmR1cChvcHRhcmcpOworICAgICAgICAgIGJyZWFrOworCQljYXNlICdpJzoKKyAgICAgICAgICAKKyAgICAgICAgICBhcmVzX2RldiA9IChjaGFyICogKXN0cmR1cChvcHRhcmcpOworCQkgIGZwcmludGYoc3RkZXJyLCAiYXJlc19kZXYgaXMgJXNcbiIsIGFyZXNfZGV2KTsKKyAgICAgICAgICBicmVhazsKKwkJY2FzZSAndCc6CisgICAgICAgICAgaWYgKCFzdHJjYXNlY21wKG9wdGFyZywiYSIpKQorICAgICAgICAgICAgYWRkcl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKG9wdGFyZywiYWFhYSIpKQorICAgICAgICAgICAgYWRkcl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChvcHRhcmcsInUiKSkKKyAgICAgICAgICAgIGFkZHJfZmFtaWx5ID0gQUZfVU5TUEVDOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgYXJnYyAtPSBvcHRpbmQ7CisgIGFyZ3YgKz0gb3B0aW5kOworICBpZiAoYXJnYyA8IDEpCisgICAgdXNhZ2UoKTsKKworICBzdGF0dXMgPSBhcmVzX2luaXRfb3B0aW9ucygmY2hhbm5lbCwgJm9wdGlvbnMsIG9wdG1hc2ssIGFyZXNfZGV2KTsKKyAgLy9mcHJpbnRmKHN0ZGVyciwgImFyZXNfaW5pdF9vcHRpb25zOiAlc1xuIiwgY2hhbm5lbC5sb2NhbF9kZXZfbmFtZSk7CisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiYXJlc19pbml0OiAlc1xuIiwgYXJlc19zdHJlcnJvcihzdGF0dXMpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAvKiBJbml0aWF0ZSB0aGUgcXVlcmllcywgb25lIHBlciBjb21tYW5kLWxpbmUgYXJndW1lbnQuICovCisgIGZvciAoIDsgKmFyZ3Y7IGFyZ3YrKykKKyAgICB7CisgICAgICBpZiAoYXJlc19pbmV0X3B0b24oQUZfSU5FVCwgKmFyZ3YsICZhZGRyNCkgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgIGFyZXNfZ2V0aG9zdGJ5YWRkcihjaGFubmVsLCAmYWRkcjQsIHNpemVvZihhZGRyNCksIEFGX0lORVQsIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJndik7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGFyZXNfaW5ldF9wdG9uKEFGX0lORVQ2LCAqYXJndiwgJmFkZHI2KSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19nZXRob3N0YnlhZGRyKGNoYW5uZWwsICZhZGRyNiwgc2l6ZW9mKGFkZHI2KSwgQUZfSU5FVDYsIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJndik7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsLCAqYXJndiwgYWRkcl9mYW1pbHksIGNhbGxiYWNrLCAqYXJndik7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogV2FpdCBmb3IgYWxsIHF1ZXJpZXMgdG8gY29tcGxldGUuICovCisgIGZvciAoOzspCisgICAgeworICAgICAgaW50IHJlczsKKyAgICAgIEZEX1pFUk8oJnJlYWRfZmRzKTsKKyAgICAgIEZEX1pFUk8oJndyaXRlX2Zkcyk7CisgICAgICBuZmRzID0gYXJlc19mZHMoY2hhbm5lbCwgJnJlYWRfZmRzLCAmd3JpdGVfZmRzKTsKKyAgICAgIGlmIChuZmRzID09IDApCisgICAgICAgIGJyZWFrOworICAgICAgdHZwID0gYXJlc190aW1lb3V0KGNoYW5uZWwsIE5VTEwsICZ0dik7CisgICAgICByZXMgPSBzZWxlY3QobmZkcywgJnJlYWRfZmRzLCAmd3JpdGVfZmRzLCBOVUxMLCB0dnApOworICAgICAgaWYgKC0xID09IHJlcykKKyAgICAgICAgYnJlYWs7CisgICAgICBhcmVzX3Byb2Nlc3MoY2hhbm5lbCwgJnJlYWRfZmRzLCAmd3JpdGVfZmRzKTsKKyAgICB9CisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworCisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCk7CisKKyNpZmRlZiBVU0VfV0lOU09DSworICBXU0FDbGVhbnVwKCk7CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsIHN0cnVjdCBob3N0ZW50ICpob3N0KQoreworICBjaGFyICoqcDsKKworICAodm9pZCl0aW1lb3V0czsKKworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgKGNoYXIgKikgYXJnLCBhcmVzX3N0cmVycm9yKHN0YXR1cykpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBmb3IgKHAgPSBob3N0LT5oX2FkZHJfbGlzdDsgKnA7IHArKykKKyAgICB7CisgICAgICBjaGFyIGFkZHJfYnVmWzQ2XSA9ICI/PyI7CisKKyAgICAgIGFyZXNfaW5ldF9udG9wKGhvc3QtPmhfYWRkcnR5cGUsICpwLCBhZGRyX2J1Ziwgc2l6ZW9mKGFkZHJfYnVmKSk7CisgICAgICBwcmludGYoIiUtMzJzXHQlcyIsIGhvc3QtPmhfbmFtZSwgYWRkcl9idWYpOworI2lmIDAKKyAgICAgIGlmIChob3N0LT5oX2FsaWFzZXNbMF0pCisgICAgICAgIHsKKyAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgcHJpbnRmICgiLCBBbGlhc2VzOiAiKTsKKyAgICAgICAgICAgZm9yIChpID0gMDsgaG9zdC0+aF9hbGlhc2VzW2ldOyBpKyspCisgICAgICAgICAgICAgICBwcmludGYoIiVzICIsIGhvc3QtPmhfYWxpYXNlc1tpXSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgcHV0cygiIik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBhaG9zdCBbLXQge2F8YWFhYXx1fV0ge2hvc3R8YWRkcn0gLi4uXG4iKTsKKyAgZXhpdCgxKTsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXMuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjlhOGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlcy5oCkBAIC0wLDAgKzEsNjQ4IEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2lmbmRlZiBBUkVTX19ICisjZGVmaW5lIEFSRVNfX0gKKworI2luY2x1ZGUgImFyZXNfdmVyc2lvbi5oIiAgLyogYy1hcmVzIHZlcnNpb24gZGVmaW5lcyAgICovCisjaW5jbHVkZSAiYXJlc19idWlsZC5oIiAgICAvKiBjLWFyZXMgYnVpbGQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJhcmVzX3J1bGVzLmgiICAgIC8qIGMtYXJlcyBydWxlcyBlbmZvcmNlbWVudCAqLworCisvKgorICogRGVmaW5lIFdJTjMyIHdoZW4gYnVpbGQgdGFyZ2V0IGlzIFdpbjMyIEFQSQorICovCisKKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4zMl9fKSkgJiYgXAorICAgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fU1lNQklBTjMyX18pCisjICBkZWZpbmUgV0lOMzIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEhQLVVYIHN5c3RlbXMgdmVyc2lvbiA5LCAxMCBhbmQgMTEgbGFjayBzeXMvc2VsZWN0LmggYW5kIHNvIGRvZXMgb2xkaXNoCisgICBsaWJjNS1iYXNlZCBMaW51eCBzeXN0ZW1zLiBPbmx5IGluY2x1ZGUgaXQgb24gc3lzdGVtIHRoYXQgYXJlIGtub3duIHRvCisgICByZXF1aXJlIGl0ISAqLworI2lmIGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChfX05PVkVMTF9MSUJDX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgXAorICAgIGRlZmluZWQoX19taW5peCkgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSB8fCBkZWZpbmVkKF9fSU5URUdSSVRZKSB8fCBcCisgICAgZGVmaW5lZChBTkRST0lEKSB8fCBkZWZpbmVkKF9fQU5EUk9JRF9fKQorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmICFkZWZpbmVkKF9fTk9WRUxMX0xJQkNfXykpCisjaW5jbHVkZSA8c3lzL2JzZHNrdC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdBVFQzMikKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgIGluY2x1ZGUgPHRjcC5oPgorI2VsaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorIyAgaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgICAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGVuZGlmCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBpbmNsdWRlIDx3aW5zb2NrLmg+CisjZWxpZiBkZWZpbmVkKFdJTjMyKQorIyAgaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgICAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGVuZGlmCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbHNlCisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyoqIGMtYXJlcyBleHRlcm5hbCBBUEkgZnVuY3Rpb24gbGlua2FnZSBkZWNvcmF0aW9ucy4KKyovCisKKyNpZmRlZiBDQVJFU19TVEFUSUNMSUIKKyMgIGRlZmluZSBDQVJFU19FWFRFUk4KKyNlbGlmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fU1lNQklBTjMyX18pCisjICBpZiBkZWZpbmVkKENBUkVTX0JVSUxESU5HX0xJQlJBUlkpCisjICAgIGRlZmluZSBDQVJFU19FWFRFUk4gIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgZWxzZQorIyAgICBkZWZpbmUgQ0FSRVNfRVhURVJOICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKENBUkVTX0JVSUxESU5HX0xJQlJBUlkpICYmIGRlZmluZWQoQ0FSRVNfU1lNQk9MX0hJRElORykKKyMgIGRlZmluZSBDQVJFU19FWFRFUk4gQ0FSRVNfU1lNQk9MX1NDT1BFX0VYVEVSTgorI2Vsc2UKKyMgIGRlZmluZSBDQVJFU19FWFRFUk4KKyNlbmRpZgorCisKKyNkZWZpbmUgQVJFU19TVUNDRVNTICAgICAgICAgICAgMAorCisvKiBTZXJ2ZXIgZXJyb3IgY29kZXMgKEFSRVNfRU5PREFUQSBpbmRpY2F0ZXMgbm8gcmVsZXZhbnQgYW5zd2VyKSAqLworI2RlZmluZSBBUkVTX0VOT0RBVEEgICAgICAgICAgICAxCisjZGVmaW5lIEFSRVNfRUZPUk1FUlIgICAgICAgICAgIDIKKyNkZWZpbmUgQVJFU19FU0VSVkZBSUwgICAgICAgICAgMworI2RlZmluZSBBUkVTX0VOT1RGT1VORCAgICAgICAgICA0CisjZGVmaW5lIEFSRVNfRU5PVElNUCAgICAgICAgICAgIDUKKyNkZWZpbmUgQVJFU19FUkVGVVNFRCAgICAgICAgICAgNgorCisvKiBMb2NhbGx5IGdlbmVyYXRlZCBlcnJvciBjb2RlcyAqLworI2RlZmluZSBBUkVTX0VCQURRVUVSWSAgICAgICAgICA3CisjZGVmaW5lIEFSRVNfRUJBRE5BTUUgICAgICAgICAgIDgKKyNkZWZpbmUgQVJFU19FQkFERkFNSUxZICAgICAgICAgOQorI2RlZmluZSBBUkVTX0VCQURSRVNQICAgICAgICAgICAxMAorI2RlZmluZSBBUkVTX0VDT05OUkVGVVNFRCAgICAgICAxMQorI2RlZmluZSBBUkVTX0VUSU1FT1VUICAgICAgICAgICAxMgorI2RlZmluZSBBUkVTX0VPRiAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBUkVTX0VGSUxFICAgICAgICAgICAgICAxNAorI2RlZmluZSBBUkVTX0VOT01FTSAgICAgICAgICAgICAxNQorI2RlZmluZSBBUkVTX0VERVNUUlVDVElPTiAgICAgICAxNgorI2RlZmluZSBBUkVTX0VCQURTVFIgICAgICAgICAgICAxNworCisvKiBhcmVzX2dldG5hbWVpbmZvIGVycm9yIGNvZGVzICovCisjZGVmaW5lIEFSRVNfRUJBREZMQUdTICAgICAgICAgIDE4CisKKy8qIGFyZXNfZ2V0YWRkcmluZm8gZXJyb3IgY29kZXMgKi8KKyNkZWZpbmUgQVJFU19FTk9OQU1FICAgICAgICAgICAgMTkKKyNkZWZpbmUgQVJFU19FQkFESElOVFMgICAgICAgICAgMjAKKworLyogVW5pbml0aWFsaXplZCBsaWJyYXJ5IGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgQVJFU19FTk9USU5JVElBTElaRUQgICAgMjEgICAgICAgICAgLyogaW50cm9kdWNlZCBpbiAxLjcuMCAqLworCisvKiBhcmVzX2xpYnJhcnlfaW5pdCBlcnJvciBjb2RlcyAqLworI2RlZmluZSBBUkVTX0VMT0FESVBITFBBUEkgICAgICAgICAgIDIyICAgICAvKiBpbnRyb2R1Y2VkIGluIDEuNy4wICovCisjZGVmaW5lIEFSRVNfRUFERFJHRVRORVRXT1JLUEFSQU1TICAgMjMgICAgIC8qIGludHJvZHVjZWQgaW4gMS43LjAgKi8KKworLyogTW9yZSBlcnJvciBjb2RlcyAqLworI2RlZmluZSBBUkVTX0VDQU5DRUxMRUQgICAgICAgICAyNCAgICAgICAgICAvKiBpbnRyb2R1Y2VkIGluIDEuNy4wICovCisKKy8qIEZsYWcgdmFsdWVzICovCisjZGVmaW5lIEFSRVNfRkxBR19VU0VWQyAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIEFSRVNfRkxBR19QUklNQVJZICAgICAgICgxIDw8IDEpCisjZGVmaW5lIEFSRVNfRkxBR19JR05UQyAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIEFSRVNfRkxBR19OT1JFQ1VSU0UgICAgICgxIDw8IDMpCisjZGVmaW5lIEFSRVNfRkxBR19TVEFZT1BFTiAgICAgICgxIDw8IDQpCisjZGVmaW5lIEFSRVNfRkxBR19OT1NFQVJDSCAgICAgICgxIDw8IDUpCisjZGVmaW5lIEFSRVNfRkxBR19OT0FMSUFTRVMgICAgICgxIDw8IDYpCisjZGVmaW5lIEFSRVNfRkxBR19OT0NIRUNLUkVTUCAgICgxIDw8IDcpCisjZGVmaW5lIEFSRVNfRkxBR19FRE5TICAgICAgICAgICgxIDw8IDgpCisKKy8qIE9wdGlvbiBtYXNrIHZhbHVlcyAqLworI2RlZmluZSBBUkVTX09QVF9GTEFHUyAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBBUkVTX09QVF9USU1FT1VUICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBBUkVTX09QVF9UUklFUyAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBBUkVTX09QVF9ORE9UUyAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBBUkVTX09QVF9VRFBfUE9SVCAgICAgICAoMSA8PCA0KQorI2RlZmluZSBBUkVTX09QVF9UQ1BfUE9SVCAgICAgICAoMSA8PCA1KQorI2RlZmluZSBBUkVTX09QVF9TRVJWRVJTICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBBUkVTX09QVF9ET01BSU5TICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBBUkVTX09QVF9MT09LVVBTICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBBUkVTX09QVF9TT0NLX1NUQVRFX0NCICAoMSA8PCA5KQorI2RlZmluZSBBUkVTX09QVF9TT1JUTElTVCAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgQVJFU19PUFRfU09DS19TTkRCVUYgICAgKDEgPDwgMTEpCisjZGVmaW5lIEFSRVNfT1BUX1NPQ0tfUkNWQlVGICAgICgxIDw8IDEyKQorI2RlZmluZSBBUkVTX09QVF9USU1FT1VUTVMgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgQVJFU19PUFRfUk9UQVRFICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIEFSRVNfT1BUX0VETlNQU1ogICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBBUkVTX09QVF9OT1JPVEFURSAgICAgICAoMSA8PCAxNikKKworLyogTmFtZWluZm8gZmxhZyB2YWx1ZXMgKi8KKyNkZWZpbmUgQVJFU19OSV9OT0ZRRE4gICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBBUkVTX05JX05VTUVSSUNIT1NUICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIEFSRVNfTklfTkFNRVJFUUQgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQVJFU19OSV9OVU1FUklDU0VSViAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBBUkVTX05JX0RHUkFNICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIEFSRVNfTklfVENQICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUkVTX05JX1VEUCAgICAgICAgICAgICAgICAgICAgIEFSRVNfTklfREdSQU0KKyNkZWZpbmUgQVJFU19OSV9TQ1RQICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBBUkVTX05JX0RDQ1AgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIEFSRVNfTklfTlVNRVJJQ1NDT1BFICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgQVJFU19OSV9MT09LVVBIT1NUICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBBUkVTX05JX0xPT0tVUFNFUlZJQ0UgICAgICAgICAgICgxIDw8IDkpCisvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworI2RlZmluZSBBUkVTX05JX0lETiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBBUkVTX05JX0lETl9BTExPV19VTkFTU0lHTkVEICAgICgxIDw8IDExKQorI2RlZmluZSBBUkVTX05JX0lETl9VU0VfU1REM19BU0NJSV9SVUxFUyAoMSA8PCAxMikKKworLyogQWRkcmluZm8gZmxhZyB2YWx1ZXMgKi8KKyNkZWZpbmUgQVJFU19BSV9DQU5PTk5BTUUgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBBUkVTX0FJX05VTUVSSUNIT1NUICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIEFSRVNfQUlfUEFTU0lWRSAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQVJFU19BSV9OVU1FUklDU0VSViAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBBUkVTX0FJX1Y0TUFQUEVEICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIEFSRVNfQUlfQUxMICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgQVJFU19BSV9BRERSQ09ORklHICAgICAgICAgICAgICAoMSA8PCA2KQorLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKyNkZWZpbmUgQVJFU19BSV9JRE4gICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgQVJFU19BSV9JRE5fQUxMT1dfVU5BU1NJR05FRCAgICAoMSA8PCAxMSkKKyNkZWZpbmUgQVJFU19BSV9JRE5fVVNFX1NURDNfQVNDSUlfUlVMRVMgKDEgPDwgMTIpCisjZGVmaW5lIEFSRVNfQUlfQ0FOT05JRE4gICAgICAgICAgICAgICAgKDEgPDwgMTMpCisKKyNkZWZpbmUgQVJFU19BSV9NQVNLIChBUkVTX0FJX0NBTk9OTkFNRXxBUkVTX0FJX05VTUVSSUNIT1NUfEFSRVNfQUlfUEFTU0lWRXwgXAorICAgICAgICAgICAgICAgICAgICAgIEFSRVNfQUlfTlVNRVJJQ1NFUlZ8QVJFU19BSV9WNE1BUFBFRHxBUkVTX0FJX0FMTHwgXAorICAgICAgICAgICAgICAgICAgICAgIEFSRVNfQUlfQUREUkNPTkZJRykKKyNkZWZpbmUgQVJFU19HRVRTT0NLX01BWE5VTSAxNiAvKiBhcmVzX2dldHNvY2soKSBjYW4gcmV0dXJuIGluZm8gYWJvdXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnkgc29ja2V0cyAqLworI2RlZmluZSBBUkVTX0dFVFNPQ0tfUkVBREFCTEUoYml0cyxudW0pIChiaXRzICYgKDE8PCAobnVtKSkpCisjZGVmaW5lIEFSRVNfR0VUU09DS19XUklUQUJMRShiaXRzLG51bSkgKGJpdHMgJiAoMSA8PCAoKG51bSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSRVNfR0VUU09DS19NQVhOVU0pKSkKKworLyogYy1hcmVzIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gZmxhZyB2YWx1ZXMgKi8KKyNkZWZpbmUgQVJFU19MSUJfSU5JVF9OT05FICAgKDApCisjZGVmaW5lIEFSRVNfTElCX0lOSVRfV0lOMzIgICgxIDw8IDApCisjZGVmaW5lIEFSRVNfTElCX0lOSVRfQUxMICAgIChBUkVTX0xJQl9JTklUX1dJTjMyKQorCisKKy8qCisgKiBUeXBlZGVmIG91ciBzb2NrZXQgdHlwZQorICovCisKKyNpZm5kZWYgYXJlc19zb2NrZXRfdHlwZWRlZgorI2lmZGVmIFdJTjMyCit0eXBlZGVmIFNPQ0tFVCBhcmVzX3NvY2tldF90OworI2RlZmluZSBBUkVTX1NPQ0tFVF9CQUQgSU5WQUxJRF9TT0NLRVQKKyNlbHNlCit0eXBlZGVmIGludCBhcmVzX3NvY2tldF90OworI2RlZmluZSBBUkVTX1NPQ0tFVF9CQUQgLTEKKyNlbmRpZgorI2RlZmluZSBhcmVzX3NvY2tldF90eXBlZGVmCisjZW5kaWYgLyogYXJlc19zb2NrZXRfdHlwZWRlZiAqLworCit0eXBlZGVmIHZvaWQgKCphcmVzX3NvY2tfc3RhdGVfY2IpKHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfc29ja2V0X3Qgc29ja2V0X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVhZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3cml0YWJsZSk7CisKK3N0cnVjdCBhcGF0dGVybjsKKworLyogTk9URSBhYm91dCB0aGUgYXJlc19vcHRpb25zIHN0cnVjdCB0byB1c2VycyBhbmQgZGV2ZWxvcGVycy4KKworICAgVGhpcyBzdHJ1Y3Qgd2lsbCByZW1haW4gbG9va2luZyBsaWtlIHRoaXMuIEl0IHdpbGwgbm90IGJlIGV4dGVuZGVkIG5vcgorICAgc2hydW5rIGluIGZ1dHVyZSByZWxlYXNlcywgYnV0IGFsbCBuZXcgb3B0aW9ucyB3aWxsIGJlIHNldCBieSBhcmVzX3NldF8qKCkKKyAgIG9wdGlvbnMgaW5zdGVhZCBvZiB3aXRoIHRoZSBhcmVzX2luaXRfb3B0aW9ucygpIGZ1bmN0aW9uLgorCisgICBFdmVudHVhbGx5IChpbiBhIGdhbGF4eSBmYXIgZmFyIGF3YXkpLCBhbGwgb3B0aW9ucyB3aWxsIGJlIHNldHRhYmxlIGJ5CisgICBhcmVzX3NldF8qKCkgb3B0aW9ucyBhbmQgdGhlIGFyZXNfaW5pdF9vcHRpb25zKCkgZnVuY3Rpb24gd2lsbCBiZWNvbWUKKyAgIGRlcHJlY2F0ZWQuCisKKyAgIFdoZW4gbmV3IG9wdGlvbnMgYXJlIGFkZGVkIHRvIGMtYXJlcywgdGhleSBhcmUgbm90IGFkZGVkIHRvIHRoaXMKKyAgIHN0cnVjdC4gQW5kIHRoZXkgYXJlIG5vdCAic2F2ZWQiIHdpdGggdGhlIGFyZXNfc2F2ZV9vcHRpb25zKCkgZnVuY3Rpb24gYnV0CisgICBpbnN0ZWFkIHdlIGVuY291cmFnZSB0aGUgdXNlIG9mIHRoZSBhcmVzX2R1cCgpIGZ1bmN0aW9uLiBOZWVkbGVzcyB0byBzYXksCisgICBpZiB5b3UgYWRkIGNvbmZpZyBvcHRpb25zIHRvIGMtYXJlcyB5b3UgbmVlZCB0byBtYWtlIHN1cmUgYXJlc19kdXAoKQorICAgZHVwbGljYXRlcyB0aGlzIG5ldyBvcHRpb24uCisKKyAqLworc3RydWN0IGFyZXNfb3B0aW9ucyB7CisgIGludCBmbGFnczsKKyAgaW50IHRpbWVvdXQ7IC8qIGluIHNlY29uZHMgb3IgbWlsbGlzZWNvbmRzLCBkZXBlbmRpbmcgb24gb3B0aW9ucyAqLworICBpbnQgdHJpZXM7CisgIGludCBuZG90czsKKyAgdW5zaWduZWQgc2hvcnQgdWRwX3BvcnQ7CisgIHVuc2lnbmVkIHNob3J0IHRjcF9wb3J0OworICBpbnQgc29ja2V0X3NlbmRfYnVmZmVyX3NpemU7CisgIGludCBzb2NrZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZTsKKyAgc3RydWN0IGluX2FkZHIgKnNlcnZlcnM7CisgIGludCBuc2VydmVyczsKKyAgY2hhciAqKmRvbWFpbnM7CisgIGludCBuZG9tYWluczsKKyAgY2hhciAqbG9va3VwczsKKyAgYXJlc19zb2NrX3N0YXRlX2NiIHNvY2tfc3RhdGVfY2I7CisgIHZvaWQgKnNvY2tfc3RhdGVfY2JfZGF0YTsKKyAgc3RydWN0IGFwYXR0ZXJuICpzb3J0bGlzdDsKKyAgaW50IG5zb3J0OworICBpbnQgZWRuc3BzejsKK307CisKK3N0cnVjdCBob3N0ZW50Oworc3RydWN0IHRpbWV2YWw7CitzdHJ1Y3Qgc29ja2FkZHI7CitzdHJ1Y3QgYXJlc19jaGFubmVsZGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgYXJlc19jaGFubmVsZGF0YSAqYXJlc19jaGFubmVsOworCit0eXBlZGVmIHZvaWQgKCphcmVzX2NhbGxiYWNrKSh2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuKTsKKwordHlwZWRlZiB2b2lkICgqYXJlc19ob3N0X2NhbGxiYWNrKSh2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhvc3RlbnQpOworCit0eXBlZGVmIHZvaWQgKCphcmVzX25hbWVpbmZvX2NhbGxiYWNrKSh2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNlcnZpY2UpOworCit0eXBlZGVmIGludCAgKCphcmVzX3NvY2tfY3JlYXRlX2NhbGxiYWNrKShhcmVzX3NvY2tldF90IHNvY2tldF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7CisKK3R5cGVkZWYgaW50ICAoKmFyZXNfc29ja19jb25maWdfY2FsbGJhY2spKGFyZXNfc29ja2V0X3Qgc29ja2V0X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX2xpYnJhcnlfaW5pdChpbnQgZmxhZ3MpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfbGlicmFyeV9pbml0X21lbShpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKmFtYWxsb2MpKHNpemVfdCBzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCphZnJlZSkodm9pZCAqcHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqYXJlYWxsb2MpKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpKTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQodm9pZCk7CisKK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfbGlicmFyeV9jbGVhbnVwKHZvaWQpOworCitDQVJFU19FWFRFUk4gY29uc3QgY2hhciAqYXJlc192ZXJzaW9uKGludCAqdmVyc2lvbik7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19pbml0KGFyZXNfY2hhbm5lbCAqY2hhbm5lbHB0cik7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19pbml0X29wdGlvbnMoYXJlc19jaGFubmVsICpjaGFubmVscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19vcHRpb25zICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bWFzaywgY2hhciAqIGRldik7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19zYXZlX29wdGlvbnMoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX29wdGlvbnMgKm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqb3B0bWFzayk7CisKK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfZGVzdHJveV9vcHRpb25zKHN0cnVjdCBhcmVzX29wdGlvbnMgKm9wdGlvbnMpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfZHVwKGFyZXNfY2hhbm5lbCAqZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19jaGFubmVsIHNyYyk7CisKK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfZGVzdHJveShhcmVzX2NoYW5uZWwgY2hhbm5lbCk7CisKK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfY2FuY2VsKGFyZXNfY2hhbm5lbCBjaGFubmVsKTsKKworLyogVGhlc2UgbmV4dCAzIGNvbmZpZ3VyZSBsb2NhbCBiaW5kaW5nIGZvciB0aGUgb3V0LWdvaW5nIHNvY2tldAorICogY29ubmVjdGlvbi4gIFVzZSB0aGVzZSB0byBzcGVjaWZ5IHNvdXJjZSBJUCBhbmQvb3IgbmV0d29yayBkZXZpY2UKKyAqIG9uIG11bHRpLWhvbWVkIHN5c3RlbXMuCisgKi8KK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfc2V0X2xvY2FsX2lwNChhcmVzX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgaW50IGxvY2FsX2lwKTsKKworLyogbG9jYWxfaXA2IHNob3VsZCBiZSAxNiBieXRlcyBpbiBsZW5ndGggKi8KK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfc2V0X2xvY2FsX2lwNihhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsb2NhbF9pcDYpOworCisvKiBsb2NhbF9kZXZfbmFtZSBzaG91bGQgYmUgbnVsbCB0ZXJtaW5hdGVkLiAqLworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19zZXRfbG9jYWxfZGV2KGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxvY2FsX2Rldl9uYW1lKTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrKGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfc29ja19jcmVhdGVfY2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjayhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrX2NvbmZpZ19jYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX3NldF9zb3J0bGlzdChhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc29ydHN0cik7CisKK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfc2VuZChhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBxbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfY2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19xdWVyeShhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRuc2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19jYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19zZWFyY2goYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRuc2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX2NhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19nZXRob3N0YnluYW1lKGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX2hvc3RfY2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX2dldGhvc3RieW5hbWVfZmlsZShhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipob3N0KTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19nZXRob3N0YnlhZGRyKGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkZHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX2hvc3RfY2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19nZXRuYW1laW5mbyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrbGVuX3Qgc2FsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19uYW1laW5mb19jYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX2ZkcyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZWFkX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICp3cml0ZV9mZHMpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfZ2V0c29jayhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKworQ0FSRVNfRVhURVJOIHN0cnVjdCB0aW1ldmFsICphcmVzX3RpbWVvdXQoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbWF4dHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHYpOworCitDQVJFU19FWFRFUk4gdm9pZCBhcmVzX3Byb2Nlc3MoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZWFkX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKndyaXRlX2Zkcyk7CisKK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfcHJvY2Vzc19mZChhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX3NvY2tldF90IHJlYWRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrZXRfdCB3cml0ZV9mZCk7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19jcmVhdGVfcXVlcnkoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRuc2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfdWRwX3NpemUpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfbWtxdWVyeShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRuc2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJ1Zmxlbik7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19leHBhbmRfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICplbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqZW5jbGVuKTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX2V4cGFuZF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqZW5jb2RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqZW5jbGVuKTsKKworLyoKKyAqIE5PVEU6IGJlZm9yZSBjLWFyZXMgMS43LjAgd2Ugd291bGQgbW9zdCBvZnRlbiB1c2UgdGhlIHN5c3RlbSBpbjZfYWRkcgorICogc3RydWN0IGJlbG93IHdoZW4gYXJlcyBpdHNlbGYgd2FzIGJ1aWx0LCBidXQgbWFueSBhcHBzIHdvdWxkIHVzZSB0aGlzCisgKiBwcml2YXRlIHZlcnNpb24gc2luY2UgdGhlIGhlYWRlciBjaGVja2VkIGEgSEFWRV8qIGRlZmluZSBmb3IgaXQuIFN0YXJ0aW5nCisgKiB3aXRoIDEuNy4wIHdlIGFsd2F5cyBkZWNsYXJlIGFuZCB1c2Ugb3VyIG93biB0byBzdG9wIHJlbHlpbmcgb24gdGhlCisgKiBzeXN0ZW0ncyBvbmUuCisgKi8KK3N0cnVjdCBhcmVzX2luNl9hZGRyIHsKKyAgdW5pb24geworICAgIHVuc2lnbmVkIGNoYXIgX1M2X3U4WzE2XTsKKyAgfSBfUzZfdW47Cit9OworCitzdHJ1Y3QgYXJlc19hZGRydHRsIHsKKyAgc3RydWN0IGluX2FkZHIgaXBhZGRyOworICBpbnQgICAgICAgICAgICB0dGw7Cit9OworCitzdHJ1Y3QgYXJlc19hZGRyNnR0bCB7CisgIHN0cnVjdCBhcmVzX2luNl9hZGRyIGlwNmFkZHI7CisgIGludCAgICAgICAgICAgICB0dGw7Cit9OworCitzdHJ1Y3QgYXJlc19zcnZfcmVwbHkgeworICBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkgICpuZXh0OworICBjaGFyICAgICAgICAgICAgICAgICAgICpob3N0OworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBwcmlvcml0eTsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgd2VpZ2h0OworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBwb3J0OworfTsKKworc3RydWN0IGFyZXNfbXhfcmVwbHkgeworICBzdHJ1Y3QgYXJlc19teF9yZXBseSAgICpuZXh0OworICBjaGFyICAgICAgICAgICAgICAgICAgICpob3N0OworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBwcmlvcml0eTsKK307CisKK3N0cnVjdCBhcmVzX3R4dF9yZXBseSB7CisgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSAgKm5leHQ7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgKnR4dDsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGVuZ3RoOyAgLyogbGVuZ3RoIGV4Y2x1ZGVzIG51bGwgdGVybWluYXRpb24gKi8KK307CisKKy8qIE5PVEU6IFRoaXMgc3RydWN0dXJlIGlzIGEgc3VwZXJzZXQgb2YgYXJlc190eHRfcmVwbHkKKyAqLworc3RydWN0IGFyZXNfdHh0X2V4dCB7CisgIHN0cnVjdCBhcmVzX3R4dF9leHQgICAgICAqbmV4dDsKKyAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICp0eHQ7CisgIHNpemVfdCAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisgIC8qIDEgLSBpZiBzdGFydCBvZiBuZXcgcmVjb3JkCisgICAqIDAgLSBpZiBhIGNodW5rIGluIHRoZSBzYW1lIHJlY29yZCAqLworICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgcmVjb3JkX3N0YXJ0OworfTsKKworc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkgeworICBzdHJ1Y3QgYXJlc19uYXB0cl9yZXBseSAqbmV4dDsKKyAgdW5zaWduZWQgY2hhciAgICAgICAgICAgKmZsYWdzOworICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAqc2VydmljZTsKKyAgdW5zaWduZWQgY2hhciAgICAgICAgICAgKnJlZ2V4cDsKKyAgY2hhciAgICAgICAgICAgICAgICAgICAgKnJlcGxhY2VtZW50OworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgb3JkZXI7CisgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgICBwcmVmZXJlbmNlOworfTsKKworc3RydWN0IGFyZXNfc29hX3JlcGx5IHsKKyAgY2hhciAgICAgICAgKm5zbmFtZTsKKyAgY2hhciAgICAgICAgKmhvc3RtYXN0ZXI7CisgIHVuc2lnbmVkIGludCBzZXJpYWw7CisgIHVuc2lnbmVkIGludCByZWZyZXNoOworICB1bnNpZ25lZCBpbnQgcmV0cnk7CisgIHVuc2lnbmVkIGludCBleHBpcmU7CisgIHVuc2lnbmVkIGludCBtaW50dGw7Cit9OworCisvKgorKiogUGFyc2UgdGhlIGJ1ZmZlciwgc3RhcnRpbmcgYXQgKmFidWYgYW5kIG9mIGxlbmd0aCBhbGVuIGJ5dGVzLCBwcmV2aW91c2x5CisqKiBvYnRhaW5lZCBmcm9tIGFuIGFyZXNfc2VhcmNoIGNhbGwuICBQdXQgdGhlIHJlc3VsdHMgaW4gKmhvc3QsIGlmIG5vbm51bGwuCisqKiBBbHNvLCBpZiBhZGRydHRscyBpcyBub25udWxsLCBwdXQgdXAgdG8gKm5hZGRydHRscyBJUHY0IGFkZHJlc3NlcyBhbG9uZyB3aXRoCisqKiB0aGVpciBUVExzIGluIHRoYXQgYXJyYXksIGFuZCBzZXQgKm5hZGRydHRscyB0byB0aGUgbnVtYmVyIG9mIGFkZHJlc3NlcworKiogc28gd3JpdHRlbi4KKyovCisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19wYXJzZV9hX3JlcGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX2FkZHJ0dGwgKmFkZHJ0dGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpuYWRkcnR0bHMpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfcGFyc2VfYWFhYV9yZXBseShjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyNnR0bCAqYWRkcnR0bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5hZGRydHRscyk7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19wYXJzZV9wdHJfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKmhvc3QpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfcGFyc2VfbnNfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKmhvc3QpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfcGFyc2Vfc3J2X3JlcGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkqKiBzcnZfb3V0KTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX3BhcnNlX214X3JlcGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19teF9yZXBseSoqIG14X291dCk7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19wYXJzZV90eHRfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciogYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSoqIHR4dF9vdXQpOworCitDQVJFU19FWFRFUk4gaW50IGFyZXNfcGFyc2VfdHh0X3JlcGx5X2V4dChjb25zdCB1bnNpZ25lZCBjaGFyKiBhYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc190eHRfZXh0KiogdHh0X291dCk7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19wYXJzZV9uYXB0cl9yZXBseShjb25zdCB1bnNpZ25lZCBjaGFyKiBhYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX25hcHRyX3JlcGx5KiogbmFwdHJfb3V0KTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX3BhcnNlX3NvYV9yZXBseShjb25zdCB1bnNpZ25lZCBjaGFyKiBhYnVmLAorCQkJCSAgICAgIGludCBhbGVuLAorCQkJCSAgICAgIHN0cnVjdCBhcmVzX3NvYV9yZXBseSoqIHNvYV9vdXQpOworCitDQVJFU19FWFRFUk4gdm9pZCBhcmVzX2ZyZWVfc3RyaW5nKHZvaWQgKnN0cik7CisKK0NBUkVTX0VYVEVSTiB2b2lkIGFyZXNfZnJlZV9ob3N0ZW50KHN0cnVjdCBob3N0ZW50ICpob3N0KTsKKworQ0FSRVNfRVhURVJOIHZvaWQgYXJlc19mcmVlX2RhdGEodm9pZCAqZGF0YXB0cik7CisKK0NBUkVTX0VYVEVSTiBjb25zdCBjaGFyICphcmVzX3N0cmVycm9yKGludCBjb2RlKTsKKworc3RydWN0IGFyZXNfYWRkcl9ub2RlIHsKKyAgc3RydWN0IGFyZXNfYWRkcl9ub2RlICpuZXh0OworICBpbnQgZmFtaWx5OworICB1bmlvbiB7CisgICAgc3RydWN0IGluX2FkZHIgICAgICAgYWRkcjQ7CisgICAgc3RydWN0IGFyZXNfaW42X2FkZHIgYWRkcjY7CisgIH0gYWRkcjsKK307CisKK3N0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlIHsKKyAgc3RydWN0IGFyZXNfYWRkcl9wb3J0X25vZGUgKm5leHQ7CisgIGludCBmYW1pbHk7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgaW5fYWRkciAgICAgICBhZGRyNDsKKyAgICBzdHJ1Y3QgYXJlc19pbjZfYWRkciBhZGRyNjsKKyAgfSBhZGRyOworICBpbnQgdWRwX3BvcnQ7CisgIGludCB0Y3BfcG9ydDsKK307CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19zZXRfc2VydmVycyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKnNlcnZlcnMpOworQ0FSRVNfRVhURVJOIGludCBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzKGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlICpzZXJ2ZXJzKTsKKworLyogSW5jb21taW5nIHN0cmluZyBmb3JtYXQ6IGhvc3RbOnBvcnRdWyxob3N0Wzpwb3J0XV0uLi4gKi8KK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19zZXRfc2VydmVyc19jc3YoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNlcnZlcnMpOworQ0FSRVNfRVhURVJOIGludCBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2NzdihhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc2VydmVycyk7CisKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19nZXRfc2VydmVycyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKipzZXJ2ZXJzKTsKK0NBUkVTX0VYVEVSTiBpbnQgYXJlc19nZXRfc2VydmVyc19wb3J0cyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSAqKnNlcnZlcnMpOworCitDQVJFU19FWFRFUk4gY29uc3QgY2hhciAqYXJlc19pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX3NvY2tsZW5fdCBzaXplKTsKKworQ0FSRVNfRVhURVJOIGludCBhcmVzX2luZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0KTsKKworCitDQVJFU19FWFRFUk4gaW50IGNvbXBhdF9nZXRob3N0YnluYW1lMihjb25zdCBjaGFyICpuYW1lICxjb25zdCBjaGFyICpkZXZfbmFtZSwgaW50IGZhbWlseSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiC6r8r9w/uzxqO6IGNvbXBhdF9nZXRob3N0YnluYW1lMworKiC5psTcw+jK9qO6INa4tqjN+L/avfjQ0GRuc8frx/MKKyogss7K/cu1w/ejuiDT8sP7o6zN+L/aw/ujrNCt0unX5QorKiC3tSC72CDWtaO6IAorKiDG5Mv8y7XD96O6ILLOyv1kZXax2NDrysfWuNXr1NltYWxsb2OjrGMtYXJlc7/izOG5qbXEvdO/2sTau+FmcmVlKGRldikKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworQ0FSRVNfRVhURVJOIHN0cnVjdCBob3N0ZW50ICpjb21wYXRfZ2V0aG9zdGJ5bmFtZTMoY2hhciAqbmFtZSwgY2hhciAqZGV2LCBpbnQgZmFtaWx5KTsKKworQ0FSRVNfRVhURVJOIHZvaWQgZnJlZV9ob3N0ZW50KHN0cnVjdCBob3N0ZW50KiBob3N0KTsgIAorI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBBUkVTX19IICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX19jbG9zZV9zb2NrZXRzLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX19jbG9zZV9zb2NrZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2NjQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfX2Nsb3NlX3NvY2tldHMuYwpAQCAtMCwwICsxLDYxIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKK3ZvaWQgYXJlc19fY2xvc2Vfc29ja2V0cyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVyKQoreworICBzdHJ1Y3Qgc2VuZF9yZXF1ZXN0ICpzZW5kcmVxOworCisgIC8qIEZyZWUgYWxsIHBlbmRpbmcgb3V0cHV0IGJ1ZmZlcnMuICovCisgIHdoaWxlIChzZXJ2ZXItPnFoZWFkKQorICAgIHsKKyAgICAgIC8qIEFkdmFuY2Ugc2VydmVyLT5xaGVhZDsgcHVsbCBvdXQgcXVlcnkgYXMgd2UgZ28uICovCisgICAgICBzZW5kcmVxID0gc2VydmVyLT5xaGVhZDsKKyAgICAgIHNlcnZlci0+cWhlYWQgPSBzZW5kcmVxLT5uZXh0OworICAgICAgaWYgKHNlbmRyZXEtPmRhdGFfc3RvcmFnZSAhPSBOVUxMKQorICAgICAgICBhcmVzX2ZyZWUoc2VuZHJlcS0+ZGF0YV9zdG9yYWdlKTsKKyAgICAgIGFyZXNfZnJlZShzZW5kcmVxKTsKKyAgICB9CisgIHNlcnZlci0+cXRhaWwgPSBOVUxMOworCisgIC8qIFJlc2V0IGFueSBleGlzdGluZyBpbnB1dCBidWZmZXIuICovCisgIGlmIChzZXJ2ZXItPnRjcF9idWZmZXIpCisgICAgYXJlc19mcmVlKHNlcnZlci0+dGNwX2J1ZmZlcik7CisgIHNlcnZlci0+dGNwX2J1ZmZlciA9IE5VTEw7CisgIHNlcnZlci0+dGNwX2xlbmJ1Zl9wb3MgPSAwOworCisgIC8qIFJlc2V0IGJyb2tlbm5lc3MgKi8KKyAgc2VydmVyLT5pc19icm9rZW4gPSAwOworCisgIC8qIENsb3NlIHRoZSBUQ1AgYW5kIFVEUCBzb2NrZXRzLiAqLworICBpZiAoc2VydmVyLT50Y3Bfc29ja2V0ICE9IEFSRVNfU09DS0VUX0JBRCkKKyAgICB7CisgICAgICBTT0NLX1NUQVRFX0NBTExCQUNLKGNoYW5uZWwsIHNlcnZlci0+dGNwX3NvY2tldCwgMCwgMCk7CisgICAgICBzY2xvc2Uoc2VydmVyLT50Y3Bfc29ja2V0KTsKKyAgICAgIHNlcnZlci0+dGNwX3NvY2tldCA9IEFSRVNfU09DS0VUX0JBRDsKKyAgICAgIHNlcnZlci0+dGNwX2Nvbm5lY3Rpb25fZ2VuZXJhdGlvbiA9ICsrY2hhbm5lbC0+dGNwX2Nvbm5lY3Rpb25fZ2VuZXJhdGlvbjsKKyAgICB9CisgIGlmIChzZXJ2ZXItPnVkcF9zb2NrZXQgIT0gQVJFU19TT0NLRVRfQkFEKQorICAgIHsKKyAgICAgIFNPQ0tfU1RBVEVfQ0FMTEJBQ0soY2hhbm5lbCwgc2VydmVyLT51ZHBfc29ja2V0LCAwLCAwKTsKKyAgICAgIHNjbG9zZShzZXJ2ZXItPnVkcF9zb2NrZXQpOworICAgICAgc2VydmVyLT51ZHBfc29ja2V0ID0gQVJFU19TT0NLRVRfQkFEOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfX2dldF9ob3N0ZW50LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX19nZXRfaG9zdGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjk1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX19nZXRfaG9zdGVudC5jCkBAIC0wLDAgKzEsMjYxIEBACisKKy8qIENvcHlyaWdodCAxOTk4LCAyMDExIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjICBpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorIyAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2luZXRfbmV0X3B0b24uaCIKKyNpbmNsdWRlICJhcmVzX25vd2Fybi5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCitpbnQgYXJlc19fZ2V0X2hvc3RlbnQoRklMRSAqZnAsIGludCBmYW1pbHksIHN0cnVjdCBob3N0ZW50ICoqaG9zdCkKK3sKKyAgY2hhciAqbGluZSA9IE5VTEwsICpwLCAqcSwgKiphbGlhczsKKyAgY2hhciAqdHh0YWRkciwgKnR4dGhvc3QsICp0eHRhbGlhczsKKyAgaW50IHN0YXR1czsKKyAgc2l6ZV90IGFkZHJsZW4sIGxpbmVzaXplLCBuYWxpYXNlczsKKyAgc3RydWN0IGFyZXNfYWRkciBhZGRyOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdGVudCA9IE5VTEw7CisKKyAgKmhvc3QgPSBOVUxMOyAvKiBBc3N1bWUgZmFpbHVyZSAqLworCisgIC8qIFZhbGlkYXRlIGZhbWlseSAqLworICBzd2l0Y2ggKGZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICBjYXNlIEFGX0lORVQ2OgorICAgIGNhc2UgQUZfVU5TUEVDOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBBUkVTX0VCQURGQU1JTFk7CisgIH0KKworICB3aGlsZSAoKHN0YXR1cyA9IGFyZXNfX3JlYWRfbGluZShmcCwgJmxpbmUsICZsaW5lc2l6ZSkpID09IEFSRVNfU1VDQ0VTUykKKyAgICB7CisKKyAgICAgIC8qIFRyaW0gbGluZSBjb21tZW50LiAqLworICAgICAgcCA9IGxpbmU7CisgICAgICB3aGlsZSAoKnAgJiYgKCpwICE9ICcjJykpCisgICAgICAgIHArKzsKKyAgICAgICpwID0gJ1wwJzsKKworICAgICAgLyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLworICAgICAgcSA9IHAgLSAxOworICAgICAgd2hpbGUgKChxID49IGxpbmUpICYmIElTU1BBQ0UoKnEpKQorICAgICAgICBxLS07CisgICAgICAqKytxID0gJ1wwJzsKKworICAgICAgLyogU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UuICovCisgICAgICBwID0gbGluZTsKKyAgICAgIHdoaWxlICgqcCAmJiBJU1NQQUNFKCpwKSkKKyAgICAgICAgcCsrOworICAgICAgaWYgKCEqcCkKKyAgICAgICAgLyogSWdub3JlIGxpbmUgaWYgZW1wdHkuICovCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIElQdjQgb3IgSVB2NiBhZGRyZXNzIHBhcnQuICovCisgICAgICB0eHRhZGRyID0gcDsKKworICAgICAgLyogQWR2YW5jZSBwYXN0IGFkZHJlc3MgcGFydC4gKi8KKyAgICAgIHdoaWxlICgqcCAmJiAhSVNTUEFDRSgqcCkpCisgICAgICAgIHArKzsKKyAgICAgIGlmICghKnApCisgICAgICAgIC8qIElnbm9yZSBsaW5lIGlmIHJlYWNoZWQgZW5kIG9mIGxpbmUuICovCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBOdWxsIHRlcm1pbmF0ZSBhZGRyZXNzIHBhcnQuICovCisgICAgICAqcCA9ICdcMCc7CisKKyAgICAgIC8qIEFkdmFuY2UgdG8gaG9zdCBuYW1lICovCisgICAgICBwKys7CisgICAgICB3aGlsZSAoKnAgJiYgSVNTUEFDRSgqcCkpCisgICAgICAgIHArKzsKKyAgICAgIGlmICghKnApCisgICAgICAgIC8qIElnbm9yZSBsaW5lIGlmIHJlYWNoZWQgZW5kIG9mIGxpbmUuICovCisgICAgICAgIGNvbnRpbnVlOyAgLyogTENPVl9FWENMX0xJTkU6IHRyYWlsaW5nIHdoaXRlc3BhY2UgYWxyZWFkeSBzdHJpcHBlZCAqLworCisgICAgICAvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIGhvc3QgbmFtZS4gKi8KKyAgICAgIHR4dGhvc3QgPSBwOworCisgICAgICAvKiBBZHZhbmNlIHBhc3QgaG9zdCBuYW1lLiAqLworICAgICAgd2hpbGUgKCpwICYmICFJU1NQQUNFKCpwKSkKKyAgICAgICAgcCsrOworCisgICAgICAvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIGZpcnN0IGFsaWFzLiAqLworICAgICAgdHh0YWxpYXMgPSBOVUxMOworICAgICAgaWYgKCpwKQorICAgICAgICB7CisgICAgICAgICAgcSA9IHAgKyAxOworICAgICAgICAgIHdoaWxlICgqcSAmJiBJU1NQQUNFKCpxKSkKKyAgICAgICAgICAgIHErKzsKKyAgICAgICAgICBpZiAoKnEpCisgICAgICAgICAgICB0eHRhbGlhcyA9IHE7CisgICAgICAgIH0KKworICAgICAgLyogTnVsbCB0ZXJtaW5hdGUgaG9zdCBuYW1lLiAqLworICAgICAgKnAgPSAnXDAnOworCisgICAgICAvKiBmaW5kIG91dCBudW1iZXIgb2YgYWxpYXNlcy4gKi8KKyAgICAgIG5hbGlhc2VzID0gMDsKKyAgICAgIGlmICh0eHRhbGlhcykKKyAgICAgICAgeworICAgICAgICAgIHAgPSB0eHRhbGlhczsKKyAgICAgICAgICB3aGlsZSAoKnApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHdoaWxlICgqcCAmJiAhSVNTUEFDRSgqcCkpCisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICB3aGlsZSAoKnAgJiYgSVNTUEFDRSgqcCkpCisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICBuYWxpYXNlcysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIENvbnZlcnQgYWRkcmVzcyBzdHJpbmcgdG8gbmV0d29yayBhZGRyZXNzIGZvciB0aGUgcmVxdWVzdGVkIGZhbWlseS4gKi8KKyAgICAgIGFkZHJsZW4gPSAwOworICAgICAgYWRkci5mYW1pbHkgPSBBRl9VTlNQRUM7CisgICAgICBhZGRyLmFkZHJWNC5zX2FkZHIgPSBJTkFERFJfTk9ORTsKKyAgICAgIGlmICgoZmFtaWx5ID09IEFGX0lORVQpIHx8IChmYW1pbHkgPT0gQUZfVU5TUEVDKSkKKyAgICAgICAgeworICAgICAgICAgIGFkZHIuYWRkclY0LnNfYWRkciA9IGluZXRfYWRkcih0eHRhZGRyKTsKKyAgICAgICAgICBpZiAoYWRkci5hZGRyVjQuc19hZGRyICE9IElOQUREUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBBY3R1YWwgbmV0d29yayBhZGRyZXNzIGZhbWlseSBhbmQgbGVuZ3RoLiAqLworICAgICAgICAgICAgICBhZGRyLmZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgICAgIGFkZHJsZW4gPSBzaXplb2YoYWRkci5hZGRyVjQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAoKGZhbWlseSA9PSBBRl9JTkVUNikgfHwgKChmYW1pbHkgPT0gQUZfVU5TUEVDKSAmJiAoIWFkZHJsZW4pKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmVzX2luZXRfcHRvbihBRl9JTkVUNiwgdHh0YWRkciwgJmFkZHIuYWRkclY2KSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEFjdHVhbCBuZXR3b3JrIGFkZHJlc3MgZmFtaWx5IGFuZCBsZW5ndGguICovCisgICAgICAgICAgICAgIGFkZHIuZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgICAgICAgIGFkZHJsZW4gPSBzaXplb2YoYWRkci5hZGRyVjYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAoIWFkZHJsZW4pCisgICAgICAgIC8qIElnbm9yZSBsaW5lIGlmIGludmFsaWQgYWRkcmVzcyBzdHJpbmcgZm9yIHRoZSByZXF1ZXN0ZWQgZmFtaWx5LiAqLworICAgICAgICBjb250aW51ZTsKKworICAgICAgLyoKKyAgICAgICoqIEFjdHVhbCBhZGRyZXNzIGZhbWlseSBwb3NzaWJsZSB2YWx1ZXMgYXJlIEFGX0lORVQgYW5kIEFGX0lORVQ2IG9ubHkuCisgICAgICAqLworCisgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBob3N0ZW50IHN0cnVjdHVyZS4gKi8KKyAgICAgIGhvc3RlbnQgPSBhcmVzX21hbGxvYyhzaXplb2Yoc3RydWN0IGhvc3RlbnQpKTsKKyAgICAgIGlmICghaG9zdGVudCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIEluaXRpYWxpemUgZmllbGRzIGZvciBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbi4gKi8KKyAgICAgIGhvc3RlbnQtPmhfYWxpYXNlcyA9IE5VTEw7CisgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdCA9IE5VTEw7CisKKyAgICAgIC8qIENvcHkgb2ZmaWNpYWwgaG9zdCBuYW1lLiAqLworICAgICAgaG9zdGVudC0+aF9uYW1lID0gYXJlc19zdHJkdXAodHh0aG9zdCk7CisgICAgICBpZiAoIWhvc3RlbnQtPmhfbmFtZSkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIENvcHkgbmV0d29yayBhZGRyZXNzLiAqLworICAgICAgaG9zdGVudC0+aF9hZGRyX2xpc3QgPSBhcmVzX21hbGxvYygyICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgaWYgKCFob3N0ZW50LT5oX2FkZHJfbGlzdCkKKyAgICAgICAgYnJlYWs7CisgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdFsxXSA9IE5VTEw7CisgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdFswXSA9IGFyZXNfbWFsbG9jKGFkZHJsZW4pOworICAgICAgaWYgKCFob3N0ZW50LT5oX2FkZHJfbGlzdFswXSkKKyAgICAgICAgYnJlYWs7CisgICAgICBpZiAoYWRkci5mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgbWVtY3B5KGhvc3RlbnQtPmhfYWRkcl9saXN0WzBdLCAmYWRkci5hZGRyVjQsIHNpemVvZihhZGRyLmFkZHJWNCkpOworICAgICAgZWxzZQorICAgICAgICBtZW1jcHkoaG9zdGVudC0+aF9hZGRyX2xpc3RbMF0sICZhZGRyLmFkZHJWNiwgc2l6ZW9mKGFkZHIuYWRkclY2KSk7CisKKyAgICAgIC8qIENvcHkgYWxpYXNlcy4gKi8KKyAgICAgIGhvc3RlbnQtPmhfYWxpYXNlcyA9IGFyZXNfbWFsbG9jKChuYWxpYXNlcyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgaWYgKCFob3N0ZW50LT5oX2FsaWFzZXMpCisgICAgICAgIGJyZWFrOworICAgICAgYWxpYXMgPSBob3N0ZW50LT5oX2FsaWFzZXM7CisgICAgICB3aGlsZSAobmFsaWFzZXMpCisgICAgICAgICooYWxpYXMgKyBuYWxpYXNlcy0tKSA9IE5VTEw7CisgICAgICAqYWxpYXMgPSBOVUxMOworICAgICAgd2hpbGUgKHR4dGFsaWFzKQorICAgICAgICB7CisgICAgICAgICAgcCA9IHR4dGFsaWFzOworICAgICAgICAgIHdoaWxlICgqcCAmJiAhSVNTUEFDRSgqcCkpCisgICAgICAgICAgICBwKys7CisgICAgICAgICAgcSA9IHA7CisgICAgICAgICAgd2hpbGUgKCpxICYmIElTU1BBQ0UoKnEpKQorICAgICAgICAgICAgcSsrOworICAgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgICBpZiAoKCphbGlhcyA9IGFyZXNfc3RyZHVwKHR4dGFsaWFzKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGFsaWFzKys7CisgICAgICAgICAgdHh0YWxpYXMgPSAqcSA/IHEgOiBOVUxMOworICAgICAgICB9CisgICAgICBpZiAodHh0YWxpYXMpCisgICAgICAgIC8qIEFsaWFzIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuICovCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBDb3B5IGFjdHVhbCBuZXR3b3JrIGFkZHJlc3MgZmFtaWx5IGFuZCBsZW5ndGguICovCisgICAgICBob3N0ZW50LT5oX2FkZHJ0eXBlID0gYXJlc3hfc2l0b3NzKGFkZHIuZmFtaWx5KTsKKyAgICAgIGhvc3RlbnQtPmhfbGVuZ3RoID0gYXJlc3hfdXp0b3NzKGFkZHJsZW4pOworCisgICAgICAvKiBGcmVlIGxpbmUgYnVmZmVyLiAqLworICAgICAgYXJlc19mcmVlKGxpbmUpOworCisgICAgICAvKiBSZXR1cm4gaG9zdGVudCBzdWNjZXNzZnVsbHkgKi8KKyAgICAgICpob3N0ID0gaG9zdGVudDsKKyAgICAgIHJldHVybiBBUkVTX1NVQ0NFU1M7CisKKyAgICB9CisKKyAgLyogSWYgYWxsb2NhdGVkLCBmcmVlIGxpbmUgYnVmZmVyLiAqLworICBpZiAobGluZSkKKyAgICBhcmVzX2ZyZWUobGluZSk7CisKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZTsgY2xlYW4gdXAuICovCisgICAgICBpZiAoaG9zdGVudCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChob3N0ZW50LT5oX25hbWUpCisgICAgICAgICAgICBhcmVzX2ZyZWUoKGNoYXIgKikgaG9zdGVudC0+aF9uYW1lKTsKKyAgICAgICAgICBpZiAoaG9zdGVudC0+aF9hbGlhc2VzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3IgKGFsaWFzID0gaG9zdGVudC0+aF9hbGlhc2VzOyAqYWxpYXM7IGFsaWFzKyspCisgICAgICAgICAgICAgICAgYXJlc19mcmVlKCphbGlhcyk7CisgICAgICAgICAgICAgIGFyZXNfZnJlZShob3N0ZW50LT5oX2FsaWFzZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChob3N0ZW50LT5oX2FkZHJfbGlzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGhvc3RlbnQtPmhfYWRkcl9saXN0WzBdKQorICAgICAgICAgICAgICAgIGFyZXNfZnJlZShob3N0ZW50LT5oX2FkZHJfbGlzdFswXSk7CisgICAgICAgICAgICAgIGFyZXNfZnJlZShob3N0ZW50LT5oX2FkZHJfbGlzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYXJlc19mcmVlKGhvc3RlbnQpOworICAgICAgICB9CisgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgfQorCisgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX19yZWFkX2xpbmUuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfX3JlYWRfbGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MmFkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX19yZWFkX2xpbmUuYwpAQCAtMCwwICsxLDczIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19ub3dhcm4uaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworLyogVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbi4gIEl0cyBjb250cmFjdCBpcyB0byByZWFkIGEgbGluZSBmcm9tCisgKiBhIGZpbGUgaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIsIHplcm9pbmcgdGhlIHRyYWlsaW5nCisgKiBuZXdsaW5lIGlmIHRoZXJlIGlzIG9uZS4gIFRoZSBjYWxsaW5nIHJvdXRpbmUgbWF5IGNhbGwKKyAqIGFyZXNfX3JlYWRfbGluZSBtdWx0aXBsZSB0aW1lcyB3aXRoIHRoZSBzYW1lIGJ1ZiBhbmQgYnVmc2l6ZQorICogcG9pbnRlcnM7ICpidWYgd2lsbCBiZSByZWFsbG9jYXRlZCBhbmQgKmJ1ZnNpemUgYWRqdXN0ZWQgYXMKKyAqIGFwcHJvcHJpYXRlLiAgVGhlIGluaXRpYWwgdmFsdWUgb2YgKmJ1ZiBzaG91bGQgYmUgTlVMTC4gIEFmdGVyIHRoZQorICogY2FsbGluZyByb3V0aW5lIGlzIGRvbmUgcmVhZGluZyBsaW5lcywgaXQgc2hvdWxkIGZyZWUgKmJ1Zi4KKyAqLworaW50IGFyZXNfX3JlYWRfbGluZShGSUxFICpmcCwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZzaXplKQoreworICBjaGFyICpuZXdidWY7CisgIHNpemVfdCBvZmZzZXQgPSAwOworICBzaXplX3QgbGVuOworCisgIGlmICgqYnVmID09IE5VTEwpCisgICAgeworICAgICAgKmJ1ZiA9IGFyZXNfbWFsbG9jKDEyOCk7CisgICAgICBpZiAoISpidWYpCisgICAgICAgIHJldHVybiBBUkVTX0VOT01FTTsKKyAgICAgICpidWZzaXplID0gMTI4OworICAgIH0KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGludCBieXRlc3RvcmVhZCA9IGFyZXN4X3V6dG9zaSgqYnVmc2l6ZSAtIG9mZnNldCk7CisKKyAgICAgIGlmICghZmdldHMoKmJ1ZiArIG9mZnNldCwgYnl0ZXN0b3JlYWQsIGZwKSkKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgIT0gMCkgPyAwIDogKGZlcnJvcihmcCkpID8gQVJFU19FRklMRSA6IEFSRVNfRU9GOworICAgICAgbGVuID0gb2Zmc2V0ICsgc3RybGVuKCpidWYgKyBvZmZzZXQpOworICAgICAgaWYgKCgqYnVmKVtsZW4gLSAxXSA9PSAnXG4nKQorICAgICAgICB7CisgICAgICAgICAgKCpidWYpW2xlbiAtIDFdID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgb2Zmc2V0ID0gbGVuOworICAgICAgaWYobGVuIDwgKmJ1ZnNpemUgLSAxKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogQWxsb2NhdGUgbW9yZSBzcGFjZS4gKi8KKyAgICAgIG5ld2J1ZiA9IGFyZXNfcmVhbGxvYygqYnVmLCAqYnVmc2l6ZSAqIDIpOworICAgICAgaWYgKCFuZXdidWYpCisgICAgICAgIHsKKyAgICAgICAgICBhcmVzX2ZyZWUoKmJ1Zik7CisgICAgICAgICAgKmJ1ZiA9IE5VTEw7CisgICAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgICB9CisgICAgICAqYnVmID0gbmV3YnVmOworICAgICAgKmJ1ZnNpemUgKj0gMjsKKyAgICB9CisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX190aW1ldmFsLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX190aW1ldmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlZmI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfX3RpbWV2YWwuYwpAQCAtMCwwICsxLDExMSBAQAorCisvKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgRGFuaWVsIFN0ZW5iZXJnIGV0IGFsCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCisgKiB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKE1TRE9TKQorCitzdHJ1Y3QgdGltZXZhbCBhcmVzX190dm5vdyh2b2lkKQoreworICAvKgorICAqKiBHZXRUaWNrQ291bnQoKSBpcyBhdmFpbGFibGUgb24gX2FsbF8gV2luZG93cyB2ZXJzaW9ucyBmcm9tIFc5NSB1cAorICAqKiB0byBub3dhZGF5cy4gUmV0dXJucyBtaWxsaXNlY29uZHMgZWxhcHNlZCBzaW5jZSBsYXN0IHN5c3RlbSBib290LAorICAqKiBpbmNyZWFzZXMgbW9ub3RvbmljYWxseSBhbmQgd3JhcHMgb25jZSA0OS43IGRheXMgaGF2ZSBlbGFwc2VkLgorICAqLworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgIERXT1JEIG1pbGxpc2Vjb25kcyA9IEdldFRpY2tDb3VudCgpOworICBub3cudHZfc2VjID0gbWlsbGlzZWNvbmRzIC8gMTAwMDsKKyAgbm93LnR2X3VzZWMgPSAobWlsbGlzZWNvbmRzICUgMTAwMCkgKiAxMDAwOworICByZXR1cm4gbm93OworfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMpCisKK3N0cnVjdCB0aW1ldmFsIGFyZXNfX3R2bm93KHZvaWQpCit7CisgIC8qCisgICoqIGNsb2NrX2dldHRpbWUoKSBpcyBncmFudGVkIHRvIGJlIGluY3JlYXNlZCBtb25vdG9uaWNhbGx5IHdoZW4gdGhlCisgICoqIG1vbm90b25pYyBjbG9jayBpcyBxdWVyaWVkLiBUaW1lIHN0YXJ0aW5nIHBvaW50IGlzIHVuc3BlY2lmaWVkLCBpdAorICAqKiBjb3VsZCBiZSB0aGUgc3lzdGVtIHN0YXJ0LXVwIHRpbWUsIHRoZSBFcG9jaCwgb3Igc29tZXRoaW5nIGVsc2UsCisgICoqIGluIGFueSBjYXNlIHRoZSB0aW1lIHN0YXJ0aW5nIHBvaW50IGRvZXMgbm90IGNoYW5nZSBvbmNlIHRoYXQgdGhlCisgICoqIHN5c3RlbSBoYXMgc3RhcnRlZCB1cC4KKyAgKi8KKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBzdHJ1Y3QgdGltZXNwZWMgdHNub3c7CisgIGlmKDAgPT0gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0c25vdykpIHsKKyAgICBub3cudHZfc2VjID0gdHNub3cudHZfc2VjOworICAgIG5vdy50dl91c2VjID0gdHNub3cudHZfbnNlYyAvIDEwMDA7CisgIH0KKyAgLyoKKyAgKiogRXZlbiB3aGVuIHRoZSBjb25maWd1cmUgcHJvY2VzcyBoYXMgdHJ1bHkgZGV0ZWN0ZWQgbW9ub3RvbmljIGNsb2NrCisgICoqIGF2YWlsYWJpbGl0eSwgaXQgbWlnaHQgaGFwcGVuIHRoYXQgaXQgaXMgbm90IGFjdHVhbGx5IGF2YWlsYWJsZSBhdAorICAqKiBydW4tdGltZS4gV2hlbiB0aGlzIG9jY3VycyBzaW1wbHkgZmFsbGJhY2sgdG8gb3RoZXIgdGltZSBzb3VyY2UuCisgICovCisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyAgZWxzZQorICAgICh2b2lkKWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsgIC8qIExDT1ZfRVhDTF9MSU5FICovCisjZWxzZQorICBlbHNlIHsKKyAgICBub3cudHZfc2VjID0gKGxvbmcpdGltZShOVUxMKTsKKyAgICBub3cudHZfdXNlYyA9IDA7CisgIH0KKyNlbmRpZgorICByZXR1cm4gbm93OworfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKQorCitzdHJ1Y3QgdGltZXZhbCBhcmVzX190dm5vdyh2b2lkKQoreworICAvKgorICAqKiBnZXR0aW1lb2ZkYXkoKSBpcyBub3QgZ3JhbnRlZCB0byBiZSBpbmNyZWFzZWQgbW9ub3RvbmljYWxseSwgZHVlIHRvCisgICoqIGNsb2NrIGRyaWZ0aW5nIGFuZCBleHRlcm5hbCBzb3VyY2UgdGltZSBzeW5jaHJvbml6YXRpb24gaXQgY2FuIGp1bXAKKyAgKiogZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aW1lLgorICAqLworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgICh2b2lkKWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKyAgcmV0dXJuIG5vdzsKK30KKworI2Vsc2UKKworc3RydWN0IHRpbWV2YWwgYXJlc19fdHZub3codm9pZCkKK3sKKyAgLyoKKyAgKiogdGltZSgpIHJldHVybnMgdGhlIHZhbHVlIG9mIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2guCisgICovCisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgbm93LnR2X3NlYyA9IChsb25nKXRpbWUoTlVMTCk7CisgIG5vdy50dl91c2VjID0gMDsKKyAgcmV0dXJuIG5vdzsKK30KKworI2VuZGlmCisKKyNpZiAwIC8qIE5vdCB1c2VkICovCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBtb3JlIHJlY2VudCB0aW1lLCBhcyBvdGhlcndpc2UKKyAqIHdlJ2xsIGdldCBhIHdlaXJkIG5lZ2F0aXZlIHRpbWUtZGlmZiBiYWNrLi4uCisgKgorICogUmV0dXJuczogdGhlIHRpbWUgZGlmZmVyZW5jZSBpbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgorICovCitsb25nIGFyZXNfX3R2ZGlmZihzdHJ1Y3QgdGltZXZhbCBuZXdlciwgc3RydWN0IHRpbWV2YWwgb2xkZXIpCit7CisgIHJldHVybiAobmV3ZXIudHZfc2VjLW9sZGVyLnR2X3NlYykqMTAwMCsKKyAgICAobmV3ZXIudHZfdXNlYy1vbGRlci50dl91c2VjKS8xMDAwOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfYnVpbGQuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfYnVpbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmI4M2YxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19idWlsZC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qIGFyZXNfYnVpbGQuaC4gIEdlbmVyYXRlZCBmcm9tIGFyZXNfYnVpbGQuaC5pbiBieSBjb25maWd1cmUuICAqLworI2lmbmRlZiBfX0NBUkVTX0JVSUxEX0gKKyNkZWZpbmUgX19DQVJFU19CVUlMRF9ICisKKworLyogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IERhbmllbCBTdGVuYmVyZyBldCBhbAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorICogdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICBOT1RFUyBGT1IgQ09ORklHVVJFIENBUEFCTEUgU1lTVEVNUyAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogTk9URSAxOgorICogLS0tLS0tLQorICoKKyAqIE5vdGhpbmcgaW4gdGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIG1vZGlmaWVkIG9yIGFkanVzdGVkIGJ5IHRoZQorICogYy1hcmVzIGxpYnJhcnkgdXNlciBub3IgYnkgdGhlIGMtYXJlcyBsaWJyYXJ5IGJ1aWxkZXIuCisgKgorICogSWYgeW91IHRoaW5rIHRoYXQgc29tZXRoaW5nIGFjdHVhbGx5IG5lZWRzIHRvIGJlIGNoYW5nZWQsIGFkanVzdGVkCisgKiBvciBmaXhlZCBpbiB0aGlzIGZpbGUsIHRoZW4sIHJlcG9ydCBpdCBvbiB0aGUgYy1hcmVzIGRldmVsb3BtZW50CisgKiBtYWlsaW5nIGxpc3Q6IGh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jLWFyZXMvCisgKgorICogVGhpcyBoZWFkZXIgZmlsZSBzaGFsbCBvbmx5IGV4cG9ydCBzeW1ib2xzIHdoaWNoIGFyZSAnY2FyZXMnIG9yICdDQVJFUycKKyAqIHByZWZpeGVkLCBvdGhlcndpc2UgcHVibGljIG5hbWUgc3BhY2Ugd291bGQgYmUgcG9sbHV0ZWQuCisgKgorICogTk9URSAyOgorICogLS0tLS0tLQorICoKKyAqIFJpZ2h0IG5vdyB5b3UgbWlnaHQgYmUgc3RhcmluZyBhdCBmaWxlIGFyZXNfYnVpbGQuaC5pbiBvciBhcmVzX2J1aWxkLmgsCisgKiB0aGlzIGlzIGR1ZSB0byB0aGUgZm9sbG93aW5nIHJlYXNvbjoKKyAqCisgKiBPbiBzeXN0ZW1zIGNhcGFibGUgb2YgcnVubmluZyB0aGUgY29uZmlndXJlIHNjcmlwdCwgdGhlIGNvbmZpZ3VyZSBwcm9jZXNzCisgKiB3aWxsIG92ZXJ3cml0ZSB0aGUgZGlzdHJpYnV0ZWQgYXJlc19idWlsZC5oIGZpbGUgd2l0aCBvbmUgdGhhdCBpcyBzdWl0YWJsZQorICogYW5kIHNwZWNpZmljIHRvIHRoZSBsaWJyYXJ5IGJlaW5nIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0LCB3aGljaCBpcyBnZW5lcmF0ZWQKKyAqIGZyb20gdGhlIGFyZXNfYnVpbGQuaC5pbiB0ZW1wbGF0ZSBmaWxlLgorICoKKyAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgREVGSU5JVElPTiBPRiBUSEVTRSBTWU1CT0xTIFNIQUxMIE5PVCBUQUtFIFBMQUNFIEFOWVdIRVJFIEVMU0UgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNpZmRlZiBDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1QKKyMgIGVycm9yICJDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1Qgc2hhbGwgbm90IGJlIGRlZmluZWQgZXhjZXB0IGluIGFyZXNfYnVpbGQuaCIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ0FSRVNfVFlQRU9GX0FSRVNfU09DS0xFTl9UX2FscmVhZHlfZGVmaW5lZAorI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICBFWFRFUk5BTCBJTlRFUkZBQ0UgU0VUVElOR1MgRk9SIENPTkZJR1VSRSBDQVBBQkxFIFNZU1RFTVMgT05MWSAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogQ29uZmlndXJlIHByb2Nlc3MgZGVmaW5lcyB0aGlzIHRvIDEgd2hlbiBpdCBmaW5kcyBvdXQgdGhhdCBzeXN0ZW0gICovCisvKiBoZWFkZXIgZmlsZSB3czJ0Y3BpcC5oIG11c3QgYmUgaW5jbHVkZWQgYnkgdGhlIGV4dGVybmFsIGludGVyZmFjZS4gKi8KKy8qICN1bmRlZiBDQVJFU19QVUxMX1dTMlRDUElQX0ggKi8KKyNpZmRlZiBDQVJFU19QVUxMX1dTMlRDUElQX0gKKyMgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgIGluY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKworLyogQ29uZmlndXJlIHByb2Nlc3MgZGVmaW5lcyB0aGlzIHRvIDEgd2hlbiBpdCBmaW5kcyBvdXQgdGhhdCBzeXN0ZW0gICAqLworLyogaGVhZGVyIGZpbGUgc3lzL3R5cGVzLmggbXVzdCBiZSBpbmNsdWRlZCBieSB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiAqLworI2RlZmluZSBDQVJFU19QVUxMX1NZU19UWVBFU19IIDEKKyNpZmRlZiBDQVJFU19QVUxMX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisvKiBDb25maWd1cmUgcHJvY2VzcyBkZWZpbmVzIHRoaXMgdG8gMSB3aGVuIGl0IGZpbmRzIG91dCB0aGF0IHN5c3RlbSAgICAqLworLyogaGVhZGVyIGZpbGUgc3lzL3NvY2tldC5oIG11c3QgYmUgaW5jbHVkZWQgYnkgdGhlIGV4dGVybmFsIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgQ0FSRVNfUFVMTF9TWVNfU09DS0VUX0ggMQorI2lmZGVmIENBUkVTX1BVTExfU1lTX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworLyogSW50ZWdyYWwgZGF0YSB0eXBlIHVzZWQgZm9yIGFyZXNfc29ja2xlbl90LiAqLworI2RlZmluZSBDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1Qgc29ja2xlbl90CisKKy8qIERhdGEgdHlwZSBkZWZpbml0aW9uIG9mIGFyZXNfc29ja2xlbl90LiAqLwordHlwZWRlZiBDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1QgYXJlc19zb2NrbGVuX3Q7CisKKyNlbmRpZiAvKiBfX0NBUkVTX0JVSUxEX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfYnVpbGQuaC5pbiBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfYnVpbGQuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTgyNTIzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19idWlsZC5oLmluCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgX19DQVJFU19CVUlMRF9ICisjZGVmaW5lIF9fQ0FSRVNfQlVJTERfSAorCisKKy8qIENvcHlyaWdodCAoQykgMjAwOSBieSBEYW5pZWwgU3RlbmJlcmcgZXQgYWwKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKKyAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgTk9URVMgRk9SIENPTkZJR1VSRSBDQVBBQkxFIFNZU1RFTVMgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIE5PVEUgMToKKyAqIC0tLS0tLS0KKyAqCisgKiBOb3RoaW5nIGluIHRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBtb2RpZmllZCBvciBhZGp1c3RlZCBieSB0aGUKKyAqIGMtYXJlcyBsaWJyYXJ5IHVzZXIgbm9yIGJ5IHRoZSBjLWFyZXMgbGlicmFyeSBidWlsZGVyLgorICoKKyAqIElmIHlvdSB0aGluayB0aGF0IHNvbWV0aGluZyBhY3R1YWxseSBuZWVkcyB0byBiZSBjaGFuZ2VkLCBhZGp1c3RlZAorICogb3IgZml4ZWQgaW4gdGhpcyBmaWxlLCB0aGVuLCByZXBvcnQgaXQgb24gdGhlIGMtYXJlcyBkZXZlbG9wbWVudAorICogbWFpbGluZyBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzLworICoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgc2hhbGwgb25seSBleHBvcnQgc3ltYm9scyB3aGljaCBhcmUgJ2NhcmVzJyBvciAnQ0FSRVMnCisgKiBwcmVmaXhlZCwgb3RoZXJ3aXNlIHB1YmxpYyBuYW1lIHNwYWNlIHdvdWxkIGJlIHBvbGx1dGVkLgorICoKKyAqIE5PVEUgMjoKKyAqIC0tLS0tLS0KKyAqCisgKiBSaWdodCBub3cgeW91IG1pZ2h0IGJlIHN0YXJpbmcgYXQgZmlsZSBhcmVzX2J1aWxkLmguaW4gb3IgYXJlc19idWlsZC5oLAorICogdGhpcyBpcyBkdWUgdG8gdGhlIGZvbGxvd2luZyByZWFzb246CisgKgorICogT24gc3lzdGVtcyBjYXBhYmxlIG9mIHJ1bm5pbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIHRoZSBjb25maWd1cmUgcHJvY2VzcworICogd2lsbCBvdmVyd3JpdGUgdGhlIGRpc3RyaWJ1dGVkIGFyZXNfYnVpbGQuaCBmaWxlIHdpdGggb25lIHRoYXQgaXMgc3VpdGFibGUKKyAqIGFuZCBzcGVjaWZpYyB0byB0aGUgbGlicmFyeSBiZWluZyBjb25maWd1cmVkIGFuZCBidWlsdCwgd2hpY2ggaXMgZ2VuZXJhdGVkCisgKiBmcm9tIHRoZSBhcmVzX2J1aWxkLmguaW4gdGVtcGxhdGUgZmlsZS4KKyAqCisgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogIERFRklOSVRJT04gT0YgVEhFU0UgU1lNQk9MUyBTSEFMTCBOT1QgVEFLRSBQTEFDRSBBTllXSEVSRSBFTFNFICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWZkZWYgQ0FSRVNfVFlQRU9GX0FSRVNfU09DS0xFTl9UCisjICBlcnJvciAiQ0FSRVNfVFlQRU9GX0FSRVNfU09DS0xFTl9UIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGV4Y2VwdCBpbiBhcmVzX2J1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NBUkVTX1RZUEVPRl9BUkVTX1NPQ0tMRU5fVF9hbHJlYWR5X2RlZmluZWQKKyNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgRVhURVJOQUwgSU5URVJGQUNFIFNFVFRJTkdTIEZPUiBDT05GSUdVUkUgQ0FQQUJMRSBTWVNURU1TIE9OTFkgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIENvbmZpZ3VyZSBwcm9jZXNzIGRlZmluZXMgdGhpcyB0byAxIHdoZW4gaXQgZmluZHMgb3V0IHRoYXQgc3lzdGVtICAqLworLyogaGVhZGVyIGZpbGUgd3MydGNwaXAuaCBtdXN0IGJlIGluY2x1ZGVkIGJ5IHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuICovCisjdW5kZWYgQ0FSRVNfUFVMTF9XUzJUQ1BJUF9ICisjaWZkZWYgQ0FSRVNfUFVMTF9XUzJUQ1BJUF9ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjICBpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisKKy8qIENvbmZpZ3VyZSBwcm9jZXNzIGRlZmluZXMgdGhpcyB0byAxIHdoZW4gaXQgZmluZHMgb3V0IHRoYXQgc3lzdGVtICAgKi8KKy8qIGhlYWRlciBmaWxlIHN5cy90eXBlcy5oIG11c3QgYmUgaW5jbHVkZWQgYnkgdGhlIGV4dGVybmFsIGludGVyZmFjZS4gKi8KKyN1bmRlZiBDQVJFU19QVUxMX1NZU19UWVBFU19ICisjaWZkZWYgQ0FSRVNfUFVMTF9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworLyogQ29uZmlndXJlIHByb2Nlc3MgZGVmaW5lcyB0aGlzIHRvIDEgd2hlbiBpdCBmaW5kcyBvdXQgdGhhdCBzeXN0ZW0gICAgKi8KKy8qIGhlYWRlciBmaWxlIHN5cy9zb2NrZXQuaCBtdXN0IGJlIGluY2x1ZGVkIGJ5IHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuICovCisjdW5kZWYgQ0FSRVNfUFVMTF9TWVNfU09DS0VUX0gKKyNpZmRlZiBDQVJFU19QVUxMX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKy8qIEludGVncmFsIGRhdGEgdHlwZSB1c2VkIGZvciBhcmVzX3NvY2tsZW5fdC4gKi8KKyN1bmRlZiBDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1QKKworLyogRGF0YSB0eXBlIGRlZmluaXRpb24gb2YgYXJlc19zb2NrbGVuX3QuICovCit0eXBlZGVmIENBUkVTX1RZUEVPRl9BUkVTX1NPQ0tMRU5fVCBhcmVzX3NvY2tsZW5fdDsKKworI2VuZGlmIC8qIF9fQ0FSRVNfQlVJTERfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19jYW5jZWwuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY2FuY2VsLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzNGUzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY2FuY2VsLjMKQEAgLTAsMCArMSw0NiBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0NBTkNFTCAzICIzMSBNYXJjaCAyMDA0IgorLlNIIE5BTUUKK2FyZXNfY2FuY2VsIFwtIENhbmNlbCBhIHJlc29sdmUKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiB2b2lkIGFyZXNfY2FuY2VsKGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJhcmVzX2NhbmNlbCgzKVxmUCBmdW5jdGlvbiBjYW5jZWxzIGFsbCBsb29rdXBzL3JlcXVlc3RzIG1hZGUgb24gdGhlIHRoZQorbmFtZSBzZXJ2aWNlIGNoYW5uZWwgaWRlbnRpZmllZCBieSBcZkljaGFubmVsXGZQLiAgXGZCYXJlc19jYW5jZWwoMylcZlAKK2ludm9rZXMgdGhlIGNhbGxiYWNrcyBmb3IgZWFjaCBwZW5kaW5nIHF1ZXJ5IG9uIHRoZSBjaGFubmVsLCBwYXNzaW5nIGEgc3RhdHVzCitvZgorLkJSIEFSRVNfRUNBTkNFTExFRCAuCitUaGVzZSBjYWxscyBnaXZlIHRoZSBjYWxsYmFja3MgYSBjaGFuY2UgdG8gY2xlYW4gdXAgYW55IHN0YXRlIHdoaWNoIG1pZ2h0IGhhdmUKK2JlZW4gc3RvcmVkIGluIHRoZWlyIGFyZ3VtZW50cy4gSWYgc3VjaCBhIGNhbGxiYWNrIGludm9jYXRpb24gYWRkcyBhIG5ldworcmVxdWVzdCB0byB0aGUgY2hhbm5lbCwgdGhhdCByZXF1ZXN0IHdpbGwgXGZJbm90XGZQIGJlIGNhbmNlbGxlZCBieSB0aGUKK2N1cnJlbnQgaW52b2NhdGlvbiBvZiBcZkJhcmVzX2NhbmNlbCgzKVxmUC4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfaW5pdCAoMykKKy5CUiBhcmVzX2Rlc3Ryb3kgKDMpCisuU0ggTk9URVMKK1RoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGMtYXJlcyAxLjIuMAorCitjLWFyZXMgMS42LjAgYW5kIGVhcmxpZXIgcGFzcyBhIHN0YXR1cyBvZgorLkJSIEFSRVNfRVRJTUVPVVQKK2luc3RlYWQgb2YKKy5CUiBBUkVTX0VDQU5DRUxMRUQgLgorLlNIIEFVVEhPUgorRGlyayBNYW5za2UKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY2FuY2VsLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2NhbmNlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWNjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2NhbmNlbC5jCkBAIC0wLDAgKzEsNjMgQEAKKworLyogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IERhbmllbCBTdGVuYmVyZyBldCBhbAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorICogdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworLyoKKyAqIGFyZXNfY2FuY2VsKCkgY2FuY2VscyBhbGwgb25nb2luZyByZXF1ZXN0cy9yZXNvbHZlcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uCisgKiBvbiB0aGUgZ2l2ZW4gY2hhbm5lbC4gSXQgZG9lcyBOT1Qga2lsbCB0aGUgY2hhbm5lbCwgdXNlIGFyZXNfZGVzdHJveSgpIGZvcgorICogdGhhdC4KKyAqLwordm9pZCBhcmVzX2NhbmNlbChhcmVzX2NoYW5uZWwgY2hhbm5lbCkKK3sKKyAgc3RydWN0IHF1ZXJ5ICpxdWVyeTsKKyAgc3RydWN0IGxpc3Rfbm9kZSBsaXN0X2hlYWRfY29weTsKKyAgc3RydWN0IGxpc3Rfbm9kZSogbGlzdF9oZWFkOworICBzdHJ1Y3QgbGlzdF9ub2RlKiBsaXN0X25vZGU7CisgIGludCBpOworCisgIGlmICghYXJlc19faXNfbGlzdF9lbXB0eSgmKGNoYW5uZWwtPmFsbF9xdWVyaWVzKSkpCisgIHsKKyAgICAvKiBTd2FwIGxpc3QgaGVhZHMsIHNvIHRoYXQgb25seSB0aG9zZSBxdWVyaWVzIHdoaWNoIHdlcmUgcHJlc2VudCBvbiBlbnRyeQorICAgICAqIGludG8gdGhpcyBmdW5jdGlvbiBhcmUgY2FuY2VsbGVkLiBOZXcgcXVlcmllcyBhZGRlZCBieSBjYWxsYmFja3Mgb2YKKyAgICAgKiBxdWVyaWVzIGJlaW5nIGNhbmNlbGxlZCB3aWxsIG5vdCBiZSBjYW5jZWxsZWQgdGhlbXNlbHZlcy4KKyAgICAgKi8KKyAgICBsaXN0X2hlYWQgPSAmKGNoYW5uZWwtPmFsbF9xdWVyaWVzKTsKKyAgICBsaXN0X2hlYWRfY29weS5wcmV2ID0gbGlzdF9oZWFkLT5wcmV2OworICAgIGxpc3RfaGVhZF9jb3B5Lm5leHQgPSBsaXN0X2hlYWQtPm5leHQ7CisgICAgbGlzdF9oZWFkX2NvcHkucHJldi0+bmV4dCA9ICZsaXN0X2hlYWRfY29weTsKKyAgICBsaXN0X2hlYWRfY29weS5uZXh0LT5wcmV2ID0gJmxpc3RfaGVhZF9jb3B5OworICAgIGxpc3RfaGVhZC0+cHJldiA9IGxpc3RfaGVhZDsKKyAgICBsaXN0X2hlYWQtPm5leHQgPSBsaXN0X2hlYWQ7CisgICAgZm9yIChsaXN0X25vZGUgPSBsaXN0X2hlYWRfY29weS5uZXh0OyBsaXN0X25vZGUgIT0gJmxpc3RfaGVhZF9jb3B5OyApCisgICAgeworICAgICAgcXVlcnkgPSBsaXN0X25vZGUtPmRhdGE7CisgICAgICBsaXN0X25vZGUgPSBsaXN0X25vZGUtPm5leHQ7ICAvKiBzaW5jZSB3ZSdyZSBkZWxldGluZyB0aGUgcXVlcnkgKi8KKyAgICAgIHF1ZXJ5LT5jYWxsYmFjayhxdWVyeS0+YXJnLCBBUkVTX0VDQU5DRUxMRUQsIDAsIE5VTEwsIDApOworICAgICAgYXJlc19fZnJlZV9xdWVyeShxdWVyeSk7CisgICAgfQorICB9CisgIGlmICghKGNoYW5uZWwtPmZsYWdzICYgQVJFU19GTEFHX1NUQVlPUEVOKSAmJiBhcmVzX19pc19saXN0X2VtcHR5KCYoY2hhbm5lbC0+YWxsX3F1ZXJpZXMpKSkKKyAgeworICAgIGlmIChjaGFubmVsLT5zZXJ2ZXJzKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5uc2VydmVyczsgaSsrKQorICAgICAgICBhcmVzX19jbG9zZV9zb2NrZXRzKGNoYW5uZWwsICZjaGFubmVsLT5zZXJ2ZXJzW2ldKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY29uZmlnLmggYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWE2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2NvbmZpZy5oCkBAIC0wLDAgKzEsNTAyIEBACisvKiBhcmVzX2NvbmZpZy5oLiAgR2VuZXJhdGVkIGZyb20gYXJlc19jb25maWcuaC5pbiBieSBjb25maWd1cmUuICAqLworLyogYXJlc19jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworLyogI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAqLworCisvKiBkZWZpbmUgdGhpcyBpZiBhcmVzIGlzIGJ1aWx0IGZvciBhIGJpZyBlbmRpYW4gc3lzdGVtICovCisvKiAjdW5kZWYgQVJFU19CSUdfRU5ESUFOICovCisKKy8qIHdoZW4gYnVpbGRpbmcgYXMgc3RhdGljIHBhcnQgb2YgbGliY3VybCAqLworLyogI3VuZGVmIEJVSUxESU5HX0xJQkNVUkwgKi8KKworLyogRGVmaW5lZCBmb3IgYnVpbGQgdGhhdCBleHBvc2VzIGludGVybmFsIHN0YXRpYyBmdW5jdGlvbnMgZm9yIHRlc3RpbmcuICovCisvKiAjdW5kZWYgQ0FSRVNfRVhQT1NFX1NUQVRJQ1MgKi8KKworLyogRGVmaW5lZCBmb3IgYnVpbGQgd2l0aCBzeW1ib2wgaGlkaW5nLiAqLworI2RlZmluZSBDQVJFU19TWU1CT0xfSElESU5HIDEKKworLyogRGVmaW5pdGlvbiB0byBtYWtlIGEgbGlicmFyeSBzeW1ib2wgZXh0ZXJuYWxseSB2aXNpYmxlLiAqLworI2RlZmluZSBDQVJFU19TWU1CT0xfU0NPUEVfRVhURVJOIF9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoImRlZmF1bHQiKSkpCisKKy8qIFVzZSByZXNvbHZlciBsaWJyYXJ5IHRvIGNvbmZpZ3VyZSBjYXJlcyAqLworLyogI3VuZGVmIENBUkVTX1VTRV9MSUJSRVNPTFYgKi8KKworLyogaWYgYSAvZXRjL2luZXQgZGlyIGlzIGJlaW5nIHVzZWQgKi8KKy8qICN1bmRlZiBFVENfSU5FVCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldGhvc3RuYW1lLiAqLworI2RlZmluZSBHRVRIT1NUTkFNRV9UWVBFX0FSRzIgdW5zaWduZWQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcxIHN0cnVjdCBzb2NrYWRkciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgNCBhbmQgNiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgc2l6ZV90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyB1bnNpZ25lZCBpbnQKKworLyogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGdldHNlcnZieXBvcnRfciAqLworI2RlZmluZSBHRVRTRVJWQllQT1JUX1JfQVJHUyA2CisKKy8qIFNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHBhc3MgdG8gZ2V0c2VydmJ5cG9ydF9yICovCisjZGVmaW5lIEdFVFNFUlZCWVBPUlRfUl9CVUZTSVpFIDQwOTYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgQUZfSU5FVDYuICovCisjZGVmaW5lIEhBVkVfQUZfSU5FVDYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9uYW1lc2VyX2NvbXBhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvbmFtZXNlci5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BUlBBX05BTUVTRVJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNzZXJ0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaXRuY21wJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0JJVE5DTVAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYm9vbCBpcyBhbiBhdmFpbGFibGUgdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9CT09MX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2tfZ2V0dGltZSBmdW5jdGlvbiBhbmQgbW9ub3RvbmljIHRpbWVyLiAqLworI2RlZmluZSBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfQ0xPU0VTT0NLRVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIENsb3NlU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY29ubmVjdCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DT05ORUNUIDEKKworLyogZGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBiYXNpYyBDKysxMSBzeW50YXggKi8KKyNkZWZpbmUgSEFWRV9DWFgxMSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRVJSTk9fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmY250bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBmY250bCBPX05PTkJMT0NLIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMX09fTk9OQkxPQ0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnJlZWFkZHJpbmZvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbiBpcyB0aHJlYWRzYWZlLiAqLworI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0ZW52IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEVOViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RuYW1lIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldG5hbWVpbmZvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldHNlcnZieXBvcnRfciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRTRVJWQllQT1JUX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9pbmRleHRvbmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSUZfSU5ERVhUT05BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbmV0X3B0b24gZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JTkVUX05FVF9QVE9OICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9udG9wIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lORVRfTlRPUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9wdG9uIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lORVRfUFRPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpb2N0bHNvY2tldCBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgRklPTkJJTyBmdW5jdGlvbi4KKyAgICovCisvKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bHNvY2tldCBGSU9OQklPIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfRklPTkJJTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIFNJT0NHSUZBRERSIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMX1NJT0NHSUZBRERSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHZlJyBsaWJyYXJ5ICgtbHJlc29sdmUpLiAqLworLyogI3VuZGVmIEhBVkVfTElCUkVTT0xWRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCisKKy8qIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgTEwgKi8KKyNkZWZpbmUgSEFWRV9MTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLiAqLworI2RlZmluZSBIQVZFX0xPTkdMT05HIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01BTExPQ19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbW9yeS5oIGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1TR19OT1NJR05BTCBmbGFnLiAqLworI2RlZmluZSBIQVZFX01TR19OT1NJR05BTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUREJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvdGNwLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVElORVRfVENQX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRfSUZfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIFBGX0lORVQ2LiAqLworI2RlZmluZSBIQVZFX1BGX0lORVQ2IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTkQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2V0c29ja29wdCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRTT0NLT1BUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLiAqLworI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyBzaW42X3Njb3BlX2lkLiAqLworI2RlZmluZSBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNvY2tldCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NPQ0tFVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkYm9vbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERCT09MX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNhc2VjbXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjbXBpIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSQ01QSSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyZHVwIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJpY21wIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSSUNNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNhc2VjbXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSTkNBU0VDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNtcGkgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJOQ01QSSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJOSUNNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TVFJPUFRTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgc3RydWN0IGFkZHJpbmZvLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9BRERSSU5GTyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHN0cnVjdCBpbjZfYWRkci4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSU42X0FERFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBzdHJ1Y3Qgc29ja2FkZHJfaW42LiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjYgMQorCisvKiBpZiBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBpcyBkZWZpbmVkICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgdGltZXZhbCBzdHJ1Y3QuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfSU9DVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVUlPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luZG93cy5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV0lORE9XU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5zb2NrMi5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV0lOU09DSzJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luc29jay5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV0lOU09DS19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3cml0ZXYgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV1JJVEVWIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdzMnRjcGlwLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XUzJUQ1BJUF9IICovCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuICovCisjZGVmaW5lIExUX09CSkRJUiAiLmxpYnMvIgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICovCisvKiAjdW5kZWYgTkVFRF9NQUxMT0NfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWVtb3J5LmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICovCisvKiAjdW5kZWYgTkVFRF9NRU1PUllfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBfUkVFTlRSQU5UIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLworLyogI3VuZGVmIE5FRURfUkVFTlRSQU5UICovCisKKy8qIERlZmluZSB0byAxIGlmIF9USFJFQURfU0FGRSBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC4gKi8KKy8qICN1bmRlZiBORUVEX1RIUkVBRF9TQUZFICovCisKKy8qIGNwdS1tYWNoaW5lLU9TICovCisjZGVmaW5lIE9TICJhcm0tdW5rbm93bi1saW51eC1nbnUiCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJjLWFyZXMiCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYy1hcmVzIG1haWxpbmcgbGlzdDogaHR0cDovL2Nvb2wuaGF4eC5zZS9tYWlsbWFuL2xpc3RpbmZvL2MtYXJlcyIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgImMtYXJlcyIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1NUUklORyAiYy1hcmVzIDEuMTIuMCIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImMtYXJlcyIKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiIKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIxLjEyLjAiCisKKy8qIGEgc3VpdGFibGUgZmlsZS9kZXZpY2UgdG8gcmVhZCByYW5kb20gZGF0YSBmcm9tICovCisvKiAjdW5kZWYgUkFORE9NX0ZJTEUgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fUVVBTF9BUkc1IAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIHZvaWQKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUQgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgc2l6ZV90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzUgc3RydWN0IHNvY2thZGRyCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuICovCisvKiAjdW5kZWYgUkVDVkZST01fVFlQRV9BUkc1X0lTX1ZPSUQgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgc29ja2xlbl90CisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuICovCisvKiAjdW5kZWYgUkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUQgKi8KKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMiB2b2lkICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLworI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMiB2b2lkICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI2RlZmluZSBTVERDX0hFQURFUlMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKworLyogRGVmaW5lIHRvIGRpc2FibGUgbm9uLWJsb2NraW5nIHNvY2tldHMuICovCisvKiAjdW5kZWYgVVNFX0JMT0NLSU5HX1NPQ0tFVFMgKi8KKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI2RlZmluZSBWRVJTSU9OICIxLjEyLjAiCisKKy8qIERlZmluZSB0byBhdm9pZCBhdXRvbWF0aWMgaW5jbHVzaW9uIG9mIHdpbnNvY2suaCAqLworLyogI3VuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4gKi8KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byAxIGlmIE9TIGlzIEFJWC4gKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKy8qICMgIHVuZGVmIF9BTExfU09VUkNFICovCisjZW5kaWYKKworLyogRW5hYmxlIGxhcmdlIGlub2RlIG51bWJlcnMgb24gTWFjIE9TIFggMTAuNS4gICovCisjaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQorIyBkZWZpbmUgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFIDEKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisvKiAjdW5kZWYgX0xBUkdFX0ZJTEVTICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIFR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCB3aGVuIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIGl0LiAqLworLyogI3VuZGVmIGluX2FkZHJfdCAqLworCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc2l6ZV90ICovCisKKy8qIHRoZSBzaWduZWQgdmVyc2lvbiBvZiBzaXplX3QgKi8KKy8qICN1bmRlZiBzc2l6ZV90ICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2NvbmZpZy5oLmluIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19jb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFlZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19jb25maWcuaC5pbgpAQCAtMCwwICsxLDUwMSBAQAorLyogYXJlc19jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorCisvKiBkZWZpbmUgdGhpcyBpZiBhcmVzIGlzIGJ1aWx0IGZvciBhIGJpZyBlbmRpYW4gc3lzdGVtICovCisjdW5kZWYgQVJFU19CSUdfRU5ESUFOCisKKy8qIHdoZW4gYnVpbGRpbmcgYXMgc3RhdGljIHBhcnQgb2YgbGliY3VybCAqLworI3VuZGVmIEJVSUxESU5HX0xJQkNVUkwKKworLyogRGVmaW5lZCBmb3IgYnVpbGQgdGhhdCBleHBvc2VzIGludGVybmFsIHN0YXRpYyBmdW5jdGlvbnMgZm9yIHRlc3RpbmcuICovCisjdW5kZWYgQ0FSRVNfRVhQT1NFX1NUQVRJQ1MKKworLyogRGVmaW5lZCBmb3IgYnVpbGQgd2l0aCBzeW1ib2wgaGlkaW5nLiAqLworI3VuZGVmIENBUkVTX1NZTUJPTF9ISURJTkcKKworLyogRGVmaW5pdGlvbiB0byBtYWtlIGEgbGlicmFyeSBzeW1ib2wgZXh0ZXJuYWxseSB2aXNpYmxlLiAqLworI3VuZGVmIENBUkVTX1NZTUJPTF9TQ09QRV9FWFRFUk4KKworLyogVXNlIHJlc29sdmVyIGxpYnJhcnkgdG8gY29uZmlndXJlIGNhcmVzICovCisjdW5kZWYgQ0FSRVNfVVNFX0xJQlJFU09MVgorCisvKiBpZiBhIC9ldGMvaW5ldCBkaXIgaXMgYmVpbmcgdXNlZCAqLworI3VuZGVmIEVUQ19JTkVUCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0aG9zdG5hbWUuICovCisjdW5kZWYgR0VUSE9TVE5BTUVfVFlQRV9BUkcyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI3VuZGVmIEdFVE5BTUVJTkZPX1FVQUxfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldG5hbWVpbmZvLiAqLworI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHMgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzQ2CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCisjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkc3CisKKy8qIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBnZXRzZXJ2Ynlwb3J0X3IgKi8KKyN1bmRlZiBHRVRTRVJWQllQT1JUX1JfQVJHUworCisvKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBwYXNzIHRvIGdldHNlcnZieXBvcnRfciAqLworI3VuZGVmIEdFVFNFUlZCWVBPUlRfUl9CVUZTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIEFGX0lORVQ2LiAqLworI3VuZGVmIEhBVkVfQUZfSU5FVDYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUlBBX0lORVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL25hbWVzZXIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFzc2VydC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FTU0VSVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYml0bmNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9CSVROQ01QCisKKy8qIERlZmluZSB0byAxIGlmIGJvb2wgaXMgYW4gYXZhaWxhYmxlIHR5cGUuICovCisjdW5kZWYgSEFWRV9CT09MX1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNsb2NrX2dldHRpbWUgZnVuY3Rpb24gYW5kIG1vbm90b25pYyB0aW1lci4gKi8KKyN1bmRlZiBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjbG9zZXNvY2tldCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT1NFU09DS0VUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBDbG9zZVNvY2tldCBjYW1lbCBjYXNlIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQ0xPU0VTT0NLRVRfQ0FNRUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNvbm5lY3QgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DT05ORUNUCisKKy8qIGRlZmluZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYmFzaWMgQysrMTEgc3ludGF4ICovCisjdW5kZWYgSEFWRV9DWFgxMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRExGQ05fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRVJSTk9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmNudGwgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GQ05UTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRkNOVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZmNudGwgT19OT05CTE9DSyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZDTlRMX09fTk9OQkxPQ0sKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZyZWVhZGRyaW5mbyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZSRUVBRERSSU5GTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRBRERSSU5GTworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24gaXMgdGhyZWFkc2FmZS4gKi8KKyN1bmRlZiBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGVudiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEVOVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWUgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0bmFtZSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1ROQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVE5BTUVJTkZPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRzZXJ2Ynlwb3J0X3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRTRVJWQllQT1JUX1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVElNRU9GREFZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfaW5kZXh0b25hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSUZfSU5ERVhUT05BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBJUHY2IGNhcGFibGUgd29ya2luZyBpbmV0X25ldF9wdG9uIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5FVF9ORVRfUFRPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbnRvcCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfTlRPUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfcHRvbiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfUFRPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGwgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGxzb2NrZXQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIEZJT05CSU8gZnVuY3Rpb24uCisgICAqLworI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTF9GSU9OQklPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bCBTSU9DR0lGQUREUiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lPQ1RMX1NJT0NHSUZBRERSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2ZScgbGlicmFyeSAoLWxyZXNvbHZlKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU1JVFNfSAorCisvKiBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIExMICovCisjdW5kZWYgSEFWRV9MTAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlICdsb25nIGxvbmcnIGRhdGEgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX0xPTkdMT05HCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01BTExPQ19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy4gKi8KKyN1bmRlZiBIQVZFX01TR19OT1NJR05BTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUREJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L3RjcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfVENQX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRfSUZfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBQRl9JTkVUNi4gKi8KKyN1bmRlZiBIQVZFX1BGX0lORVQ2CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkVDVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SRUNWRlJPTQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFTkQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNldHNvY2tvcHQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRTT0NLT1BUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NJR05BTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi4gKi8KKyN1bmRlZiBIQVZFX1NJR19BVE9NSUNfVAorCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlLiAqLworI3VuZGVmIEhBVkVfU0lHX0FUT01JQ19UX1ZPTEFUSUxFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgc3RydWN0IHNvY2thZGRyX2luNiBoYXMgc2luNl9zY29wZV9pZC4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TT0NLRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TT0NLRVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGJvb2wuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERCT09MX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlY21wIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyY21waSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNNUEkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmR1cCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkRVUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUklDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5jYXNlY21wIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTkNBU0VDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5jbXBpIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTkNNUEkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5pY21wIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTklDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJvcHRzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RST1BUU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHN0cnVjdCBhZGRyaW5mby4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9BRERSSU5GTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBzdHJ1Y3QgaW42X2FkZHIuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSU42X0FERFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX2luNi4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjYKKworLyogaWYgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaXMgZGVmaW5lZCAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHRpbWV2YWwgc3RydWN0LiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1RJTUVWQUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfSU9DVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0VUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91aW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVUlPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVU5JU1REX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbmRvd3MuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTkRPV1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luc29jazIuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlNPQ0syX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2suaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlNPQ0tfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd3JpdGV2IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV1JJVEVWCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3czJ0Y3BpcC5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV1MyVENQSVBfSAorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLiAqLworI3VuZGVmIExUX09CSkRJUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICovCisjdW5kZWYgTkVFRF9NQUxMT0NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWVtb3J5LmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICovCisjdW5kZWYgTkVFRF9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiBfUkVFTlRSQU5UIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLworI3VuZGVmIE5FRURfUkVFTlRSQU5UCisKKy8qIERlZmluZSB0byAxIGlmIF9USFJFQURfU0FGRSBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC4gKi8KKyN1bmRlZiBORUVEX1RIUkVBRF9TQUZFCisKKy8qIGNwdS1tYWNoaW5lLU9TICovCisjdW5kZWYgT1MKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9VUkwKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKworLyogYSBzdWl0YWJsZSBmaWxlL2RldmljZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KKyN1bmRlZiBSQU5ET01fRklMRQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1FVQUxfQVJHNQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20uICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkcyCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzMKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHNQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHNV9JU19WT0lECisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA2IGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzYKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzZfSVNfVk9JRAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX1JFVFYKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI3VuZGVmIFJFQ1ZfVFlQRV9BUkcxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgcmVjdi4gKi8KKyN1bmRlZiBSRUNWX1RZUEVfQVJHMgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjdW5kZWYgUkVDVl9UWVBFX0FSRzMKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI3VuZGVmIFJFQ1ZfVFlQRV9BUkc0CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3YuICovCisjdW5kZWYgUkVDVl9UWVBFX1JFVFYKKworLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCisjdW5kZWYgUkVUU0lHVFlQRQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI3VuZGVmIFNFTkRfUVVBTF9BUkcyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3Igc2VuZC4gKi8KKyN1bmRlZiBTRU5EX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjdW5kZWYgU0VORF9UWVBFX0FSRzIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI3VuZGVmIFNFTkRfVFlQRV9BUkczCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3Igc2VuZC4gKi8KKyN1bmRlZiBTRU5EX1RZUEVfQVJHNAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLiAqLworI3VuZGVmIFNFTkRfVFlQRV9SRVRWCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKyN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKworLyogRGVmaW5lIHRvIGRpc2FibGUgbm9uLWJsb2NraW5nIHNvY2tldHMuICovCisjdW5kZWYgVVNFX0JMT0NLSU5HX1NPQ0tFVFMKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI3VuZGVmIFZFUlNJT04KKworLyogRGVmaW5lIHRvIGF2b2lkIGF1dG9tYXRpYyBpbmNsdXNpb24gb2Ygd2luc29jay5oICovCisjdW5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLworI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgorIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGVuZGlmCisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgaWYgT1MgaXMgQUlYLiAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyAgdW5kZWYgX0FMTF9TT1VSQ0UKKyNlbmRpZgorCisvKiBFbmFibGUgbGFyZ2UgaW5vZGUgbnVtYmVycyBvbiBNYWMgT1MgWCAxMC41LiAgKi8KKyNpZm5kZWYgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFCisjIGRlZmluZSBfREFSV0lOX1VTRV82NF9CSVRfSU5PREUgMQorI2VuZGlmCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCisjdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKworLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLworI3VuZGVmIF9MQVJHRV9GSUxFUworCisvKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KKyN1bmRlZiBjb25zdAorCisvKiBUeXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBpbl9hZGRyX3Qgd2hlbiBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBpdC4gKi8KKyN1bmRlZiBpbl9hZGRyX3QKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisvKiB0aGUgc2lnbmVkIHZlcnNpb24gb2Ygc2l6ZV90ICovCisjdW5kZWYgc3NpemVfdApkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19jcmVhdGVfcXVlcnkuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY3JlYXRlX3F1ZXJ5LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhZjBmMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY3JlYXRlX3F1ZXJ5LjMKQEAgLTAsMCArMSw3NiBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0NSRUFURV9RVUVSWSAzICIxNyBBdWcgMjAxMiIKKy5TSCBOQU1FCithcmVzX2NyZWF0ZV9xdWVyeSBcLSBDb21wb3NlIGEgc2luZ2xlLXF1ZXN0aW9uIEROUyBxdWVyeSBidWZmZXIKKy5TSCBTWU5PUFNJUworLm5mCisjaW5jbHVkZSA8YXJlcy5oPgorCitpbnQgYXJlc19jcmVhdGVfcXVlcnkoY29uc3QgY2hhciAqXGZJbmFtZVxmUCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgXGZJZG5zY2xhc3NcZlAsCisgICAgICAgICAgICAgICAgICAgICAgaW50IFxmSXR5cGVcZlAsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgXGZJaWRcZlAsCisgICAgICAgICAgICAgICAgICAgICAgaW50IFxmSXJkXGZQLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipcZklidWZcZlAsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpcZklidWZsZW5cZlAsCisgICAgICAgICAgICAgICAgICAgICAgaW50IFxmSW1heF91ZHBfc2l6ZVxmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZJYXJlc19jcmVhdGVfcXVlcnkoMylcZlAgZnVuY3Rpb24gY29tcG9zZXMgYSBETlMgcXVlcnkgd2l0aCBhIHNpbmdsZQorcXVlc3Rpb24uICBUaGUgcGFyYW1ldGVyIFxmSW5hbWVcZlAgZ2l2ZXMgdGhlIHF1ZXJ5IG5hbWUgYXMgYSBOVUwtdGVybWluYXRlZCBDCitzdHJpbmcgb2YgcGVyaW9kLXNlcGFyYXRlZCBsYWJlbHMgb3B0aW9uYWxseSBlbmRpbmcgd2l0aCBhIHBlcmlvZDsgcGVyaW9kcyBhbmQKK2JhY2tzbGFzaGVzIHdpdGhpbiBhIGxhYmVsIG11c3QgYmUgZXNjYXBlZCB3aXRoIGEgYmFja2xhc2guCisKK1RoZSBwYXJhbWV0ZXJzIFxmSWRuc2NsYXNzXGZQIGFuZCBcZkl0eXBlXGZQIGdpdmUgdGhlIGNsYXNzIGFuZCB0eXBlIG9mIHRoZQorcXVlcnkgdXNpbmcgdGhlIHZhbHVlcyBkZWZpbmVkIGluIFxmQjxhcnBhL25hbWVzZXIuaD5cZlAuCisKK1RoZSBwYXJhbWV0ZXIgXGZJaWRcZlAgZ2l2ZXMgYSAxNi1iaXQgaWRlbnRpZmllciBmb3IgdGhlIHF1ZXJ5LgorCitUaGUgcGFyYW1ldGVyIFxmSXJkXGZQIHNob3VsZCBiZSBub256ZXJvIGlmIHJlY3Vyc2lvbiBpcyBkZXNpcmVkLCB6ZXJvIGlmIG5vdC4KKworVGhlIHF1ZXJ5IHdpbGwgYmUgcGxhY2VkIGluIGFuIGFsbG9jYXRlZCBidWZmZXIsIGEgcG9pbnRlciB0byB3aGljaCB3aWxsIGJlCitzdG9yZWQgaW4gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgXGZJYnVmXGZQLCBhbmQgdGhlIGxlbmd0aCBvZiB3aGljaCB3aWxsCitiZSBzdG9yZWQgaW4gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgXGZJYnVmbGVuXGZQLgorCitJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGlzIGJ1ZmZlciB1c2luZworXGZJYXJlc19mcmVlX3N0cmluZygzKVxmUCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuICBUaGUgcGFyYW1ldGVyCitcZkltYXhfdWRwX3NpemVcZlAgc2hvdWxkIGJlIG5vbnplcm8gdG8gYWN0aXZhdGUgRUROUy4gVXNhZ2Ugb2YKK1xmSWFyZXNfY3JlYXRlX3F1ZXJ5KDMpXGZQXCB3aXRoIFxmSW1heF91ZHBfc2l6ZVxmUCBzZXQgdG8gemVybyBpcyBlcXVpdmFsZW50Cit0byB1c2luZyBcZklhcmVzX21rcXVlcnkoMylcZlAuCisuU0ggUkVUVVJOIFZBTFVFUworLkIgYXJlc19jcmVhdGVfcXVlcnkKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK0NvbnN0cnVjdGlvbiBvZiB0aGUgRE5TIHF1ZXJ5IHN1Y2NlZWRlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFETkFNRQorVGhlIHF1ZXJ5IG5hbWUKKy5JIG5hbWUKK2NvdWxkIG5vdCBiZSBlbmNvZGVkIGFzIGEgZG9tYWluIG5hbWUsIGVpdGhlciBiZWNhdXNlIGl0IGNvbnRhaW5lZCBhCit6ZXJvLWxlbmd0aCBsYWJlbCBvciBiZWNhdXNlIGl0IGNvbnRhaW5lZCBhIGxhYmVsIG9mIG1vcmUgdGhhbiA2MworY2hhcmFjdGVycy4KKy5UUCAxNQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlNIIEFWQUlMQUJJTElUWQorQWRkZWQgaW4gYy1hcmVzIDEuMTAuMAorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19leHBhbmRfbmFtZSAoMyksCisuQlIgYXJlc19mcmVlX3N0cmluZyAoMyksCisuQlIgYXJlc19ta3F1ZXJ5ICgzKQorLlNIIEFVVEhPUgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19jcmVhdGVfcXVlcnkuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY3JlYXRlX3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0YzUyZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfY3JlYXRlX3F1ZXJ5LmMKQEAgLTAsMCArMSwyMDIgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNlbHNlCisjICBpbmNsdWRlICJuYW1lc2VyLmgiCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9DT01QQVRfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyX2NvbXBhdC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19kbnMuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworI2lmbmRlZiBUX09QVAorIyAgZGVmaW5lIFRfT1BUICA0MSAvKiBFRE5TMCBvcHRpb24gKG1ldGEtUlIpICovCisjZW5kaWYKKworLyogSGVhZGVyIGZvcm1hdCwgZnJvbSBSRkMgMTAzNToKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDEgIDEgIDEgIDEgIDEKKyAqICAgIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgIDAgIDEgIDIgIDMgIDQgIDUKKyAqICArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCisgKiAgfCAgICAgICAgICAgICAgICAgICAgICBJRCAgICAgICAgICAgICAgICAgICAgICAgfAorICogICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyAqICB8UVJ8ICAgT3Bjb2RlICB8QUF8VEN8UkR8UkF8ICAgWiAgICB8ICAgUkNPREUgICB8CisgKiAgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKworICogIHwgICAgICAgICAgICAgICAgICAgIFFEQ09VTlQgICAgICAgICAgICAgICAgICAgIHwKKyAqICArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCisgKiAgfCAgICAgICAgICAgICAgICAgICAgQU5DT1VOVCAgICAgICAgICAgICAgICAgICAgfAorICogICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyAqICB8ICAgICAgICAgICAgICAgICAgICBOU0NPVU5UICAgICAgICAgICAgICAgICAgICB8CisgKiAgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKworICogIHwgICAgICAgICAgICAgICAgICAgIEFSQ09VTlQgICAgICAgICAgICAgICAgICAgIHwKKyAqICArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCisgKgorICogQUEsIFRDLCBSQSwgYW5kIFJDT0RFIGFyZSBvbmx5IHNldCBpbiByZXNwb25zZXMuICBCcmllZiBkZXNjcmlwdGlvbgorICogb2YgdGhlIHJlbWFpbmluZyBmaWVsZHM6CisgKiAgICAgIElEICAgICAgSWRlbnRpZmllciB0byBtYXRjaCByZXNwb25zZXMgd2l0aCBxdWVyaWVzCisgKiAgICAgIFFSICAgICAgUXVlcnkgKDApIG9yIHJlc3BvbnNlICgxKQorICogICAgICBPcGNvZGUgIEZvciBvdXIgcHVycG9zZXMsIGFsd2F5cyBRVUVSWQorICogICAgICBSRCAgICAgIFJlY3Vyc2lvbiBkZXNpcmVkCisgKiAgICAgIFogICAgICAgUmVzZXJ2ZWQgKHplcm8pCisgKiAgICAgIFFEQ09VTlQgTnVtYmVyIG9mIHF1ZXJpZXMKKyAqICAgICAgQU5DT1VOVCBOdW1iZXIgb2YgYW5zd2VycworICogICAgICBOU0NPVU5UIE51bWJlciBvZiBuYW1lIHNlcnZlciByZWNvcmRzCisgKiAgICAgIEFSQ09VTlQgTnVtYmVyIG9mIGFkZGl0aW9uYWwgcmVjb3JkcworICoKKyAqIFF1ZXN0aW9uIGZvcm1hdCwgZnJvbSBSRkMgMTAzNToKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDEgIDEgIDEgIDEgIDEKKyAqICAgIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgIDAgIDEgIDIgIDMgIDQgIDUKKyAqICArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCisgKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogIC8gICAgICAgICAgICAgICAgICAgICBRTkFNRSAgICAgICAgICAgICAgICAgICAgIC8KKyAqICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCisgKiAgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKworICogIHwgICAgICAgICAgICAgICAgICAgICBRVFlQRSAgICAgICAgICAgICAgICAgICAgIHwKKyAqICArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCisgKiAgfCAgICAgICAgICAgICAgICAgICAgIFFDTEFTUyAgICAgICAgICAgICAgICAgICAgfAorICogICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyAqCisgKiBUaGUgcXVlcnkgbmFtZSBpcyBlbmNvZGVkIGFzIGEgc2VyaWVzIG9mIGxhYmVscywgZWFjaCByZXByZXNlbnRlZAorICogYXMgYSBvbmUtYnl0ZSBsZW5ndGggKG1heGltdW0gNjMpIGZvbGxvd2VkIGJ5IHRoZSB0ZXh0IG9mIHRoZQorICogbGFiZWwuICBUaGUgbGlzdCBpcyB0ZXJtaW5hdGVkIGJ5IGEgbGFiZWwgb2YgbGVuZ3RoIHplcm8gKHdoaWNoIGNhbgorICogYmUgdGhvdWdodCBvZiBhcyB0aGUgcm9vdCBkb21haW4pLgorICovCisKK2ludCBhcmVzX2NyZWF0ZV9xdWVyeShjb25zdCBjaGFyICpuYW1lLCBpbnQgZG5zY2xhc3MsIGludCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGlkLCBpbnQgcmQsIHVuc2lnbmVkIGNoYXIgKipidWZwLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqYnVmbGVucCwgaW50IG1heF91ZHBfc2l6ZSkKK3sKKyAgc2l6ZV90IGxlbjsKKyAgdW5zaWduZWQgY2hhciAqcTsKKyAgY29uc3QgY2hhciAqcDsKKyAgc2l6ZV90IGJ1ZmxlbjsKKyAgdW5zaWduZWQgY2hhciAqYnVmOworCisgIC8qIFNldCBvdXIgcmVzdWx0cyBlYXJseSwgaW4gY2FzZSB3ZSBiYWlsIG91dCBlYXJseSB3aXRoIGFuIGVycm9yLiAqLworICAqYnVmbGVucCA9IDA7CisgICpidWZwID0gTlVMTDsKKworICAvKiBBbGxvY2F0ZSBhIG1lbW9yeSBhcmVhIGZvciB0aGUgbWF4aW11bSBzaXplIHRoaXMgcGFja2V0IG1pZ2h0IG5lZWQuICsyCisgICAqIGlzIGZvciB0aGUgbGVuZ3RoIGJ5dGUgYW5kIHplcm8gdGVybWluYXRpb24gaWYgbm8gZG90cyBvciBlY3NjYXBpbmcgaXMKKyAgICogdXNlZC4KKyAgICovCisgIGxlbiA9IHN0cmxlbihuYW1lKSArIDIgKyBIRklYRURTWiArIFFGSVhFRFNaICsKKyAgICAobWF4X3VkcF9zaXplID8gRUROU0ZJWEVEU1ogOiAwKTsKKyAgYnVmID0gYXJlc19tYWxsb2MobGVuKTsKKyAgaWYgKCFidWYpCisgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworCisgIC8qIFNldCB1cCB0aGUgaGVhZGVyLiAqLworICBxID0gYnVmOworICBtZW1zZXQocSwgMCwgSEZJWEVEU1opOworICBETlNfSEVBREVSX1NFVF9RSUQocSwgaWQpOworICBETlNfSEVBREVSX1NFVF9PUENPREUocSwgUVVFUlkpOworICBpZiAocmQpIHsKKyAgICBETlNfSEVBREVSX1NFVF9SRChxLCAxKTsKKyAgfQorICBlbHNlIHsKKyAgICBETlNfSEVBREVSX1NFVF9SRChxLCAwKTsKKyAgfQorICBETlNfSEVBREVSX1NFVF9RRENPVU5UKHEsIDEpOworCisgIGlmIChtYXhfdWRwX3NpemUpIHsKKyAgICAgIEROU19IRUFERVJfU0VUX0FSQ09VTlQocSwgMSk7CisgIH0KKworICAvKiBBIG5hbWUgb2YgIi4iIGlzIGEgc2NyZXcgY2FzZSBmb3IgdGhlIGxvb3AgYmVsb3csIHNvIGFkanVzdCBpdC4gKi8KKyAgaWYgKHN0cmNtcChuYW1lLCAiLiIpID09IDApCisgICAgbmFtZSsrOworCisgIC8qIFN0YXJ0IHdyaXRpbmcgb3V0IHRoZSBuYW1lIGFmdGVyIHRoZSBoZWFkZXIuICovCisgIHEgKz0gSEZJWEVEU1o7CisgIHdoaWxlICgqbmFtZSkKKyAgICB7CisgICAgICBpZiAoKm5hbWUgPT0gJy4nKSB7CisgICAgICAgIGZyZWUgKGJ1Zik7CisgICAgICAgIHJldHVybiBBUkVTX0VCQUROQU1FOworICAgICAgfQorCisgICAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoaXMgbGFiZWwuICovCisgICAgICBsZW4gPSAwOworICAgICAgZm9yIChwID0gbmFtZTsgKnAgJiYgKnAgIT0gJy4nOyBwKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnAgPT0gJ1xcJyAmJiAqKHAgKyAxKSAhPSAwKQorICAgICAgICAgICAgcCsrOworICAgICAgICAgIGxlbisrOworICAgICAgICB9CisgICAgICBpZiAobGVuID4gTUFYTEFCRUwpIHsKKyAgICAgICAgZnJlZSAoYnVmKTsKKyAgICAgICAgcmV0dXJuIEFSRVNfRUJBRE5BTUU7CisgICAgICB9CisKKyAgICAgIC8qIEVuY29kZSB0aGUgbGVuZ3RoIGFuZCBjb3B5IHRoZSBkYXRhLiAqLworICAgICAgKnErKyA9ICh1bnNpZ25lZCBjaGFyKWxlbjsKKyAgICAgIGZvciAocCA9IG5hbWU7ICpwICYmICpwICE9ICcuJzsgcCsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCpwID09ICdcXCcgJiYgKihwICsgMSkgIT0gMCkKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAqcSsrID0gKnA7CisgICAgICAgIH0KKworICAgICAgLyogR28gdG8gdGhlIG5leHQgbGFiZWwgYW5kIHJlcGVhdCwgdW5sZXNzIHdlIGhpdCB0aGUgZW5kLiAqLworICAgICAgaWYgKCEqcCkKKyAgICAgICAgYnJlYWs7CisgICAgICBuYW1lID0gcCArIDE7CisgICAgfQorCisgIC8qIEFkZCB0aGUgemVyby1sZW5ndGggbGFiZWwgYXQgdGhlIGVuZC4gKi8KKyAgKnErKyA9IDA7CisKKyAgLyogRmluaXNoIG9mZiB0aGUgcXVlc3Rpb24gd2l0aCB0aGUgdHlwZSBhbmQgY2xhc3MuICovCisgIEROU19RVUVTVElPTl9TRVRfVFlQRShxLCB0eXBlKTsKKyAgRE5TX1FVRVNUSU9OX1NFVF9DTEFTUyhxLCBkbnNjbGFzcyk7CisKKyAgcSArPSBRRklYRURTWjsKKyAgaWYgKG1heF91ZHBfc2l6ZSkKKyAgeworICAgICAgbWVtc2V0KHEsIDAsIEVETlNGSVhFRFNaKTsKKyAgICAgIHErKzsKKyAgICAgIEROU19SUl9TRVRfVFlQRShxLCBUX09QVCk7CisgICAgICBETlNfUlJfU0VUX0NMQVNTKHEsIG1heF91ZHBfc2l6ZSk7CisgICAgICBxICs9IChFRE5TRklYRURTWi0xKTsKKyAgfQorICBidWZsZW4gPSAocSAtIGJ1Zik7CisKKyAgLyogUmVqZWN0IG5hbWVzIHRoYXQgYXJlIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDI1NSBieXRlcyB0aGF0J3MKKyAgICogc3BlY2lmaWVkIGluIFJGQyAxMDM1ICgiVG8gc2ltcGxpZnkgaW1wbGVtZW50YXRpb25zLCB0aGUgdG90YWwgbGVuZ3RoIG9mCisgICAqIGEgZG9tYWluIG5hbWUgKGkuZS4sIGxhYmVsIG9jdGV0cyBhbmQgbGFiZWwgbGVuZ3RoIG9jdGV0cykgaXMgcmVzdHJpY3RlZAorICAgKiB0byAyNTUgb2N0ZXRzIG9yIGxlc3MuIikuICovCisgIGlmIChidWZsZW4gPiAoTUFYQ0ROQU1FICsgSEZJWEVEU1ogKyBRRklYRURTWiArCisgICAgICAgICAgICAgICAgKG1heF91ZHBfc2l6ZSA/IEVETlNGSVhFRFNaIDogMCkpKSB7CisgICAgZnJlZSAoYnVmKTsKKyAgICByZXR1cm4gQVJFU19FQkFETkFNRTsKKyAgfQorCisgIC8qIHdlIGtub3cgdGhpcyBmaXRzIGluIGFuIGludCBhdCB0aGlzIHBvaW50ICovCisgICpidWZsZW5wID0gKGludCkgYnVmbGVuOworICAqYnVmcCA9IGJ1ZjsKKworICByZXR1cm4gQVJFU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kYXRhLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODkxMTEzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kYXRhLmMKQEAgLTAsMCArMSwyMjEgQEAKKworLyogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19kYXRhLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKKworLyoKKyoqIGFyZXNfZnJlZV9kYXRhKCkgLSBjLWFyZXMgZXh0ZXJuYWwgQVBJIGZ1bmN0aW9uLgorKioKKyoqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBmcmVlIGRhdGEgbWVtb3J5IHRoYXQKKyoqIGhhcyBiZWVuIGludGVybmFsbHkgYWxsb2NhdGVkIGJ5IHNvbWUgYy1hcmVzIGZ1bmN0aW9uIGFuZCBmb3Igd2hpY2ggYQorKiogcG9pbnRlciBoYXMgYWxyZWFkeSBiZWVuIHJldHVybmVkIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBUaGUgbGlzdAorKiogb2YgYy1hcmVzIGZ1bmN0aW9ucyByZXR1cm5pbmcgcG9pbnRlcnMgdGhhdCBtdXN0IGJlIGZyZWUnZWQgdXNpbmcgdGhpcworKiogZnVuY3Rpb24gaXM6CisqKgorKiogICBhcmVzX2dldF9zZXJ2ZXJzKCkKKyoqICAgYXJlc19wYXJzZV9zcnZfcmVwbHkoKQorKiogICBhcmVzX3BhcnNlX3R4dF9yZXBseSgpCisqLworCit2b2lkIGFyZXNfZnJlZV9kYXRhKHZvaWQgKmRhdGFwdHIpCit7CisgIHN0cnVjdCBhcmVzX2RhdGEgKnB0cjsKKworICBpZiAoIWRhdGFwdHIpCisgICAgcmV0dXJuOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6MTY4NCkKKyAgIC8qIDE2ODQ6IGNvbnZlcnNpb24gZnJvbSBwb2ludGVyIHRvIHNhbWUtc2l6ZWQgaW50ZWdyYWwgdHlwZSAqLworI2VuZGlmCisKKyAgcHRyID0gKHZvaWQgKikoKGNoYXIgKilkYXRhcHRyIC0gb2Zmc2V0b2Yoc3RydWN0IGFyZXNfZGF0YSwgZGF0YSkpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisKKyAgaWYgKHB0ci0+bWFyayAhPSBBUkVTX0RBVEFUWVBFX01BUkspCisgICAgcmV0dXJuOworCisgIHN3aXRjaCAocHRyLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgQVJFU19EQVRBVFlQRV9NWF9SRVBMWToKKworICAgICAgICBpZiAocHRyLT5kYXRhLm14X3JlcGx5Lm5leHQpCisgICAgICAgICAgYXJlc19mcmVlX2RhdGEocHRyLT5kYXRhLm14X3JlcGx5Lm5leHQpOworICAgICAgICBpZiAocHRyLT5kYXRhLm14X3JlcGx5Lmhvc3QpCisgICAgICAgICAgYXJlc19mcmVlKHB0ci0+ZGF0YS5teF9yZXBseS5ob3N0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQVJFU19EQVRBVFlQRV9TUlZfUkVQTFk6CisKKyAgICAgICAgaWYgKHB0ci0+ZGF0YS5zcnZfcmVwbHkubmV4dCkKKyAgICAgICAgICBhcmVzX2ZyZWVfZGF0YShwdHItPmRhdGEuc3J2X3JlcGx5Lm5leHQpOworICAgICAgICBpZiAocHRyLT5kYXRhLnNydl9yZXBseS5ob3N0KQorICAgICAgICAgIGFyZXNfZnJlZShwdHItPmRhdGEuc3J2X3JlcGx5Lmhvc3QpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBUkVTX0RBVEFUWVBFX1RYVF9SRVBMWToKKyAgICAgIGNhc2UgQVJFU19EQVRBVFlQRV9UWFRfRVhUOgorCisgICAgICAgIGlmIChwdHItPmRhdGEudHh0X3JlcGx5Lm5leHQpCisgICAgICAgICAgYXJlc19mcmVlX2RhdGEocHRyLT5kYXRhLnR4dF9yZXBseS5uZXh0KTsKKyAgICAgICAgaWYgKHB0ci0+ZGF0YS50eHRfcmVwbHkudHh0KQorICAgICAgICAgIGFyZXNfZnJlZShwdHItPmRhdGEudHh0X3JlcGx5LnR4dCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFSRVNfREFUQVRZUEVfQUREUl9OT0RFOgorCisgICAgICAgIGlmIChwdHItPmRhdGEuYWRkcl9ub2RlLm5leHQpCisgICAgICAgICAgYXJlc19mcmVlX2RhdGEocHRyLT5kYXRhLmFkZHJfbm9kZS5uZXh0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQVJFU19EQVRBVFlQRV9BRERSX1BPUlRfTk9ERToKKworICAgICAgICBpZiAocHRyLT5kYXRhLmFkZHJfcG9ydF9ub2RlLm5leHQpCisgICAgICAgICAgYXJlc19mcmVlX2RhdGEocHRyLT5kYXRhLmFkZHJfcG9ydF9ub2RlLm5leHQpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBUkVTX0RBVEFUWVBFX05BUFRSX1JFUExZOgorCisgICAgICAgIGlmIChwdHItPmRhdGEubmFwdHJfcmVwbHkubmV4dCkKKyAgICAgICAgICBhcmVzX2ZyZWVfZGF0YShwdHItPmRhdGEubmFwdHJfcmVwbHkubmV4dCk7CisgICAgICAgIGlmIChwdHItPmRhdGEubmFwdHJfcmVwbHkuZmxhZ3MpCisgICAgICAgICAgYXJlc19mcmVlKHB0ci0+ZGF0YS5uYXB0cl9yZXBseS5mbGFncyk7CisgICAgICAgIGlmIChwdHItPmRhdGEubmFwdHJfcmVwbHkuc2VydmljZSkKKyAgICAgICAgICBhcmVzX2ZyZWUocHRyLT5kYXRhLm5hcHRyX3JlcGx5LnNlcnZpY2UpOworICAgICAgICBpZiAocHRyLT5kYXRhLm5hcHRyX3JlcGx5LnJlZ2V4cCkKKyAgICAgICAgICBhcmVzX2ZyZWUocHRyLT5kYXRhLm5hcHRyX3JlcGx5LnJlZ2V4cCk7CisgICAgICAgIGlmIChwdHItPmRhdGEubmFwdHJfcmVwbHkucmVwbGFjZW1lbnQpCisgICAgICAgICAgYXJlc19mcmVlKHB0ci0+ZGF0YS5uYXB0cl9yZXBseS5yZXBsYWNlbWVudCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFSRVNfREFUQVRZUEVfU09BX1JFUExZOgorICAgICAgICBpZiAocHRyLT5kYXRhLnNvYV9yZXBseS5uc25hbWUpCisgICAgICAgICAgYXJlc19mcmVlKHB0ci0+ZGF0YS5zb2FfcmVwbHkubnNuYW1lKTsKKyAgICAgICAgaWYgKHB0ci0+ZGF0YS5zb2FfcmVwbHkuaG9zdG1hc3RlcikKKyAgICAgICAgICBhcmVzX2ZyZWUocHRyLT5kYXRhLnNvYV9yZXBseS5ob3N0bWFzdGVyKTsKKwlicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICBhcmVzX2ZyZWUocHRyKTsKK30KKworCisvKgorKiogYXJlc19tYWxsb2NfZGF0YSgpIC0gYy1hcmVzIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4KKyoqCisqKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgYy1hcmVzIHByaXZhdGUgYXJlc19kYXRhIHN0cnVjdAorKiogZm9yIHRoZSBzcGVjaWZpZWQgYXJlc19kYXRhdHlwZSwgaW5pdGlhbGl6ZXMgYy1hcmVzIHByaXZhdGUgZmllbGRzCisqKiBhbmQgemVybyBpbml0aWFsaXplcyB0aG9zZSB3aGljaCBsYXRlciBtaWdodCBiZSB1c2VkIGZyb20gdGhlIHB1YmxpYworKiogQVBJLiBJdCByZXR1cm5zIGFuIGludGVyaW9yIHBvaW50ZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCBieSBjLWFyZXMKKyoqIGZ1bmN0aW9ucyB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiwgYW5kIHRoYXQgbXVzdCBiZSBmcmVlJ2VkIHVzaW5nCisqKiBjLWFyZXMgZXh0ZXJuYWwgQVBJIGZ1bmN0aW9uIGFyZXNfZnJlZV9kYXRhKCkuCisqLworCit2b2lkICphcmVzX21hbGxvY19kYXRhKGFyZXNfZGF0YXR5cGUgdHlwZSkKK3sKKyAgc3RydWN0IGFyZXNfZGF0YSAqcHRyOworCisgIHB0ciA9IGFyZXNfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXJlc19kYXRhKSk7CisgIGlmICghcHRyKQorICAgIHJldHVybiBOVUxMOworCisgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEFSRVNfREFUQVRZUEVfTVhfUkVQTFk6CisgICAgICAgIHB0ci0+ZGF0YS5teF9yZXBseS5uZXh0ID0gTlVMTDsKKyAgICAgICAgcHRyLT5kYXRhLm14X3JlcGx5Lmhvc3QgPSBOVUxMOworICAgICAgICBwdHItPmRhdGEubXhfcmVwbHkucHJpb3JpdHkgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBUkVTX0RBVEFUWVBFX1NSVl9SRVBMWToKKyAgICAgICAgcHRyLT5kYXRhLnNydl9yZXBseS5uZXh0ID0gTlVMTDsKKyAgICAgICAgcHRyLT5kYXRhLnNydl9yZXBseS5ob3N0ID0gTlVMTDsKKyAgICAgICAgcHRyLT5kYXRhLnNydl9yZXBseS5wcmlvcml0eSA9IDA7CisgICAgICAgIHB0ci0+ZGF0YS5zcnZfcmVwbHkud2VpZ2h0ID0gMDsKKyAgICAgICAgcHRyLT5kYXRhLnNydl9yZXBseS5wb3J0ID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQVJFU19EQVRBVFlQRV9UWFRfRVhUOgorICAgICAgICBwdHItPmRhdGEudHh0X2V4dC5yZWNvcmRfc3RhcnQgPSAwOworICAgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgICBjYXNlIEFSRVNfREFUQVRZUEVfVFhUX1JFUExZOgorICAgICAgICBwdHItPmRhdGEudHh0X3JlcGx5Lm5leHQgPSBOVUxMOworICAgICAgICBwdHItPmRhdGEudHh0X3JlcGx5LnR4dCA9IE5VTEw7CisgICAgICAgIHB0ci0+ZGF0YS50eHRfcmVwbHkubGVuZ3RoID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQVJFU19EQVRBVFlQRV9BRERSX05PREU6CisgICAgICAgIHB0ci0+ZGF0YS5hZGRyX25vZGUubmV4dCA9IE5VTEw7CisgICAgICAgIHB0ci0+ZGF0YS5hZGRyX25vZGUuZmFtaWx5ID0gMDsKKyAgICAgICAgbWVtc2V0KCZwdHItPmRhdGEuYWRkcl9ub2RlLmFkZHJWNiwgMCwKKyAgICAgICAgICAgICAgIHNpemVvZihwdHItPmRhdGEuYWRkcl9ub2RlLmFkZHJWNikpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBUkVTX0RBVEFUWVBFX0FERFJfUE9SVF9OT0RFOgorICAgICAgICBwdHItPmRhdGEuYWRkcl9wb3J0X25vZGUubmV4dCA9IE5VTEw7CisgICAgICAgIHB0ci0+ZGF0YS5hZGRyX3BvcnRfbm9kZS5mYW1pbHkgPSAwOworICAgICAgICBwdHItPmRhdGEuYWRkcl9wb3J0X25vZGUudWRwX3BvcnQgPSAwOworICAgICAgICBwdHItPmRhdGEuYWRkcl9wb3J0X25vZGUudGNwX3BvcnQgPSAwOworICAgICAgICBtZW1zZXQoJnB0ci0+ZGF0YS5hZGRyX3BvcnRfbm9kZS5hZGRyVjYsIDAsCisgICAgICAgICAgICAgICBzaXplb2YocHRyLT5kYXRhLmFkZHJfcG9ydF9ub2RlLmFkZHJWNikpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBUkVTX0RBVEFUWVBFX05BUFRSX1JFUExZOgorICAgICAgICBwdHItPmRhdGEubmFwdHJfcmVwbHkubmV4dCA9IE5VTEw7CisgICAgICAgIHB0ci0+ZGF0YS5uYXB0cl9yZXBseS5mbGFncyA9IE5VTEw7CisgICAgICAgIHB0ci0+ZGF0YS5uYXB0cl9yZXBseS5zZXJ2aWNlID0gTlVMTDsKKyAgICAgICAgcHRyLT5kYXRhLm5hcHRyX3JlcGx5LnJlZ2V4cCA9IE5VTEw7CisgICAgICAgIHB0ci0+ZGF0YS5uYXB0cl9yZXBseS5yZXBsYWNlbWVudCA9IE5VTEw7CisgICAgICAgIHB0ci0+ZGF0YS5uYXB0cl9yZXBseS5vcmRlciA9IDA7CisgICAgICAgIHB0ci0+ZGF0YS5uYXB0cl9yZXBseS5wcmVmZXJlbmNlID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQVJFU19EQVRBVFlQRV9TT0FfUkVQTFk6CisgICAgICAgIHB0ci0+ZGF0YS5zb2FfcmVwbHkubnNuYW1lID0gTlVMTDsKKyAgICAgICAgcHRyLT5kYXRhLnNvYV9yZXBseS5ob3N0bWFzdGVyID0gTlVMTDsKKyAgICAgICAgcHRyLT5kYXRhLnNvYV9yZXBseS5zZXJpYWwgPSAwOworICAgICAgICBwdHItPmRhdGEuc29hX3JlcGx5LnJlZnJlc2ggPSAwOworICAgICAgICBwdHItPmRhdGEuc29hX3JlcGx5LnJldHJ5ID0gMDsKKyAgICAgICAgcHRyLT5kYXRhLnNvYV9yZXBseS5leHBpcmUgPSAwOworICAgICAgICBwdHItPmRhdGEuc29hX3JlcGx5Lm1pbnR0bCA9IDA7CisJYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFyZXNfZnJlZShwdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcHRyLT5tYXJrID0gQVJFU19EQVRBVFlQRV9NQVJLOworICBwdHItPnR5cGUgPSB0eXBlOworCisgIHJldHVybiAmcHRyLT5kYXRhOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kYXRhLmggYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmVlMmJlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kYXRhLmgKQEAgLTAsMCArMSw3MiBAQAorCisvKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBieSBEYW5pZWwgU3RlbmJlcmcKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCit0eXBlZGVmIGVudW0geworICBBUkVTX0RBVEFUWVBFX1VOS05PV04gPSAxLCAgLyogdW5rbm93biBkYXRhIHR5cGUgICAgIC0gaW50cm9kdWNlZCBpbiAxLjcuMCAqLworICBBUkVTX0RBVEFUWVBFX1NSVl9SRVBMWSwgICAgLyogc3RydWN0IGFyZXNfc3J2X3JlcGx5IC0gaW50cm9kdWNlZCBpbiAxLjcuMCAqLworICBBUkVTX0RBVEFUWVBFX1RYVF9SRVBMWSwgICAgLyogc3RydWN0IGFyZXNfdHh0X3JlcGx5IC0gaW50cm9kdWNlZCBpbiAxLjcuMCAqLworICBBUkVTX0RBVEFUWVBFX1RYVF9FWFQsICAgICAgLyogc3RydWN0IGFyZXNfdHh0X2V4dCAgIC0gaW50cm9kdWNlZCBpbiAxLjExLjAgKi8KKyAgQVJFU19EQVRBVFlQRV9BRERSX05PREUsICAgIC8qIHN0cnVjdCBhcmVzX2FkZHJfbm9kZSAtIGludHJvZHVjZWQgaW4gMS43LjEgKi8KKyAgQVJFU19EQVRBVFlQRV9NWF9SRVBMWSwgICAgLyogc3RydWN0IGFyZXNfbXhfcmVwbHkgICAtIGludHJvZHVjZWQgaW4gMS43LjIgKi8KKyAgQVJFU19EQVRBVFlQRV9OQVBUUl9SRVBMWSwvKiBzdHJ1Y3QgYXJlc19uYXB0cl9yZXBseSAtIGludHJvZHVjZWQgaW4gMS43LjYgKi8KKyAgQVJFU19EQVRBVFlQRV9TT0FfUkVQTFksICAgIC8qIHN0cnVjdCBhcmVzX3NvYV9yZXBseSAtIGludHJvZHVjZWQgaW4gMS45LjAgKi8KKyNpZiAwCisgIEFSRVNfREFUQVRZUEVfQUREUjZUVEwsICAgICAvKiBzdHJ1Y3QgYXJlc19hZGRydHRsICAgKi8KKyAgQVJFU19EQVRBVFlQRV9BRERSVFRMLCAgICAgIC8qIHN0cnVjdCBhcmVzX2FkZHI2dHRsICAqLworICBBUkVTX0RBVEFUWVBFX0hPU1RFTlQsICAgICAgLyogc3RydWN0IGhvc3RlbnQgICAgICAgICovCisgIEFSRVNfREFUQVRZUEVfT1BUSU9OUywgICAgICAvKiBzdHJ1Y3QgYXJlc19vcHRpb25zICAgKi8KKyNlbmRpZgorICBBUkVTX0RBVEFUWVBFX0FERFJfUE9SVF9OT0RFLCAvKiBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSAtIGludHJvZHVjZWQgaW4gMS4xMS4wICovCisgIEFSRVNfREFUQVRZUEVfTEFTVCAgICAgICAgICAvKiBub3QgdXNlZCAgICAgICAgICAgICAgLSBpbnRyb2R1Y2VkIGluIDEuNy4wICovCit9IGFyZXNfZGF0YXR5cGU7CisKKyNkZWZpbmUgQVJFU19EQVRBVFlQRV9NQVJLIDB4YmVhZAorCisvKgorICogYXJlc19kYXRhIHN0cnVjdCBkZWZpbml0aW9uIGlzIGludGVybmFsIHRvIGMtYXJlcyBhbmQgc2hhbGwgbm90CisgKiBiZSBleHBvc2VkIGJ5IHRoZSBwdWJsaWMgQVBJIGluIG9yZGVyIHRvIGFsbG93IGZ1dHVyZSBjaGFuZ2VzCisgKiBhbmQgZXh0ZW5zaW9ucyB0byBpdCB3aXRob3V0IGJyZWFraW5nIEFCSS4gIFRoaXMgd2lsbCBiZSB1c2VkCisgKiBpbnRlcm5hbGx5IGJ5IGMtYXJlcyBhcyB0aGUgY29udGFpbmVyIG9mIG11bHRpcGxlIHR5cGVzIG9mIGRhdGEKKyAqIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBmb3Igd2hpY2ggYSByZWZlcmVuY2Ugd2lsbCBiZSByZXR1cm5lZAorICogdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uCisgKgorICogYy1hcmVzIEFQSSBmdW5jdGlvbnMgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBjLWFyZXMgaW50ZXJuYWxseQorICogYWxsb2NhdGVkIGRhdGEgd2lsbCBhY3R1YWxseSBiZSByZXR1cm5pbmcgYW4gaW50ZXJpb3IgcG9pbnRlcgorICogaW50byB0aGlzIGFyZXNfZGF0YSBzdHJ1Y3QuCisgKgorICogQWxsIHRoaXMgaXMgJ2ludmlzaWJsZScgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24sIHRoZSBvbmx5CisgKiByZXF1aXJlbWVudCBpcyB0aGF0IHRoaXMga2luZCBvZiBkYXRhIG11c3QgYmUgZnJlZSdlZCBieSB0aGUKKyAqIGNhbGxpbmcgYXBwbGljYXRpb24gdXNpbmcgYXJlc19mcmVlX2RhdGEoKSB3aXRoIHRoZSBwb2ludGVyCisgKiBpdCBoYXMgcmVjZWl2ZWQgZnJvbSBhIHByZXZpb3VzIGMtYXJlcyBmdW5jdGlvbiBjYWxsLgorICovCisKK3N0cnVjdCBhcmVzX2RhdGEgeworICBhcmVzX2RhdGF0eXBlIHR5cGU7ICAvKiBBY3R1YWwgZGF0YSB0eXBlIGlkZW50aWZpZXIuICovCisgIHVuc2lnbmVkIGludCAgbWFyazsgIC8qIFByaXZhdGUgYXJlc19kYXRhIHNpZ25hdHVyZS4gKi8KKyAgdW5pb24geworICAgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSAgICB0eHRfcmVwbHk7CisgICAgc3RydWN0IGFyZXNfdHh0X2V4dCAgICAgIHR4dF9leHQ7CisgICAgc3RydWN0IGFyZXNfc3J2X3JlcGx5ICAgIHNydl9yZXBseTsKKyAgICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgICAgYWRkcl9ub2RlOworICAgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlICBhZGRyX3BvcnRfbm9kZTsKKyAgICBzdHJ1Y3QgYXJlc19teF9yZXBseSAgICAgbXhfcmVwbHk7CisgICAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkgIG5hcHRyX3JlcGx5OworICAgIHN0cnVjdCBhcmVzX3NvYV9yZXBseSAgICBzb2FfcmVwbHk7CisgIH0gZGF0YTsKK307CisKK3ZvaWQgKmFyZXNfbWFsbG9jX2RhdGEoYXJlc19kYXRhdHlwZSB0eXBlKTsKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kZXN0cm95LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2Rlc3Ryb3kuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWY3ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kZXN0cm95LjMKQEAgLTAsMCArMSw0MCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0RFU1RST1kgMyAiNyBEZWNlbWJlciAyMDA0IgorLlNIIE5BTUUKK2FyZXNfZGVzdHJveSBcLSBEZXN0cm95IGEgcmVzb2x2ZXIgY2hhbm5lbAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHZvaWQgYXJlc19kZXN0cm95KGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJhcmVzX2Rlc3Ryb3koMylcZlAgZnVuY3Rpb24gZGVzdHJveXMgdGhlIG5hbWUgc2VydmljZSBjaGFubmVsCitpZGVudGlmaWVkIGJ5IFxmSWNoYW5uZWxcZlAsIGZyZWVpbmcgYWxsIG1lbW9yeSBhbmQgY2xvc2luZyBhbGwgc29ja2V0cyB1c2VkCitieSB0aGUgY2hhbm5lbC4KKworXGZCYXJlc19kZXN0cm95KDMpXGZQIGludm9rZXMgdGhlIGNhbGxiYWNrcyBmb3IgZWFjaCBwZW5kaW5nIHF1ZXJ5IG9uIHRoZQorY2hhbm5lbCwgcGFzc2luZyBhIHN0YXR1cyBvZiBcSUFSRVNfRURFU1RSVUNUSU9OXGZQLiBUaGVzZSBjYWxscyBnaXZlIHRoZQorY2FsbGJhY2tzIGEgY2hhbmNlIHRvIGNsZWFuIHVwIGFueSBzdGF0ZSB3aGljaCBtaWdodCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZWlyCithcmd1bWVudHMuIEEgY2FsbGJhY2sgbXVzdCBub3QgYWRkIG5ldyByZXF1ZXN0cyB0byBhIGNoYW5uZWwgYmVpbmcgZGVzdHJveWVkLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19pbml0ICgzKSwKKy5CUiBhcmVzX2NhbmNlbCAoMykKKy5TSCBBVVRIT1IKK0dyZWcgSHVkc29uLCBNSVQgSW5mb3JtYXRpb24gU3lzdGVtcworLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZGVzdHJveS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kZXN0cm95LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhNDIyMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZGVzdHJveS5jCkBAIC0wLDAgKzEsMTA4IEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCit2b2lkIGFyZXNfZGVzdHJveV9vcHRpb25zKHN0cnVjdCBhcmVzX29wdGlvbnMgKm9wdGlvbnMpCit7CisgIGludCBpOworCisgIGlmKG9wdGlvbnMtPnNlcnZlcnMpCisgICAgYXJlc19mcmVlKG9wdGlvbnMtPnNlcnZlcnMpOworICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy0+bmRvbWFpbnM7IGkrKykKKyAgICBhcmVzX2ZyZWUob3B0aW9ucy0+ZG9tYWluc1tpXSk7CisgIGlmKG9wdGlvbnMtPmRvbWFpbnMpCisgICAgYXJlc19mcmVlKG9wdGlvbnMtPmRvbWFpbnMpOworICBpZihvcHRpb25zLT5zb3J0bGlzdCkKKyAgICBhcmVzX2ZyZWUob3B0aW9ucy0+c29ydGxpc3QpOworICBpZihvcHRpb25zLT5sb29rdXBzKQorICAgIGFyZXNfZnJlZShvcHRpb25zLT5sb29rdXBzKTsKK30KKwordm9pZCBhcmVzX2Rlc3Ryb3koYXJlc19jaGFubmVsIGNoYW5uZWwpCit7CisgIGludCBpOworICBzdHJ1Y3QgcXVlcnkgKnF1ZXJ5OworICBzdHJ1Y3QgbGlzdF9ub2RlKiBsaXN0X2hlYWQ7CisgIHN0cnVjdCBsaXN0X25vZGUqIGxpc3Rfbm9kZTsKKyAgCisgIGlmICghY2hhbm5lbCkKKyAgICByZXR1cm47CisKKyAgbGlzdF9oZWFkID0gJihjaGFubmVsLT5hbGxfcXVlcmllcyk7CisgIGZvciAobGlzdF9ub2RlID0gbGlzdF9oZWFkLT5uZXh0OyBsaXN0X25vZGUgIT0gbGlzdF9oZWFkOyApCisgICAgeworICAgICAgcXVlcnkgPSBsaXN0X25vZGUtPmRhdGE7CisgICAgICBsaXN0X25vZGUgPSBsaXN0X25vZGUtPm5leHQ7ICAvKiBzaW5jZSB3ZSdyZSBkZWxldGluZyB0aGUgcXVlcnkgKi8KKyAgICAgIHF1ZXJ5LT5jYWxsYmFjayhxdWVyeS0+YXJnLCBBUkVTX0VERVNUUlVDVElPTiwgMCwgTlVMTCwgMCk7CisgICAgICBhcmVzX19mcmVlX3F1ZXJ5KHF1ZXJ5KTsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAvKiBGcmVlaW5nIHRoZSBxdWVyeSBzaG91bGQgcmVtb3ZlIGl0IGZyb20gYWxsIHRoZSBsaXN0cyBpbiB3aGljaCBpdCBzaXRzLAorICAgKiBzbyBhbGwgcXVlcnkgbGlzdHMgc2hvdWxkIGJlIGVtcHR5IG5vdy4KKyAgICovCisgIGFzc2VydChhcmVzX19pc19saXN0X2VtcHR5KCYoY2hhbm5lbC0+YWxsX3F1ZXJpZXMpKSk7CisgIGZvciAoaSA9IDA7IGkgPCBBUkVTX1FJRF9UQUJMRV9TSVpFOyBpKyspCisgICAgeworICAgICAgYXNzZXJ0KGFyZXNfX2lzX2xpc3RfZW1wdHkoJihjaGFubmVsLT5xdWVyaWVzX2J5X3FpZFtpXSkpKTsKKyAgICB9CisgIGZvciAoaSA9IDA7IGkgPCBBUkVTX1RJTUVPVVRfVEFCTEVfU0laRTsgaSsrKQorICAgIHsKKyAgICAgIGFzc2VydChhcmVzX19pc19saXN0X2VtcHR5KCYoY2hhbm5lbC0+cXVlcmllc19ieV90aW1lb3V0W2ldKSkpOworICAgIH0KKyNlbmRpZgorCisgIGFyZXNfX2Rlc3Ryb3lfc2VydmVyc19zdGF0ZShjaGFubmVsKTsKKworICBpZiAoY2hhbm5lbC0+ZG9tYWlucykgeworICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5uZG9tYWluczsgaSsrKQorICAgICAgYXJlc19mcmVlKGNoYW5uZWwtPmRvbWFpbnNbaV0pOworICAgIGFyZXNfZnJlZShjaGFubmVsLT5kb21haW5zKTsKKyAgfQorCisgIGlmKGNoYW5uZWwtPnNvcnRsaXN0KQorICAgIGFyZXNfZnJlZShjaGFubmVsLT5zb3J0bGlzdCk7CisKKyAgaWYgKGNoYW5uZWwtPmxvb2t1cHMpCisgICAgYXJlc19mcmVlKGNoYW5uZWwtPmxvb2t1cHMpOworCisgIGFyZXNfZnJlZShjaGFubmVsKTsKK30KKwordm9pZCBhcmVzX19kZXN0cm95X3NlcnZlcnNfc3RhdGUoYXJlc19jaGFubmVsIGNoYW5uZWwpCit7CisgIHN0cnVjdCBzZXJ2ZXJfc3RhdGUgKnNlcnZlcjsKKyAgaW50IGk7CisKKyAgaWYgKGNoYW5uZWwtPnNlcnZlcnMpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5zZXJ2ZXJzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBzZXJ2ZXIgPSAmY2hhbm5lbC0+c2VydmVyc1tpXTsKKyAgICAgICAgICBhcmVzX19jbG9zZV9zb2NrZXRzKGNoYW5uZWwsIHNlcnZlcik7CisgICAgICAgICAgYXNzZXJ0KGFyZXNfX2lzX2xpc3RfZW1wdHkoJnNlcnZlci0+cXVlcmllc190b19zZXJ2ZXIpKTsKKyAgICAgICAgfQorICAgICAgYXJlc19mcmVlKGNoYW5uZWwtPnNlcnZlcnMpOworICAgICAgY2hhbm5lbC0+c2VydmVycyA9IE5VTEw7CisgICAgfQorICBjaGFubmVsLT5uc2VydmVycyA9IC0xOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kZXN0cm95X29wdGlvbnMuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZGVzdHJveV9vcHRpb25zLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlMzQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZGVzdHJveV9vcHRpb25zLjMKQEAgLTAsMCArMSwzNSBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0RFU1RST1lfT1BUSU9OUyAzICIxIEp1bmUgMjAwNyIKKy5TSCBOQU1FCithcmVzX2Rlc3Ryb3lfb3B0aW9ucyBcLSBEZXN0cm95IG9wdGlvbnMgaW5pdGlhbGl6ZWQgd2l0aCBhcmVzX3NhdmVfb3B0aW9ucworLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHZvaWQgYXJlc19kZXN0cm95X29wdGlvbnMoc3RydWN0IGFyZXNfb3B0aW9ucyAqXGZJb3B0aW9uc1xmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCYXJlc19kZXN0cm95X29wdGlvbnMoMylcZlAgZnVuY3Rpb24gZGVzdHJveXMgdGhlIG9wdGlvbnMgc3RydWN0CitpZGVudGlmaWVkIGJ5IFxJb3B0aW9uc1xmUCwgZnJlZWluZyBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieQorXGZCYXJlc19zYXZlX29wdGlvbnMoMylcZlAuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3NhdmVfb3B0aW9ucyAoMyksCisuQlIgYXJlc19pbml0X29wdGlvbnMgKDMpCisuU0ggQVVUSE9SCitCcmFkIEhvdXNlCisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19kbnMuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZG5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmOTkzYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZG5zLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgSEVBREVSX0NBUkVTX0ROU19ICisjZGVmaW5lIEhFQURFUl9DQVJFU19ETlNfSAorCisvKiBDb3B5cmlnaHQgMTk5OCwgMjAxMSBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKgorICogTWFjcm8gRE5TX18xNkJJVCByZWFkcyBhIG5ldHdvcmsgc2hvcnQgKDE2IGJpdCkgZ2l2ZW4gaW4gbmV0d29yaworICogYnl0ZSBvcmRlciwgYW5kIHJldHVybnMgaXRzIHZhbHVlIGFzIGFuIHVuc2lnbmVkIHNob3J0LgorICovCisjZGVmaW5lIEROU19fMTZCSVQocCkgICgodW5zaWduZWQgc2hvcnQpKCh1bnNpZ25lZCBpbnQpIDB4ZmZmZiAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBjaGFyKShwKVswXSkgPDwgOFUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIpKHApWzFdKSkpKSkKKworLyoKKyAqIE1hY3JvIEROU19fMzJCSVQgcmVhZHMgYSBuZXR3b3JrIGxvbmcgKDMyIGJpdCkgZ2l2ZW4gaW4gbmV0d29yaworICogYnl0ZSBvcmRlciwgYW5kIHJldHVybnMgaXRzIHZhbHVlIGFzIGFuIHVuc2lnbmVkIGludC4KKyAqLworI2RlZmluZSBETlNfXzMyQklUKHApICAoKHVuc2lnbmVkIGludCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIpKHApWzBdKSA8PCAyNFUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIpKHApWzFdKSA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIpKHApWzJdKSA8PCAgOFUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIpKHApWzNdKSkpKQorCisjZGVmaW5lIEROU19fU0VUMTZCSVQocCwgdikgICgoKHApWzBdID0gKHVuc2lnbmVkIGNoYXIpKCgodikgPj4gOCkgJiAweGZmKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocClbMV0gPSAodW5zaWduZWQgY2hhcikoKHYpICYgMHhmZikpKQorI2RlZmluZSBETlNfX1NFVDMyQklUKHAsIHYpICAoKChwKVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHYpID4+IDI0KSAmIDB4ZmYpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwKVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHYpID4+IDE2KSAmIDB4ZmYpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwKVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHYpID4+IDgpICYgMHhmZikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHApWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh2KSAmIDB4ZmYpKSkKKworI2lmIDAKKy8qIHdlIGNhbm5vdCB1c2UgdGhpcyBhcHByb2FjaCBvbiBzeXN0ZW1zIHdoZXJlIHdlIGNhbid0IGFjY2VzcyAxNi8zMiBiaXQKKyAgIGRhdGEgb24gdW4tYWxpZ25lZCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgRE5TX18xNkJJVChwKSAgICAgICAgICAgICAgICAgICBudG9ocygqKHVuc2lnbmVkIHNob3J0KikocCkpCisjZGVmaW5lIEROU19fMzJCSVQocCkgICAgICAgICAgICAgICAgICAgbnRvaGwoKih1bnNpZ25lZCBsb25nKikocCkpCisjZGVmaW5lIEROU19fU0VUMTZCSVQocCwgdikgICAgICAgICAgICAgKih1bnNpZ25lZCBzaG9ydCopKHApID0gaHRvbnModikKKyNkZWZpbmUgRE5TX19TRVQzMkJJVChwLCB2KSAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcqKShwKSA9IGh0b25sKHYpCisjZW5kaWYKKworLyogTWFjcm9zIGZvciBwYXJzaW5nIGEgRE5TIGhlYWRlciAqLworI2RlZmluZSBETlNfSEVBREVSX1FJRChoKSAgICAgICAgICAgICAgIEROU19fMTZCSVQoaCkKKyNkZWZpbmUgRE5TX0hFQURFUl9RUihoKSAgICAgICAgICAgICAgICAoKChoKVsyXSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgRE5TX0hFQURFUl9PUENPREUoaCkgICAgICAgICAgICAoKChoKVsyXSA+PiAzKSAmIDB4ZikKKyNkZWZpbmUgRE5TX0hFQURFUl9BQShoKSAgICAgICAgICAgICAgICAoKChoKVsyXSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgRE5TX0hFQURFUl9UQyhoKSAgICAgICAgICAgICAgICAoKChoKVsyXSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgRE5TX0hFQURFUl9SRChoKSAgICAgICAgICAgICAgICAoKGgpWzJdICYgMHgxKQorI2RlZmluZSBETlNfSEVBREVSX1JBKGgpICAgICAgICAgICAgICAgICgoKGgpWzNdID4+IDcpICYgMHgxKQorI2RlZmluZSBETlNfSEVBREVSX1ooaCkgICAgICAgICAgICAgICAgICgoKGgpWzNdID4+IDQpICYgMHg3KQorI2RlZmluZSBETlNfSEVBREVSX1JDT0RFKGgpICAgICAgICAgICAgICgoaClbM10gJiAweGYpCisjZGVmaW5lIEROU19IRUFERVJfUURDT1VOVChoKSAgICAgICAgICAgRE5TX18xNkJJVCgoaCkgKyA0KQorI2RlZmluZSBETlNfSEVBREVSX0FOQ09VTlQoaCkgICAgICAgICAgIEROU19fMTZCSVQoKGgpICsgNikKKyNkZWZpbmUgRE5TX0hFQURFUl9OU0NPVU5UKGgpICAgICAgICAgICBETlNfXzE2QklUKChoKSArIDgpCisjZGVmaW5lIEROU19IRUFERVJfQVJDT1VOVChoKSAgICAgICAgICAgRE5TX18xNkJJVCgoaCkgKyAxMCkKKworLyogTWFjcm9zIGZvciBjb25zdHJ1Y3RpbmcgYSBETlMgaGVhZGVyICovCisjZGVmaW5lIEROU19IRUFERVJfU0VUX1FJRChoLCB2KSAgICAgIEROU19fU0VUMTZCSVQoaCwgdikKKyNkZWZpbmUgRE5TX0hFQURFUl9TRVRfUVIoaCwgdikgICAgICAgKChoKVsyXSB8PSAodW5zaWduZWQgY2hhcikoKCh2KSAmIDB4MSkgPDwgNykpCisjZGVmaW5lIEROU19IRUFERVJfU0VUX09QQ09ERShoLCB2KSAgICgoaClbMl0gfD0gKHVuc2lnbmVkIGNoYXIpKCgodikgJiAweGYpIDw8IDMpKQorI2RlZmluZSBETlNfSEVBREVSX1NFVF9BQShoLCB2KSAgICAgICAoKGgpWzJdIHw9ICh1bnNpZ25lZCBjaGFyKSgoKHYpICYgMHgxKSA8PCAyKSkKKyNkZWZpbmUgRE5TX0hFQURFUl9TRVRfVEMoaCwgdikgICAgICAgKChoKVsyXSB8PSAodW5zaWduZWQgY2hhcikoKCh2KSAmIDB4MSkgPDwgMSkpCisjZGVmaW5lIEROU19IRUFERVJfU0VUX1JEKGgsIHYpICAgICAgICgoaClbMl0gfD0gKHVuc2lnbmVkIGNoYXIpKCh2KSAmIDB4MSkpCisjZGVmaW5lIEROU19IRUFERVJfU0VUX1JBKGgsIHYpICAgICAgICgoaClbM10gfD0gKHVuc2lnbmVkIGNoYXIpKCgodikgJiAweDEpIDw8IDcpKQorI2RlZmluZSBETlNfSEVBREVSX1NFVF9aKGgsIHYpICAgICAgICAoKGgpWzNdIHw9ICh1bnNpZ25lZCBjaGFyKSgoKHYpICYgMHg3KSA8PCA0KSkKKyNkZWZpbmUgRE5TX0hFQURFUl9TRVRfUkNPREUoaCwgdikgICAgKChoKVszXSB8PSAodW5zaWduZWQgY2hhcikoKHYpICYgMHhmKSkKKyNkZWZpbmUgRE5TX0hFQURFUl9TRVRfUURDT1VOVChoLCB2KSAgRE5TX19TRVQxNkJJVCgoaCkgKyA0LCB2KQorI2RlZmluZSBETlNfSEVBREVSX1NFVF9BTkNPVU5UKGgsIHYpICBETlNfX1NFVDE2QklUKChoKSArIDYsIHYpCisjZGVmaW5lIEROU19IRUFERVJfU0VUX05TQ09VTlQoaCwgdikgIEROU19fU0VUMTZCSVQoKGgpICsgOCwgdikKKyNkZWZpbmUgRE5TX0hFQURFUl9TRVRfQVJDT1VOVChoLCB2KSAgRE5TX19TRVQxNkJJVCgoaCkgKyAxMCwgdikKKworLyogTWFjcm9zIGZvciBwYXJzaW5nIHRoZSBmaXhlZCBwYXJ0IG9mIGEgRE5TIHF1ZXN0aW9uICovCisjZGVmaW5lIEROU19RVUVTVElPTl9UWVBFKHEpICAgICAgICAgICAgRE5TX18xNkJJVChxKQorI2RlZmluZSBETlNfUVVFU1RJT05fQ0xBU1MocSkgICAgICAgICAgIEROU19fMTZCSVQoKHEpICsgMikKKworLyogTWFjcm9zIGZvciBjb25zdHJ1Y3RpbmcgdGhlIGZpeGVkIHBhcnQgb2YgYSBETlMgcXVlc3Rpb24gKi8KKyNkZWZpbmUgRE5TX1FVRVNUSU9OX1NFVF9UWVBFKHEsIHYpICAgICBETlNfX1NFVDE2QklUKHEsIHYpCisjZGVmaW5lIEROU19RVUVTVElPTl9TRVRfQ0xBU1MocSwgdikgICAgRE5TX19TRVQxNkJJVCgocSkgKyAyLCB2KQorCisvKiBNYWNyb3MgZm9yIHBhcnNpbmcgdGhlIGZpeGVkIHBhcnQgb2YgYSBETlMgcmVzb3VyY2UgcmVjb3JkICovCisjZGVmaW5lIEROU19SUl9UWVBFKHIpICAgICAgICAgICAgICAgICAgRE5TX18xNkJJVChyKQorI2RlZmluZSBETlNfUlJfQ0xBU1MocikgICAgICAgICAgICAgICAgIEROU19fMTZCSVQoKHIpICsgMikKKyNkZWZpbmUgRE5TX1JSX1RUTChyKSAgICAgICAgICAgICAgICAgICBETlNfXzMyQklUKChyKSArIDQpCisjZGVmaW5lIEROU19SUl9MRU4ocikgICAgICAgICAgICAgICAgICAgRE5TX18xNkJJVCgocikgKyA4KQorCisvKiBNYWNyb3MgZm9yIGNvbnN0cnVjdGluZyB0aGUgZml4ZWQgcGFydCBvZiBhIEROUyByZXNvdXJjZSByZWNvcmQgKi8KKyNkZWZpbmUgRE5TX1JSX1NFVF9UWVBFKHIsIHYpICAgICAgICAgICBETlNfX1NFVDE2QklUKHIsIHYpCisjZGVmaW5lIEROU19SUl9TRVRfQ0xBU1MociwgdikgICAgICAgICAgRE5TX19TRVQxNkJJVCgocikgKyAyLCB2KQorI2RlZmluZSBETlNfUlJfU0VUX1RUTChyLCB2KSAgICAgICAgICAgIEROU19fU0VUMzJCSVQoKHIpICsgNCwgdikKKyNkZWZpbmUgRE5TX1JSX1NFVF9MRU4ociwgdikgICAgICAgICAgICBETlNfX1NFVDE2QklUKChyKSArIDgsIHYpCisKKyNlbmRpZiAvKiBIRUFERVJfQ0FSRVNfRE5TX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZHVwLjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2R1cC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NGMxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2R1cC4zCkBAIC0wLDAgKzEsMzkgQEAKKy5cIgorLlwiIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IGJ5IERhbmllbCBTdGVuYmVyZworLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19EVVAgMyAiMjYgTWF5IDIwMDkiCisuU0ggTkFNRQorYXJlc19kdXAgXC0gRHVwbGljYXRlIGEgcmVzb2x2ZXIgY2hhbm5lbAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX2R1cChhcmVzX2NoYW5uZWwgKlxmSWRlc3RcZlAsIGFyZXNfY2hhbm5lbCBcZklzb3VyY2VcZlApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmFyZXNfZHVwKDMpXGZQIGZ1bmN0aW9uIGR1cGxpY2F0ZXMgYW4gZXhpc3RpbmcgY29tbXVuaWNhdGlvbnMgY2hhbm5lbAorZm9yIG5hbWUgc2VydmljZSBsb29rdXBzLiAgSWYgaXQgcmV0dXJucyBzdWNjZXNzZnVsbHksIFxmQmFyZXNfZHVwKDMpXGZQIHdpbGwKK3NldCB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSBcZklkZXN0XGZQIHRvIGEgaGFuZGxlIHVzZWQgdG8gaWRlbnRpZnkgdGhlCituYW1lIHNlcnZpY2UgY2hhbm5lbC4gIFRoZSBjYWxsZXIgc2hvdWxkIGludm9rZSBcZklhcmVzX2Rlc3Ryb3koMylcZlAgb24gdGhlCitoYW5kbGUgd2hlbiB0aGUgY2hhbm5lbCBpcyBubyBsb25nZXIgbmVlZGVkLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19kZXN0cm95KDMpLAorLkJSIGFyZXNfaW5pdCgzKSwKKy5CUiBhcmVzX2xpYnJhcnlfaW5pdCgzKQorLlNIIEFWQUlMQUJJTElUWQorXGZJYXJlc19kdXAoMylcZlAgd2FzIGFkZGVkIGluIGMtYXJlcyAxLjYuMAorLlNIIEFVVEhPUgorRGFuaWVsIFN0ZW5iZXJnCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZXhwYW5kX25hbWUuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZXhwYW5kX25hbWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzE4ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19leHBhbmRfbmFtZS4zCkBAIC0wLDAgKzEsNjUgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19FWFBBTkRfTkFNRSAzICIyMCBOb3YgMjAwOSIKKy5TSCBOQU1FCithcmVzX2V4cGFuZF9uYW1lIFwtIEV4cGFuZCBhIEROUy1lbmNvZGVkIGRvbWFpbiBuYW1lCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgaW50IGFyZXNfZXhwYW5kX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqXGZJZW5jb2RlZFxmUCwKKy5CICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqXGZJYWJ1ZlxmUCwgaW50IFxmSWFsZW5cZlAsIGNoYXIgKipcZklzXGZQLAorLkIgCWxvbmcgKlxmSWVuY2xlblxmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfZXhwYW5kX25hbWUKK2Z1bmN0aW9uIGNvbnZlcnRzIGEgRE5TLWVuY29kZWQgZG9tYWluIG5hbWUgdG8gYSBkb3Qtc2VwYXJhdGVkIEMKK3N0cmluZy4gIFRoZSBhcmd1bWVudAorLkkgZW5jb2RlZAorZ2l2ZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZW5jb2RlZCBkb21haW4gbmFtZSwgYW5kIHRoZSBhcmd1bWVudHMKKy5JIGFidWYKK2FuZAorLkkgYWxlbgorZ2l2ZSB0aGUgY29udGFpbmluZyBtZXNzYWdlIGJ1ZmZlciAobmVjZXNzYXJ5IGZvciB0aGUgcHJvY2Vzc2luZyBvZgoraW5kaXJlY3Rpb24gcG9pbnRlcnMgd2l0aGluIHRoZSBlbmNvZGVkIGRvbWFpbiBuYW1lKS4gIFRoZSByZXN1bHQgaXMKK3BsYWNlZCBpbiBhIE5VTC10ZXJtaW5hdGVkIGFsbG9jYXRlZCBidWZmZXIsIGEgcG9pbnRlciB0byB3aGljaCBpcworc3RvcmVkIGluIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CisuSVIgcyAuCitUaGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIG5hbWUgaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CisuSSBlbmNsZW4KK3NvIHRoYXQgdGhlIGNhbGxlciBjYW4gYWR2YW5jZSBwYXN0IHRoZSBlbmNvZGVkIGRvbWFpbiBuYW1lIHRvIHJlYWQKK2Z1cnRoZXIgZGF0YSBpbiB0aGUgbWVzc2FnZS4KKworVXNlIFxmSWFyZXNfZnJlZV9zdHJpbmcoMylcZlAgdG8gZnJlZSB0aGUgYWxsb2NhdGVkIGhvc3RuYW1lLgorLlNIIFJFVFVSTiBWQUxVRVMKKy5CIGFyZXNfZXhwYW5kX25hbWUKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK0V4cGFuc2lvbiBvZiB0aGUgZW5jb2RlZCBuYW1lIHN1Y2NlZWRlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFETkFNRQorVGhlIGVuY29kZWQgZG9tYWluIG5hbWUgd2FzIG1hbGZvcm1lZCBhbmQgY291bGQgbm90IGJlIGV4cGFuZGVkLgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX21rcXVlcnkgKDMpLCBhcmVzX2ZyZWVfc3RyaW5nICgzKQorLlNIIEFVVEhPUgorR3JlZyBIdWRzb24sIE1JVCBJbmZvcm1hdGlvbiBTeXN0ZW1zCisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19leHBhbmRfbmFtZS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19leHBhbmRfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmZjE5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2V4cGFuZF9uYW1lLmMKQEAgLTAsMCArMSwyNjUgQEAKKworLyogQ29weXJpZ2h0IDE5OTgsIDIwMTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNlbHNlCisjICBpbmNsdWRlICJuYW1lc2VyLmgiCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9DT01QQVRfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyX2NvbXBhdC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19ub3dhcm4uaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIgLyogZm9yIHRoZSBtZW1kZWJ1ZyAqLworCitzdGF0aWMgaW50IG5hbWVfbGVuZ3RoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuY29kZWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuKTsKKworLypDVkUtMjAyMS0zNjcyKi8KKy8qIFJlc2VydmVkIGNoYXJhY3RlcnMgZm9yIG5hbWVzIHRoYXQgbmVlZCB0byBiZSBlc2NhcGVkICovCitzdGF0aWMgaW50IGlzX3Jlc2VydmVkY2goaW50IGNoKQoreworICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAnIic6CisgICAgY2FzZSAnLic6CisgICAgY2FzZSAnOyc6CisgICAgY2FzZSAnXFwnOgorICAgIGNhc2UgJygnOgorICAgIGNhc2UgJyknOgorICAgIGNhc2UgJ0AnOgorICAgIGNhc2UgJyQnOgorICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEV4cGFuZCBhbiBSRkMxMDM1LWVuY29kZWQgZG9tYWluIG5hbWUgZ2l2ZW4gYnkgZW5jb2RlZC4gIFRoZQorICogY29udGFpbmluZyBtZXNzYWdlIGlzIGdpdmVuIGJ5IGFidWYgYW5kIGFsZW4uICBUaGUgcmVzdWx0IGdpdmVuIGJ5CisgKiAqcywgd2hpY2ggaXMgc2V0IHRvIGEgTlVMLXRlcm1pbmF0ZWQgYWxsb2NhdGVkIGJ1ZmZlci4gICplbmNsZW4gaXMKKyAqIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIG5hbWUgKG5vdCB0aGUgbGVuZ3RoIG9mIHRoZQorICogZXhwYW5kZWQgbmFtZTsgdGhlIGdvYWwgaXMgdG8gdGVsbCB0aGUgY2FsbGVyIGhvdyBtYW55IGJ5dGVzIHRvCisgKiBtb3ZlIGZvcndhcmQgdG8gZ2V0IHBhc3QgdGhlIGVuY29kZWQgbmFtZSkuCisgKgorICogSW4gdGhlIHNpbXBsZSBjYXNlLCBhbiBlbmNvZGVkIG5hbWUgaXMgYSBzZXJpZXMgb2YgbGFiZWxzLCBlYWNoCisgKiBjb21wb3NlZCBvZiBhIG9uZS1ieXRlIGxlbmd0aCAobGltaXRlZCB0byB2YWx1ZXMgYmV0d2VlbiAwIGFuZCA2MworICogaW5jbHVzaXZlKSBmb2xsb3dlZCBieSB0aGUgbGFiZWwgY29udGVudHMuICBUaGUgbmFtZSBpcyB0ZXJtaW5hdGVkCisgKiBieSBhIHplcm8tbGVuZ3RoIGxhYmVsLgorICoKKyAqIEluIHRoZSBtb3JlIGNvbXBsaWNhdGVkIGNhc2UsIGEgbGFiZWwgbWF5IGJlIHRlcm1pbmF0ZWQgYnkgYW4KKyAqIGluZGlyZWN0aW9uIHBvaW50ZXIsIHNwZWNpZmllZCBieSB0d28gYnl0ZXMgd2l0aCB0aGUgaGlnaCBiaXRzIG9mCisgKiB0aGUgZmlyc3QgYnl0ZSAoY29ycmVzcG9uZGluZyB0byBJTkRJUl9NQVNLKSBzZXQgdG8gMTEuICBXaXRoIHRoZQorICogdHdvIGhpZ2ggYml0cyBvZiB0aGUgZmlyc3QgYnl0ZSBzdHJpcHBlZCBvZmYsIHRoZSBpbmRpcmVjdGlvbgorICogcG9pbnRlciBnaXZlcyBhbiBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb250YWluaW5nCisgKiBtZXNzYWdlIHdpdGggbW9yZSBsYWJlbHMgdG8gZGVjb2RlLiAgSW5kaXJlY3Rpb24gY2FuIGhhcHBlbiBhbgorICogYXJiaXRyYXJ5IG51bWJlciBvZiB0aW1lcywgc28gd2UgaGF2ZSB0byBkZXRlY3QgbG9vcHMuCisgKgorICogU2luY2UgdGhlIGV4cGFuZGVkIG5hbWUgdXNlcyAnLicgYXMgYSBsYWJlbCBzZXBhcmF0b3IsIHdlIHVzZQorICogYmFja3NsYXNoZXMgdG8gZXNjYXBlIHBlcmlvZHMgb3IgYmFja3NsYXNoZXMgaW4gdGhlIGV4cGFuZGVkIG5hbWUuCisgKi8KKworaW50IGFyZXNfZXhwYW5kX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqZW5jb2RlZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBhbGVuLCBjaGFyICoqcywgbG9uZyAqZW5jbGVuKQoreworICBpbnQgbGVuLCBpbmRpciA9IDA7CisgIGNoYXIgKnE7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisgIHVuaW9uIHsKKyAgICBzc2l6ZV90IHNpZzsKKyAgICAgc2l6ZV90IHVuczsKKyAgfSBubGVuOworCisgIG5sZW4uc2lnID0gbmFtZV9sZW5ndGgoZW5jb2RlZCwgYWJ1ZiwgYWxlbik7CisgIGlmIChubGVuLnNpZyA8IDApCisgICAgcmV0dXJuIEFSRVNfRUJBRE5BTUU7CisKKyAgKnMgPSBhcmVzX21hbGxvYyhubGVuLnVucyArIDEpOworICBpZiAoISpzKQorICAgIHJldHVybiBBUkVTX0VOT01FTTsKKyAgcSA9ICpzOworCisgIGlmIChubGVuLnVucyA9PSAwKSB7CisgICAgLyogUkZDMjE4MSBzYXlzIHRoaXMgc2hvdWxkIGJlICIuIjogdGhlIHJvb3Qgb2YgdGhlIEROUyB0cmVlLgorICAgICAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gc3RyaXBzIHRyYWlsaW5nIGRvdHMgdGhvdWdoLCBpdCBiZWNvbWVzICIiCisgICAgICovCisgICAgcVswXSA9ICdcMCc7CisKKyAgICAvKiBpbmRpcmVjdCByb290IGxhYmVsIChsaWtlIDB4YzAgMHgwYykgaXMgMiBieXRlcyBsb25nIChzdHVwaWQsIGJ1dAorICAgICAgIHZhbGlkKSAqLworICAgIGlmICgoKmVuY29kZWQgJiBJTkRJUl9NQVNLKSA9PSBJTkRJUl9NQVNLKQorICAgICAgKmVuY2xlbiA9IDJMOworICAgIGVsc2UKKyAgICAgICplbmNsZW4gPSAxTDsgIC8qIHRoZSBjYWxsZXIgc2hvdWxkIG1vdmUgb25lIGJ5dGUgdG8gZ2V0IHBhc3QgdGhpcyAqLworCisgICAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKKyAgfQorCisgIC8qIE5vIGVycm9yLWNoZWNraW5nIG5lY2Vzc2FyeTsgaXQgd2FzIGFsbCBkb25lIGJ5IG5hbWVfbGVuZ3RoKCkuICovCisgIHAgPSBlbmNvZGVkOworICB3aGlsZSAoKnApCisgICAgeworICAgICAgaWYgKCgqcCAmIElORElSX01BU0spID09IElORElSX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWluZGlyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqZW5jbGVuID0gYXJlc3hfdXp0b3NsKHAgKyAyVSAtIGVuY29kZWQpOworICAgICAgICAgICAgICBpbmRpciA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgcCA9IGFidWYgKyAoKCpwICYgfklORElSX01BU0spIDw8IDggfCAqKHAgKyAxKSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qQ1ZFLTIwMjEtMzY3MiovCisgICAgICAgICAgLy9sZW4gPSAqcDsKKyAgICAgICAgICBpbnQgbmFtZV9sZW4gPSAqcDsKKyAgICAgICAgICBsZW4gPSBuYW1lX2xlbjsKKyAgICAgICAgICBwKys7CisgICAgICAgICAgd2hpbGUgKGxlbi0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKkNWRS0yMDIxLTM2NzIqLworICAgICAgICAgICAgICAvL2lmICgqcCA9PSAnLicgfHwgKnAgPT0gJ1xcJykKKyAgICAgICAgICAgICAgLy8gICpxKysgPSAnXFwnOworICAgICAgICAgICAgICAvLypxKysgPSAqcDsKKyAgICAgICAgICAgICAgLyogT3V0cHV0IGFzIFxEREQgZm9yIGNvbnNpc3RlbmN5IHdpdGggUkZDMTAzNSA1LjEsIGV4Y2VwdAorICAgICAgICAgICAgICAgKiBmb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIHJvb3QgbmFtZSByZXNwb25zZSAgKi8KKyAgICAgICAgICAgICAgaWYgKCFpc3ByaW50KCpwKSAmJiAhKG5hbWVfbGVuID09IDEgJiYgKnAgPT0gMCkpCisgICAgICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgICAqcSsrID0gJ1xcJzsKKyAgICAgICAgICAgICAgICAgICpxKysgPSAnMCcgKyAqcCAvIDEwMDsKKyAgICAgICAgICAgICAgICAgICpxKysgPSAnMCcgKyAoKnAgJSAxMDApIC8gMTA7CisgICAgICAgICAgICAgICAgICAqcSsrID0gJzAnICsgKCpwICUgMTApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoaXNfcmVzZXJ2ZWRjaCgqcCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgKnErKyA9ICdcXCc7CisgICAgICAgICAgICAgICAgICAqcSsrID0gKnA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgKnErKyA9ICpwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICpxKysgPSAnLic7CisgICAgICAgIH0KKyAgICB9CisgIGlmICghaW5kaXIpCisgICAgKmVuY2xlbiA9IGFyZXN4X3V6dG9zbChwICsgMVUgLSBlbmNvZGVkKTsKKworICAvKiBOdWtlIHRoZSB0cmFpbGluZyBwZXJpb2QgaWYgd2Ugd3JvdGUgb25lLiAqLworICBpZiAocSA+ICpzKQorICAgICoocSAtIDEpID0gMDsKKyAgZWxzZQorICAgICpxID0gMDsgLyogemVybyB0ZXJtaW5hdGU7IExDT1ZfRVhDTF9MSU5FOiBlbXB0eSBuYW1lcyBleGl0IGFib3ZlICovCisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGV4cGFuc2lvbiBvZiBhbiBlbmNvZGVkIGRvbWFpbiBuYW1lLCBvcgorICogLTEgaWYgdGhlIGVuY29kaW5nIGlzIGludmFsaWQuCisgKi8KK3N0YXRpYyBpbnQgbmFtZV9sZW5ndGgoY29uc3QgdW5zaWduZWQgY2hhciAqZW5jb2RlZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZW4pCit7CisgIGludCBuID0gMCwgb2Zmc2V0LCBpbmRpciA9IDAsIHRvcDsKKworICAvKiBBbGxvdyB0aGUgY2FsbGVyIHRvIHBhc3MgdXMgYWJ1ZiArIGFsZW4gYW5kIGhhdmUgdXMgY2hlY2sgZm9yIGl0LiAqLworICBpZiAoZW5jb2RlZCA+PSBhYnVmICsgYWxlbikKKyAgICByZXR1cm4gLTE7CisKKyAgd2hpbGUgKCplbmNvZGVkKQorICAgIHsKKyAgICAgIHRvcCA9ICgqZW5jb2RlZCAmIElORElSX01BU0spOworICAgICAgaWYgKHRvcCA9PSBJTkRJUl9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgLyogQ2hlY2sgdGhlIG9mZnNldCBhbmQgZ28gdGhlcmUuICovCisgICAgICAgICAgaWYgKGVuY29kZWQgKyAxID49IGFidWYgKyBhbGVuKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIG9mZnNldCA9ICgqZW5jb2RlZCAmIH5JTkRJUl9NQVNLKSA8PCA4IHwgKihlbmNvZGVkICsgMSk7CisgICAgICAgICAgaWYgKG9mZnNldCA+PSBhbGVuKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGVuY29kZWQgPSBhYnVmICsgb2Zmc2V0OworCisgICAgICAgICAgLyogSWYgd2UndmUgc2VlbiBtb3JlIGluZGlyZWN0cyB0aGFuIHRoZSBtZXNzYWdlIGxlbmd0aCwKKyAgICAgICAgICAgKiB0aGVuIHRoZXJlJ3MgYSBsb29wLgorICAgICAgICAgICAqLworICAgICAgICAgIGlmICgrK2luZGlyID4gYWxlbikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG9wID09IDB4MDApCisgICAgICAgIHsKKyAgICAgICAgICAvKkNWRS0yMDIxLTM2NzIqLworICAgICAgICAgIC8vb2Zmc2V0ID0gKmVuY29kZWQ7CisgICAgICAgICAgaW50IG5hbWVfbGVuID0gKmVuY29kZWQ7CisgICAgICAgICAgb2Zmc2V0ID0gbmFtZV9sZW47CisgICAgICAgICAgaWYgKGVuY29kZWQgKyBvZmZzZXQgKyAxID49IGFidWYgKyBhbGVuKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGVuY29kZWQrKzsKKyAgICAgICAgICB3aGlsZSAob2Zmc2V0LS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qQ1ZFLTIwMjEtMzY3MiovCisgICAgICAgICAgICAgIC8vbiArPSAoKmVuY29kZWQgPT0gJy4nIHx8ICplbmNvZGVkID09ICdcXCcpID8gMiA6IDE7CisgICAgICAgICAgICAgIGlmICghaXNwcmludCgqZW5jb2RlZCkgJiYgIShuYW1lX2xlbiA9PSAxICYmICplbmNvZGVkID09IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG4gKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKGlzX3Jlc2VydmVkY2goKmVuY29kZWQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG4gKz0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBuICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbmNvZGVkKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgbisrOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSRkMgMTAzNSA0LjEuNCBzYXlzIG90aGVyIG9wdGlvbnMgKDAxLCAxMCkgZm9yIHRvcCAyCisgICAgICAgICAgICogYml0cyBhcmUgcmVzZXJ2ZWQuCisgICAgICAgICAgICovCisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgIC8qIElmIHRoZXJlIHdlcmUgYW55IGxhYmVscyBhdCBhbGwsIHRoZW4gdGhlIG51bWJlciBvZiBkb3RzIGlzIG9uZQorICAgKiBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBsYWJlbHMsIHNvIHN1YnRyYWN0IG9uZS4KKyAgICovCisgIHJldHVybiAobikgPyBuIC0gMSA6IG47Cit9CisKKy8qIExpa2UgYXJlc19leHBhbmRfbmFtZSBidXQgcmV0dXJucyBFQkFEUkVTUCBpbiBjYXNlIG9mIGludmFsaWQgaW5wdXQuICovCitpbnQgYXJlc19fZXhwYW5kX25hbWVfZm9yX3Jlc3BvbnNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcywgbG9uZyAqZW5jbGVuKQoreworICBpbnQgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZShlbmNvZGVkLCBhYnVmLCBhbGVuLCBzLCBlbmNsZW4pOworICBpZiAoc3RhdHVzID09IEFSRVNfRUJBRE5BTUUpCisgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZXhwYW5kX3N0cmluZy4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19leHBhbmRfc3RyaW5nLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkZDdiZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZXhwYW5kX3N0cmluZy4zCkBAIC0wLDAgKzEsNjEgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19FWFBBTkRfTkFNRSAzICIyMCBOb3YgMjAwOSIKKy5TSCBOQU1FCithcmVzX2V4cGFuZF9zdHJpbmcgXC0gRXhwYW5kIGEgbGVuZ3RoIGVuY29kZWQgc3RyaW5nCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgaW50IGFyZXNfZXhwYW5kX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICpcZkllbmNvZGVkXGZQLAorLkIgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpcZklhYnVmXGZQLCBpbnQgXGZJYWxlblxmUCwgdW5zaWduZWQgY2hhciAqKlxmSXNcZlAsCisuQiAJbG9uZyAqXGZJZW5jbGVuXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19leHBhbmRfc3RyaW5nCitmdW5jdGlvbiBjb252ZXJ0cyBhIGxlbmd0aCBlbmNvZGVkIHN0cmluZyB0byBhIE5VTC10ZXJtaW5hdGVkIEMKK3N0cmluZy4gIFRoZSBhcmd1bWVudAorLkkgZW5jb2RlZAorZ2l2ZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZW5jb2RlZCBzdHJpbmcsIGFuZCB0aGUgYXJndW1lbnRzCisuSSBhYnVmCithbmQKKy5JIGFsZW4KK2dpdmUgdGhlIGNvbnRhaW5pbmcgbWVzc2FnZSBidWZmZXIgKG5lY2Vzc2FyeSBmb3IgdGhlIHByb2Nlc3Npbmcgb2YKK2luZGlyZWN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgZW5jb2RlZCBkb21haW4gbmFtZSkuICBUaGUgcmVzdWx0IGlzCitwbGFjZWQgaW4gYSBOVUwtdGVybWluYXRlZCBhbGxvY2F0ZWQgYnVmZmVyLCBhIHBvaW50ZXIgdG8gd2hpY2ggaXMKK3N0b3JlZCBpbiB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieQorLklSIHMgLgorVGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBzdHJpbmcgaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CisuSSBlbmNsZW4KK3NvIHRoYXQgdGhlIGNhbGxlciBjYW4gYWR2YW5jZSBwYXN0IHRoZSBlbmNvZGVkIHN0cmluZyB0byByZWFkCitmdXJ0aGVyIGRhdGEgaW4gdGhlIG1lc3NhZ2UuCisuU0ggUkVUVVJOIFZBTFVFUworLkIgYXJlc19leHBhbmRfc3RyaW5nCitjYW4gcmV0dXJuIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxNQorLkIgQVJFU19TVUNDRVNTCitFeHBhbnNpb24gb2YgdGhlIGVuY29kZWQgc3RyaW5nIHN1Y2NlZWRlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFEU1RSCitUaGUgZW5jb2RlZCBzdHJpbmcgd2FzIG1hbGZvcm1lZCBhbmQgY291bGQgbm90IGJlIGV4cGFuZGVkLgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2ZyZWVfc3RyaW5nICgzKQorLlNIIEFVVEhPUgorRG9taW5pY2sgTWVnbGlvCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2V4cGFuZF9zdHJpbmcuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZXhwYW5kX3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNTQ3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2V4cGFuZF9zdHJpbmcuYwpAQCAtMCwwICsxLDcwIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiIC8qIGZvciB0aGUgbWVtZGVidWcgKi8KKworLyogU2ltcGx5IGRlY29kZXMgYSBsZW5ndGgtZW5jb2RlZCBjaGFyYWN0ZXIgc3RyaW5nLiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUKKyAqIGlucHV0IGlzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB0byBiZSByZXR1cm5lZCBhbmQgdGhlIGJ5dGVzIHRoZXJlYWZ0ZXIKKyAqIGFyZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nLiBUaGUgcmV0dXJuZWQgcmVzdWx0IHdpbGwgYmUgTlVMTAorICogdGVybWluYXRlZC4KKyAqLworaW50IGFyZXNfZXhwYW5kX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICplbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnMsCisgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKmVuY2xlbikKK3sKKyAgdW5zaWduZWQgY2hhciAqcTsKKyAgdW5pb24geworICAgIHNzaXplX3Qgc2lnOworICAgICBzaXplX3QgdW5zOworICB9IGVsZW47CisKKyAgaWYgKGVuY29kZWQgPT0gYWJ1ZithbGVuKQorICAgIHJldHVybiBBUkVTX0VCQURTVFI7CisKKyAgZWxlbi51bnMgPSAqZW5jb2RlZDsKKyAgaWYgKGVuY29kZWQrZWxlbi5zaWcrMSA+IGFidWYrYWxlbikKKyAgICByZXR1cm4gQVJFU19FQkFEU1RSOworCisgIGVuY29kZWQrKzsKKworICAqcyA9IGFyZXNfbWFsbG9jKGVsZW4udW5zKzEpOworICBpZiAoKnMgPT0gTlVMTCkKKyAgICByZXR1cm4gQVJFU19FTk9NRU07CisgIHEgPSAqczsKKyAgc3RybmNweSgoY2hhciAqKXEsIChjaGFyICopZW5jb2RlZCwgZWxlbi51bnMpOworICBxW2VsZW4udW5zXSA9ICdcMCc7CisKKyAgKnMgPSBxOworCisgICplbmNsZW4gPSAobG9uZykoZWxlbi5zaWcrMSk7CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mZHMuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZmRzLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzZTQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZmRzLjMKQEAgLTAsMCArMSw2MSBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0ZEUyAzICIyMyBKdWx5IDE5OTgiCisuU0ggTkFNRQorYXJlc19mZHMgXC0gR2V0IGZpbGUgZGVzY3JpcHRvcnMgdG8gc2VsZWN0IG9uIGZvciBuYW1lIHNlcnZpY2UKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiBpbnQgYXJlc19mZHMoYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsIGZkX3NldCAqXGZJcmVhZF9mZHNcZlAsCisuQglmZF9zZXQgKlxmSXdyaXRlX2Zkc1xmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfZmRzCitmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzIHdoaWNoIHRoZSBjYWxsaW5nCithcHBsaWNhdGlvbiBzaG91bGQgc2VsZWN0IG9uIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGZvciB0aGUKK3Byb2Nlc3Npbmcgb2YgbmFtZSBzZXJ2aWNlIHF1ZXJpZXMgcGVuZGluZyBvbiB0aGUgbmFtZSBzZXJ2aWNlIGNoYW5uZWwKK2lkZW50aWZpZWQgYnkKKy5JUiBjaGFubmVsIC4KK0ZpbGUgZGVzY3JpcHRvcnMgd2lsbCBiZSBzZXQgaW4gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXRzIHBvaW50ZWQgdG8gYnkKKy5JIHJlYWRfZmRzCithbmQKKy5JIHdyaXRlX2ZkcworYXMgYXBwcm9wcmlhdGUuICBGaWxlIGRlc2NyaXB0b3JzIGFscmVhZHkgc2V0IGluCisuSSByZWFkX2ZkcworYW5kCisuSSB3cml0ZV9mZHMKK3dpbGwgcmVtYWluIHNldDsgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpbGUgZGVzY3JpcHRvciBzZXRzCisodXNpbmcKKy5CUiBGRF9aRVJPICkKK2lzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyLgorLlNIIFJFVFVSTiBWQUxVRVMKKy5CIGFyZXNfZmRzCityZXR1cm5zIG9uZSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiB0aGUgaGlnaGVzdCBzb2NrZXQgc2V0IGluIGVpdGhlcgorLkkgcmVhZF9mZHMKK29yCisuSVIgd3JpdGVfZmRzIC4KK0lmIG5vIHF1ZXJpZXMgYXJlIGFjdGl2ZSwKKy5CIGFyZXNfZmRzCit3aWxsIHJldHVybiAwLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc190aW1lb3V0ICgzKSwKKy5CUiBhcmVzX3Byb2Nlc3MgKDMpCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2Zkcy5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDA1ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mZHMuYwpAQCAtMCwwICsxLDU5IEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19ub3dhcm4uaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworaW50IGFyZXNfZmRzKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBmZF9zZXQgKnJlYWRfZmRzLCBmZF9zZXQgKndyaXRlX2ZkcykKK3sKKyAgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVyOworICBhcmVzX3NvY2tldF90IG5mZHM7CisgIGludCBpOworCisgIC8qIEFyZSB0aGVyZSBhbnkgYWN0aXZlIHF1ZXJpZXM/ICovCisgIGludCBhY3RpdmVfcXVlcmllcyA9ICFhcmVzX19pc19saXN0X2VtcHR5KCYoY2hhbm5lbC0+YWxsX3F1ZXJpZXMpKTsKKworICBuZmRzID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5zZXJ2ZXJzOyBpKyspCisgICAgeworICAgICAgc2VydmVyID0gJmNoYW5uZWwtPnNlcnZlcnNbaV07CisgICAgICAvKiBXZSBvbmx5IG5lZWQgdG8gcmVnaXN0ZXIgaW50ZXJlc3QgaW4gVURQIHNvY2tldHMgaWYgd2UgaGF2ZQorICAgICAgICogb3V0c3RhbmRpbmcgcXVlcmllcy4KKyAgICAgICAqLworICAgICAgaWYgKGFjdGl2ZV9xdWVyaWVzICYmIHNlcnZlci0+dWRwX3NvY2tldCAhPSBBUkVTX1NPQ0tFVF9CQUQpCisgICAgICAgIHsKKyAgICAgICAgICBGRF9TRVQoc2VydmVyLT51ZHBfc29ja2V0LCByZWFkX2Zkcyk7CisgICAgICAgICAgaWYgKHNlcnZlci0+dWRwX3NvY2tldCA+PSBuZmRzKQorICAgICAgICAgICAgbmZkcyA9IHNlcnZlci0+dWRwX3NvY2tldCArIDE7CisgICAgICAgIH0KKyAgICAgIC8qIFdlIGFsd2F5cyByZWdpc3RlciBmb3IgVENQIGV2ZW50cywgYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cKKyAgICAgICAqIHdoZW4gdGhlIG90aGVyIHNpZGUgY2xvc2VzIHRoZSBjb25uZWN0aW9uLCBzbyB3ZSBkb24ndCB3YXN0ZQorICAgICAgICogdGltZSB0cnlpbmcgdG8gdXNlIGEgYnJva2VuIGNvbm5lY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGlmIChzZXJ2ZXItPnRjcF9zb2NrZXQgIT0gQVJFU19TT0NLRVRfQkFEKQorICAgICAgIHsKKyAgICAgICAgIEZEX1NFVChzZXJ2ZXItPnRjcF9zb2NrZXQsIHJlYWRfZmRzKTsKKyAgICAgICAgIGlmIChzZXJ2ZXItPnFoZWFkKQorICAgICAgICAgICBGRF9TRVQoc2VydmVyLT50Y3Bfc29ja2V0LCB3cml0ZV9mZHMpOworICAgICAgICAgaWYgKHNlcnZlci0+dGNwX3NvY2tldCA+PSBuZmRzKQorICAgICAgICAgICBuZmRzID0gc2VydmVyLT50Y3Bfc29ja2V0ICsgMTsKKwl9CisgICAgfQorICByZXR1cm4gKGludCluZmRzOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mcmVlX2RhdGEuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZnJlZV9kYXRhLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhNjViOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZnJlZV9kYXRhLjMKQEAgLTAsMCArMSw3OCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgYnkgRGFuaWVsIFN0ZW5iZXJnCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0ZSRUVfREFUQSAzICI1IE1hcmNoIDIwMTAiCisuU0ggTkFNRQorYXJlc19mcmVlX2RhdGEgXC0gRnJlZSBkYXRhIGFsbG9jYXRlZCBieSBzZXZlcmFsIGMtYXJlcyBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiB2b2lkIGFyZXNfZnJlZV9kYXRhKHZvaWQgKlxmSWRhdGFwdHJcZlApCisuUFAKKy5CIGNjIGZpbGUuYyAtbGNhcmVzCisuZmkKKy5TSCBERVNDUklQVElPTgorLlBQCitUaGUKKy5CIGFyZXNfZnJlZV9kYXRhKDMpCitmdW5jdGlvbiBmcmVlcyBvbmUgb3IgbW9yZSBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGFuZCByZXR1cm5lZAorYnkgc2V2ZXJhbCBjLWFyZXMgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHkgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlCitmb2xsb3dpbmcgbGlzdCBvZiBmdW5jdGlvbnMgbXVzdCBiZSBkZWFsbG9jYXRlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLgorLlRQIDUKKy5CIGFyZXNfZ2V0X3NlcnZlcnMoMykKK1doZW4gdXNlZCB0byBmcmVlIHRoZSBkYXRhIHJldHVybmVkIGJ5IGFyZXNfZ2V0X3NlcnZlcnMoMykgdGhpcword2lsbCBmcmVlIHRoZSB3aG9sZSBsaW5rZWQgbGlzdCBvZiBhcmVzX2FkZHJfbm9kZSBzdHJ1Y3R1cmVzIHJldHVybmVkCitieSBhcmVzX2dldF9zZXJ2ZXJzKDMpLgorLlRQCisuQiBhcmVzX3BhcnNlX3Nydl9yZXBseSgzKQorV2hlbiB1c2VkIHRvIGZyZWUgdGhlIGRhdGEgcmV0dXJuZWQgYnkgYXJlc19wYXJzZV9zcnZfcmVwbHkoMykgdGhpcword2lsbCBmcmVlIHRoZSB3aG9sZSBsaW5rZWQgbGlzdCBvZiBhcmVzX3Nydl9yZXBseSBzdHJ1Y3R1cmVzIHJldHVybmVkCitieSBhcmVzX3BhcnNlX3Nydl9yZXBseSgzKSwgYWxvbmcgd2l0aCBhbnkgYWRkaXRpb25hbCBzdG9yYWdlCithc3NvY2lhdGVkIHdpdGggdGhvc2Ugc3RydWN0dXJlcy4KKy5UUAorLkIgYXJlc19wYXJzZV9teF9yZXBseSgzKQorV2hlbiB1c2VkIHRvIGZyZWUgdGhlIGRhdGEgcmV0dXJuZWQgYnkgYXJlc19wYXJzZV9teF9yZXBseSgzKSB0aGlzCit3aWxsIGZyZWUgdGhlIHdob2xlIGxpbmtlZCBsaXN0IG9mIGFyZXNfbXhfcmVwbHkgc3RydWN0dXJlcyByZXR1cm5lZAorYnkgYXJlc19wYXJzZV9teF9yZXBseSgzKSwgYWxvbmcgd2l0aCBhbnkgYWRkaXRpb25hbCBzdG9yYWdlCithc3NvY2lhdGVkIHdpdGggdGhvc2Ugc3RydWN0dXJlcy4KKy5UUAorLkIgYXJlc19wYXJzZV90eHRfcmVwbHkoMykKK1doZW4gdXNlZCB0byBmcmVlIHRoZSBkYXRhIHJldHVybmVkIGJ5IGFyZXNfcGFyc2VfdHh0X3JlcGx5KDMpIHRoaXMKK3dpbGwgZnJlZSB0aGUgd2hvbGUgbGlua2VkIGxpc3Qgb2YgYXJlc190eHRfcmVwbHkgc3RydWN0dXJlcyByZXR1cm5lZAorYnkgYXJlc19wYXJzZV90eHRfcmVwbHkoMyksIGFsb25nIHdpdGggYW55IGFkZGl0aW9uYWwgc3RvcmFnZQorYXNzb2NpYXRlZCB3aXRoIHRob3NlIHN0cnVjdHVyZXMuCisuVFAKKy5CIGFyZXNfcGFyc2Vfc29hX3JlcGx5KDMpCitXaGVuIHVzZWQgdG8gZnJlZSB0aGUgZGF0YSByZXR1cm5lZCBieSBhcmVzX3BhcnNlX3NvYV9yZXBseSgzKSB0aGlzCit3aWxsIGZyZWUgdGhlIGFyZXNfc29hX3JlcGx5IHN0cnVjdHVyZSwgYWxvbmcgd2l0aCBhbnkgYWRkaXRpb25hbCBzdG9yYWdlCithc3NvY2lhdGVkIHdpdGggdGhvc2Ugc3RydWN0dXJlLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGFyZXNfZnJlZV9kYXRhKCkgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuCisuU0ggQVZBSUxBQklMSVRZCitUaGlzIGZ1bmN0aW9uIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIGMtYXJlcyB2ZXJzaW9uIDEuNy4wLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19nZXRfc2VydmVycygzKSwKKy5CUiBhcmVzX3BhcnNlX3Nydl9yZXBseSgzKSwKKy5CUiBhcmVzX3BhcnNlX214X3JlcGx5KDMpLAorLkJSIGFyZXNfcGFyc2VfdHh0X3JlcGx5KDMpLAorLkJSIGFyZXNfcGFyc2Vfc29hX3JlcGx5KDMpCisuU0ggQVVUSE9SCitZYW5nIFRzZQorLlBQCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5icgorQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgYnkgRGFuaWVsIFN0ZW5iZXJnLgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mcmVlX2hvc3RlbnQuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZnJlZV9ob3N0ZW50LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5MjgwMQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZnJlZV9ob3N0ZW50LjMKQEAgLTAsMCArMSw0NSBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0ZSRUVfSE9TVEVOVCAzICIyMyBKdWx5IDE5OTgiCisuU0ggTkFNRQorYXJlc19mcmVlX2hvc3RlbnQgXC0gRnJlZSBob3N0IHN0cnVjdHVyZSBhbGxvY2F0ZWQgYnkgYXJlcyBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiB2b2lkIGFyZXNfZnJlZV9ob3N0ZW50KHN0cnVjdCBob3N0ZW50ICpcZklob3N0XGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkkgYXJlc19mcmVlX2hvc3RlbnQKK2Z1bmN0aW9uIGZyZWVzIGEKKy5CIHN0cnVjdCBob3N0ZW50CithbGxvY2F0ZWQgYnkgb25lIG9mIHRoZSBmdW5jdGlvbnMgXGZJYXJlc19wYXJzZV9hX3JlcGx5KDMpXGZQLAorXGZJYXJlc19wYXJzZV9hYWFhX3JlcGx5KDMpXGZQLCBvciBcZklhcmVzX3BhcnNlX3B0cl9yZXBseSgzKVxmUC4KKy5TSCBOT1RFUworSXQgaXMgbm90IG5lY2Vzc2FyeSAoYW5kIGlzIG5vdCBjb3JyZWN0KSB0byBmcmVlIHRoZSBob3N0IHN0cnVjdHVyZSBwYXNzZWQgdG8KK3RoZSBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFxmSWFyZXNfZ2V0aG9zdGJ5bmFtZSgzKVxmUCBvcgorXGZJYXJlc19nZXRob3N0YnlhZGRyKDMpXGZQLiBjLWFyZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGZyZWUgc3VjaCBob3N0CitzdHJ1Y3R1cmVzIHdoZW4gdGhlIGNhbGxiYWNrIHJldHVybnMuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3BhcnNlX2FfcmVwbHkgKDMpLAorLkJSIGFyZXNfcGFyc2VfYWFhYV9yZXBseSAoMyksCisuQlIgYXJlc19wYXJzZV9wdHJfcmVwbHkgKDMpLAorLkJSIGFyZXNfcGFyc2VfbnNfcmVwbHkgKDMpCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2ZyZWVfaG9zdGVudC5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mcmVlX2hvc3RlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmM1ZjgxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mcmVlX2hvc3RlbnQuYwpAQCAtMCwwICsxLDQxIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiIC8qIGZvciBtZW1kZWJ1ZyAqLworCit2b2lkIGFyZXNfZnJlZV9ob3N0ZW50KHN0cnVjdCBob3N0ZW50ICpob3N0KQoreworICBjaGFyICoqcDsKKworICBpZiAoIWhvc3QpCisgICAgcmV0dXJuOworCisgIGFyZXNfZnJlZSgoY2hhciAqKShob3N0LT5oX25hbWUpKTsKKyAgZm9yIChwID0gaG9zdC0+aF9hbGlhc2VzOyAqcDsgcCsrKQorICAgIGFyZXNfZnJlZSgqcCk7CisgIGFyZXNfZnJlZShob3N0LT5oX2FsaWFzZXMpOworICBhcmVzX2ZyZWUoaG9zdC0+aF9hZGRyX2xpc3RbMF0pOyAvKiBubyBtYXR0ZXIgaWYgdGhlcmUgaXMgb25lIG9yIG1hbnkgZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG9ubHkgb25lIG1hbGxvYyBmb3IgYWxsIG9mIHRoZW0gKi8KKyAgYXJlc19mcmVlKGhvc3QtPmhfYWRkcl9saXN0KTsKKyAgYXJlc19mcmVlKGhvc3QpOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mcmVlX3N0cmluZy4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19mcmVlX3N0cmluZy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZDg4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2ZyZWVfc3RyaW5nLjMKQEAgLTAsMCArMSwzNCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDIwMDAgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0ZSRUVfU1RSSU5HIDMgIjQgRmVicnVhcnkgMjAwNCIKKy5TSCBOQU1FCithcmVzX2ZyZWVfc3RyaW5nIFwtIEZyZWUgc3RyaW5ncyBhbGxvY2F0ZWQgYnkgYXJlcyBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiB2b2lkIGFyZXNfZnJlZV9zdHJpbmcodm9pZCAqXGZJc3RyXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZklhcmVzX2ZyZWVfc3RyaW5nKDMpXGZQIGZ1bmN0aW9uIGZyZWVzIGEgc3RyaW5nIGFsbG9jYXRlZCBieSBhbiBhcmVzCitmdW5jdGlvbi4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfbWtxdWVyeSAoMykKKy5CUiBhcmVzX2V4cGFuZF9zdHJpbmcgKDMpCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDIwMDAgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2ZyZWVfc3RyaW5nLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2ZyZWVfc3RyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0OTkyZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZnJlZV9zdHJpbmcuYwpAQCAtMCwwICsxLDI1IEBACisKKy8qIENvcHlyaWdodCAyMDAwIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKK3ZvaWQgYXJlc19mcmVlX3N0cmluZyh2b2lkICpzdHIpCit7CisgIGFyZXNfZnJlZShzdHIpOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRfc2VydmVycy4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRfc2VydmVycy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MDY0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldF9zZXJ2ZXJzLjMKQEAgLTAsMCArMSw4NCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgYnkgRGFuaWVsIFN0ZW5iZXJnCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0dFVF9TRVJWRVJTIDMgIjUgTWFyY2ggMjAxMCIKKy5TSCBOQU1FCithcmVzX2dldF9zZXJ2ZXJzLCBhcmVzX2dldF9zZXJ2ZXJzX3BvcnRzIFwtIFJldHJpZXZlIG5hbWUgc2VydmVycyBmcm9tIGFuIGluaXRpYWxpemVkIGFyZXNfY2hhbm5lbAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX2dldF9zZXJ2ZXJzKGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLCBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKipcZklzZXJ2ZXJzXGZQKQorLkIgaW50IGFyZXNfZ2V0X3NlcnZlcnNfcG9ydHMoYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlICoqXGZJc2VydmVyc1xmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCYXJlc19nZXRfc2VydmVycygzKVxmUCBmdW5jdGlvbiByZXRyaWV2ZXMgbmFtZSBzZXJ2ZXJzIGNvbmZpZ3VyYXRpb24KK2Zyb20gdGhlCitjaGFubmVsIGRhdGEgaWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwgLAorYXMgYSBsaW5rZWQgbGlzdCBvZiBhcmVzX2FkZHJfbm9kZSBzdHJ1Y3RzIHN0b3JpbmcgYSBwb2ludGVyIHRvIHRoZSBmaXJzdAorbm9kZSBhdCB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgYnkKKy5JUiBzZXJ2ZXJzIC4KKworVGhlIFxmQmFyZXNfZ2V0X3NlcnZlcnNfcG9ydHMoMylcZlAgZnVuY3Rpb24gYWxzbyByZXRyaWV2ZXMgYW55IHBlci1zZXJ2ZXIKK3BvcnQgaW5mb3JtYXRpb24gdGhhdCBtYXkgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY29uZmlndXJlZCwgcmV0dXJuaW5nIGEgbGlua2VkCitsaXN0IG9mIGFyZXNfYWRkcl9wb3J0IHN0cnVjdHVyZXMuCisKK0Z1bmN0aW9uIGNhbGxlciBtYXkgdHJhdmVyc2UgdGhlIHJldHVybmVkIG5hbWUgc2VydmVyIGxpbmtlZCBsaXN0LCBvciBtYXkgdXNlCitpdCBkaXJlY3RseSBhcyBzdWl0YWJsZSBpbnB1dCBmb3IgdGhlIFxmQmFyZXNfc2V0X3NlcnZlcnMoMylcZlAgLworXGZCYXJlc19zZXRfc2VydmVyc19wb3J0cygzKVxmUCBmdW5jdGlvbnMsIGJ1dAorc2hhbGwgbm90IHNocmluayBvciBleHRlbmQgdGhlIGxpc3Qgb24gaXRzIG93bi4KKworRWFjaCBub2RlIG9mIHRoZSBuYW1lIHNlcnZlciBsaW5rZWQgbGlzdCBpcyBzdG9yZWQgaW4gbWVtb3J5IGR5bmFtaWNhbGx5CithbGxvY2F0ZWQgYW5kIG1hbmFnZWQgYnkgYy1hcmVzLiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZQordGhlIHJlc3VsdGluZyBsaW5rZWQgbGlzdCwgdXNpbmcgXGZCYXJlc19mcmVlX2RhdGEoMylcZlAgLCBvbmNlIHRoZSBjYWxsZXIKK2RvZXMgbm90IG5lZWQgaXQgYW55IGxvbmdlci4KKworVGhpcyBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIElQdjQgYW5kIElQdjYgbmFtZSBzZXJ2ZXIKK2FkZHJlc3NlcyBzaW11bHRhbmVvdXNseSwgcmVuZGVyaW5nIFxmQmFyZXNfc2F2ZV9vcHRpb25zKDMpXGZQIHdpdGgKK29wdG1hc2sgXGZCQVJFU19PUFRfU0VSVkVSU1xmUCBmdW5jdGlvbmFsbHkgb2Jzb2xldGUgZXhjZXB0IGZvcgorSVB2NC1vbmx5IG5hbWUgc2VydmVyIHVzYWdlLgorCisuU0ggUkVUVVJOIFZBTFVFUworVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxNQorLkIgQVJFU19TVUNDRVNTCitUaGUgbmFtZSBzZXJ2ZXJzIGNvbmZpZ3VyYXRpb24gd2FzIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQKKy5UUCAxNQorLkIgQVJFU19FTk9NRU0KK1RoZSBtZW1vcnkgd2FzIGV4aGF1c3RlZAorLlRQIDE1CisuQiBBUkVTX0VOT0RBVEEKK1RoZSBjaGFubmVsIGRhdGEgaWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwKK3dhcyBpbnZhbGlkLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19zZXRfc2VydmVycyAoMyksCisuQlIgYXJlc19pbml0X29wdGlvbnMgKDMpLAorLkJSIGFyZXNfc2F2ZV9vcHRpb25zKDMpCisuU0ggQVZBSUxBQklMSVRZCitcZkJhcmVzX2dldF9zZXJ2ZXJzKDMpXGZQIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS43LjE7CitcZkJhcmVzX2dldF9zZXJ2ZXJzX3BvcnRzKDMpXGZQIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS4xMS4wLgorLlNIIEFVVEhPUgorSW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBsaWJyYXJ5IGludGVybmFscyBhcmUgYmFzZWQKK29uIGNvZGUsIGNvbW1lbnRzIGFuZCBmZWVkYmFjayBwcm92aWRlZCBpbiBOb3ZlbWJlciBhbmQgRGVjZW1iZXIgb2YgMjAwOCBieQorRGFuaWVsIFN0ZW5iZXJnLCBHcmVnb3IgSmFzbnksIFBoaWwgQmx1bmRlbGwgYW5kIFlhbmcgVHNlLCBEZWNlbWJlciAyMDA5CitieSBDZWRyaWMgQmFpbCwgRmVicnVhcnkgMjAxMCBieSBKYWt1YiBIcm96ZWsuIE9uIE1hcmNoIDIwMTAgWWFuZyBUc2UKK3NodWZmbGVkIGFsbCB0aGUgYml0cyBhbmQgdGhpcyBmdW5jdGlvbiBwb3BwZWQgb3V0LgorLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5icgorQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgYnkgRGFuaWVsIFN0ZW5iZXJnCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldF9zZXJ2ZXJzX3BvcnRzLjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldF9zZXJ2ZXJzX3BvcnRzLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ZDFmNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0X3NlcnZlcnNfcG9ydHMuMwpAQCAtMCwwICsxIEBACisuc28gbWFuMy9hcmVzX2dldF9zZXJ2ZXJzLjMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0ZW52LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmU4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldGVudi5jCkBAIC0wLDAgKzEsMzAgQEAKKworCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorI2luY2x1ZGUgImFyZXNfZ2V0ZW52LmgiCisKKyNpZm5kZWYgSEFWRV9HRVRFTlYKKworY2hhciAqYXJlc19nZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNpZmRlZiBfV0lOMzJfV0NFCisgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRlbnYuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0ZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhNmNjNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0ZW52LmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBIRUFERVJfQ0FSRVNfR0VURU5WX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX0dFVEVOVl9ICisKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmbmRlZiBIQVZFX0dFVEVOVgorZXh0ZXJuIGNoYXIgKmFyZXNfZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpOworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ0FSRVNfR0VURU5WX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5YWRkci4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRob3N0YnlhZGRyLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNzMwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5YWRkci4zCkBAIC0wLDAgKzEsMTA0IEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfR0VUSE9TVEJZQUREUiAzICIyNCBKdWx5IDE5OTgiCisuU0ggTkFNRQorYXJlc19nZXRob3N0YnlhZGRyIFwtIEluaXRpYXRlIGEgaG9zdCBxdWVyeSBieSBhZGRyZXNzCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgdHlwZWRlZiB2b2lkICgqYXJlc19ob3N0X2NhbGxiYWNrKSh2b2lkICpcZklhcmdcZlAsIGludCBcZklzdGF0dXNcZlAsCisuQglpbnQgXGZJdGltZW91dHNcZlAsIHN0cnVjdCBob3N0ZW50ICpcZklob3N0ZW50XGZQKQorLlBQCisuQiB2b2lkIGFyZXNfZ2V0aG9zdGJ5YWRkcihhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwgY29uc3Qgdm9pZCAqXGZJYWRkclxmUCwKKy5CIAlpbnQgXGZJYWRkcmxlblxmUCwgaW50IFxmSWZhbWlseVxmUCwgYXJlc19ob3N0X2NhbGxiYWNrIFxmSWNhbGxiYWNrXGZQLAorLkIgCXZvaWQgKlxmSWFyZ1xmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfZ2V0aG9zdGJ5YWRkcgorZnVuY3Rpb24gaW5pdGlhdGVzIGEgaG9zdCBxdWVyeSBieSBhZGRyZXNzIG9uIHRoZSBuYW1lIHNlcnZpY2UgY2hhbm5lbAoraWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwgLgorVGhlIHBhcmFtZXRlcnMKKy5JIGFkZHIKK2FuZAorLkkgYWRkcmxlbgorZ2l2ZSB0aGUgYWRkcmVzcyBhcyBhIHNlcmllcyBvZiBieXRlcywgYW5kCisuSSBmYW1pbHkKK2dpdmVzIHRoZSB0eXBlIG9mIGFkZHJlc3MuICBXaGVuIHRoZSBxdWVyeSBpcyBjb21wbGV0ZSBvciBoYXMgZmFpbGVkLCB0aGUgYXJlcworbGlicmFyeSB3aWxsIGludm9rZSBcZkljYWxsYmFja1xmUC4gIENvbXBsZXRpb24gb3IgZmFpbHVyZSBvZiB0aGUgcXVlcnkgbWF5CitoYXBwZW4gaW1tZWRpYXRlbHksIG9yIG1heSBoYXBwZW4gZHVyaW5nIGEgbGF0ZXIgY2FsbCB0bworXGZJYXJlc19wcm9jZXNzKDMpXGZQLCBcZklhcmVzX2Rlc3Ryb3koMylcZlAgb3IgXGZJYXJlc19jYW5jZWwoMylcZlAuCisuUFAKK1RoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgYXJnCitpcyBjb3BpZWQgZnJvbSB0aGUKKy5CIGFyZXNfZ2V0aG9zdGJ5YWRkcgorYXJndW1lbnQKKy5JUiBhcmcgLgorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBzdGF0dXMKK2luZGljYXRlcyB3aGV0aGVyIHRoZSBxdWVyeSBzdWNjZWVkZWQgYW5kLCBpZiBub3QsIGhvdyBpdCBmYWlsZWQuICBJdAorbWF5IGhhdmUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE5CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSBob3N0IGxvb2t1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorLlRQIDE5CisuQiBBUkVTX0VOT1RJTVAKK1RoZSBhcmVzIGxpYnJhcnkgZG9lcyBub3Qga25vdyBob3cgdG8gbG9vayB1cCBhZGRyZXNzZXMgb2YgdHlwZQorLklSIGZhbWlseSAuCisuVFAgMTkKKy5CIEFSRVNfRU5PVEZPVU5ECitUaGUgYWRkcmVzcworLkkgYWRkcgord2FzIG5vdCBmb3VuZC4KKy5UUCAxOQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlRQIDE5CisuQiBBUkVTX0VDQU5DRUxMRUQKK1RoZSBxdWVyeSB3YXMgY2FuY2VsbGVkLgorLlRQIDE5CisuQiBBUkVTX0VERVNUUlVDVElPTgorVGhlIG5hbWUgc2VydmljZSBjaGFubmVsCisuSSBjaGFubmVsCitpcyBiZWluZyBkZXN0cm95ZWQ7IHRoZSBxdWVyeSB3aWxsIG5vdCBiZSBjb21wbGV0ZWQuCisuUFAKK1RoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgdGltZW91dHMKK3JlcG9ydHMgaG93IG1hbnkgdGltZXMgYSBxdWVyeSB0aW1lZCBvdXQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlCitnaXZlbiByZXF1ZXN0LgorLlBQCitPbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgdGhlIHF1ZXJ5LCB0aGUgY2FsbGJhY2sgYXJndW1lbnQKKy5JIGhvc3RlbnQKK3BvaW50cyB0byBhCisuQiBzdHJ1Y3QgaG9zdGVudAorY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgaG9zdCByZXR1cm5lZCBieSB0aGUgcXVlcnkuICBUaGUgY2FsbGJhY2sKK25lZWQgbm90IGFuZCBzaG91bGQgbm90IGF0dGVtcHQgdG8gZnJlZSB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkKKy5JUiBob3N0ZW50IDsKK3RoZSBhcmVzIGxpYnJhcnkgd2lsbCBmcmVlIGl0IHdoZW4gdGhlIGNhbGxiYWNrIHJldHVybnMuICBJZiB0aGUgcXVlcnkKK2RpZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LAorLkkgaG9zdGVudAord2lsbCBiZQorLkJSIE5VTEwgLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19wcm9jZXNzICgzKSwKKy5CUiBhcmVzX2dldGhvc3RieW5hbWUgKDMpCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldGhvc3RieWFkZHIuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5YWRkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNTg5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldGhvc3RieWFkZHIuYwpAQCAtMCwwICsxLDI5NCBAQAorCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2luZXRfbmV0X3B0b24uaCIKKyNpbmNsdWRlICJhcmVzX3BsYXRmb3JtLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKKyNpZmRlZiBXQVRUMzIKKyN1bmRlZiBXSU4zMgorI2VuZGlmCisKK3N0cnVjdCBhZGRyX3F1ZXJ5IHsKKyAgLyogQXJndW1lbnRzIHBhc3NlZCB0byBhcmVzX2dldGhvc3RieWFkZHIoKSAqLworICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKKyAgc3RydWN0IGFyZXNfYWRkciBhZGRyOworICBhcmVzX2hvc3RfY2FsbGJhY2sgY2FsbGJhY2s7CisgIHZvaWQgKmFyZzsKKworICBjb25zdCBjaGFyICpyZW1haW5pbmdfbG9va3VwczsKKyAgaW50IHRpbWVvdXRzOworfTsKKworc3RhdGljIHZvaWQgbmV4dF9sb29rdXAoc3RydWN0IGFkZHJfcXVlcnkgKmFxdWVyeSk7CitzdGF0aWMgdm9pZCBhZGRyX2NhbGxiYWNrKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbik7CitzdGF0aWMgdm9pZCBlbmRfYXF1ZXJ5KHN0cnVjdCBhZGRyX3F1ZXJ5ICphcXVlcnksIGludCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpob3N0KTsKK3N0YXRpYyBpbnQgZmlsZV9sb29rdXAoc3RydWN0IGFyZXNfYWRkciAqYWRkciwgc3RydWN0IGhvc3RlbnQgKipob3N0KTsKK3N0YXRpYyB2b2lkIHB0cl9ycl9uYW1lKGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBhcmVzX2FkZHIgKmFkZHIpOworCit2b2lkIGFyZXNfZ2V0aG9zdGJ5YWRkcihhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY29uc3Qgdm9pZCAqYWRkciwgaW50IGFkZHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFtaWx5LCBhcmVzX2hvc3RfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmFyZykKK3sKKyAgc3RydWN0IGFkZHJfcXVlcnkgKmFxdWVyeTsKKworICBpZiAoZmFtaWx5ICE9IEFGX0lORVQgJiYgZmFtaWx5ICE9IEFGX0lORVQ2KQorICAgIHsKKyAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FTk9USU1QLCAwLCBOVUxMKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKChmYW1pbHkgPT0gQUZfSU5FVCAmJiBhZGRybGVuICE9IHNpemVvZihhcXVlcnktPmFkZHIuYWRkclY0KSkgfHwKKyAgICAgIChmYW1pbHkgPT0gQUZfSU5FVDYgJiYgYWRkcmxlbiAhPSBzaXplb2YoYXF1ZXJ5LT5hZGRyLmFkZHJWNikpKQorICAgIHsKKyAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FTk9USU1QLCAwLCBOVUxMKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgYXF1ZXJ5ID0gYXJlc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyX3F1ZXJ5KSk7CisgIGlmICghYXF1ZXJ5KQorICAgIHsKKyAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FTk9NRU0sIDAsIE5VTEwpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgYXF1ZXJ5LT5jaGFubmVsID0gY2hhbm5lbDsKKyAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgIG1lbWNweSgmYXF1ZXJ5LT5hZGRyLmFkZHJWNCwgYWRkciwgc2l6ZW9mKGFxdWVyeS0+YWRkci5hZGRyVjQpKTsKKyAgZWxzZQorICAgIG1lbWNweSgmYXF1ZXJ5LT5hZGRyLmFkZHJWNiwgYWRkciwgc2l6ZW9mKGFxdWVyeS0+YWRkci5hZGRyVjYpKTsKKyAgYXF1ZXJ5LT5hZGRyLmZhbWlseSA9IGZhbWlseTsKKyAgYXF1ZXJ5LT5jYWxsYmFjayA9IGNhbGxiYWNrOworICBhcXVlcnktPmFyZyA9IGFyZzsKKyAgYXF1ZXJ5LT5yZW1haW5pbmdfbG9va3VwcyA9IGNoYW5uZWwtPmxvb2t1cHM7CisgIGFxdWVyeS0+dGltZW91dHMgPSAwOworCisgIG5leHRfbG9va3VwKGFxdWVyeSk7Cit9CisKK3N0YXRpYyB2b2lkIG5leHRfbG9va3VwKHN0cnVjdCBhZGRyX3F1ZXJ5ICphcXVlcnkpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNoYXIgbmFtZVsxMjhdOworICBpbnQgc3RhdHVzOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKKworICBmb3IgKHAgPSBhcXVlcnktPnJlbWFpbmluZ19sb29rdXBzOyAqcDsgcCsrKQorICAgIHsKKyAgICAgIHN3aXRjaCAoKnApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgcHRyX3JyX25hbWUobmFtZSwgJmFxdWVyeS0+YWRkcik7CisgICAgICAgICAgYXF1ZXJ5LT5yZW1haW5pbmdfbG9va3VwcyA9IHAgKyAxOworICAgICAgICAgIGFyZXNfcXVlcnkoYXF1ZXJ5LT5jaGFubmVsLCBuYW1lLCBDX0lOLCBUX1BUUiwgYWRkcl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgIGFxdWVyeSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICBzdGF0dXMgPSBmaWxlX2xvb2t1cCgmYXF1ZXJ5LT5hZGRyLCAmaG9zdCk7CisKKyAgICAgICAgICAvKiB0aGlzIHN0YXR1cyBjaGVjayBiZWxvdyBwcmV2aW91c2x5IGNoZWNrZWQgZm9yICFBUkVTX0VOT1RGT1VORCwKKyAgICAgICAgICAgICBidXQgd2Ugc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCB0aGlzIHNpbmdsZSBlcnJvciBjb2RlIGlzIHRoZSBvbmUKKyAgICAgICAgICAgICB0aGF0IGNhbiBvY2N1ciwgYXMgdGhhdCBpcyBpbiBmYWN0IG5vIGxvbmdlciB0aGUgY2FzZSAqLworICAgICAgICAgIGlmIChzdGF0dXMgPT0gQVJFU19TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbmRfYXF1ZXJ5KGFxdWVyeSwgc3RhdHVzLCBob3N0KTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICBlbmRfYXF1ZXJ5KGFxdWVyeSwgQVJFU19FTk9URk9VTkQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBhZGRyX2NhbGxiYWNrKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbikKK3sKKyAgc3RydWN0IGFkZHJfcXVlcnkgKmFxdWVyeSA9IChzdHJ1Y3QgYWRkcl9xdWVyeSAqKSBhcmc7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0OworICBzaXplX3QgYWRkcmxlbjsKKworICBhcXVlcnktPnRpbWVvdXRzICs9IHRpbWVvdXRzOworICBpZiAoc3RhdHVzID09IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAoYXF1ZXJ5LT5hZGRyLmZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICB7CisgICAgICAgICAgYWRkcmxlbiA9IHNpemVvZihhcXVlcnktPmFkZHIuYWRkclY0KTsKKyAgICAgICAgICBzdGF0dXMgPSBhcmVzX3BhcnNlX3B0cl9yZXBseShhYnVmLCBhbGVuLCAmYXF1ZXJ5LT5hZGRyLmFkZHJWNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWFkZHJsZW4sIEFGX0lORVQsICZob3N0KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYWRkcmxlbiA9IHNpemVvZihhcXVlcnktPmFkZHIuYWRkclY2KTsKKyAgICAgICAgICBzdGF0dXMgPSBhcmVzX3BhcnNlX3B0cl9yZXBseShhYnVmLCBhbGVuLCAmYXF1ZXJ5LT5hZGRyLmFkZHJWNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWFkZHJsZW4sIEFGX0lORVQ2LCAmaG9zdCk7CisgICAgICAgIH0KKyAgICAgIGVuZF9hcXVlcnkoYXF1ZXJ5LCBzdGF0dXMsIGhvc3QpOworICAgIH0KKyAgZWxzZSBpZiAoc3RhdHVzID09IEFSRVNfRURFU1RSVUNUSU9OKQorICAgIGVuZF9hcXVlcnkoYXF1ZXJ5LCBzdGF0dXMsIE5VTEwpOworICBlbHNlCisgICAgbmV4dF9sb29rdXAoYXF1ZXJ5KTsKK30KKworc3RhdGljIHZvaWQgZW5kX2FxdWVyeShzdHJ1Y3QgYWRkcl9xdWVyeSAqYXF1ZXJ5LCBpbnQgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCkKK3sKKyAgYXF1ZXJ5LT5jYWxsYmFjayhhcXVlcnktPmFyZywgc3RhdHVzLCBhcXVlcnktPnRpbWVvdXRzLCBob3N0KTsKKyAgaWYgKGhvc3QpCisgICAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7CisgIGFyZXNfZnJlZShhcXVlcnkpOworfQorCitzdGF0aWMgaW50IGZpbGVfbG9va3VwKHN0cnVjdCBhcmVzX2FkZHIgKmFkZHIsIHN0cnVjdCBob3N0ZW50ICoqaG9zdCkKK3sKKyAgRklMRSAqZnA7CisgIGludCBzdGF0dXM7CisgIGludCBlcnJvcjsKKworI2lmZGVmIFdJTjMyCisgIGNoYXIgUEFUSF9IT1NUU1tNQVhfUEFUSF07CisgIHdpbl9wbGF0Zm9ybSBwbGF0Zm9ybTsKKworICBQQVRIX0hPU1RTWzBdID0gJ1wwJzsKKworICBwbGF0Zm9ybSA9IGFyZXNfX2dldHBsYXRmb3JtKCk7CisKKyAgaWYgKHBsYXRmb3JtID09IFdJTl9OVCkgeworICAgIGNoYXIgdG1wW01BWF9QQVRIXTsKKyAgICBIS0VZIGhrZXlIb3N0czsKKworICAgIGlmIChSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBXSU5fTlNfTlRfS0VZLCAwLCBLRVlfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICZoa2V5SG9zdHMpID09IEVSUk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgRFdPUkQgZHdMZW5ndGggPSBNQVhfUEFUSDsKKyAgICAgIFJlZ1F1ZXJ5VmFsdWVFeChoa2V5SG9zdHMsIERBVEFCQVNFUEFUSCwgTlVMTCwgTlVMTCwgKExQQllURSl0bXAsCisgICAgICAgICAgICAgICAgICAgICAgJmR3TGVuZ3RoKTsKKyAgICAgIEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyh0bXAsIFBBVEhfSE9TVFMsIE1BWF9QQVRIKTsKKyAgICAgIFJlZ0Nsb3NlS2V5KGhrZXlIb3N0cyk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKHBsYXRmb3JtID09IFdJTl85WCkKKyAgICBHZXRXaW5kb3dzRGlyZWN0b3J5KFBBVEhfSE9TVFMsIE1BWF9QQVRIKTsKKyAgZWxzZQorICAgIHJldHVybiBBUkVTX0VOT1RGT1VORDsKKworICBzdHJjYXQoUEFUSF9IT1NUUywgV0lOX1BBVEhfSE9TVFMpOworCisjZWxpZiBkZWZpbmVkKFdBVFQzMikKKyAgZXh0ZXJuIGNvbnN0IGNoYXIgKl93MzJfR2V0SG9zdHNGaWxlICh2b2lkKTsKKyAgY29uc3QgY2hhciAqUEFUSF9IT1NUUyA9IF93MzJfR2V0SG9zdHNGaWxlKCk7CisKKyAgaWYgKCFQQVRIX0hPU1RTKQorICAgIHJldHVybiBBUkVTX0VOT1RGT1VORDsKKyNlbmRpZgorCisgIGZwID0gZm9wZW4oUEFUSF9IT1NUUywgInIiKTsKKyAgaWYgKCFmcCkKKyAgICB7CisgICAgICBlcnJvciA9IEVSUk5POworICAgICAgc3dpdGNoKGVycm9yKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRU5PRU5UOgorICAgICAgICBjYXNlIEVTUkNIOgorICAgICAgICAgIHJldHVybiBBUkVTX0VOT1RGT1VORDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKSk7CisgICAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX0hPU1RTKSk7CisgICAgICAgICAgKmhvc3QgPSBOVUxMOworICAgICAgICAgIHJldHVybiBBUkVTX0VGSUxFOworICAgICAgICB9CisgICAgfQorICB3aGlsZSAoKHN0YXR1cyA9IGFyZXNfX2dldF9ob3N0ZW50KGZwLCBhZGRyLT5mYW1pbHksIGhvc3QpKSA9PSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgaWYgKGFkZHItPmZhbWlseSAhPSAoKmhvc3QpLT5oX2FkZHJ0eXBlKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlX2hvc3RlbnQoKmhvc3QpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBpZiAoYWRkci0+ZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAobWVtY21wKCgqaG9zdCktPmhfYWRkciwgJmFkZHItPmFkZHJWNCwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyLT5hZGRyVjQpKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGFkZHItPmZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgeworICAgICAgICAgIGlmIChtZW1jbXAoKCpob3N0KS0+aF9hZGRyLCAmYWRkci0+YWRkclY2LAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHItPmFkZHJWNikpID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgYXJlc19mcmVlX2hvc3RlbnQoKmhvc3QpOworICAgIH0KKyAgZmNsb3NlKGZwKTsKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX0VPRikKKyAgICBzdGF0dXMgPSBBUkVTX0VOT1RGT1VORDsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgKmhvc3QgPSBOVUxMOworICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBwdHJfcnJfbmFtZShjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgYXJlc19hZGRyICphZGRyKQoreworICBpZiAoYWRkci0+ZmFtaWx5ID09IEFGX0lORVQpCisgICAgeworICAgICAgIHVuc2lnbmVkIGxvbmcgbGFkZHIgPSBudG9obChhZGRyLT5hZGRyVjQuc19hZGRyKTsKKyAgICAgICB1bnNpZ25lZCBsb25nIGExID0gKGxhZGRyID4+IDI0VUwpICYgMHhGRlVMOworICAgICAgIHVuc2lnbmVkIGxvbmcgYTIgPSAobGFkZHIgPj4gMTZVTCkgJiAweEZGVUw7CisgICAgICAgdW5zaWduZWQgbG9uZyBhMyA9IChsYWRkciA+PiAgOFVMKSAmIDB4RkZVTDsKKyAgICAgICB1bnNpZ25lZCBsb25nIGE0ID0gbGFkZHIgJiAweEZGVUw7CisgICAgICAgc3ByaW50ZihuYW1lLCAiJWx1LiVsdS4lbHUuJWx1LmluLWFkZHIuYXJwYSIsIGE0LCBhMywgYTIsIGExKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZhZGRyLT5hZGRyVjY7CisgICAgICAgLyogVGhlcmUgYXJlIHRvbyBtYW55IGFyZ3VtZW50cyB0byBkbyB0aGlzIGluIG9uZSBsaW5lIHVzaW5nCisgICAgICAgICogbWluaW1hbGx5IEM4OS1jb21wbGlhbnQgY29tcGlsZXJzICovCisgICAgICAgc3ByaW50ZihuYW1lLAorICAgICAgICAgICAgICAgICIleC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4iLAorICAgICAgICAgICAgICAgIGJ5dGVzWzE1XSYweGYsIGJ5dGVzWzE1XSA+PiA0LCBieXRlc1sxNF0mMHhmLCBieXRlc1sxNF0gPj4gNCwKKyAgICAgICAgICAgICAgICBieXRlc1sxM10mMHhmLCBieXRlc1sxM10gPj4gNCwgYnl0ZXNbMTJdJjB4ZiwgYnl0ZXNbMTJdID4+IDQsCisgICAgICAgICAgICAgICAgYnl0ZXNbMTFdJjB4ZiwgYnl0ZXNbMTFdID4+IDQsIGJ5dGVzWzEwXSYweGYsIGJ5dGVzWzEwXSA+PiA0LAorICAgICAgICAgICAgICAgIGJ5dGVzWzldJjB4ZiwgYnl0ZXNbOV0gPj4gNCwgYnl0ZXNbOF0mMHhmLCBieXRlc1s4XSA+PiA0KTsKKyAgICAgICBzcHJpbnRmKG5hbWUrc3RybGVuKG5hbWUpLAorICAgICAgICAgICAgICAgICIleC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC4leC5pcDYuYXJwYSIsCisgICAgICAgICAgICAgICAgYnl0ZXNbN10mMHhmLCBieXRlc1s3XSA+PiA0LCBieXRlc1s2XSYweGYsIGJ5dGVzWzZdID4+IDQsCisgICAgICAgICAgICAgICAgYnl0ZXNbNV0mMHhmLCBieXRlc1s1XSA+PiA0LCBieXRlc1s0XSYweGYsIGJ5dGVzWzRdID4+IDQsCisgICAgICAgICAgICAgICAgYnl0ZXNbM10mMHhmLCBieXRlc1szXSA+PiA0LCBieXRlc1syXSYweGYsIGJ5dGVzWzJdID4+IDQsCisgICAgICAgICAgICAgICAgYnl0ZXNbMV0mMHhmLCBieXRlc1sxXSA+PiA0LCBieXRlc1swXSYweGYsIGJ5dGVzWzBdID4+IDQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5bmFtZS4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRob3N0YnluYW1lLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyNGVhNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5bmFtZS4zCkBAIC0wLDAgKzEsMTA4IEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfR0VUSE9TVEJZTkFNRSAzICIyNSBKdWx5IDE5OTgiCisuU0ggTkFNRQorYXJlc19nZXRob3N0YnluYW1lIFwtIEluaXRpYXRlIGEgaG9zdCBxdWVyeSBieSBuYW1lCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgdHlwZWRlZiB2b2lkICgqYXJlc19ob3N0X2NhbGxiYWNrKSh2b2lkICpcZklhcmdcZlAsIGludCBcZklzdGF0dXNcZlAsCisuQglpbnQgXGZJdGltZW91dHNcZlAsIHN0cnVjdCBob3N0ZW50ICpcZklob3N0ZW50XGZQKQorLlBQCisuQiB2b2lkIGFyZXNfZ2V0aG9zdGJ5bmFtZShhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwgY29uc3QgY2hhciAqXGZJbmFtZVxmUCwKKy5CIAlpbnQgXGZJZmFtaWx5XGZQLCBhcmVzX2hvc3RfY2FsbGJhY2sgXGZJY2FsbGJhY2tcZlAsIHZvaWQgKlxmSWFyZ1xmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfZ2V0aG9zdGJ5bmFtZQorZnVuY3Rpb24gaW5pdGlhdGVzIGEgaG9zdCBxdWVyeSBieSBuYW1lIG9uIHRoZSBuYW1lIHNlcnZpY2UgY2hhbm5lbAoraWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwgLgorVGhlIHBhcmFtZXRlcgorLkkgbmFtZQorZ2l2ZXMgdGhlIGhvc3RuYW1lIGFzIGEgTlVMLXRlcm1pbmF0ZWQgQyBzdHJpbmcsIGFuZAorLkkgZmFtaWx5CitnaXZlcyB0aGUgZGVzaXJlZCB0eXBlIG9mIGFkZHJlc3MgZm9yIHRoZSByZXN1bHRpbmcgaG9zdCBlbnRyeS4gIFdoZW4gdGhlCitxdWVyeSBpcyBjb21wbGV0ZSBvciBoYXMgZmFpbGVkLCB0aGUgYXJlcyBsaWJyYXJ5IHdpbGwgaW52b2tlIFxmSWNhbGxiYWNrXGZQLgorQ29tcGxldGlvbiBvciBmYWlsdXJlIG9mIHRoZSBxdWVyeSBtYXkgaGFwcGVuIGltbWVkaWF0ZWx5LCBvciBtYXkgaGFwcGVuCitkdXJpbmcgYSBsYXRlciBjYWxsIHRvIFxmSWFyZXNfcHJvY2VzcygzKVxmUCwgXGZJYXJlc19kZXN0cm95KDMpXGZQIG9yCitcZklhcmVzX2NhbmNlbCgzKVxmUC4KKy5QUAorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBhcmcKK2lzIGNvcGllZCBmcm9tIHRoZQorLkIgYXJlc19nZXRob3N0YnluYW1lCithcmd1bWVudAorLklSIGFyZyAuCitUaGUgY2FsbGJhY2sgYXJndW1lbnQKKy5JIHN0YXR1cworaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHF1ZXJ5IHN1Y2NlZWRlZCBhbmQsIGlmIG5vdCwgaG93IGl0IGZhaWxlZC4gIEl0CittYXkgaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuVFAgMTkKKy5CIEFSRVNfU1VDQ0VTUworVGhlIGhvc3QgbG9va3VwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisuVFAgMTkKKy5CIEFSRVNfRU5PVElNUAorVGhlIGFyZXMgbGlicmFyeSBkb2VzIG5vdCBrbm93IGhvdyB0byBmaW5kIGFkZHJlc3NlcyBvZiB0eXBlCisuSVIgZmFtaWx5IC4KKy5UUCAxOQorLkIgQVJFU19FQkFETkFNRQorVGhlIGhvc3RuYW1lCisuQiBuYW1lCitpcyBjb21wb3NlZCBlbnRpcmVseSBvZiBudW1iZXJzIGFuZCBwZXJpb2RzLCBidXQgaXMgbm90IGEgdmFsaWQKK3JlcHJlc2VudGF0aW9uIG9mIGFuIEludGVybmV0IGFkZHJlc3MuCisuVFAgMTkKKy5CIEFSRVNfRU5PVEZPVU5ECitUaGUgYWRkcmVzcworLkkgYWRkcgord2FzIG5vdCBmb3VuZC4KKy5UUCAxOQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlRQIDE5CisuQiBBUkVTX0VDQU5DRUxMRUQKK1RoZSBxdWVyeSB3YXMgY2FuY2VsbGVkLgorLlRQIDE5CisuQiBBUkVTX0VERVNUUlVDVElPTgorVGhlIG5hbWUgc2VydmljZSBjaGFubmVsCisuSSBjaGFubmVsCitpcyBiZWluZyBkZXN0cm95ZWQ7IHRoZSBxdWVyeSB3aWxsIG5vdCBiZSBjb21wbGV0ZWQuCisuUFAKK1RoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgdGltZW91dHMKK3JlcG9ydHMgaG93IG1hbnkgdGltZXMgYSBxdWVyeSB0aW1lZCBvdXQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlCitnaXZlbiByZXF1ZXN0LgorLlBQCitPbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgdGhlIHF1ZXJ5LCB0aGUgY2FsbGJhY2sgYXJndW1lbnQKKy5JIGhvc3RlbnQKK3BvaW50cyB0byBhCisuQiBzdHJ1Y3QgaG9zdGVudAorY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgaG9zdCByZXR1cm5lZCBieSB0aGUgcXVlcnkuICBUaGUgY2FsbGJhY2sKK25lZWQgbm90IGFuZCBzaG91bGQgbm90IGF0dGVtcHQgdG8gZnJlZSB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkKKy5JUiBob3N0ZW50IDsKK3RoZSBhcmVzIGxpYnJhcnkgd2lsbCBmcmVlIGl0IHdoZW4gdGhlIGNhbGxiYWNrIHJldHVybnMuICBJZiB0aGUgcXVlcnkKK2RpZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LAorLkkgaG9zdGVudAord2lsbCBiZQorLkJSIE5VTEwgLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19wcm9jZXNzICgzKSwKKy5CUiBhcmVzX2dldGhvc3RieWFkZHIgKDMpCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldGhvc3RieW5hbWUuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5bmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWI2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldGhvc3RieW5hbWUuYwpAQCAtMCwwICsxLDUxOCBAQAorCisvKiBDb3B5cmlnaHQgMTk5OCwgMjAxMSwgMjAxMyBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2luZXRfbmV0X3B0b24uaCIKKyNpbmNsdWRlICJiaXRuY21wLmgiCisjaW5jbHVkZSAiYXJlc19wbGF0Zm9ybS5oIgorI2luY2x1ZGUgImFyZXNfbm93YXJuLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKKyNpZmRlZiBXQVRUMzIKKyN1bmRlZiBXSU4zMgorI2VuZGlmCisKK3N0cnVjdCBob3N0X3F1ZXJ5IHsKKyAgLyogQXJndW1lbnRzIHBhc3NlZCB0byBhcmVzX2dldGhvc3RieW5hbWUoKSAqLworICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKKyAgY2hhciAqbmFtZTsKKyAgYXJlc19ob3N0X2NhbGxiYWNrIGNhbGxiYWNrOworICB2b2lkICphcmc7CisgIGludCBzZW50X2ZhbWlseTsgLyogdGhpcyBmYW1pbHkgaXMgd2hhdCB3YXMgaXMgYmVpbmcgdXNlZCAqLworICBpbnQgd2FudF9mYW1pbHk7IC8qIHRoaXMgZmFtaWx5IGlzIHdoYXQgaXMgYXNrZWQgZm9yIGluIHRoZSBBUEkgKi8KKyAgY29uc3QgY2hhciAqcmVtYWluaW5nX2xvb2t1cHM7CisgIGludCB0aW1lb3V0czsKK307CisKK3N0YXRpYyB2b2lkIG5leHRfbG9va3VwKHN0cnVjdCBob3N0X3F1ZXJ5ICpocXVlcnksIGludCBzdGF0dXNfY29kZSk7CitzdGF0aWMgdm9pZCBob3N0X2NhbGxiYWNrKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbik7CitzdGF0aWMgdm9pZCBlbmRfaHF1ZXJ5KHN0cnVjdCBob3N0X3F1ZXJ5ICpocXVlcnksIGludCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpob3N0KTsKK3N0YXRpYyBpbnQgZmFrZV9ob3N0ZW50KGNvbnN0IGNoYXIgKm5hbWUsIGludCBmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX2hvc3RfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IGZpbGVfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmYW1pbHksIHN0cnVjdCBob3N0ZW50ICoqaG9zdCk7CitzdGF0aWMgdm9pZCBzb3J0X2FkZHJlc3NlcyhzdHJ1Y3QgaG9zdGVudCAqaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcGF0dGVybiAqc29ydGxpc3QsIGludCBuc29ydCk7CitzdGF0aWMgdm9pZCBzb3J0Nl9hZGRyZXNzZXMoc3RydWN0IGhvc3RlbnQgKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFwYXR0ZXJuICpzb3J0bGlzdCwgaW50IG5zb3J0KTsKK3N0YXRpYyBpbnQgZ2V0X2FkZHJlc3NfaW5kZXgoY29uc3Qgc3RydWN0IGluX2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcGF0dGVybiAqc29ydGxpc3QsIGludCBuc29ydCk7CitzdGF0aWMgaW50IGdldDZfYWRkcmVzc19pbmRleChjb25zdCBzdHJ1Y3QgYXJlc19pbjZfYWRkciAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcGF0dGVybiAqc29ydGxpc3QsIGludCBuc29ydCk7CisKK3ZvaWQgYXJlc19nZXRob3N0YnluYW1lKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19ob3N0X2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICphcmcpCit7CisgIHN0cnVjdCBob3N0X3F1ZXJ5ICpocXVlcnk7CisKKyAgLyogUmlnaHQgbm93IHdlIG9ubHkga25vdyBob3cgdG8gbG9vayB1cCBJbnRlcm5ldCBhZGRyZXNzZXMgLSBhbmQgdW5zcGVjCisgICAgIG1lYW5zIHRyeSBib3RoIGJhc2ljYWxseS4gKi8KKyAgc3dpdGNoIChmYW1pbHkpIHsKKyAgY2FzZSBBRl9JTkVUOgorICBjYXNlIEFGX0lORVQ2OgorICBjYXNlIEFGX1VOU1BFQzoKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBjYWxsYmFjayhhcmcsIEFSRVNfRU5PVElNUCwgMCwgTlVMTCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGZha2VfaG9zdGVudChuYW1lLCBmYW1pbHksIGNhbGxiYWNrLCBhcmcpKQorICAgIHJldHVybjsKKworICAvKiBBbGxvY2F0ZSBhbmQgZmlsbCBpbiB0aGUgaG9zdCBxdWVyeSBzdHJ1Y3R1cmUuICovCisgIGhxdWVyeSA9IGFyZXNfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG9zdF9xdWVyeSkpOworICBpZiAoIWhxdWVyeSkKKyAgICB7CisgICAgICBjYWxsYmFjayhhcmcsIEFSRVNfRU5PTUVNLCAwLCBOVUxMKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGhxdWVyeS0+Y2hhbm5lbCA9IGNoYW5uZWw7CisgIGhxdWVyeS0+bmFtZSA9IGFyZXNfc3RyZHVwKG5hbWUpOworICBocXVlcnktPndhbnRfZmFtaWx5ID0gZmFtaWx5OworICBocXVlcnktPnNlbnRfZmFtaWx5ID0gLTE7IC8qIG5vdGhpbmcgaXMgc2VudCB5ZXQgKi8KKyAgaWYgKCFocXVlcnktPm5hbWUpIHsKKyAgICBhcmVzX2ZyZWUoaHF1ZXJ5KTsKKyAgICBjYWxsYmFjayhhcmcsIEFSRVNfRU5PTUVNLCAwLCBOVUxMKTsKKyAgICByZXR1cm47CisgIH0KKyAgaHF1ZXJ5LT5jYWxsYmFjayA9IGNhbGxiYWNrOworICBocXVlcnktPmFyZyA9IGFyZzsKKyAgaHF1ZXJ5LT5yZW1haW5pbmdfbG9va3VwcyA9IGNoYW5uZWwtPmxvb2t1cHM7CisgIGhxdWVyeS0+dGltZW91dHMgPSAwOworCisgIC8qIFN0YXJ0IHBlcmZvcm1pbmcgbG9va3VwcyBhY2NvcmRpbmcgdG8gY2hhbm5lbC0+bG9va3Vwcy4gKi8KKyAgbmV4dF9sb29rdXAoaHF1ZXJ5LCBBUkVTX0VDT05OUkVGVVNFRCAvKiBpbml0aWFsIGVycm9yIGNvZGUgKi8pOworfQorCitzdGF0aWMgdm9pZCBuZXh0X2xvb2t1cChzdHJ1Y3QgaG9zdF9xdWVyeSAqaHF1ZXJ5LCBpbnQgc3RhdHVzX2NvZGUpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0OworICBpbnQgc3RhdHVzID0gc3RhdHVzX2NvZGU7CisKKyAgZm9yIChwID0gaHF1ZXJ5LT5yZW1haW5pbmdfbG9va3VwczsgKnA7IHArKykKKyAgICB7CisgICAgICBzd2l0Y2ggKCpwKQorICAgICAgICB7CisgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgIC8qIEROUyBsb29rdXAgKi8KKyAgICAgICAgICBocXVlcnktPnJlbWFpbmluZ19sb29rdXBzID0gcCArIDE7CisgICAgICAgICAgaWYgKChocXVlcnktPndhbnRfZmFtaWx5ID09IEFGX0lORVQ2KSB8fAorICAgICAgICAgICAgICAoaHF1ZXJ5LT53YW50X2ZhbWlseSA9PSBBRl9VTlNQRUMpKSB7CisgICAgICAgICAgICAvKiBpZiBpbmV0NiBvciB1bnNwZWMsIHN0YXJ0IG91dCB3aXRoIEFBQUEgKi8KKyAgICAgICAgICAgIGhxdWVyeS0+c2VudF9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgIGFyZXNfc2VhcmNoKGhxdWVyeS0+Y2hhbm5lbCwgaHF1ZXJ5LT5uYW1lLCBDX0lOLCBUX0FBQUEsCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2NhbGxiYWNrLCBocXVlcnkpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGhxdWVyeS0+c2VudF9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgICAgYXJlc19zZWFyY2goaHF1ZXJ5LT5jaGFubmVsLCBocXVlcnktPm5hbWUsIENfSU4sIFRfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfY2FsbGJhY2ssIGhxdWVyeSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAvKiBIb3N0IGZpbGUgbG9va3VwICovCisgICAgICAgICAgc3RhdHVzID0gZmlsZV9sb29rdXAoaHF1ZXJ5LT5uYW1lLCBocXVlcnktPndhbnRfZmFtaWx5LCAmaG9zdCk7CisKKyAgICAgICAgICAvKiB0aGlzIHN0YXR1cyBjaGVjayBiZWxvdyBwcmV2aW91c2x5IGNoZWNrZWQgZm9yICFBUkVTX0VOT1RGT1VORCwKKyAgICAgICAgICAgICBidXQgd2Ugc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCB0aGlzIHNpbmdsZSBlcnJvciBjb2RlIGlzIHRoZSBvbmUKKyAgICAgICAgICAgICB0aGF0IGNhbiBvY2N1ciwgYXMgdGhhdCBpcyBpbiBmYWN0IG5vIGxvbmdlciB0aGUgY2FzZSAqLworICAgICAgICAgIGlmIChzdGF0dXMgPT0gQVJFU19TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbmRfaHF1ZXJ5KGhxdWVyeSwgc3RhdHVzLCBob3N0KTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIHN0YXR1cyA9IHN0YXR1c19jb2RlOyAgIC8qIFVzZSBvcmlnaW5hbCBzdGF0dXMgY29kZSAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICBlbmRfaHF1ZXJ5KGhxdWVyeSwgc3RhdHVzLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgaG9zdF9jYWxsYmFjayh2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4pCit7CisgIHN0cnVjdCBob3N0X3F1ZXJ5ICpocXVlcnkgPSAoc3RydWN0IGhvc3RfcXVlcnkgKikgYXJnOworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IGhxdWVyeS0+Y2hhbm5lbDsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBOVUxMOworCisgIGhxdWVyeS0+dGltZW91dHMgKz0gdGltZW91dHM7CisgIGlmIChzdGF0dXMgPT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIGlmIChocXVlcnktPnNlbnRfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSBhcmVzX3BhcnNlX2FfcmVwbHkoYWJ1ZiwgYWxlbiwgJmhvc3QsIE5VTEwsIE5VTEwpOworICAgICAgICAgIGlmIChob3N0ICYmIGNoYW5uZWwtPm5zb3J0KQorICAgICAgICAgICAgc29ydF9hZGRyZXNzZXMoaG9zdCwgY2hhbm5lbC0+c29ydGxpc3QsIGNoYW5uZWwtPm5zb3J0KTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoaHF1ZXJ5LT5zZW50X2ZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IGFyZXNfcGFyc2VfYWFhYV9yZXBseShhYnVmLCBhbGVuLCAmaG9zdCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgaWYgKChzdGF0dXMgPT0gQVJFU19FTk9EQVRBIHx8IHN0YXR1cyA9PSBBUkVTX0VCQURSRVNQIHx8CisgICAgICAgICAgICAgICAoc3RhdHVzID09IEFSRVNfU1VDQ0VTUyAmJiBob3N0ICYmIGhvc3QtPmhfYWRkcl9saXN0WzBdID09IE5VTEwpKSAmJgorICAgICAgICAgICAgICAgIGhxdWVyeS0+d2FudF9mYW1pbHkgPT0gQUZfVU5TUEVDKSB7CisgICAgICAgICAgICAvKiBUaGUgcXVlcnkgcmV0dXJuZWQgc29tZXRoaW5nIGJ1dCBlaXRoZXIgdGhlcmUgd2VyZSBubyBBQUFBCisgICAgICAgICAgICAgICByZWNvcmRzIChlLmcuIGp1c3QgQ05BTUUpIG9yIHRoZSByZXNwb25zZSB3YXMgbWFsZm9ybWVkLiAgVHJ5CisgICAgICAgICAgICAgICBsb29raW5nIHVwIEEgaW5zdGVhZC4gKi8KKyAgICAgICAgICAgIGlmIChob3N0KQorICAgICAgICAgICAgICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKKyAgICAgICAgICAgIGhxdWVyeS0+c2VudF9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgICAgYXJlc19zZWFyY2goaHF1ZXJ5LT5jaGFubmVsLCBocXVlcnktPm5hbWUsIENfSU4sIFRfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfY2FsbGJhY2ssIGhxdWVyeSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChob3N0ICYmIGNoYW5uZWwtPm5zb3J0KQorICAgICAgICAgICAgc29ydDZfYWRkcmVzc2VzKGhvc3QsIGNoYW5uZWwtPnNvcnRsaXN0LCBjaGFubmVsLT5uc29ydCk7CisgICAgICAgIH0KKyAgICAgIGVuZF9ocXVlcnkoaHF1ZXJ5LCBzdGF0dXMsIGhvc3QpOworICAgIH0KKyAgZWxzZSBpZiAoKHN0YXR1cyA9PSBBUkVTX0VOT0RBVEEgfHwgc3RhdHVzID09IEFSRVNfRUJBRFJFU1AgfHwKKyAgICAgICAgICAgIHN0YXR1cyA9PSBBUkVTX0VUSU1FT1VUKSAmJiAoaHF1ZXJ5LT5zZW50X2ZhbWlseSA9PSBBRl9JTkVUNiAmJgorICAgICAgICAgICAgaHF1ZXJ5LT53YW50X2ZhbWlseSA9PSBBRl9VTlNQRUMpKQorICAgIHsKKyAgICAgIC8qIFRoZSBBQUFBIHF1ZXJ5IHlpZWxkZWQgbm8gdXNlZnVsIHJlc3VsdC4gIE5vdyBsb29rIHVwIGFuIEEgaW5zdGVhZC4gKi8KKyAgICAgIGhxdWVyeS0+c2VudF9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgYXJlc19zZWFyY2goaHF1ZXJ5LT5jaGFubmVsLCBocXVlcnktPm5hbWUsIENfSU4sIFRfQSwgaG9zdF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgIGhxdWVyeSk7CisgICAgfQorICBlbHNlIGlmIChzdGF0dXMgPT0gQVJFU19FREVTVFJVQ1RJT04pCisgICAgZW5kX2hxdWVyeShocXVlcnksIHN0YXR1cywgTlVMTCk7CisgIGVsc2UKKyAgICBuZXh0X2xvb2t1cChocXVlcnksIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9ocXVlcnkoc3RydWN0IGhvc3RfcXVlcnkgKmhxdWVyeSwgaW50IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhvc3QpCit7CisgIGhxdWVyeS0+Y2FsbGJhY2soaHF1ZXJ5LT5hcmcsIHN0YXR1cywgaHF1ZXJ5LT50aW1lb3V0cywgaG9zdCk7CisgIGlmIChob3N0KQorICAgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworICBhcmVzX2ZyZWUoaHF1ZXJ5LT5uYW1lKTsKKyAgYXJlc19mcmVlKGhxdWVyeSk7Cit9CisKKy8qIElmIHRoZSBuYW1lIGxvb2tzIGxpa2UgYW4gSVAgYWRkcmVzcywgZmFrZSB1cCBhIGhvc3QgZW50cnksIGVuZCB0aGUKKyAqIHF1ZXJ5IGltbWVkaWF0ZWx5LCBhbmQgcmV0dXJuIHRydWUuICBPdGhlcndpc2UgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgaW50IGZha2VfaG9zdGVudChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19ob3N0X2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICphcmcpCit7CisgIHN0cnVjdCBob3N0ZW50IGhvc3RlbnQ7CisgIGNoYXIgKmFsaWFzZXNbMV0gPSB7IE5VTEwgfTsKKyAgY2hhciAqYWRkcnNbMl07CisgIGludCByZXN1bHQgPSAwOworICBzdHJ1Y3QgaW5fYWRkciBpbjsKKyAgc3RydWN0IGFyZXNfaW42X2FkZHIgaW42OworCisgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCB8fCBmYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgeworICAgICAgLyogSXQgb25seSBsb29rcyBsaWtlIGFuIElQIGFkZHJlc3MgaWYgaXQncyBhbGwgbnVtYmVycyBhbmQgZG90cy4gKi8KKyAgICAgIGludCBudW1kb3RzID0gMCwgdmFsaWQgPSAxOworICAgICAgY29uc3QgY2hhciAqcDsKKyAgICAgIGZvciAocCA9IG5hbWU7ICpwOyBwKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIUlTRElHSVQoKnApICYmICpwICE9ICcuJykgeworICAgICAgICAgICAgdmFsaWQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnLicpIHsKKyAgICAgICAgICAgIG51bWRvdHMrKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgLyogaWYgd2UgZG9uJ3QgaGF2ZSAzIGRvdHMsIGl0IGlzIGlsbGVnYWwKKyAgICAgICAqIChhbHRob3VnaCBpbmV0X2FkZHIgZG9lc24ndCB0aGluayBzbykuCisgICAgICAgKi8KKyAgICAgIGlmIChudW1kb3RzICE9IDMgfHwgIXZhbGlkKQorICAgICAgICByZXN1bHQgPSAwOworICAgICAgZWxzZQorICAgICAgICByZXN1bHQgPSAoKGluLnNfYWRkciA9IGluZXRfYWRkcihuYW1lKSkgPT0gSU5BRERSX05PTkUgPyAwIDogMSk7CisKKyAgICAgIGlmIChyZXN1bHQpCisgICAgICAgIGZhbWlseSA9IEFGX0lORVQ7CisgICAgfQorICBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHJlc3VsdCA9IChhcmVzX2luZXRfcHRvbihBRl9JTkVUNiwgbmFtZSwgJmluNikgPCAxID8gMCA6IDEpOworCisgIGlmICghcmVzdWx0KQorICAgIHJldHVybiAwOworCisgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKyAgICB7CisgICAgICBob3N0ZW50LmhfbGVuZ3RoID0gKGludClzaXplb2Yoc3RydWN0IGluX2FkZHIpOworICAgICAgYWRkcnNbMF0gPSAoY2hhciAqKSZpbjsKKyAgICB9CisgIGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKyAgICB7CisgICAgICBob3N0ZW50LmhfbGVuZ3RoID0gKGludClzaXplb2Yoc3RydWN0IGFyZXNfaW42X2FkZHIpOworICAgICAgYWRkcnNbMF0gPSAoY2hhciAqKSZpbjY7CisgICAgfQorICAvKiBEdXBsaWNhdGUgdGhlIG5hbWUsIHRvIGF2b2lkIGEgY29uc3RuZXNzIHZpb2xhdGlvbi4gKi8KKyAgaG9zdGVudC5oX25hbWUgPSBhcmVzX3N0cmR1cChuYW1lKTsKKyAgaWYgKCFob3N0ZW50LmhfbmFtZSkKKyAgICB7CisgICAgICBjYWxsYmFjayhhcmcsIEFSRVNfRU5PTUVNLCAwLCBOVUxMKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAvKiBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBob3N0IHN0cnVjdHVyZSBhbmQgdGVybWluYXRlIHRoZSBxdWVyeS4gKi8KKyAgYWRkcnNbMV0gPSBOVUxMOworICBob3N0ZW50LmhfYWxpYXNlcyA9IGFsaWFzZXM7CisgIGhvc3RlbnQuaF9hZGRydHlwZSA9IGFyZXN4X3NpdG9zcyhmYW1pbHkpOworICBob3N0ZW50LmhfYWRkcl9saXN0ID0gYWRkcnM7CisgIGNhbGxiYWNrKGFyZywgQVJFU19TVUNDRVNTLCAwLCAmaG9zdGVudCk7CisKKyAgYXJlc19mcmVlKChjaGFyICopKGhvc3RlbnQuaF9uYW1lKSk7CisgIHJldHVybiAxOworfQorCisvKiBUaGlzIGlzIGFuIEFQSSBtZXRob2QgKi8KK2ludCBhcmVzX2dldGhvc3RieW5hbWVfZmlsZShhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFtaWx5LCBzdHJ1Y3QgaG9zdGVudCAqKmhvc3QpCit7CisgIGludCByZXN1bHQ7CisKKyAgLyogV2Ugb25seSB0YWtlIHRoZSBjaGFubmVsIHRvIGVuc3VyZSB0aGF0IGFyZXNfaW5pdCgpIGJlZW4gY2FsbGVkLiAqLworICBpZihjaGFubmVsID09IE5VTEwpCisgICAgeworICAgICAgLyogQW55dGhpbmcgd2lsbCBkbywgcmVhbGx5LiAgVGhpcyBzZWVtcyBmaW5lLCBhbmQgaXMgY29uc2lzdGVudCB3aXRoCisgICAgICAgICBvdGhlciBlcnJvciBjYXNlcy4gKi8KKyAgICAgICpob3N0ID0gTlVMTDsKKyAgICAgIHJldHVybiBBUkVTX0VOT1RGT1VORDsKKyAgICB9CisKKyAgLyogSnVzdCBjaGFpbiB0byB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gd2UgdXNlIGhlcmU7IGl0J3MgZXhhY3RseQorICAgKiB3aGF0IHdlIHdhbnQuCisgICAqLworICByZXN1bHQgPSBmaWxlX2xvb2t1cChuYW1lLCBmYW1pbHksIGhvc3QpOworICBpZihyZXN1bHQgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIC8qIFdlIGd1YXJhbnRlZSBhIE5VTEwgaG9zdGVudCBvbiBmYWlsdXJlLiAqLworICAgICAgKmhvc3QgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBmaWxlX2xvb2t1cChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmFtaWx5LCBzdHJ1Y3QgaG9zdGVudCAqKmhvc3QpCit7CisgIEZJTEUgKmZwOworICBjaGFyICoqYWxpYXM7CisgIGludCBzdGF0dXM7CisgIGludCBlcnJvcjsKKworI2lmZGVmIFdJTjMyCisgIGNoYXIgUEFUSF9IT1NUU1tNQVhfUEFUSF07CisgIHdpbl9wbGF0Zm9ybSBwbGF0Zm9ybTsKKworICBQQVRIX0hPU1RTWzBdID0gJ1wwJzsKKworICBwbGF0Zm9ybSA9IGFyZXNfX2dldHBsYXRmb3JtKCk7CisKKyAgaWYgKHBsYXRmb3JtID09IFdJTl9OVCkgeworICAgIGNoYXIgdG1wW01BWF9QQVRIXTsKKyAgICBIS0VZIGhrZXlIb3N0czsKKworICAgIGlmIChSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBXSU5fTlNfTlRfS0VZLCAwLCBLRVlfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICZoa2V5SG9zdHMpID09IEVSUk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgRFdPUkQgZHdMZW5ndGggPSBNQVhfUEFUSDsKKyAgICAgIFJlZ1F1ZXJ5VmFsdWVFeChoa2V5SG9zdHMsIERBVEFCQVNFUEFUSCwgTlVMTCwgTlVMTCwgKExQQllURSl0bXAsCisgICAgICAgICAgICAgICAgICAgICAgJmR3TGVuZ3RoKTsKKyAgICAgIEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyh0bXAsIFBBVEhfSE9TVFMsIE1BWF9QQVRIKTsKKyAgICAgIFJlZ0Nsb3NlS2V5KGhrZXlIb3N0cyk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKHBsYXRmb3JtID09IFdJTl85WCkKKyAgICBHZXRXaW5kb3dzRGlyZWN0b3J5KFBBVEhfSE9TVFMsIE1BWF9QQVRIKTsKKyAgZWxzZQorICAgIHJldHVybiBBUkVTX0VOT1RGT1VORDsKKworICBzdHJjYXQoUEFUSF9IT1NUUywgV0lOX1BBVEhfSE9TVFMpOworCisjZWxpZiBkZWZpbmVkKFdBVFQzMikKKyAgZXh0ZXJuIGNvbnN0IGNoYXIgKl93MzJfR2V0SG9zdHNGaWxlICh2b2lkKTsKKyAgY29uc3QgY2hhciAqUEFUSF9IT1NUUyA9IF93MzJfR2V0SG9zdHNGaWxlKCk7CisKKyAgaWYgKCFQQVRIX0hPU1RTKQorICAgIHJldHVybiBBUkVTX0VOT1RGT1VORDsKKyNlbmRpZgorCisgIGZwID0gZm9wZW4oUEFUSF9IT1NUUywgInIiKTsKKyAgaWYgKCFmcCkKKyAgICB7CisgICAgICBlcnJvciA9IEVSUk5POworICAgICAgc3dpdGNoKGVycm9yKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRU5PRU5UOgorICAgICAgICBjYXNlIEVTUkNIOgorICAgICAgICAgIHJldHVybiBBUkVTX0VOT1RGT1VORDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKSk7CisgICAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX0hPU1RTKSk7CisgICAgICAgICAgKmhvc3QgPSBOVUxMOworICAgICAgICAgIHJldHVybiBBUkVTX0VGSUxFOworICAgICAgICB9CisgICAgfQorICB3aGlsZSAoKHN0YXR1cyA9IGFyZXNfX2dldF9ob3N0ZW50KGZwLCBmYW1pbHksIGhvc3QpKSA9PSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgaWYgKHN0cmNhc2VjbXAoKCpob3N0KS0+aF9uYW1lLCBuYW1lKSA9PSAwKQorICAgICAgICBicmVhazsKKyAgICAgIGZvciAoYWxpYXMgPSAoKmhvc3QpLT5oX2FsaWFzZXM7ICphbGlhczsgYWxpYXMrKykKKyAgICAgICAgeworICAgICAgICAgIGlmIChzdHJjYXNlY21wKCphbGlhcywgbmFtZSkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAoKmFsaWFzKQorICAgICAgICBicmVhazsKKyAgICAgIGFyZXNfZnJlZV9ob3N0ZW50KCpob3N0KTsKKyAgICB9CisgIGZjbG9zZShmcCk7CisgIGlmIChzdGF0dXMgPT0gQVJFU19FT0YpCisgICAgc3RhdHVzID0gQVJFU19FTk9URk9VTkQ7CisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICpob3N0ID0gTlVMTDsKKyAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgc29ydF9hZGRyZXNzZXMoc3RydWN0IGhvc3RlbnQgKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXBhdHRlcm4gKnNvcnRsaXN0LCBpbnQgbnNvcnQpCit7CisgIHN0cnVjdCBpbl9hZGRyIGExLCBhMjsKKyAgaW50IGkxLCBpMiwgaW5kMSwgaW5kMjsKKworICAvKiBUaGlzIGlzIGEgc2ltcGxlIGluc2VydGlvbiBzb3J0LCBub3Qgb3B0aW1pemVkIGF0IGFsbC4gIGkxIHdhbGtzCisgICAqIHRocm91Z2ggdGhlIGFkZHJlc3MgbGlzdCwgd2l0aCB0aGUgbG9vcCBpbnZhcmlhbnQgdGhhdCBldmVyeXRoaW5nCisgICAqIHRvIHRoZSBsZWZ0IG9mIGkxIGlzIHNvcnRlZC4gIEluIHRoZSBsb29wIGJvZHksIHRoZSB2YWx1ZSBhdCBpMSBpcyBtb3ZlZAorICAgKiBiYWNrIHRocm91Z2ggdGhlIGxpc3QgKHZpYSBpMikgdW50aWwgaXQgaXMgaW4gc29ydGVkIG9yZGVyLgorICAgKi8KKyAgZm9yIChpMSA9IDA7IGhvc3QtPmhfYWRkcl9saXN0W2kxXTsgaTErKykKKyAgICB7CisgICAgICBtZW1jcHkoJmExLCBob3N0LT5oX2FkZHJfbGlzdFtpMV0sIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworICAgICAgaW5kMSA9IGdldF9hZGRyZXNzX2luZGV4KCZhMSwgc29ydGxpc3QsIG5zb3J0KTsKKyAgICAgIGZvciAoaTIgPSBpMSAtIDE7IGkyID49IDA7IGkyLS0pCisgICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkoJmEyLCBob3N0LT5oX2FkZHJfbGlzdFtpMl0sIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworICAgICAgICAgIGluZDIgPSBnZXRfYWRkcmVzc19pbmRleCgmYTIsIHNvcnRsaXN0LCBuc29ydCk7CisgICAgICAgICAgaWYgKGluZDIgPD0gaW5kMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIG1lbWNweShob3N0LT5oX2FkZHJfbGlzdFtpMiArIDFdLCAmYTIsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworICAgICAgICB9CisgICAgICBtZW1jcHkoaG9zdC0+aF9hZGRyX2xpc3RbaTIgKyAxXSwgJmExLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyAgICB9Cit9CisKKy8qIEZpbmQgdGhlIGZpcnN0IGVudHJ5IGluIHNvcnRsaXN0IHdoaWNoIG1hdGNoZXMgYWRkci4gIFJldHVybiBuc29ydAorICogaWYgbm9uZSBvZiB0aGVtIG1hdGNoLgorICovCitzdGF0aWMgaW50IGdldF9hZGRyZXNzX2luZGV4KGNvbnN0IHN0cnVjdCBpbl9hZGRyICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXBhdHRlcm4gKnNvcnRsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnNvcnQpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBuc29ydDsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzb3J0bGlzdFtpXS5mYW1pbHkgIT0gQUZfSU5FVCkKKyAgICAgICAgY29udGludWU7CisgICAgICBpZiAoc29ydGxpc3RbaV0udHlwZSA9PSBQQVRURVJOX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKGFkZHItPnNfYWRkciAmIHNvcnRsaXN0W2ldLm1hc2suYWRkcjQuc19hZGRyKQorICAgICAgICAgICAgICA9PSBzb3J0bGlzdFtpXS5hZGRyVjQuc19hZGRyKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICghYXJlc19fYml0bmNtcCgmYWRkci0+c19hZGRyLCAmc29ydGxpc3RbaV0uYWRkclY0LnNfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGxpc3RbaV0ubWFzay5iaXRzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICByZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgc29ydDZfYWRkcmVzc2VzKHN0cnVjdCBob3N0ZW50ICpob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcGF0dGVybiAqc29ydGxpc3QsIGludCBuc29ydCkKK3sKKyAgc3RydWN0IGFyZXNfaW42X2FkZHIgYTEsIGEyOworICBpbnQgaTEsIGkyLCBpbmQxLCBpbmQyOworCisgIC8qIFRoaXMgaXMgYSBzaW1wbGUgaW5zZXJ0aW9uIHNvcnQsIG5vdCBvcHRpbWl6ZWQgYXQgYWxsLiAgaTEgd2Fsa3MKKyAgICogdGhyb3VnaCB0aGUgYWRkcmVzcyBsaXN0LCB3aXRoIHRoZSBsb29wIGludmFyaWFudCB0aGF0IGV2ZXJ5dGhpbmcKKyAgICogdG8gdGhlIGxlZnQgb2YgaTEgaXMgc29ydGVkLiAgSW4gdGhlIGxvb3AgYm9keSwgdGhlIHZhbHVlIGF0IGkxIGlzIG1vdmVkCisgICAqIGJhY2sgdGhyb3VnaCB0aGUgbGlzdCAodmlhIGkyKSB1bnRpbCBpdCBpcyBpbiBzb3J0ZWQgb3JkZXIuCisgICAqLworICBmb3IgKGkxID0gMDsgaG9zdC0+aF9hZGRyX2xpc3RbaTFdOyBpMSsrKQorICAgIHsKKyAgICAgIG1lbWNweSgmYTEsIGhvc3QtPmhfYWRkcl9saXN0W2kxXSwgc2l6ZW9mKHN0cnVjdCBhcmVzX2luNl9hZGRyKSk7CisgICAgICBpbmQxID0gZ2V0Nl9hZGRyZXNzX2luZGV4KCZhMSwgc29ydGxpc3QsIG5zb3J0KTsKKyAgICAgIGZvciAoaTIgPSBpMSAtIDE7IGkyID49IDA7IGkyLS0pCisgICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkoJmEyLCBob3N0LT5oX2FkZHJfbGlzdFtpMl0sIHNpemVvZihzdHJ1Y3QgYXJlc19pbjZfYWRkcikpOworICAgICAgICAgIGluZDIgPSBnZXQ2X2FkZHJlc3NfaW5kZXgoJmEyLCBzb3J0bGlzdCwgbnNvcnQpOworICAgICAgICAgIGlmIChpbmQyIDw9IGluZDEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBtZW1jcHkoaG9zdC0+aF9hZGRyX2xpc3RbaTIgKyAxXSwgJmEyLCBzaXplb2Yoc3RydWN0IGFyZXNfaW42X2FkZHIpKTsKKyAgICAgICAgfQorICAgICAgbWVtY3B5KGhvc3QtPmhfYWRkcl9saXN0W2kyICsgMV0sICZhMSwgc2l6ZW9mKHN0cnVjdCBhcmVzX2luNl9hZGRyKSk7CisgICAgfQorfQorCisvKiBGaW5kIHRoZSBmaXJzdCBlbnRyeSBpbiBzb3J0bGlzdCB3aGljaCBtYXRjaGVzIGFkZHIuICBSZXR1cm4gbnNvcnQKKyAqIGlmIG5vbmUgb2YgdGhlbSBtYXRjaC4KKyAqLworc3RhdGljIGludCBnZXQ2X2FkZHJlc3NfaW5kZXgoY29uc3Qgc3RydWN0IGFyZXNfaW42X2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXBhdHRlcm4gKnNvcnRsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5zb3J0KQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbnNvcnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAoc29ydGxpc3RbaV0uZmFtaWx5ICE9IEFGX0lORVQ2KQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGlmICghYXJlc19fYml0bmNtcChhZGRyLCAmc29ydGxpc3RbaV0uYWRkclY2LCBzb3J0bGlzdFtpXS5tYXNrLmJpdHMpKQorICAgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBpOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRob3N0YnluYW1lX2ZpbGUuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1OWI0MQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlLjMKQEAgLTAsMCArMSw4MyBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0dFVEhPU1RCWU5BTUUgMyAiMjUgSnVseSAxOTk4IgorLlNIIE5BTUUKK2FyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlIFwtIExvb2t1cCBhIG5hbWUgaW4gdGhlIHN5c3RlbSdzIGhvc3RzIGZpbGUKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiBpbnQgYXJlc19nZXRob3N0YnluYW1lX2ZpbGUoYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsIGNvbnN0IGNoYXIgKlxmSW5hbWVcZlAsCisuQiAJaW50IFxmSWZhbWlseVxmUCwgc3RydWN0IGhvc3RlbnQgKipob3N0KQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19nZXRob3N0YnluYW1lX2ZpbGUKK2Z1bmN0aW9uIHBlcmZvcm1zIGEgaG9zdCBsb29rdXAgYnkgbmFtZSBhZ2FpbnN0IHRoZSBzeXN0ZW0ncyBob3N0cyBmaWxlIChvciBlcXVpdmFsZW50IGxvY2FsIGhvc3RuYW1lIGRhdGFiYXNlKS4gIAorVGhlCisuSVIgY2hhbm5lbAorcGFyYW1ldGVyIGlzIHJlcXVpcmVkLCBidXQgbm8gYXN5bmNocm9ub3VzIHF1ZXJpZXMgYXJlIHBlcmZvcm1lZC4gIEluc3RlYWQsIHRoZQorbG9va3VwIGlzIGRvbmUgdmlhIHRoZSBzYW1lIG1lY2hhbmlzbSB1c2VkIHRvIHBlcmZvcm0gJ2YnIGxvb2t1cHMKKyhzZWUgdGhlCisuSSBsb29rdXBzCitvcHRpb25zIGZpZWxkIGluIFxmSWFyZXNfaW5pdF9vcHRpb25zKDMpXGZQKS4KK1RoZSBwYXJhbWV0ZXIKKy5JIG5hbWUKK2dpdmVzIHRoZSBob3N0bmFtZSBhcyBhIE5VTC10ZXJtaW5hdGVkIEMgc3RyaW5nLCBhbmQKKy5JIGZhbWlseQorZ2l2ZXMgdGhlIGRlc2lyZWQgdHlwZSBvZiBhZGRyZXNzIGZvciB0aGUgcmVzdWx0aW5nIGhvc3QgZW50cnkuICAKKy5QUAorVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcXVlcnkgc3VjY2VlZGVkIGFuZCwgaWYgbm90LCBob3cgaXQKK2ZhaWxlZC4gIEl0IG1heSBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxOQorLkIgQVJFU19TVUNDRVNTCitUaGUgaG9zdCBsb29rdXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhbmQgCisuSSBob3N0Citub3cgcG9pbnRzIHRvIHRoZSByZXN1bHQgKGFuZCBtdXN0IGJlIGZyZWVkIHdpdGggXGZJYXJlc19mcmVlX2hvc3RlbnQoMylcZlApLgorLlRQIDE5CisuQiBBUkVTX0VOT1RGT1VORAorVGhlIGhvc3RuYW1lCisuSSBuYW1lCit3YXMgbm90IGZvdW5kLgorLlRQIDE5CisuQiBBUkVTX0VGSUxFCitUaGVyZSB3YXMgYSBmaWxlIEkvTyBlcnJvciB3aGlsZSBwZXJmb3JtaW5nIHRoZSBsb29rdXAuCisuVFAgMTkKKy5CIEFSRVNfRU5PTUVNCitNZW1vcnkgd2FzIGV4aGF1c3RlZC4KKy5QUAorT24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBxdWVyeSwgdGhlIHBvaW50ZXIgcG9pbnRlZCB0byBieQorLkkgaG9zdAorcG9pbnRzIHRvIGEKKy5CIHN0cnVjdCBob3N0ZW50Citjb250YWluaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBob3N0IHJldHVybmVkIGJ5IHRoZSBsb29rdXAuICBUaGUgdXNlciBtdXN0CitmcmVlIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieQorLklSIGhvc3QKK3doZW4gZmluaXNoZWQgd2l0aCBpdCBieSBjYWxsaW5nIFxmSWFyZXNfZnJlZV9ob3N0ZW50KDMpXGZQLiAgSWYgdGhlIGxvb2t1cCBkaWQKK25vdCBjb21wbGV0ZSBzdWNjZXNzZnVsbHksIAorLkkgaG9zdAord2lsbCBiZQorLkJSIE5VTEwgLgorLlNIIEFWQUlMQUJJTElUWQorQWRkZWQgaW4gYy1hcmVzIDEuNS40CisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2dldGhvc3RieW5hbWUgKDMpLAorLkJSIGFyZXNfZnJlZV9ob3N0ZW50ICgzKSwKKy5CUiBhcmVzX2luaXRfb3B0aW9ucyAoMykKKy5TSCBBVVRIT1IKK0JyYWQgU3BlbmNlcgorLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0bmFtZWluZm8uMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0bmFtZWluZm8uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDE3NDMyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRuYW1laW5mby4zCkBAIC0wLDAgKzEsMTUxIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMjAwNSBieSBEb21pbmljayBNZWdsaW8uCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0dFVE5BTUVJTkZPIDMgIjEgTWF5IDIwMDkiCisuU0ggTkFNRQorYXJlc19nZXRuYW1laW5mbyBcLSBBZGRyZXNzLXRvLW5vZGVuYW1lIHRyYW5zbGF0aW9uIGluIHByb3RvY29sLWluZGVwZW5kZW50IG1hbm5lcgorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHR5cGVkZWYgdm9pZCAoKmFyZXNfbmFtZWluZm9fY2FsbGJhY2spKHZvaWQgKlxmSWFyZ1xmUCwgaW50IFxmSXN0YXR1c1xmUCwKKy5CCWludCBcZkl0aW1lb3V0c1xmUCwgY2hhciAqXGZJbm9kZVxmUCwgY2hhciAqXGZJc2VydmljZVxmUCkKKy5QUAorLkIgdm9pZCBhcmVzX2dldG5hbWVpbmZvKGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKlxmSXNhXGZQLAorLkIgCWFyZXNfc29ja2xlbl90IFxmSXNhbGVuXGZQLCBpbnQgXGZJZmxhZ3NcZlAsIGFyZXNfbmFtZWluZm9fY2FsbGJhY2sgXGZJY2FsbGJhY2tcZlAsCisuQiAJdm9pZCAqXGZJYXJnXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19nZXRuYW1laW5mbworZnVuY3Rpb24gaXMgZGVmaW5lZCBmb3IgcHJvdG9jb2wtaW5kZXBlbmRlbnQgYWRkcmVzcyB0cmFuc2xhdGlvbi4gVGhlIGZ1bmN0aW9uCitpcyBhIGNvbWJpbmF0aW9uIG9mIFxmSWFyZXNfZ2V0aG9zdGJ5YWRkcigzKVxmUCBhbmQgXGZJZ2V0c2VydmJ5cG9ydCgzKVxmUC4gVGhlIGZ1bmN0aW9uIHdpbGwKK3RyYW5zbGF0ZSB0aGUgYWRkcmVzcyBlaXRoZXIgYnkgZXhlY3V0aW5nIGEgaG9zdCBxdWVyeSBvbiB0aGUgbmFtZSBzZXJ2aWNlIGNoYW5uZWwKK2lkZW50aWZpZWQgYnkKKy5JUiBjaGFubmVsIAorb3IgaXQgd2lsbCBhdHRlbXB0IHRvIHJlc29sdmUgaXQgbG9jYWxseSBpZiBwb3NzaWJsZS4KK1RoZSBwYXJhbWV0ZXJzCisuSSBzYQorYW5kCisuSSBsZW4KK2dpdmUgdGhlIGFkZHJlc3MgYXMgYSBzb2NrYWRkciBzdHJ1Y3R1cmUsIGFuZAorLkkgZmxhZ3MKK2dpdmVzIHRoZSBvcHRpb25zIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgdXNlLiAgVmFsaWQgZmxhZ3MgYXJlIGxpc3RlZCBiZWxvdzoKKy5UUCAxOQorLkIgQVJFU19OSV9OT0ZRRE4KK09ubHkgdGhlIG5vZGVuYW1lIHBvcnRpb24gb2YgdGhlIEZRRE4gaXMgcmV0dXJuZWQgZm9yIGxvY2FsIGhvc3RzLgorLlRQIDE5CisuQiBBUkVTX05JX05VTUVSSUNIT1NUCitUaGUgbnVtZXJpYyBmb3JtIG9mIHRoZSBob3N0bmFtZSBpcyByZXR1cm5lZCByYXRoZXIgdGhhbiB0aGUgbmFtZS4KKy5UUCAxOQorLkIgQVJFU19OSV9OQU1FUkVRRAorQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhlIGhvc3RuYW1lIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgRE5TLgorLlRQIDE5CisuQiBBUkVTX05JX05VTUVSSUNTRVJWCitUaGUgbnVtZXJpYyBmb3JtIG9mIHRoZSBzZXJ2aWNlIGlzIHJldHVybmVkIHJhdGhlciB0aGFuIHRoZSBuYW1lLgorLlRQIDE5CisuQiBBUkVTX05JX1RDUAorVGhlIHNlcnZpY2UgbmFtZSBpcyB0byBiZSBsb29rZWQgdXAgZm9yIHRoZSBUQ1AgcHJvdG9jb2wuCisuVFAgMTkKKy5CIEFSRVNfTklfVURQCitUaGUgc2VydmljZSBuYW1lIGlzIHRvIGJlIGxvb2tlZCB1cCBmb3IgdGhlIFVEUCBwcm90b2NvbC4KKy5UUCAxOQorLkIgQVJFU19OSV9TQ1RQCitUaGUgc2VydmljZSBuYW1lIGlzIHRvIGJlIGxvb2tlZCB1cCBmb3IgdGhlIFNDVFAgcHJvdG9jb2wuCisuVFAgMTkKKy5CIEFSRVNfTklfRENDUAorVGhlIHNlcnZpY2UgbmFtZSBpcyB0byBiZSBsb29rZWQgdXAgZm9yIHRoZSBEQ0NQIHByb3RvY29sLgorLlRQIDE5CisuQiBBUkVTX05JX05VTUVSSUNTQ09QRQorVGhlIG51bWVyaWMgZm9ybSBvZiB0aGUgc2NvcGUgSUQgaXMgcmV0dXJuZWQgcmF0aGVyIHRoYW4gdGhlIG5hbWUuCisuVFAgMTkKKy5CIEFSRVNfTklfTE9PS1VQSE9TVAorQSBob3N0bmFtZSBsb29rdXAgaXMgYmVpbmcgcmVxdWVzdGVkLgorLlRQIDE5CisuQiBBUkVTX05JX0xPT0tVUFNFUlZJQ0UKK0Egc2VydmljZSBuYW1lIGxvb2t1cCBpcyBiZWluZyByZXF1ZXN0ZWQuCisuUFAKK1doZW4gdGhlIHF1ZXJ5CitpcyBjb21wbGV0ZSBvciBoYXMgCitmYWlsZWQsIHRoZSBhcmVzIGxpYnJhcnkgd2lsbCBpbnZva2UgXGZJY2FsbGJhY2tcZlAuICBDb21wbGV0aW9uIG9yIGZhaWx1cmUgb2YgCit0aGUgcXVlcnkgbWF5IGhhcHBlbiBpbW1lZGlhdGVseSwgb3IgbWF5IGhhcHBlbiBkdXJpbmcgYSBsYXRlciBjYWxsIHRvCitcZklhcmVzX3Byb2Nlc3MoMylcZlAsIFxmSWFyZXNfZGVzdHJveSgzKVxmUCBvciBcZklhcmVzX2NhbmNlbCgzKVxmUC4KKy5QUAorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBhcmcKK2lzIGNvcGllZCBmcm9tIHRoZQorLkIgYXJlc19nZXRuYW1laW5mbworYXJndW1lbnQKKy5JUiBhcmcgLgorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBzdGF0dXMKK2luZGljYXRlcyB3aGV0aGVyIHRoZSBxdWVyeSBzdWNjZWVkZWQgYW5kLCBpZiBub3QsIGhvdyBpdCBmYWlsZWQuICBJdAorbWF5IGhhdmUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE5CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSBob3N0IGxvb2t1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorLlRQIDE5CisuQiBBUkVTX0VOT1RJTVAKK1RoZSBhcmVzIGxpYnJhcnkgZG9lcyBub3Qga25vdyBob3cgdG8gbG9vayB1cCBhZGRyZXNzZXMgb2YgdHlwZQorLklSIGZhbWlseSAuCisuVFAgMTkKKy5CIEFSRVNfRU5PVEZPVU5ECitUaGUgYWRkcmVzcworLkkgYWRkcgord2FzIG5vdCBmb3VuZC4KKy5UUCAxOQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlRQIDE5CisuQiBBUkVTX0VDQU5DRUxMRUQKK1RoZSBxdWVyeSB3YXMgY2FuY2VsbGVkLgorLlRQIDE5CisuQiBBUkVTX0VERVNUUlVDVElPTgorVGhlIG5hbWUgc2VydmljZSBjaGFubmVsCisuSSBjaGFubmVsCitpcyBiZWluZyBkZXN0cm95ZWQ7IHRoZSBxdWVyeSB3aWxsIG5vdCBiZSBjb21wbGV0ZWQuCisuVFAgMTkKKy5CIEFSRVNfRUJBREZMQUdTCitUaGUKKy5JIGZsYWdzCitwYXJhbWV0ZXIgY29udGFpbnMgYW4gaWxsZWdhbCB2YWx1ZS4KKy5QUAorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSB0aW1lb3V0cworcmVwb3J0cyBob3cgbWFueSB0aW1lcyBhIHF1ZXJ5IHRpbWVkIG91dCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKK2dpdmVuIHJlcXVlc3QuCisuUFAKK09uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcXVlcnksIHRoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgbm9kZQorY29udGFpbnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBob3N0bmFtZSAoYXNzdW1pbmcgCisuQiBBUkVTX05JX0xPT0tVUEhPU1QKK3dhcyBzcGVjaWZpZWQpLiBBZGRpdGlvbmFsbHksIAorLkkgc2VydmljZQorY29udGFpbnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlIG5hbWUgKGFzc3VtaW5nCisuQiBBUkVTX05JX0xPT0tVUFNFUlZJQ0UKK3dhcyBzcGVjaWZpZWQpLgorSWYgdGhlIHF1ZXJ5IGRpZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCBvciBvbmUgb2YgdGhlIHZhbHVlcword2FzIG5vdCByZXF1ZXN0ZWQsIAorLkkgbm9kZQorb3IKKy5JIHNlcnZpY2UKK3dpbGwgYmUgCisuQlIgTlVMTCAuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3Byb2Nlc3MgKDMpLAorLlNIIEFVVEhPUgorRG9taW5pY2sgTWVnbGlvCisuYnIKK0NvcHlyaWdodCAyMDA1IGJ5IERvbWluaWNrIE1lZ2xpby4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0bmFtZWluZm8uYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0bmFtZWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTE2MTEyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRuYW1laW5mby5jCkBAIC0wLDAgKzEsNDIyIEBACisKKy8qIENvcHlyaWdodCAyMDA1IGJ5IERvbWluaWNrIE1lZ2xpbworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9HRVRTRVJWQllQT1JUX1IKKyMgIGlmICFkZWZpbmVkKEdFVFNFUlZCWVBPUlRfUl9BUkdTKSB8fCBcCisgICAgIChHRVRTRVJWQllQT1JUX1JfQVJHUyA8IDQpIHx8IChHRVRTRVJWQllQT1JUX1JfQVJHUyA+IDYpCisjICAgIGVycm9yICJ5b3UgTVVTVCBzcGVjaWZpeSBhIHZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGdldHNlcnZieXBvcnRfciIKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfaXB2Ni5oIgorI2luY2x1ZGUgImFyZXNfbm93YXJuLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKK3N0cnVjdCBuYW1laW5mb19xdWVyeSB7CisgIGFyZXNfbmFtZWluZm9fY2FsbGJhY2sgY2FsbGJhY2s7CisgIHZvaWQgKmFyZzsKKyAgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI2OworICB9IGFkZHI7CisgIGludCBmYW1pbHk7CisgIGludCBmbGFnczsKKyAgaW50IHRpbWVvdXRzOworfTsKKworI2lmZGVmIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQKKyNkZWZpbmUgSVBCVUZTSVogXAorICAgICAgICAoc2l6ZW9mKCJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiKSArIElGX05BTUVTSVpFKQorI2Vsc2UKKyNkZWZpbmUgSVBCVUZTSVogXAorICAgICAgICAoc2l6ZW9mKCJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiKSkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBuYW1laW5mb19jYWxsYmFjayh2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpob3N0KTsKK3N0YXRpYyBjaGFyICpsb29rdXBfc2VydmljZSh1bnNpZ25lZCBzaG9ydCBwb3J0LCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lECitzdGF0aWMgdm9pZCBhcHBlbmRfc2NvcGVpZChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiwgdW5zaWduZWQgaW50IHNjb3BlaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworI2VuZGlmCitTVEFUSUNfVEVTVEFCTEUgY2hhciAqYXJlc19zdHJpZW5kc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CisKK3ZvaWQgYXJlc19nZXRuYW1laW5mbyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwKKyAgICAgICAgICAgICAgICAgICAgICBhcmVzX3NvY2tsZW5fdCBzYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIGFyZXNfbmFtZWluZm9fY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmFyZykKK3sKKyAgc3RydWN0IHNvY2thZGRyX2luICphZGRyID0gTlVMTDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSBOVUxMOworICBzdHJ1Y3QgbmFtZWluZm9fcXVlcnkgKm5pcXVlcnk7CisgIHVuc2lnbmVkIGludCBwb3J0ID0gMDsKKworICAvKiBWYWxpZGF0ZSBzb2NrZXQgYWRkcmVzcyBmYW1pbHkgYW5kIGxlbmd0aCAqLworICBpZiAoKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKyAgICAgIChzYWxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkpCisgICAgeworICAgICAgYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKyAgICAgIHBvcnQgPSBhZGRyLT5zaW5fcG9ydDsKKyAgICB9CisgIGVsc2UgaWYgKChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorICAgICAgICAgICAoc2FsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSkKKyAgICB7CisgICAgICBhZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisgICAgICBwb3J0ID0gYWRkcjYtPnNpbjZfcG9ydDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjYWxsYmFjayhhcmcsIEFSRVNfRU5PVElNUCwgMCwgTlVMTCwgTlVMTCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIElmIG5laXRoZXIsIGFzc3VtZSB0aGV5IHdhbnQgYSBob3N0ICovCisgIGlmICghKGZsYWdzICYgQVJFU19OSV9MT09LVVBTRVJWSUNFKSAmJiAhKGZsYWdzICYgQVJFU19OSV9MT09LVVBIT1NUKSkKKyAgICBmbGFncyB8PSBBUkVTX05JX0xPT0tVUEhPU1Q7CisKKyAgLyogQWxsIHRoZXkgd2FudCBpcyBhIHNlcnZpY2UsIG5vIG5lZWQgZm9yIEROUyAqLworICBpZiAoKGZsYWdzICYgQVJFU19OSV9MT09LVVBTRVJWSUNFKSAmJiAhKGZsYWdzICYgQVJFU19OSV9MT09LVVBIT1NUKSkKKyAgICB7CisgICAgICBjaGFyIGJ1ZlszM10sICpzZXJ2aWNlOworCisgICAgICBzZXJ2aWNlID0gbG9va3VwX3NlcnZpY2UoKHVuc2lnbmVkIHNob3J0KShwb3J0ICYgMHhmZmZmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICBjYWxsYmFjayhhcmcsIEFSRVNfU1VDQ0VTUywgMCwgTlVMTCwgc2VydmljZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIFRoZXkgd2FudCBhIGhvc3QgbG9va3VwICovCisgIGlmICgoZmxhZ3MgJiBBUkVTX05JX0xPT0tVUEhPU1QpKQorICAgIHsKKyAgICAgLyogQSBudW1lcmljIGhvc3QgY2FuIGJlIGhhbmRsZWQgd2l0aG91dCBETlMgKi8KKyAgICAgaWYgKChmbGFncyAmIEFSRVNfTklfTlVNRVJJQ0hPU1QpKQorICAgICAgeworICAgICAgICBjaGFyIGlwYnVmW0lQQlVGU0laXTsKKyAgICAgICAgY2hhciBzcnZidWZbMzNdOworICAgICAgICBjaGFyICpzZXJ2aWNlID0gTlVMTDsKKyAgICAgICAgaXBidWZbMF0gPSAwOworCisgICAgICAgIC8qIFNwZWNpZnlpbmcgbm90IHRvIGxvb2t1cCBhIGhvc3QsIGJ1dCB0aGVuIHNheWluZyBhIGhvc3QKKyAgICAgICAgICogaXMgcmVxdWlyZWQgaGFzIHRvIGJlIGlsbGVnYWwuCisgICAgICAgICAqLworICAgICAgICBpZiAoZmxhZ3MgJiBBUkVTX05JX05BTUVSRVFEKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FQkFERkxBR1MsIDAsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKHNhbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBhcmVzX2luZXRfbnRvcChBRl9JTkVUNiwgJmFkZHI2LT5zaW42X2FkZHIsIGlwYnVmLCBJUEJVRlNJWik7CisgICAgICAgICAgICAvKiBJZiB0aGUgc3lzdGVtIHN1cHBvcnRzIHNjb3BlIElEcywgdXNlIGl0ICovCisjaWZkZWYgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRAorICAgICAgICAgICAgYXBwZW5kX3Njb3BlaWQoYWRkcjYsIGZsYWdzLCBpcGJ1Ziwgc2l6ZW9mKGlwYnVmKSk7CisjZW5kaWYKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBhcmVzX2luZXRfbnRvcChBRl9JTkVULCAmYWRkci0+c2luX2FkZHIsIGlwYnVmLCBJUEJVRlNJWik7CisgICAgICAgICAgfQorICAgICAgICAvKiBUaGV5IGFsc28gd2FudCBhIHNlcnZpY2UgKi8KKyAgICAgICAgaWYgKGZsYWdzICYgQVJFU19OSV9MT09LVVBTRVJWSUNFKQorICAgICAgICAgIHNlcnZpY2UgPSBsb29rdXBfc2VydmljZSgodW5zaWduZWQgc2hvcnQpKHBvcnQgJiAweGZmZmYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgc3J2YnVmLCBzaXplb2Yoc3J2YnVmKSk7CisgICAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19TVUNDRVNTLCAwLCBpcGJ1Ziwgc2VydmljZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAvKiBUaGlzIGlzIHdoZXJlIGEgRE5TIGxvb2t1cCBiZWNvbWVzIG5lY2Vzc2FyeSAqLworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgbmlxdWVyeSA9IGFyZXNfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmFtZWluZm9fcXVlcnkpKTsKKyAgICAgICAgaWYgKCFuaXF1ZXJ5KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FTk9NRU0sIDAsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgbmlxdWVyeS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgbmlxdWVyeS0+YXJnID0gYXJnOworICAgICAgICBuaXF1ZXJ5LT5mbGFncyA9IGZsYWdzOworICAgICAgICBuaXF1ZXJ5LT50aW1lb3V0cyA9IDA7CisgICAgICAgIGlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgICAgeworICAgICAgICAgICAgbmlxdWVyeS0+ZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICAgIG1lbWNweSgmbmlxdWVyeS0+YWRkci5hZGRyNCwgYWRkciwgc2l6ZW9mKG5pcXVlcnktPmFkZHIuYWRkcjQpKTsKKyAgICAgICAgICAgIGFyZXNfZ2V0aG9zdGJ5YWRkcihjaGFubmVsLCAmYWRkci0+c2luX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwgQUZfSU5FVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1laW5mb19jYWxsYmFjaywgbmlxdWVyeSk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgbmlxdWVyeS0+ZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgICAgICBtZW1jcHkoJm5pcXVlcnktPmFkZHIuYWRkcjYsIGFkZHI2LCBzaXplb2YobmlxdWVyeS0+YWRkci5hZGRyNikpOworICAgICAgICAgICAgYXJlc19nZXRob3N0YnlhZGRyKGNoYW5uZWwsICZhZGRyNi0+c2luNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYXJlc19pbjZfYWRkciksIEFGX0lORVQ2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVpbmZvX2NhbGxiYWNrLCBuaXF1ZXJ5KTsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBuYW1laW5mb19jYWxsYmFjayh2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpob3N0KQoreworICBzdHJ1Y3QgbmFtZWluZm9fcXVlcnkgKm5pcXVlcnkgPSAoc3RydWN0IG5hbWVpbmZvX3F1ZXJ5ICopIGFyZzsKKyAgY2hhciBzcnZidWZbMzNdOworICBjaGFyICpzZXJ2aWNlID0gTlVMTDsKKworICBuaXF1ZXJ5LT50aW1lb3V0cyArPSB0aW1lb3V0czsKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgLyogVGhleSB3YW50IGEgc2VydmljZSB0b28gKi8KKyAgICAgIGlmIChuaXF1ZXJ5LT5mbGFncyAmIEFSRVNfTklfTE9PS1VQU0VSVklDRSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChuaXF1ZXJ5LT5mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgIHNlcnZpY2UgPSBsb29rdXBfc2VydmljZShuaXF1ZXJ5LT5hZGRyLmFkZHI0LnNpbl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pcXVlcnktPmZsYWdzLCBzcnZidWYsIHNpemVvZihzcnZidWYpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXJ2aWNlID0gbG9va3VwX3NlcnZpY2UobmlxdWVyeS0+YWRkci5hZGRyNi5zaW42X3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlxdWVyeS0+ZmxhZ3MsIHNydmJ1Ziwgc2l6ZW9mKHNydmJ1ZikpOworICAgICAgICB9CisgICAgICAvKiBOT0ZRRE4gbWVhbnMgd2UgaGF2ZSB0byBzdHJpcCBvZmYgdGhlIGRvbWFpbiBuYW1lIHBvcnRpb24uICBXZSBkbworICAgICAgICAgdGhpcyBieSBkZXRlcm1pbmluZyBvdXIgb3duIGRvbWFpbiBuYW1lLCB0aGVuIHNlYXJjaGluZyB0aGUgc3RyaW5nCisgICAgICAgICBmb3IgdGhpcyBkb21haW4gbmFtZSBhbmQgcmVtb3ZpbmcgaXQuCisgICAgICAgKi8KKyNpZmRlZiBIQVZFX0dFVEhPU1ROQU1FCisgICAgICBpZiAobmlxdWVyeS0+ZmxhZ3MgJiBBUkVTX05JX05PRlFETikKKyAgICAgICAgeworICAgICAgICAgICBjaGFyIGJ1ZlsyNTVdOworICAgICAgICAgICBjaGFyICpkb21haW47CisgICAgICAgICAgIGdldGhvc3RuYW1lKGJ1ZiwgMjU1KTsKKyAgICAgICAgICAgaWYgKChkb21haW4gPSBzdHJjaHIoYnVmLCAnLicpKSAhPSBOVUxMKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGNoYXIgKmVuZCA9IGFyZXNfc3RyaWVuZHN0cihob3N0LT5oX25hbWUsIGRvbWFpbik7CisgICAgICAgICAgICAgICBpZiAoZW5kKQorICAgICAgICAgICAgICAgICAqZW5kID0gMDsKKyAgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgbmlxdWVyeS0+Y2FsbGJhY2sobmlxdWVyeS0+YXJnLCBBUkVTX1NVQ0NFU1MsIG5pcXVlcnktPnRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikoaG9zdC0+aF9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UpOworICAgICAgYXJlc19mcmVlKG5pcXVlcnkpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogV2UgY291bGRuJ3QgZmluZCB0aGUgaG9zdCwgYnV0IGl0J3MgT0ssIHdlIGNhbiB1c2UgdGhlIElQICovCisgIGVsc2UgaWYgKHN0YXR1cyA9PSBBUkVTX0VOT1RGT1VORCAmJiAhKG5pcXVlcnktPmZsYWdzICYgQVJFU19OSV9OQU1FUkVRRCkpCisgICAgeworICAgICAgY2hhciBpcGJ1ZltJUEJVRlNJWl07CisgICAgICBpZiAobmlxdWVyeS0+ZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIGFyZXNfaW5ldF9udG9wKEFGX0lORVQsICZuaXF1ZXJ5LT5hZGRyLmFkZHI0LnNpbl9hZGRyLCBpcGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgSVBCVUZTSVopOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYXJlc19pbmV0X250b3AoQUZfSU5FVDYsICZuaXF1ZXJ5LT5hZGRyLmFkZHI2LnNpbjZfYWRkciwgaXBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSVBCVUZTSVopOworI2lmZGVmIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQKKyAgICAgICAgICBhcHBlbmRfc2NvcGVpZCgmbmlxdWVyeS0+YWRkci5hZGRyNiwgbmlxdWVyeS0+ZmxhZ3MsIGlwYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpcGJ1ZikpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgIC8qIFRoZXkgd2FudCBhIHNlcnZpY2UgdG9vICovCisgICAgICBpZiAobmlxdWVyeS0+ZmxhZ3MgJiBBUkVTX05JX0xPT0tVUFNFUlZJQ0UpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAobmlxdWVyeS0+ZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgICAgICBzZXJ2aWNlID0gbG9va3VwX3NlcnZpY2UobmlxdWVyeS0+YWRkci5hZGRyNC5zaW5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaXF1ZXJ5LT5mbGFncywgc3J2YnVmLCBzaXplb2Yoc3J2YnVmKSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VydmljZSA9IGxvb2t1cF9zZXJ2aWNlKG5pcXVlcnktPmFkZHIuYWRkcjYuc2luNl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pcXVlcnktPmZsYWdzLCBzcnZidWYsIHNpemVvZihzcnZidWYpKTsKKyAgICAgICAgfQorICAgICAgbmlxdWVyeS0+Y2FsbGJhY2sobmlxdWVyeS0+YXJnLCBBUkVTX1NVQ0NFU1MsIG5pcXVlcnktPnRpbWVvdXRzLCBpcGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UpOworICAgICAgYXJlc19mcmVlKG5pcXVlcnkpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgbmlxdWVyeS0+Y2FsbGJhY2sobmlxdWVyeS0+YXJnLCBzdGF0dXMsIG5pcXVlcnktPnRpbWVvdXRzLCBOVUxMLCBOVUxMKTsKKyAgYXJlc19mcmVlKG5pcXVlcnkpOworfQorCitzdGF0aWMgY2hhciAqbG9va3VwX3NlcnZpY2UodW5zaWduZWQgc2hvcnQgcG9ydCwgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgY29uc3QgY2hhciAqcHJvdG87CisgIHN0cnVjdCBzZXJ2ZW50ICpzZXA7CisjaWZkZWYgSEFWRV9HRVRTRVJWQllQT1JUX1IKKyAgc3RydWN0IHNlcnZlbnQgc2U7CisjZW5kaWYKKyAgY2hhciB0bXBidWZbNDA5Nl07CisgIGNoYXIgKm5hbWU7CisgIHNpemVfdCBuYW1lX2xlbjsKKworICBpZiAocG9ydCkKKyAgICB7CisgICAgICBpZiAoZmxhZ3MgJiBBUkVTX05JX05VTUVSSUNTRVJWKQorICAgICAgICBzZXAgPSBOVUxMOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKGZsYWdzICYgQVJFU19OSV9VRFApCisgICAgICAgICAgICBwcm90byA9ICJ1ZHAiOworICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgQVJFU19OSV9TQ1RQKQorICAgICAgICAgICAgcHJvdG8gPSAic2N0cCI7CisgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBBUkVTX05JX0RDQ1ApCisgICAgICAgICAgICBwcm90byA9ICJkY2NwIjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90byA9ICJ0Y3AiOworI2lmZGVmIEhBVkVfR0VUU0VSVkJZUE9SVF9SCisgICAgICAgICAgbWVtc2V0KCZzZSwgMCwgc2l6ZW9mKHNlKSk7CisgICAgICAgICAgc2VwID0gJnNlOworICAgICAgICAgIG1lbXNldCh0bXBidWYsIDAsIHNpemVvZih0bXBidWYpKTsKKyNpZiBHRVRTRVJWQllQT1JUX1JfQVJHUyA9PSA2CisgICAgICAgICAgaWYgKGdldHNlcnZieXBvcnRfcihwb3J0LCBwcm90bywgJnNlLCAodm9pZCAqKXRtcGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0bXBidWYpLCAmc2VwKSAhPSAwKQorICAgICAgICAgICAgc2VwID0gTlVMTDsgIC8qIExDT1ZfRVhDTF9MSU5FOiBidWZmZXIgbGFyZ2Ugc28gdGhpcyBuZXZlciBmYWlscyAqLworI2VsaWYgR0VUU0VSVkJZUE9SVF9SX0FSR1MgPT0gNQorICAgICAgICAgIHNlcCA9IGdldHNlcnZieXBvcnRfcihwb3J0LCBwcm90bywgJnNlLCAodm9pZCAqKXRtcGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRtcGJ1ZikpOworI2VsaWYgR0VUU0VSVkJZUE9SVF9SX0FSR1MgPT0gNAorICAgICAgICAgIGlmIChnZXRzZXJ2Ynlwb3J0X3IocG9ydCwgcHJvdG8sICZzZSwgKHZvaWQgKil0bXBidWYpICE9IDApCisgICAgICAgICAgICBzZXAgPSBOVUxMOworI2Vsc2UKKyAgICAgICAgICAvKiBMZXRzIGp1c3QgaG9wZSB0aGUgT1MgdXNlcyBUTFMhICovCisgICAgICAgICAgc2VwID0gZ2V0c2VydmJ5cG9ydChwb3J0LCBwcm90byk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgICAgLyogTGV0cyBqdXN0IGhvcGUgdGhlIE9TIHVzZXMgVExTISAqLworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmICFkZWZpbmVkKF9fTk9WRUxMX0xJQkNfXykpCisgICAgICAgICAgc2VwID0gZ2V0c2VydmJ5cG9ydChwb3J0LCAoY2hhciopcHJvdG8pOworI2Vsc2UKKyAgICAgICAgICBzZXAgPSBnZXRzZXJ2Ynlwb3J0KHBvcnQsIHByb3RvKTsKKyNlbmRpZgorI2VuZGlmCisgICAgICAgIH0KKyAgICAgIGlmIChzZXAgJiYgc2VwLT5zX25hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBnZXQgc2VydmljZSBuYW1lICovCisgICAgICAgICAgbmFtZSA9IHNlcC0+c19uYW1lOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBnZXQgcG9ydCBhcyBhIHN0cmluZyAqLworICAgICAgICAgIHNwcmludGYodG1wYnVmLCAiJXUiLCAodW5zaWduZWQgaW50KW50b2hzKHBvcnQpKTsKKyAgICAgICAgICBuYW1lID0gdG1wYnVmOworICAgICAgICB9CisgICAgICBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKyAgICAgIGlmIChuYW1lX2xlbiA8IGJ1ZmxlbikKKyAgICAgICAgLyogcmV0dXJuIGl0IGlmIGJ1ZmZlciBiaWcgZW5vdWdoICovCisgICAgICAgIG1lbWNweShidWYsIG5hbWUsIG5hbWVfbGVuICsgMSk7CisgICAgICBlbHNlCisgICAgICAgIC8qIGF2b2lkIHJldXNpbmcgcHJldmlvdXMgb25lICovCisgICAgICAgIGJ1ZlswXSA9ICdcMCc7ICAvKiBMQ09WX0VYQ0xfTElORTogbm8gcmVhbCBzZXJ2aWNlIG5hbWVzIGFyZSB0b28gYmlnICovCisgICAgICByZXR1cm4gYnVmOworICAgIH0KKyAgYnVmWzBdID0gJ1wwJzsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lECitzdGF0aWMgdm9pZCBhcHBlbmRfc2NvcGVpZChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiwgdW5zaWduZWQgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworI2lmZGVmIEhBVkVfSUZfSU5ERVhUT05BTUUKKyAgaW50IGlzX2xsLCBpc19tY2xsOworI2VuZGlmCisgIHN0YXRpYyBjb25zdCBjaGFyIGZtdF91W10gPSAiJXUiOworICBzdGF0aWMgY29uc3QgY2hhciBmbXRfbHVbXSA9ICIlbHUiOworICBjaGFyIHRtcGJ1ZltJRl9OQU1FU0laRSArIDJdOworICBzaXplX3QgYnVmbDsKKyAgY29uc3QgY2hhciAqZm10ID0gKHNpemVvZihhZGRyNi0+c2luNl9zY29wZV9pZCkgPiBzaXplb2YodW5zaWduZWQgaW50KSk/CisgICAgZm10X2x1OmZtdF91OworCisgIHRtcGJ1ZlswXSA9ICclJzsKKworI2lmZGVmIEhBVkVfSUZfSU5ERVhUT05BTUUKKyAgaXNfbGwgPSBJTjZfSVNfQUREUl9MSU5LTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpOworICBpc19tY2xsID0gSU42X0lTX0FERFJfTUNfTElOS0xPQ0FMKCZhZGRyNi0+c2luNl9hZGRyKTsKKyAgaWYgKChmbGFncyAmIEFSRVNfTklfTlVNRVJJQ1NDT1BFKSB8fAorICAgICAgKCFpc19sbCAmJiAhaXNfbWNsbCkpCisgICAgeworICAgICAgIHNwcmludGYoJnRtcGJ1ZlsxXSwgZm10LCBhZGRyNi0+c2luNl9zY29wZV9pZCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGlmX2luZGV4dG9uYW1lKGFkZHI2LT5zaW42X3Njb3BlX2lkLCAmdG1wYnVmWzFdKSA9PSBOVUxMKQorICAgICAgICBzcHJpbnRmKCZ0bXBidWZbMV0sIGZtdCwgYWRkcjYtPnNpbjZfc2NvcGVfaWQpOworICAgIH0KKyNlbHNlCisgIHNwcmludGYoJnRtcGJ1ZlsxXSwgZm10LCBhZGRyNi0+c2luNl9zY29wZV9pZCk7CisgICh2b2lkKSBmbGFnczsKKyNlbmRpZgorICB0bXBidWZbSUZfTkFNRVNJWkUgKyAxXSA9ICdcMCc7CisgIGJ1ZmwgPSBzdHJsZW4oYnVmKTsKKworICBpZihidWZsICsgc3RybGVuKHRtcGJ1ZikgPCBidWZsZW4pCisgICAgLyogb25seSBhcHBlbmQgdGhlIHNjb3BlaWQgc3RyaW5nIGlmIGl0IGZpdHMgaW4gdGhlIHRhcmdldCBidWZmZXIgKi8KKyAgICBzdHJjcHkoJmJ1ZltidWZsXSwgdG1wYnVmKTsKK30KKyNlbmRpZgorCisvKiBEZXRlcm1pbmVzIGlmIHMxIGVuZHMgd2l0aCB0aGUgc3RyaW5nIGluIHMyIChjYXNlLWluc2Vuc2l0aXZlKSAqLworU1RBVElDX1RFU1RBQkxFIGNoYXIgKmFyZXNfc3RyaWVuZHN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisgIGNvbnN0IGNoYXIgKmMxLCAqYzIsICpjMV9iZWdpbjsKKyAgaW50IGxvMSwgbG8yOworICBzaXplX3QgczFfbGVuID0gc3RybGVuKHMxKSwgczJfbGVuID0gc3RybGVuKHMyKTsKKworICAvKiBJZiB0aGUgc3Vic3RyIGlzIGxvbmdlciB0aGFuIHRoZSBmdWxsIHN0ciwgaXQgY2FuJ3QgbWF0Y2ggKi8KKyAgaWYgKHMyX2xlbiA+IHMxX2xlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBKdW1wIHRvIHRoZSBlbmQgb2YgczEgbWludXMgdGhlIGxlbmd0aCBvZiBzMiAqLworICBjMV9iZWdpbiA9IHMxK3MxX2xlbi1zMl9sZW47CisgIGMxID0gKGNvbnN0IGNoYXIgKiljMV9iZWdpbjsKKyAgYzIgPSBzMjsKKyAgd2hpbGUgKGMyIDwgczIrczJfbGVuKQorICAgIHsKKyAgICAgIGxvMSA9IFRPTE9XRVIoKmMxKTsKKyAgICAgIGxvMiA9IFRPTE9XRVIoKmMyKTsKKyAgICAgIGlmIChsbzEgIT0gbG8yKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGMxKys7CisgICAgICAgICAgYzIrKzsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIChjaGFyICopYzFfYmVnaW47Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldG9wdC5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRvcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTAyZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRvcHQuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIE9yaWdpbmFsIGZpbGUgbmFtZSBnZXRvcHQuYyAgSW5pdGlhbCBpbXBvcnQgaW50byB0aGUgYy1hcmVzIHNvdXJjZSB0cmVlCisgKiBvbiAyMDA3LTA0LTExLiAgTGlmdGVkIGZyb20gdmVyc2lvbiA1LjIgb2YgdGhlICdPcGVuIE1hc2gnIHByb2plY3Qgd2l0aAorICogdGhlIG1vZGlmaWVkIEJTRCBsaWNlbnNlLCBCU0QgbGljZW5zZSB3aXRob3V0IHRoZSBhZHZlcnRpc2luZyBjbGF1c2UuCisgKgorICovCisKKy8qCisgKiBnZXRvcHQuYyAtLQorICoKKyAqICAgICAgU3RhbmRhcmQgVU5JWCBnZXRvcHQgZnVuY3Rpb24uICBDb2RlIGlzIGZyb20gQlNELgorICoKKyAqIENvcHlyaWdodCAoYykgMTk4Ny0yMDAxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogQS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIEIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogQy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMKKyAqIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiAjaWYgIWRlZmluZWQobGludCkKKyAqIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRvcHQuYyA4LjIgKEJlcmtlbGV5KSA0LzIvOTQiOworICogI2VuZGlmCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiYXJlc19nZXRvcHQuaCIKKworaW50ICAgb3B0ZXJyID0gMSwgICAgIC8qIGlmIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGJlIHByaW50ZWQgKi8KKyAgICAgIG9wdGluZCA9IDE7ICAgICAvKiBpbmRleCBpbnRvIHBhcmVudCBhcmd2IHZlY3RvciAqLworaW50ICAgb3B0b3B0ID0gMDsgICAgIC8qIGNoYXJhY3RlciBjaGVja2VkIGZvciB2YWxpZGl0eSAqLworc3RhdGljIGludCBvcHRyZXNldDsgIC8qIHJlc2V0IGdldG9wdCAqLworY2hhciAgKm9wdGFyZzsgICAgICAgIC8qIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCBvcHRpb24gKi8KKworI2RlZmluZSAgQkFEQ0ggICAoaW50KSc/JworI2RlZmluZSAgQkFEQVJHICAoaW50KSc6JworI2RlZmluZSAgRU1TRyAgICAoY2hhciAqKSIiCisKKy8qCisgKiBhcmVzX2dldG9wdCAtLQorICogICAgUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqLworaW50CithcmVzX2dldG9wdChpbnQgbmFyZ2MsIGNoYXIgKiBjb25zdCBuYXJndltdLCBjb25zdCBjaGFyICpvc3RyKQoreworICAgIHN0YXRpYyBjaGFyICpwbGFjZSA9IEVNU0c7ICAgICAgICAgICAgICAgIC8qIG9wdGlvbiBsZXR0ZXIgcHJvY2Vzc2luZyAqLworICAgIGNoYXIgKm9saTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9wdGlvbiBsZXR0ZXIgbGlzdCBpbmRleCAqLworCisgICAgaWYgKG9wdHJlc2V0IHx8ICEqcGxhY2UpIHsgICAgICAgICAgICAgICAgLyogdXBkYXRlIHNjYW5uaW5nIHBvaW50ZXIgKi8KKyAgICAgICAgb3B0cmVzZXQgPSAwOworICAgICAgICBpZiAob3B0aW5kID49IG5hcmdjIHx8ICoocGxhY2UgPSBuYXJndltvcHRpbmRdKSAhPSAnLScpIHsKKyAgICAgICAgICAgIHBsYWNlID0gRU1TRzsKKyAgICAgICAgICAgIHJldHVybiAoRU9GKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGxhY2VbMV0gJiYgKisrcGxhY2UgPT0gJy0nKSB7ICAgIC8qIGZvdW5kICItLSIgKi8KKyAgICAgICAgICAgICsrb3B0aW5kOworICAgICAgICAgICAgcGxhY2UgPSBFTVNHOworICAgICAgICAgICAgcmV0dXJuIChFT0YpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3B0aW9uIGxldHRlciBva2F5PyAqLworICAgIGlmICgob3B0b3B0ID0gKGludCkqcGxhY2UrKykgPT0gKGludCknOicgfHwKKyAgICAgICAgKG9saSA9IHN0cmNocihvc3RyLCBvcHRvcHQpKSA9PSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5ICctJyBhcyBhbiBvcHRpb24sCisgICAgICAgICAqIGFzc3VtZSBpdCBtZWFucyBFT0YuCisgICAgICAgICAqLworICAgICAgICBpZiAob3B0b3B0ID09IChpbnQpJy0nKQorICAgICAgICAgICAgcmV0dXJuIChFT0YpOworICAgICAgICBpZiAoISpwbGFjZSkKKyAgICAgICAgICAgICsrb3B0aW5kOworICAgICAgICBpZiAob3B0ZXJyICYmICpvc3RyICE9ICc6JykKKyAgICAgICAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIsIF9fRklMRV9fLCBvcHRvcHQpOworICAgICAgICByZXR1cm4gKEJBRENIKTsKKyAgICB9CisgICAgaWYgKCorK29saSAhPSAnOicpIHsgICAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgbmVlZCBhcmd1bWVudCAqLworICAgICAgICBvcHRhcmcgPSBOVUxMOworICAgICAgICBpZiAoISpwbGFjZSkKKyAgICAgICAgICAgICsrb3B0aW5kOworICAgIH0KKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuZWVkIGFuIGFyZ3VtZW50ICovCisgICAgICAgIGlmICgqcGxhY2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gd2hpdGUgc3BhY2UgKi8KKyAgICAgICAgICAgIG9wdGFyZyA9IHBsYWNlOworICAgICAgICBlbHNlIGlmIChuYXJnYyA8PSArK29wdGluZCkgeyAgICAgICAgIC8qIG5vIGFyZyAqLworICAgICAgICAgICAgcGxhY2UgPSBFTVNHOworICAgICAgICAgICAgaWYgKCpvc3RyID09ICc6JykKKyAgICAgICAgICAgICAgICByZXR1cm4gKEJBREFSRyk7CisgICAgICAgICAgICBpZiAob3B0ZXJyKQorICAgICAgICAgICAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIG9wdG9wdCk7CisgICAgICAgICAgICByZXR1cm4gKEJBRENIKTsKKyAgICAgICAgfQorICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoaXRlIHNwYWNlICovCisgICAgICAgICAgICBvcHRhcmcgPSBuYXJndltvcHRpbmRdOworICAgICAgICBwbGFjZSA9IEVNU0c7CisgICAgICAgICsrb3B0aW5kOworICAgIH0KKyAgICByZXR1cm4gKG9wdG9wdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkdW1wIGJhY2sgb3B0aW9uIGxldHRlciAqLworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRvcHQuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0b3B0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhY2IzYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0b3B0LmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBBUkVTX0dFVE9QVF9ICisjZGVmaW5lIEFSRVNfR0VUT1BUX0gKKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4Ny0yMDAxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogQS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIEIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogQy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMKKyAqIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKK2ludCBhcmVzX2dldG9wdChpbnQgbmFyZ2MsIGNoYXIgKiBjb25zdCBuYXJndltdLCBjb25zdCBjaGFyICpvc3RyKTsKKworI3VuZGVmIG9wdGFyZworI3VuZGVmIG9wdGluZAorI3VuZGVmIG9wdGVycgorI3VuZGVmIG9wdG9wdAorI3VuZGVmIG9wdHJlc2V0CisKKyNkZWZpbmUgb3B0YXJnICAgYXJlc19vcHRhcmcKKyNkZWZpbmUgb3B0aW5kICAgYXJlc19vcHRpbmQKKyNkZWZpbmUgb3B0ZXJyICAgYXJlc19vcHRlcnIKKyNkZWZpbmUgb3B0b3B0ICAgYXJlc19vcHRvcHQKKyNkZWZpbmUgb3B0cmVzZXQgYXJlc19vcHRyZXNldAorCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gaW50IG9wdGVycjsKK2V4dGVybiBpbnQgb3B0b3B0OworCisjZW5kaWYgLyogQVJFU19HRVRPUFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRzb2NrLjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldHNvY2suMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzczMjkxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19nZXRzb2NrLjMKQEAgLTAsMCArMSw1NyBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgRGFuaWVsIFN0ZW5iZXJnCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0dFVFNPQ0sgMyAiMTEgTWFyY2ggMjAxMCIKKy5TSCBOQU1FCithcmVzX2dldHNvY2sgXC0gZ2V0IHNvY2tldCBkZXNjcmlwdG9ycyB0byB3YWl0IG9uCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgaW50IGFyZXNfZ2V0c29jayhhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwgYXJlc19zb2NrZXRfdCAqXGZJc29ja3NcZlAsCisuQiBpbnQgXGZJbnVtc29ja3NcZlApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19nZXRzb2NrCitmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHNldCBvZiBzb2NrZXQgZGVzY3JpcHRvcnMgd2hpY2ggdGhlIGNhbGxpbmcKK2FwcGxpY2F0aW9uIHNob3VsZCB3YWl0IG9uIGZvciByZWFkaW5nIGFuZC9vciB3cml0aW5nIGZvciB0aGUKK3Byb2Nlc3Npbmcgb2YgbmFtZSBzZXJ2aWNlIHF1ZXJpZXMgcGVuZGluZyBvbiB0aGUgbmFtZSBzZXJ2aWNlIGNoYW5uZWwKK2lkZW50aWZpZWQgYnkKKy5JUiBjaGFubmVsIC4KK1NvY2tldCBkZXNjcmlwdG9ycyB3aWxsIGJlIHNldCBpbiB0aGUgc29ja2V0IGRlc2NyaXB0b3IgYXJyYXkgcG9pbnRlZCB0byBieQorXGZJc29ja3NcZlAuCitcZkludW1zb2Nrc1xmUCBpcyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gYXJyYXkgaW4gbnVtYmVyIG9mIGludHMuCisKK1RoaXMgZnVuY3Rpb24gY2FuIG9ubHkgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHVwIHRvIDE2IHNvY2tldHMuIElmIG1vcmUgYXJlCitpbiB1c2UgKGhvd2V2ZXIgdW5saWtlbHkgdGhhdCBpcyksIHRoZXkgYXJlIHNpbXBseSBub3QgcmVwb3J0ZWQgYmFjay4KKy5TSCBSRVRVUk4gVkFMVUVTCitcZkJhcmVzX2dldHNvY2tcZlAgcmV0dXJucyBhIGJpdG1hc2sgZm9yIHdoYXQgYWN0aW9ucyB0byB3YWl0IGZvciBvbiB0aGUKK2RpZmZlcmVudCBzb2NrZXRzLiBUaGUgYXJlcy5oIGhlYWRlciBmaWxlIHByb3ZpZGVzIHRoZXNlIGNvbnZlbmllbmNlIG1hY3JvcyB0bworZXh0cmFjdCB0aGUgaW5mb3JtYXRpb24gYXBwcm9wcmlhdGVseToKKworLm5mCisjZGVmaW5lIEFSRVNfR0VUU09DS19NQVhOVU0gMTYgLyogYXJlc19nZXRzb2NrKCkgY2FuIHJldHVybiBpbmZvIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYW55IHNvY2tldHMgKi8KKyNkZWZpbmUgQVJFU19HRVRTT0NLX1JFQURBQkxFKGJpdHMsbnVtKSAoYml0cyAmICgxPDwgKG51bSkpKQorI2RlZmluZSBBUkVTX0dFVFNPQ0tfV1JJVEFCTEUoYml0cyxudW0pIChiaXRzICYgKDEgPDwgKChudW0pICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkVTX0dFVFNPQ0tfTUFYTlVNKSkpCisuZmkKKy5TSCBOT1RFUworVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gYy1hcmVzIDEuMy4xCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3RpbWVvdXQgKDMpLAorLkJSIGFyZXNfZmRzICgzKSwKKy5CUiBhcmVzX3Byb2Nlc3MgKDMpCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldHNvY2suYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfZ2V0c29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZDM0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2dldHNvY2suYwpAQCAtMCwwICsxLDY2IEBACisKKy8qIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAsIERhbmllbCBTdGVuYmVyZworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorICogdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworaW50IGFyZXNfZ2V0c29jayhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgYXJlc19zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykgLyogc2l6ZSBvZiB0aGUgJ3NvY2tzJyBhcnJheSAqLworeworICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXI7CisgIGludCBpOworICBpbnQgc29ja2luZGV4PTA7CisgIGludCBiaXRtYXAgPSAwOworICB1bnNpZ25lZCBpbnQgc2V0Yml0cyA9IDB4ZmZmZmZmZmY7CisKKyAgLyogQXJlIHRoZXJlIGFueSBhY3RpdmUgcXVlcmllcz8gKi8KKyAgaW50IGFjdGl2ZV9xdWVyaWVzID0gIWFyZXNfX2lzX2xpc3RfZW1wdHkoJihjaGFubmVsLT5hbGxfcXVlcmllcykpOworCisgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5uc2VydmVyczsgaSsrKQorICAgIHsKKyAgICAgIHNlcnZlciA9ICZjaGFubmVsLT5zZXJ2ZXJzW2ldOworICAgICAgLyogV2Ugb25seSBuZWVkIHRvIHJlZ2lzdGVyIGludGVyZXN0IGluIFVEUCBzb2NrZXRzIGlmIHdlIGhhdmUKKyAgICAgICAqIG91dHN0YW5kaW5nIHF1ZXJpZXMuCisgICAgICAgKi8KKyAgICAgIGlmIChhY3RpdmVfcXVlcmllcyAmJiBzZXJ2ZXItPnVkcF9zb2NrZXQgIT0gQVJFU19TT0NLRVRfQkFEKQorICAgICAgICB7CisgICAgICAgICAgaWYoc29ja2luZGV4ID49IG51bXNvY2tzIHx8IHNvY2tpbmRleCA+PSBBUkVTX0dFVFNPQ0tfTUFYTlVNKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgc29ja3Nbc29ja2luZGV4XSA9IHNlcnZlci0+dWRwX3NvY2tldDsKKyAgICAgICAgICBiaXRtYXAgfD0gQVJFU19HRVRTT0NLX1JFQURBQkxFKHNldGJpdHMsIHNvY2tpbmRleCk7CisgICAgICAgICAgc29ja2luZGV4Kys7CisgICAgICAgIH0KKyAgICAgIC8qIFdlIGFsd2F5cyByZWdpc3RlciBmb3IgVENQIGV2ZW50cywgYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cKKyAgICAgICAqIHdoZW4gdGhlIG90aGVyIHNpZGUgY2xvc2VzIHRoZSBjb25uZWN0aW9uLCBzbyB3ZSBkb24ndCB3YXN0ZQorICAgICAgICogdGltZSB0cnlpbmcgdG8gdXNlIGEgYnJva2VuIGNvbm5lY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGlmIChzZXJ2ZXItPnRjcF9zb2NrZXQgIT0gQVJFU19TT0NLRVRfQkFEKQorICAgICAgIHsKKyAgICAgICAgIGlmKHNvY2tpbmRleCA+PSBudW1zb2NrcyB8fCBzb2NraW5kZXggPj0gQVJFU19HRVRTT0NLX01BWE5VTSkKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBzb2Nrc1tzb2NraW5kZXhdID0gc2VydmVyLT50Y3Bfc29ja2V0OworICAgICAgICAgYml0bWFwIHw9IEFSRVNfR0VUU09DS19SRUFEQUJMRShzZXRiaXRzLCBzb2NraW5kZXgpOworCisgICAgICAgICBpZiAoc2VydmVyLT5xaGVhZCAmJiBhY3RpdmVfcXVlcmllcykKKyAgICAgICAgICAgLyogdGhlbiB0aGUgdGNwIHNvY2tldCBpcyBhbHNvIHdyaXRhYmxlISAqLworICAgICAgICAgICBiaXRtYXAgfD0gQVJFU19HRVRTT0NLX1dSSVRBQkxFKHNldGJpdHMsIHNvY2tpbmRleCk7CisKKyAgICAgICAgIHNvY2tpbmRleCsrOworICAgICAgIH0KKyAgICB9CisgIHJldHVybiBiaXRtYXA7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luZXRfbmV0X3B0b24uaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaW5ldF9uZXRfcHRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZGEyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luZXRfbmV0X3B0b24uaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIEhFQURFUl9DQVJFU19JTkVUX05FVF9QVE9OX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX0lORVRfTkVUX1BUT05fSAorCisvKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBieSBEYW5pZWwgU3RlbmJlcmcgZXQgYWwKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWZkZWYgSEFWRV9JTkVUX05FVF9QVE9OCisjZGVmaW5lIGFyZXNfaW5ldF9uZXRfcHRvbih3LHgseSx6KSBpbmV0X25ldF9wdG9uKHcseCx5LHopCisjZWxzZQoraW50IGFyZXNfaW5ldF9uZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0LCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DQVJFU19JTkVUX05FVF9QVE9OX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaW5ldF9udG9wLjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luZXRfbnRvcC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWUwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luZXRfbnRvcC4zCkBAIC0wLDAgKzEsNDcgQEAKKy5cIgorLlwiIENvcHlyaWdodCAoQykgMjAxMyBieSBEYW5pZWwgU3RlbmJlcmcKKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfSU5FVF9OVE9QIDMgIjE3IEZlYiAyMDEzIgorLlNIIE5BTUUKK2FyZXNfaW5ldF9udG9wIFwtIGNvbnZlcnQgYSBuZXR3b3JrIGZvcm1hdCBhZGRyZXNzIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiBjb25zdCBjaGFyICoKKy5CIGFyZXNfaW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIGFyZXNfc29ja2xlbl90IHNpemUpOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgaXMgYSBwb3J0YWJsZSB2ZXJzaW9uIHdpdGggdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjb21tb25seQorYXZhaWxhYmxlIFxmSWluZXRfbnRvcFxmUC4KKworVGhlIGFyZXNfaW5ldF9udG9wKCkgZnVuY3Rpb24gY29udmVydHMgYSBudW1lcmljIGFkZHJlc3MgaW50byBhIHRleHQgc3RyaW5nCitzdWl0YWJsZSBmb3IgcHJlc2VudGF0aW9uLiBUaGUgXGZCYWZcZlAgYXJndW1lbnQgc2hhbGwgc3BlY2lmeSB0aGUgZmFtaWx5IG9mCit0aGUgYWRkcmVzcy4gVGhpcyBjYW4gYmUgQUZfSU5FVCBvciBBRl9JTkVUNi4gIFRoZSBcZkJzcmNcZlAgYXJndW1lbnQgcG9pbnRzCit0byBhIGJ1ZmZlciBob2xkaW5nIGFuIElQdjQgYWRkcmVzcyBpZiB0aGUgYWYgYXJndW1lbnQgaXMgQUZfSU5FVCwgb3IgYW4gSVB2NgorYWRkcmVzcyBpZiB0aGUgYWYgYXJndW1lbnQgaXMgQUZfSU5FVDY7IHRoZSBhZGRyZXNzIG11c3QgYmUgaW4gbmV0d29yayBieXRlCitvcmRlci4gVGhlIFxmQmRzdFxmUCBhcmd1bWVudCBwb2ludHMgdG8gYSBidWZmZXIgd2hlcmUgdGhlIGZ1bmN0aW9uIHN0b3JlcyB0aGUKK3Jlc3VsdGluZyB0ZXh0IHN0cmluZzsgaXQgc2hhbGwgbm90IGJlIE5VTEwuIFRoZSBcZkJzaXplXGZQIGFyZ3VtZW50IHNwZWNpZmllcwordGhlIHNpemUgb2YgdGhpcyBidWZmZXIsIHdoaWNoIHNoYWxsIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSB0ZXh0IHN0cmluZworKElORVRfQUREUlNUUkxFTiAoMTYpIGNoYXJhY3RlcnMgZm9yIElQdjQsIElORVQ2X0FERFJTVFJMRU4gKDQ2KSBjaGFyYWN0ZXJzCitmb3IgSVB2NikuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2luaXQoMyksCisuQlIgYXJlc19pbmV0X3B0b24oMykKKy5TSCBBVkFJTEFCSUxJVFkKK21hZGUgcHJvcGVybHkgcHVibGljbHkgYXZhaWxhYmxlIGluIGMtYXJlcyBmb3IgcmVhbCBpbiB2ZXJzaW9uIDEuMTAuMAorLlNIIEFVVEhPUgorRGFuaWVsIFN0ZW5iZXJnCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaW5ldF9wdG9uLjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luZXRfcHRvbi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDg2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luZXRfcHRvbi4zCkBAIC0wLDAgKzEsNDMgQEAKKy5cIgorLlwiIENvcHlyaWdodCAoQykgMjAxMyBieSBEYW5pZWwgU3RlbmJlcmcKKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfSU5FVF9QVE9OIDMgIjE3IEZlYiAyMDEzIgorLlNIIE5BTUUKK2FyZXNfaW5ldF9wdG9uIFwtIGNvbnZlcnQgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MgZnJvbSB0ZXh0IHRvIGJpbmFyeSBmb3JtCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgY29uc3QgY2hhciAqYXJlc19pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCk7CisuZmkKKy5TSCBERVNDUklQVElPTgorVGhpcyBpcyBhIHBvcnRhYmxlIHZlcnNpb24gd2l0aCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGNvbW1vbmx5CithdmFpbGFibGUgXGZJaW5ldF9wdG9uXGZQLgorCitUaGUgYXJlc19pbmV0X3B0b24oKSBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgYWRkcmVzcyBpbiBpdHMgc3RhbmRhcmQgdGV4dAorcHJlc2VudGF0aW9uIGZvcm0gaW50byBpdHMgbnVtZXJpYyBiaW5hcnkgZm9ybS4gVGhlIFxmQmFmXGZQIGFyZ3VtZW50IHNoYWxsCitzcGVjaWZ5IHRoZSBmYW1pbHkgb2YgdGhlIGFkZHJlc3MuIFRoZSBBRl9JTkVUIGFuZCBBRl9JTkVUNiBhZGRyZXNzIGZhbWlsaWVzCitzaGFsbCBiZSBzdXBwb3J0ZWQuIFRoZSBcZkJzcmNcZlAgYXJndW1lbnQgcG9pbnRzIHRvIHRoZSBzdHJpbmcgYmVpbmcgcGFzc2VkCitpbi4gVGhlIFxmQmRzdFxmUCBhcmd1bWVudCBwb2ludHMgdG8gYSBidWZmZXIgaW50byB3aGljaCB0aGUgZnVuY3Rpb24gc3RvcmVzCit0aGUgbnVtZXJpYyBhZGRyZXNzOyB0aGlzIHNoYWxsIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBudW1lcmljIGFkZHJlc3MKKygzMiBiaXRzIGZvciBBRl9JTkVULCAxMjggYml0cyBmb3IgQUZfSU5FVDYpLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19pbml0KDMpLAorLkJSIGFyZXNfaW5ldF9udG9wKDMpCisuU0ggQVZBSUxBQklMSVRZCittYWRlIHByb3Blcmx5IHB1YmxpY2x5IGF2YWlsYWJsZSBpbiBjLWFyZXMgZm9yIHJlYWwgaW4gdmVyc2lvbiAxLjEwLjAKKy5TSCBBVVRIT1IKK0RhbmllbCBTdGVuYmVyZworCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luaXQuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaW5pdC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYWY0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luaXQuMwpAQCAtMCwwICsxLDgxIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5cIiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBieSBEYW5pZWwgU3RlbmJlcmcKKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfSU5JVCAzICI1IE1hcmNoIDIwMTAiCisuU0ggTkFNRQorYXJlc19pbml0IFwtIEluaXRpYWxpemUgYSByZXNvbHZlciBjaGFubmVsCisuU0ggU1lOT1BTSVMKKy5uZgorI2luY2x1ZGUgPGFyZXMuaD4KKworaW50IGFyZXNfaW5pdChhcmVzX2NoYW5uZWwgKlxmSWNoYW5uZWxwdHJcZlApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmFyZXNfaW5pdCgzKVxmUCBmdW5jdGlvbiBpbml0aWFsaXplcyBhIGNvbW11bmljYXRpb25zIGNoYW5uZWwgZm9yIG5hbWUKK3NlcnZpY2UgbG9va3Vwcy4gIElmIGl0IHJldHVybnMgc3VjY2Vzc2Z1bGx5LCBcZkJhcmVzX2luaXQoMylcZlAgd2lsbCBzZXQgdGhlCit2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IFxmSWNoYW5uZWxwdHJcZlAgdG8gYSBoYW5kbGUgdXNlZCB0byBpZGVudGlmeSB0aGUgbmFtZQorc2VydmljZSBjaGFubmVsLiAgVGhlIGNhbGxlciBzaG91bGQgaW52b2tlIFxmSWFyZXNfZGVzdHJveSgzKVxmUCBvbiB0aGUgaGFuZGxlCit3aGVuIHRoZSBjaGFubmVsIGlzIG5vIGxvbmdlciBuZWVkZWQuCisKK1RoZSBcZklhcmVzX2luaXRfb3B0aW9ucygzKVxmUCBmdW5jdGlvbiBpcyBwcm92aWRlIHRvIG9mZmVyIG1vcmUgaW5pdAorYWx0ZXJuYXRpdmVzLgorLlNIIFJFVFVSTiBWQUxVRVMKK1xmSWFyZXNfaW5pdCgzKVxmUCBjYW4gcmV0dXJuIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxNAorLkIgQVJFU19TVUNDRVNTCitJbml0aWFsaXphdGlvbiBzdWNjZWVkZWQuCisuVFAgMTQKKy5CIEFSRVNfRUZJTEUKK0EgY29uZmlndXJhdGlvbiBmaWxlIGNvdWxkIG5vdCBiZSByZWFkLgorLlRQIDE0CisuQiBBUkVTX0VOT01FTQorVGhlIHByb2Nlc3MncyBhdmFpbGFibGUgbWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuVFAgMTQKKy5CIEFSRVNfRU5PVElOSVRJQUxJWkVECitjLWFyZXMgbGlicmFyeSBpbml0aWFsaXphdGlvbiBub3QgeWV0IHBlcmZvcm1lZC4KKy5TSCBOT1RFUworV2hlbiBpbml0aWFsaXppbmcgZnJvbQorLkIgL2V0Yy9yZXNvbHYuY29uZiwKKy5CUiBhcmVzX2luaXQgKDMpCityZWFkcyB0aGUKKy5JIGRvbWFpbgorYW5kCisuSSBzZWFyY2gKK2RpcmVjdGl2ZXMgdG8gYWxsb3cgbG9va3VwcyBvZiBzaG9ydCBuYW1lcyByZWxhdGl2ZSB0byB0aGUgZG9tYWlucworc3BlY2lmaWVkLiBUaGUKKy5JIGRvbWFpbgorYW5kCisuSSBzZWFyY2gKK2RpcmVjdGl2ZXMgb3ZlcnJpZGUgb25lIGFub3RoZXIuIElmIG1vcmUgdGhhdCBvbmUgaW5zdGFuY2Ugb2YgZWl0aGVyCisuSSBkb21haW4KK29yCisuSSBzZWFyY2gKK2RpcmVjdGl2ZXMgaXMgc3BlY2lmaWVkLCB0aGUgbGFzdCBvY2N1cnJlbmNlIHdpbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLAorcGxlYXNlIHNlZSB0aGUKKy5CUiByZXNvbHYuY29uZiAoNSkKK21hbnVhbCBwYWdlLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19pbml0X29wdGlvbnMoMyksCisuQlIgYXJlc19kZXN0cm95KDMpLAorLkJSIGFyZXNfZHVwKDMpLAorLkJSIGFyZXNfbGlicmFyeV9pbml0KDMpLAorLkJSIGFyZXNfc2V0X3NlcnZlcnMoMykKKy5TSCBBVVRIT1IKK0dyZWcgSHVkc29uLCBNSVQgSW5mb3JtYXRpb24gU3lzdGVtcworLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5icgorQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgYnkgRGFuaWVsIFN0ZW5iZXJnLgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19pbml0LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDgyZjhlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19pbml0LmMKQEAgLTAsMCArMSwyMTUyIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChBTkRST0lEKSB8fCBkZWZpbmVkKF9fQU5EUk9JRF9fKQorI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgorLyogRnJvbSB0aGUgQmlvbmljIHNvdXJjZXMgKi8KKyNkZWZpbmUgRE5TX1BST1BfTkFNRV9QUkVGSVggICJuZXQuZG5zIgorI2RlZmluZSBNQVhfRE5TX1BST1BFUlRJRVMgICAgOAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENBUkVTX1VTRV9MSUJSRVNPTFYpCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2luZXRfbmV0X3B0b24uaCIKKyNpbmNsdWRlICJhcmVzX2xpYnJhcnlfaW5pdC5oIgorI2luY2x1ZGUgImFyZXNfbm93YXJuLmgiCisjaW5jbHVkZSAiYXJlc19wbGF0Zm9ybS5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCisjaWZkZWYgV0FUVDMyCisjdW5kZWYgV0lOMzIgIC8qIFJlZGVmaW5lZCBpbiBNaW5nVy9NU1ZDIGhlYWRlcnMgKi8KKyNlbmRpZgorCitzdGF0aWMgaW50IGluaXRfYnlfb3B0aW9ucyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmVzX29wdGlvbnMgKm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bWFzayk7CitzdGF0aWMgaW50IGluaXRfYnlfZW52aXJvbm1lbnQoYXJlc19jaGFubmVsIGNoYW5uZWwpOworc3RhdGljIGludCBpbml0X2J5X3Jlc29sdl9jb25mKGFyZXNfY2hhbm5lbCBjaGFubmVsKTsKK3N0YXRpYyBpbnQgaW5pdF9ieV9kZWZhdWx0cyhhcmVzX2NoYW5uZWwgY2hhbm5lbCk7CisKKyNpZm5kZWYgV0FUVDMyCitzdGF0aWMgaW50IGNvbmZpZ19uYW1lc2VydmVyKHN0cnVjdCBzZXJ2ZXJfc3RhdGUgKipzZXJ2ZXJzLCBpbnQgKm5zZXJ2ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHIpOworI2VuZGlmCitzdGF0aWMgaW50IHNldF9zZWFyY2goYXJlc19jaGFubmVsIGNoYW5uZWwsIGNvbnN0IGNoYXIgKnN0cik7CitzdGF0aWMgaW50IHNldF9vcHRpb25zKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpzdHIpOworc3RhdGljIGNvbnN0IGNoYXIgKnRyeV9vcHRpb24oY29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqcSwgY29uc3QgY2hhciAqb3B0KTsKK3N0YXRpYyBpbnQgaW5pdF9pZF9rZXkocmM0X2tleSoga2V5LGludCBrZXlfZGF0YV9sZW4pOworCitzdGF0aWMgaW50IGNvbmZpZ19zb3J0bGlzdChzdHJ1Y3QgYXBhdHRlcm4gKipzb3J0bGlzdCwgaW50ICpuc29ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cik7CitzdGF0aWMgaW50IHNvcnRsaXN0X2FsbG9jKHN0cnVjdCBhcGF0dGVybiAqKnNvcnRsaXN0LCBpbnQgKm5zb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXBhdHRlcm4gKnBhdCk7CitzdGF0aWMgaW50IGlwX2FkZHIoY29uc3QgY2hhciAqcywgc3NpemVfdCBsZW4sIHN0cnVjdCBpbl9hZGRyICphZGRyKTsKK3N0YXRpYyB2b2lkIG5hdHVyYWxfbWFzayhzdHJ1Y3QgYXBhdHRlcm4gKnBhdCk7CisjaWYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKFdBVFQzMikgJiYgXAorICAgICFkZWZpbmVkKEFORFJPSUQpICYmICFkZWZpbmVkKF9fQU5EUk9JRF9fKSAmJiAhZGVmaW5lZChDQVJFU19VU0VfTElCUkVTT0xWKQorc3RhdGljIGludCBjb25maWdfZG9tYWluKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjaGFyICpzdHIpOworc3RhdGljIGludCBjb25maWdfbG9va3VwKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmluZGNoLCBjb25zdCBjaGFyICphbHRiaW5kY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZWNoKTsKK3N0YXRpYyBjaGFyICp0cnlfY29uZmlnKGNoYXIgKnMsIGNvbnN0IGNoYXIgKm9wdCwgY2hhciBzY2MpOworI2VuZGlmCisKKyNkZWZpbmUgQVJFU19DT05GSUdfQ0hFQ0soeCkgKHgtPmxvb2t1cHMgJiYgeC0+bnNvcnQgPiAtMSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgtPm5zZXJ2ZXJzID4gLTEgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LT5uZG9tYWlucyA+IC0xICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeC0+bmRvdHMgPiAtMSAmJiB4LT50aW1lb3V0ID4gLTEgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LT50cmllcyA+IC0xKQorCitpbnQgYXJlc19pbml0KGFyZXNfY2hhbm5lbCAqY2hhbm5lbHB0cikKK3sKKyAgcmV0dXJuIGFyZXNfaW5pdF9vcHRpb25zKGNoYW5uZWxwdHIsIE5VTEwsIDAsIE5VTEwpOworfQorCitpbnQgYXJlc19pbml0X29wdGlvbnMoYXJlc19jaGFubmVsICpjaGFubmVscHRyLCBzdHJ1Y3QgYXJlc19vcHRpb25zICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRtYXNrLCBjaGFyICogZGV2KQoreworICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKKyAgaW50IGk7CisgIGludCBzdGF0dXMgPSBBUkVTX1NVQ0NFU1M7CisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworI2lmZGVmIENVUkxERUJVRworICBjb25zdCBjaGFyICplbnYgPSBnZXRlbnYoIkNBUkVTX01FTURFQlVHIik7CisKKyAgaWYgKGVudikKKyAgICBjdXJsX21lbWRlYnVnKGVudik7CisgIGVudiA9IGdldGVudigiQ0FSRVNfTUVNTElNSVQiKTsKKyAgaWYgKGVudikgeworICAgIGNoYXIgKmVuZHB0cjsKKyAgICBsb25nIG51bSA9IHN0cnRvbChlbnYsICZlbmRwdHIsIDEwKTsKKyAgICBpZigoZW5kcHRyICE9IGVudikgJiYgKGVuZHB0ciA9PSBlbnYgKyBzdHJsZW4oZW52KSkgJiYgKG51bSA+IDApKQorICAgICAgY3VybF9tZW1saW1pdChudW0pOworICB9CisjZW5kaWYKKworICBpZiAoYXJlc19saWJyYXJ5X2luaXRpYWxpemVkKCkgIT0gQVJFU19TVUNDRVNTKQorICAgIHJldHVybiBBUkVTX0VOT1RJTklUSUFMSVpFRDsgIC8qIExDT1ZfRVhDTF9MSU5FOiBuL2Egb24gbm9uLVdpblNvY2sgKi8KKworICBjaGFubmVsID0gYXJlc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcmVzX2NoYW5uZWxkYXRhKSk7CisgIGlmICghY2hhbm5lbCkgeworICAgICpjaGFubmVscHRyID0gTlVMTDsKKyAgICByZXR1cm4gQVJFU19FTk9NRU07CisgIH0KKworICBub3cgPSBhcmVzX190dm5vdygpOworCisgIC8qIFNldCBldmVyeXRoaW5nIHRvIGRpc3Rpbmd1aXNoZWQgdmFsdWVzIHNvIHdlIGtub3cgdGhleSBoYXZlbid0CisgICAqIGJlZW4gc2V0IHlldC4KKyAgICovCisgIGNoYW5uZWwtPmZsYWdzID0gLTE7CisgIGNoYW5uZWwtPnRpbWVvdXQgPSAtMTsKKyAgY2hhbm5lbC0+dHJpZXMgPSAtMTsKKyAgY2hhbm5lbC0+bmRvdHMgPSAtMTsKKyAgY2hhbm5lbC0+cm90YXRlID0gLTE7CisgIGNoYW5uZWwtPnVkcF9wb3J0ID0gLTE7CisgIGNoYW5uZWwtPnRjcF9wb3J0ID0gLTE7CisgIGNoYW5uZWwtPmVkbnNwc3ogPSAtMTsKKyAgY2hhbm5lbC0+c29ja2V0X3NlbmRfYnVmZmVyX3NpemUgPSAtMTsKKyAgY2hhbm5lbC0+c29ja2V0X3JlY2VpdmVfYnVmZmVyX3NpemUgPSAtMTsKKyAgY2hhbm5lbC0+bnNlcnZlcnMgPSAtMTsKKyAgY2hhbm5lbC0+bmRvbWFpbnMgPSAtMTsKKyAgY2hhbm5lbC0+bnNvcnQgPSAtMTsKKyAgY2hhbm5lbC0+dGNwX2Nvbm5lY3Rpb25fZ2VuZXJhdGlvbiA9IDA7CisgIGNoYW5uZWwtPmxvb2t1cHMgPSBOVUxMOworICBjaGFubmVsLT5kb21haW5zID0gTlVMTDsKKyAgY2hhbm5lbC0+c29ydGxpc3QgPSBOVUxMOworICBjaGFubmVsLT5zZXJ2ZXJzID0gTlVMTDsKKyAgY2hhbm5lbC0+c29ja19zdGF0ZV9jYiA9IE5VTEw7CisgIGNoYW5uZWwtPnNvY2tfc3RhdGVfY2JfZGF0YSA9IE5VTEw7CisgIGNoYW5uZWwtPnNvY2tfY3JlYXRlX2NiID0gTlVMTDsKKyAgY2hhbm5lbC0+c29ja19jcmVhdGVfY2JfZGF0YSA9IE5VTEw7CisgIGNoYW5uZWwtPnNvY2tfY29uZmlnX2NiID0gTlVMTDsKKyAgY2hhbm5lbC0+c29ja19jb25maWdfY2JfZGF0YSA9IE5VTEw7CisKKyAgY2hhbm5lbC0+bGFzdF9zZXJ2ZXIgPSAwOworICBjaGFubmVsLT5sYXN0X3RpbWVvdXRfcHJvY2Vzc2VkID0gKHRpbWVfdClub3cudHZfc2VjOworCisgIG1lbXNldCgmY2hhbm5lbC0+bG9jYWxfZGV2X25hbWUsIDAsIHNpemVvZihjaGFubmVsLT5sb2NhbF9kZXZfbmFtZSkpOworICBjaGFubmVsLT5sb2NhbF9pcDQgPSAwOworICBtZW1zZXQoJmNoYW5uZWwtPmxvY2FsX2lwNiwgMCwgc2l6ZW9mKGNoYW5uZWwtPmxvY2FsX2lwNikpOworICAKKwkKKyAgCWFyZXNfc2V0X2xvY2FsX2RldihjaGFubmVsLCBkZXYpOworIGZwcmludGYoc3RkZXJyLCAiY2hhbm5lbF9kZXYgaXMgJXNcbiIsIGNoYW5uZWwtPmxvY2FsX2Rldl9uYW1lKTsKKyBpZihkZXYpCisgCWFyZXNfZnJlZShkZXYpOworIAorICAvKiBJbml0aWFsaXplIG91ciBsaXN0cyBvZiBxdWVyaWVzICovCisgIGFyZXNfX2luaXRfbGlzdF9oZWFkKCYoY2hhbm5lbC0+YWxsX3F1ZXJpZXMpKTsKKyAgZm9yIChpID0gMDsgaSA8IEFSRVNfUUlEX1RBQkxFX1NJWkU7IGkrKykKKyAgICB7CisgICAgICBhcmVzX19pbml0X2xpc3RfaGVhZCgmKGNoYW5uZWwtPnF1ZXJpZXNfYnlfcWlkW2ldKSk7CisgICAgfQorICBmb3IgKGkgPSAwOyBpIDwgQVJFU19USU1FT1VUX1RBQkxFX1NJWkU7IGkrKykKKyAgICB7CisgICAgICBhcmVzX19pbml0X2xpc3RfaGVhZCgmKGNoYW5uZWwtPnF1ZXJpZXNfYnlfdGltZW91dFtpXSkpOworICAgIH0KKworICAvKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gYnkgZWFjaCBvZiB0aGUgZm91ciBzb3VyY2VzLCBmcm9tIGhpZ2hlc3QKKyAgICogcHJlY2VkZW5jZSB0byBsb3dlc3QuCisgICAqLworCisgIHN0YXR1cyA9IGluaXRfYnlfb3B0aW9ucyhjaGFubmVsLCBvcHRpb25zLCBvcHRtYXNrKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogaW5pdF9ieV9vcHRpb25zIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgYXJlc19zdHJlcnJvcihzdGF0dXMpKSk7CisgICAgLyogSWYgd2UgZmFpbCB0byBhcHBseSB1c2VyLXNwZWNpZmllZCBvcHRpb25zLCBmYWlsIHRoZSB3aG9sZSBpbml0IHByb2Nlc3MgKi8KKyAgICBnb3RvIGRvbmU7CisgIH0KKyAgc3RhdHVzID0gaW5pdF9ieV9lbnZpcm9ubWVudChjaGFubmVsKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGluaXRfYnlfZW52aXJvbm1lbnQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBhcmVzX3N0cmVycm9yKHN0YXR1cykpKTsKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpIHsKKyAgICBzdGF0dXMgPSBpbml0X2J5X3Jlc29sdl9jb25mKGNoYW5uZWwpOworICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGluaXRfYnlfcmVzb2x2X2NvbmYgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSkpOworICB9CisKKyAgLyoKKyAgICogTm8gbWF0dGVyIHdoYXQgZmFpbGVkIG9yIHN1Y2NlZWRlZCwgc2VlZCBkZWZhdWx0cyB0byBwcm92aWRlCisgICAqIHVzZWZ1bCBiZWhhdmlvciBmb3IgdGhpbmdzIHRoYXQgd2UgbWlzc2VkLgorICAgKi8KKyAgc3RhdHVzID0gaW5pdF9ieV9kZWZhdWx0cyhjaGFubmVsKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGluaXRfYnlfZGVmYXVsdHMgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBhcmVzX3N0cmVycm9yKHN0YXR1cykpKTsKKworICAvKiBHZW5lcmF0ZSByYW5kb20ga2V5ICovCisKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpIHsKKyAgICBzdGF0dXMgPSBpbml0X2lkX2tleSgmY2hhbm5lbC0+aWRfa2V5LCBBUkVTX0lEX0tFWV9MRU4pOworICAgIGlmIChzdGF0dXMgPT0gQVJFU19TVUNDRVNTKQorICAgICAgY2hhbm5lbC0+bmV4dF9pZCA9IGFyZXNfX2dlbmVyYXRlX25ld19pZCgmY2hhbm5lbC0+aWRfa2V5KTsKKyAgICBlbHNlCisgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogaW5pdF9pZF9rZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSkpOworICB9CisKK2RvbmU6CisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIC8qIFNvbWV0aGluZyBmYWlsZWQ7IGNsZWFuIHVwIG1lbW9yeSB3ZSBtYXkgaGF2ZSBhbGxvY2F0ZWQuICovCisgICAgICBpZiAoY2hhbm5lbC0+c2VydmVycykKKyAgICAgICAgYXJlc19mcmVlKGNoYW5uZWwtPnNlcnZlcnMpOworICAgICAgaWYgKGNoYW5uZWwtPmRvbWFpbnMpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+bmRvbWFpbnM7IGkrKykKKyAgICAgICAgICAgIGFyZXNfZnJlZShjaGFubmVsLT5kb21haW5zW2ldKTsKKyAgICAgICAgICBhcmVzX2ZyZWUoY2hhbm5lbC0+ZG9tYWlucyk7CisgICAgICAgIH0KKyAgICAgIGlmIChjaGFubmVsLT5zb3J0bGlzdCkKKyAgICAgICAgYXJlc19mcmVlKGNoYW5uZWwtPnNvcnRsaXN0KTsKKyAgICAgIGlmKGNoYW5uZWwtPmxvb2t1cHMpCisgICAgICAgIGFyZXNfZnJlZShjaGFubmVsLT5sb29rdXBzKTsKKyAgICAgIGFyZXNfZnJlZShjaGFubmVsKTsKKyAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgIC8qIFRyaW0gdG8gb25lIHNlcnZlciBpZiBBUkVTX0ZMQUdfUFJJTUFSWSBpcyBzZXQuICovCisgIGlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBBUkVTX0ZMQUdfUFJJTUFSWSkgJiYgY2hhbm5lbC0+bnNlcnZlcnMgPiAxKQorICAgIGNoYW5uZWwtPm5zZXJ2ZXJzID0gMTsKKworICBhcmVzX19pbml0X3NlcnZlcnNfc3RhdGUoY2hhbm5lbCk7CisKKyAgKmNoYW5uZWxwdHIgPSBjaGFubmVsOworICByZXR1cm4gQVJFU19TVUNDRVNTOworfQorCisvKiBhcmVzX2R1cCgpIGR1cGxpY2F0ZXMgYSBjaGFubmVsIGhhbmRsZSB3aXRoIGFsbCBpdHMgb3B0aW9ucyBhbmQgcmV0dXJucyBhCisgICBuZXcgY2hhbm5lbCBoYW5kbGUgKi8KK2ludCBhcmVzX2R1cChhcmVzX2NoYW5uZWwgKmRlc3QsIGFyZXNfY2hhbm5lbCBzcmMpCit7CisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0czsKKyAgc3RydWN0IGFyZXNfYWRkcl9wb3J0X25vZGUgKnNlcnZlcnM7CisgIGludCBub25fdjRfZGVmYXVsdF9wb3J0ID0gMDsKKyAgaW50IGksIHJjOworICBpbnQgb3B0bWFzazsKKworICAqZGVzdCA9IE5VTEw7IC8qIGluIGNhc2Ugb2YgZmFpbHVyZSByZXR1cm4gTlVMTCBleHBsaWNpdGx5ICovCisKKyAgLyogRmlyc3QgZ2V0IHRoZSBvcHRpb25zIHN1cHBvcnRlZCBieSB0aGUgb2xkIGFyZXNfc2F2ZV9vcHRpb25zKCkgZnVuY3Rpb24sCisgICAgIHdoaWNoIGlzIG1vc3Qgb2YgdGhlbSAqLworICByYyA9IGFyZXNfc2F2ZV9vcHRpb25zKHNyYywgJm9wdHMsICZvcHRtYXNrKTsKKyAgaWYocmMpCisgIHsKKyAgICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0cyk7CisgICAgcmV0dXJuIHJjOworICB9CisKKyAgLyogVGhlbiBjcmVhdGUgdGhlIG5ldyBjaGFubmVsIHdpdGggdGhvc2Ugb3B0aW9ucyAqLworICByYyA9IGFyZXNfaW5pdF9vcHRpb25zKGRlc3QsICZvcHRzLCBvcHRtYXNrLCBOVUxMKTsKKworICAvKiBkZXN0cm95IHRoZSBvcHRpb25zIGNvcHkgdG8gbm90IGxlYWsgYW55IG1lbW9yeSAqLworICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0cyk7CisKKyAgaWYocmMpCisgICAgcmV0dXJuIHJjOworCisgIC8qIE5vdyBjbG9uZSB0aGUgb3B0aW9ucyB0aGF0IGFyZXNfc2F2ZV9vcHRpb25zKCkgZG9lc24ndCBzdXBwb3J0LiAqLworICAoKmRlc3QpLT5zb2NrX2NyZWF0ZV9jYiAgICAgID0gc3JjLT5zb2NrX2NyZWF0ZV9jYjsKKyAgKCpkZXN0KS0+c29ja19jcmVhdGVfY2JfZGF0YSA9IHNyYy0+c29ja19jcmVhdGVfY2JfZGF0YTsKKyAgKCpkZXN0KS0+c29ja19jb25maWdfY2IgICAgICA9IHNyYy0+c29ja19jb25maWdfY2I7CisgICgqZGVzdCktPnNvY2tfY29uZmlnX2NiX2RhdGEgPSBzcmMtPnNvY2tfY29uZmlnX2NiX2RhdGE7CisKKyAgc3RybmNweSgoKmRlc3QpLT5sb2NhbF9kZXZfbmFtZSwgc3JjLT5sb2NhbF9kZXZfbmFtZSwKKyAgICAgICAgICBzaXplb2Yoc3JjLT5sb2NhbF9kZXZfbmFtZSkpOworICAoKmRlc3QpLT5sb2NhbF9pcDQgPSBzcmMtPmxvY2FsX2lwNDsKKyAgbWVtY3B5KCgqZGVzdCktPmxvY2FsX2lwNiwgc3JjLT5sb2NhbF9pcDYsIHNpemVvZihzcmMtPmxvY2FsX2lwNikpOworCisgIC8qIEZ1bGwgbmFtZSBzZXJ2ZXIgY2xvbmluZyByZXF1aXJlZCBpZiB0aGVyZSBpcyBhIG5vbi1JUHY0LCBvciBub24tZGVmYXVsdCBwb3J0LCBuYW1lc2VydmVyICovCisgIGZvciAoaSA9IDA7IGkgPCBzcmMtPm5zZXJ2ZXJzOyBpKyspCisgICAgeworICAgICAgaWYgKChzcmMtPnNlcnZlcnNbaV0uYWRkci5mYW1pbHkgIT0gQUZfSU5FVCkgfHwKKyAgICAgICAgICAoc3JjLT5zZXJ2ZXJzW2ldLmFkZHIudWRwX3BvcnQgIT0gMCkgfHwKKyAgICAgICAgICAoc3JjLT5zZXJ2ZXJzW2ldLmFkZHIudGNwX3BvcnQgIT0gMCkpIHsKKyAgICAgICAgbm9uX3Y0X2RlZmF1bHRfcG9ydCsrOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIGlmIChub25fdjRfZGVmYXVsdF9wb3J0KSB7CisgICAgcmMgPSBhcmVzX2dldF9zZXJ2ZXJzX3BvcnRzKHNyYywgJnNlcnZlcnMpOworICAgIGlmIChyYyAhPSBBUkVTX1NVQ0NFU1MpIHsKKyAgICAgIGFyZXNfZGVzdHJveSgqZGVzdCk7CisgICAgICAqZGVzdCA9IE5VTEw7CisgICAgICByZXR1cm4gcmM7CisgICAgfQorICAgIHJjID0gYXJlc19zZXRfc2VydmVyc19wb3J0cygqZGVzdCwgc2VydmVycyk7CisgICAgYXJlc19mcmVlX2RhdGEoc2VydmVycyk7CisgICAgaWYgKHJjICE9IEFSRVNfU1VDQ0VTUykgeworICAgICAgYXJlc19kZXN0cm95KCpkZXN0KTsKKyAgICAgICpkZXN0ID0gTlVMTDsKKyAgICAgIHJldHVybiByYzsKKyAgICB9CisgIH0KKworICByZXR1cm4gQVJFU19TVUNDRVNTOyAvKiBldmVyeXRoaW5nIHdlbnQgZmluZSAqLworfQorCisvKiBTYXZlIG9wdGlvbnMgZnJvbSBpbml0aWFsaXplZCBjaGFubmVsICovCitpbnQgYXJlc19zYXZlX29wdGlvbnMoYXJlc19jaGFubmVsIGNoYW5uZWwsIHN0cnVjdCBhcmVzX29wdGlvbnMgKm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpvcHRtYXNrKQoreworICBpbnQgaSwgajsKKyAgaW50IGlwdjRfbnNlcnZlcnMgPSAwOworCisgIC8qIFplcm8gZXZlcnl0aGluZyBvdXQgKi8KKyAgbWVtc2V0KG9wdGlvbnMsIDAsIHNpemVvZihzdHJ1Y3QgYXJlc19vcHRpb25zKSk7CisKKyAgaWYgKCFBUkVTX0NPTkZJR19DSEVDSyhjaGFubmVsKSkKKyAgICByZXR1cm4gQVJFU19FTk9EQVRBOworCisgIC8qIFRyYWRpdGlvbmFsbHkgdGhlIG9wdG1hc2sgd2Fzbid0IHNhdmVkIGluIHRoZSBjaGFubmVsIHN0cnVjdCBzbyBpdCB3YXMKKyAgICAgcmVjcmVhdGVkIGhlcmUuIFJPVEFURSBpcyB0aGUgZmlyc3Qgb3B0aW9uIHRoYXQgaGFzIG5vIHN0cnVjdCBmaWVsZCBvZgorICAgICBpdHMgb3duIGluIHRoZSBwdWJsaWMgY29uZmlnIHN0cnVjdCAqLworICAoKm9wdG1hc2spID0gKEFSRVNfT1BUX0ZMQUdTfEFSRVNfT1BUX1RSSUVTfEFSRVNfT1BUX05ET1RTfAorICAgICAgICAgICAgICAgIEFSRVNfT1BUX1VEUF9QT1JUfEFSRVNfT1BUX1RDUF9QT1JUfEFSRVNfT1BUX1NPQ0tfU1RBVEVfQ0J8CisgICAgICAgICAgICAgICAgQVJFU19PUFRfU0VSVkVSU3xBUkVTX09QVF9ET01BSU5TfEFSRVNfT1BUX0xPT0tVUFN8CisgICAgICAgICAgICAgICAgQVJFU19PUFRfU09SVExJU1R8QVJFU19PUFRfVElNRU9VVE1TKTsKKyAgKCpvcHRtYXNrKSB8PSAoY2hhbm5lbC0+cm90YXRlID8gQVJFU19PUFRfUk9UQVRFIDogQVJFU19PUFRfTk9ST1RBVEUpOworCisgIC8qIENvcHkgZWFzeSBzdHVmZiAqLworICBvcHRpb25zLT5mbGFncyAgID0gY2hhbm5lbC0+ZmxhZ3M7CisKKyAgLyogV2UgcmV0dXJuIGZ1bGwgbWlsbGlzZWNvbmQgcmVzb2x1dGlvbiBidXQgdGhhdCdzIG9ubHkgYmVjYXVzZSB3ZSBkb24ndAorICAgICBzZXQgdGhlIEFSRVNfT1BUX1RJTUVPVVQgYW55bW9yZSwgb25seSB0aGUgbmV3IEFSRVNfT1BUX1RJTUVPVVRNUyAqLworICBvcHRpb25zLT50aW1lb3V0ID0gY2hhbm5lbC0+dGltZW91dDsKKyAgb3B0aW9ucy0+dHJpZXMgICA9IGNoYW5uZWwtPnRyaWVzOworICBvcHRpb25zLT5uZG90cyAgID0gY2hhbm5lbC0+bmRvdHM7CisgIG9wdGlvbnMtPnVkcF9wb3J0ID0gbnRvaHMoYXJlc3hfc2l0b3VzKGNoYW5uZWwtPnVkcF9wb3J0KSk7CisgIG9wdGlvbnMtPnRjcF9wb3J0ID0gbnRvaHMoYXJlc3hfc2l0b3VzKGNoYW5uZWwtPnRjcF9wb3J0KSk7CisgIG9wdGlvbnMtPnNvY2tfc3RhdGVfY2IgICAgID0gY2hhbm5lbC0+c29ja19zdGF0ZV9jYjsKKyAgb3B0aW9ucy0+c29ja19zdGF0ZV9jYl9kYXRhID0gY2hhbm5lbC0+c29ja19zdGF0ZV9jYl9kYXRhOworCisgIC8qIENvcHkgSVB2NCBzZXJ2ZXJzIHRoYXQgdXNlIHRoZSBkZWZhdWx0IHBvcnQgKi8KKyAgaWYgKGNoYW5uZWwtPm5zZXJ2ZXJzKSB7CisgICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5zZXJ2ZXJzOyBpKyspCisgICAgeworICAgICAgaWYgKChjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuZmFtaWx5ID09IEFGX0lORVQpICYmCisgICAgICAgICAgKGNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci51ZHBfcG9ydCA9PSAwKSAmJgorICAgICAgICAgIChjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIudGNwX3BvcnQgPT0gMCkpCisgICAgICAgIGlwdjRfbnNlcnZlcnMrKzsKKyAgICB9CisgICAgaWYgKGlwdjRfbnNlcnZlcnMpIHsKKyAgICAgIG9wdGlvbnMtPnNlcnZlcnMgPSBhcmVzX21hbGxvYyhpcHY0X25zZXJ2ZXJzICogc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisgICAgICBpZiAoIW9wdGlvbnMtPnNlcnZlcnMpCisgICAgICAgIHJldHVybiBBUkVTX0VOT01FTTsKKyAgICAgIGZvciAoaSA9IGogPSAwOyBpIDwgY2hhbm5lbC0+bnNlcnZlcnM7IGkrKykKKyAgICAgIHsKKyAgICAgICAgaWYgKChjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuZmFtaWx5ID09IEFGX0lORVQpICYmCisgICAgICAgICAgICAoY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLnVkcF9wb3J0ID09IDApICYmCisgICAgICAgICAgICAoY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLnRjcF9wb3J0ID09IDApKQorICAgICAgICAgIG1lbWNweSgmb3B0aW9ucy0+c2VydmVyc1tqKytdLAorICAgICAgICAgICAgICAgICAmY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLmFkZHJWNCwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKGNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci5hZGRyVjQpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgb3B0aW9ucy0+bnNlcnZlcnMgPSBpcHY0X25zZXJ2ZXJzOworCisgIC8qIGNvcHkgZG9tYWlucyAqLworICBpZiAoY2hhbm5lbC0+bmRvbWFpbnMpIHsKKyAgICBvcHRpb25zLT5kb21haW5zID0gYXJlc19tYWxsb2MoY2hhbm5lbC0+bmRvbWFpbnMgKiBzaXplb2YoY2hhciAqKSk7CisgICAgaWYgKCFvcHRpb25zLT5kb21haW5zKQorICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworCisgICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5kb21haW5zOyBpKyspCisgICAgeworICAgICAgb3B0aW9ucy0+bmRvbWFpbnMgPSBpOworICAgICAgb3B0aW9ucy0+ZG9tYWluc1tpXSA9IGFyZXNfc3RyZHVwKGNoYW5uZWwtPmRvbWFpbnNbaV0pOworICAgICAgaWYgKCFvcHRpb25zLT5kb21haW5zW2ldKQorICAgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgfQorICB9CisgIG9wdGlvbnMtPm5kb21haW5zID0gY2hhbm5lbC0+bmRvbWFpbnM7CisKKyAgLyogY29weSBsb29rdXBzICovCisgIGlmIChjaGFubmVsLT5sb29rdXBzKSB7CisgICAgb3B0aW9ucy0+bG9va3VwcyA9IGFyZXNfc3RyZHVwKGNoYW5uZWwtPmxvb2t1cHMpOworICAgIGlmICghb3B0aW9ucy0+bG9va3VwcyAmJiBjaGFubmVsLT5sb29rdXBzKQorICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICB9CisKKyAgLyogY29weSBzb3J0bGlzdCAqLworICBpZiAoY2hhbm5lbC0+bnNvcnQpIHsKKyAgICBvcHRpb25zLT5zb3J0bGlzdCA9IGFyZXNfbWFsbG9jKGNoYW5uZWwtPm5zb3J0ICogc2l6ZW9mKHN0cnVjdCBhcGF0dGVybikpOworICAgIGlmICghb3B0aW9ucy0+c29ydGxpc3QpCisgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5zb3J0OyBpKyspCisgICAgICBvcHRpb25zLT5zb3J0bGlzdFtpXSA9IGNoYW5uZWwtPnNvcnRsaXN0W2ldOworICB9CisgIG9wdGlvbnMtPm5zb3J0ID0gY2hhbm5lbC0+bnNvcnQ7CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBpbml0X2J5X29wdGlvbnMoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJlc19vcHRpb25zICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdG1hc2spCit7CisgIGludCBpOworCisgIC8qIEVhc3kgc3R1ZmYuICovCisgIGlmICgob3B0bWFzayAmIEFSRVNfT1BUX0ZMQUdTKSAmJiBjaGFubmVsLT5mbGFncyA9PSAtMSkKKyAgICBjaGFubmVsLT5mbGFncyA9IG9wdGlvbnMtPmZsYWdzOworICBpZiAoKG9wdG1hc2sgJiBBUkVTX09QVF9USU1FT1VUTVMpICYmIGNoYW5uZWwtPnRpbWVvdXQgPT0gLTEpCisgICAgY2hhbm5lbC0+dGltZW91dCA9IG9wdGlvbnMtPnRpbWVvdXQ7CisgIGVsc2UgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfVElNRU9VVCkgJiYgY2hhbm5lbC0+dGltZW91dCA9PSAtMSkKKyAgICBjaGFubmVsLT50aW1lb3V0ID0gb3B0aW9ucy0+dGltZW91dCAqIDEwMDA7CisgIGlmICgob3B0bWFzayAmIEFSRVNfT1BUX1RSSUVTKSAmJiBjaGFubmVsLT50cmllcyA9PSAtMSkKKyAgICBjaGFubmVsLT50cmllcyA9IG9wdGlvbnMtPnRyaWVzOworICBpZiAoKG9wdG1hc2sgJiBBUkVTX09QVF9ORE9UUykgJiYgY2hhbm5lbC0+bmRvdHMgPT0gLTEpCisgICAgY2hhbm5lbC0+bmRvdHMgPSBvcHRpb25zLT5uZG90czsKKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfUk9UQVRFKSAmJiBjaGFubmVsLT5yb3RhdGUgPT0gLTEpCisgICAgY2hhbm5lbC0+cm90YXRlID0gMTsKKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfTk9ST1RBVEUpICYmIGNoYW5uZWwtPnJvdGF0ZSA9PSAtMSkKKyAgICBjaGFubmVsLT5yb3RhdGUgPSAwOworICBpZiAoKG9wdG1hc2sgJiBBUkVTX09QVF9VRFBfUE9SVCkgJiYgY2hhbm5lbC0+dWRwX3BvcnQgPT0gLTEpCisgICAgY2hhbm5lbC0+dWRwX3BvcnQgPSBodG9ucyhvcHRpb25zLT51ZHBfcG9ydCk7CisgIGlmICgob3B0bWFzayAmIEFSRVNfT1BUX1RDUF9QT1JUKSAmJiBjaGFubmVsLT50Y3BfcG9ydCA9PSAtMSkKKyAgICBjaGFubmVsLT50Y3BfcG9ydCA9IGh0b25zKG9wdGlvbnMtPnRjcF9wb3J0KTsKKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfU09DS19TVEFURV9DQikgJiYgY2hhbm5lbC0+c29ja19zdGF0ZV9jYiA9PSBOVUxMKQorICAgIHsKKyAgICAgIGNoYW5uZWwtPnNvY2tfc3RhdGVfY2IgPSBvcHRpb25zLT5zb2NrX3N0YXRlX2NiOworICAgICAgY2hhbm5lbC0+c29ja19zdGF0ZV9jYl9kYXRhID0gb3B0aW9ucy0+c29ja19zdGF0ZV9jYl9kYXRhOworICAgIH0KKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfU09DS19TTkRCVUYpCisgICAgICAmJiBjaGFubmVsLT5zb2NrZXRfc2VuZF9idWZmZXJfc2l6ZSA9PSAtMSkKKyAgICBjaGFubmVsLT5zb2NrZXRfc2VuZF9idWZmZXJfc2l6ZSA9IG9wdGlvbnMtPnNvY2tldF9zZW5kX2J1ZmZlcl9zaXplOworICBpZiAoKG9wdG1hc2sgJiBBUkVTX09QVF9TT0NLX1JDVkJVRikKKyAgICAgICYmIGNoYW5uZWwtPnNvY2tldF9yZWNlaXZlX2J1ZmZlcl9zaXplID09IC0xKQorICAgIGNoYW5uZWwtPnNvY2tldF9yZWNlaXZlX2J1ZmZlcl9zaXplID0gb3B0aW9ucy0+c29ja2V0X3JlY2VpdmVfYnVmZmVyX3NpemU7CisKKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfRUROU1BTWikgJiYgY2hhbm5lbC0+ZWRuc3BzeiA9PSAtMSkKKyAgICBjaGFubmVsLT5lZG5zcHN6ID0gb3B0aW9ucy0+ZWRuc3BzejsKKworICAvKiBDb3B5IHRoZSBJUHY0IHNlcnZlcnMsIGlmIGdpdmVuLiAqLworICBpZiAoKG9wdG1hc2sgJiBBUkVTX09QVF9TRVJWRVJTKSAmJiBjaGFubmVsLT5uc2VydmVycyA9PSAtMSkKKyAgICB7CisgICAgICAvKiBBdm9pZCB6ZXJvIHNpemUgYWxsb2NhdGlvbnMgYXQgYW55IGNvc3QgKi8KKyAgICAgIGlmIChvcHRpb25zLT5uc2VydmVycyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBjaGFubmVsLT5zZXJ2ZXJzID0KKyAgICAgICAgICAgIGFyZXNfbWFsbG9jKG9wdGlvbnMtPm5zZXJ2ZXJzICogc2l6ZW9mKHN0cnVjdCBzZXJ2ZXJfc3RhdGUpKTsKKyAgICAgICAgICBpZiAoIWNoYW5uZWwtPnNlcnZlcnMpCisgICAgICAgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9wdGlvbnMtPm5zZXJ2ZXJzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci5mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgICAgICBjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIudWRwX3BvcnQgPSAwOworICAgICAgICAgICAgICBjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIudGNwX3BvcnQgPSAwOworICAgICAgICAgICAgICBtZW1jcHkoJmNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci5hZGRyVjQsCisgICAgICAgICAgICAgICAgICAgICAmb3B0aW9ucy0+c2VydmVyc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuYWRkclY0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGNoYW5uZWwtPm5zZXJ2ZXJzID0gb3B0aW9ucy0+bnNlcnZlcnM7CisgICAgfQorCisgIC8qIENvcHkgdGhlIGRvbWFpbnMsIGlmIGdpdmVuLiAgS2VlcCBjaGFubmVsLT5uZG9tYWlucyBjb25zaXN0ZW50IHNvCisgICAqIHdlIGNhbiBjbGVhbiB1cCBpbiBjYXNlIG9mIGVycm9yLgorICAgKi8KKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfRE9NQUlOUykgJiYgY2hhbm5lbC0+bmRvbWFpbnMgPT0gLTEpCisgICAgeworICAgICAgLyogQXZvaWQgemVybyBzaXplIGFsbG9jYXRpb25zIGF0IGFueSBjb3N0ICovCisgICAgICBpZiAob3B0aW9ucy0+bmRvbWFpbnMgPiAwKQorICAgICAgeworICAgICAgICBjaGFubmVsLT5kb21haW5zID0gYXJlc19tYWxsb2Mob3B0aW9ucy0+bmRvbWFpbnMgKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgIGlmICghY2hhbm5lbC0+ZG9tYWlucykKKyAgICAgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLT5uZG9tYWluczsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYW5uZWwtPm5kb21haW5zID0gaTsKKyAgICAgICAgICAgIGNoYW5uZWwtPmRvbWFpbnNbaV0gPSBhcmVzX3N0cmR1cChvcHRpb25zLT5kb21haW5zW2ldKTsKKyAgICAgICAgICAgIGlmICghY2hhbm5lbC0+ZG9tYWluc1tpXSkKKyAgICAgICAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGNoYW5uZWwtPm5kb21haW5zID0gb3B0aW9ucy0+bmRvbWFpbnM7CisgICAgfQorCisgIC8qIFNldCBsb29rdXBzLCBpZiBnaXZlbi4gKi8KKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfTE9PS1VQUykgJiYgIWNoYW5uZWwtPmxvb2t1cHMpCisgICAgeworICAgICAgY2hhbm5lbC0+bG9va3VwcyA9IGFyZXNfc3RyZHVwKG9wdGlvbnMtPmxvb2t1cHMpOworICAgICAgaWYgKCFjaGFubmVsLT5sb29rdXBzKQorICAgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgfQorCisgIC8qIGNvcHkgc29ydGxpc3QgKi8KKyAgaWYgKChvcHRtYXNrICYgQVJFU19PUFRfU09SVExJU1QpICYmIChjaGFubmVsLT5uc29ydCA9PSAtMSkpIHsKKyAgICBpZiAob3B0aW9ucy0+bnNvcnQgPiAwKSB7CisgICAgICBjaGFubmVsLT5zb3J0bGlzdCA9IGFyZXNfbWFsbG9jKG9wdGlvbnMtPm5zb3J0ICogc2l6ZW9mKHN0cnVjdCBhcGF0dGVybikpOworICAgICAgaWYgKCFjaGFubmVsLT5zb3J0bGlzdCkKKyAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgZm9yIChpID0gMDsgaSA8IG9wdGlvbnMtPm5zb3J0OyBpKyspCisgICAgICAgIGNoYW5uZWwtPnNvcnRsaXN0W2ldID0gb3B0aW9ucy0+c29ydGxpc3RbaV07CisgICAgfQorICAgIGNoYW5uZWwtPm5zb3J0ID0gb3B0aW9ucy0+bnNvcnQ7CisgIH0KKworICBjaGFubmVsLT5vcHRtYXNrID0gb3B0bWFzazsKKworICByZXR1cm4gQVJFU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IGluaXRfYnlfZW52aXJvbm1lbnQoYXJlc19jaGFubmVsIGNoYW5uZWwpCit7CisgIGNvbnN0IGNoYXIgKmxvY2FsZG9tYWluLCAqcmVzX29wdGlvbnM7CisgIGludCBzdGF0dXM7CisKKyAgbG9jYWxkb21haW4gPSBnZXRlbnYoIkxPQ0FMRE9NQUlOIik7CisgIGlmIChsb2NhbGRvbWFpbiAmJiBjaGFubmVsLT5uZG9tYWlucyA9PSAtMSkKKyAgICB7CisgICAgICBzdGF0dXMgPSBzZXRfc2VhcmNoKGNoYW5uZWwsIGxvY2FsZG9tYWluKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICByZXNfb3B0aW9ucyA9IGdldGVudigiUkVTX09QVElPTlMiKTsKKyAgaWYgKHJlc19vcHRpb25zKQorICAgIHsKKyAgICAgIHN0YXR1cyA9IHNldF9vcHRpb25zKGNoYW5uZWwsIHJlc19vcHRpb25zKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOyAgLyogTENPVl9FWENMX0xJTkU6IHNldF9vcHRpb25zKCkgbmV2ZXIgZmFpbHMgKi8KKyAgICB9CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworI2lmZGVmIFdJTjMyCisvKgorICogZ2V0X1JFR19TWigpCisgKgorICogR2l2ZW4gYSAnaEtleScgaGFuZGxlIHRvIGFuIG9wZW4gcmVnaXN0cnkga2V5IGFuZCBhICdsZWFmS2V5TmFtZScgcG9pbnRlcgorICogdG8gdGhlIG5hbWUgb2YgdGhlIHJlZ2lzdHJ5IGxlYWYga2V5IHRvIGJlIHF1ZXJpZWQsIGZldGNoIGl0J3Mgc3RyaW5nCisgKiB2YWx1ZSBhbmQgcmV0dXJuIGEgcG9pbnRlciBpbiAqb3V0cHRyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhCisgKiBob2xkaW5nIGl0IGFzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIDAgYW5kIG51bGxpZmllcyAqb3V0cHRyIHVwb24gaW5hYmlsaXR5IHRvIHJldHVybiBhIHN0cmluZyB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zIDEgYW5kIHNldHMgKm91dHB0ciB3aGVuIHJldHVybmluZyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcuCisgKgorICogU3VwcG9ydGVkIG9uIFdpbmRvd3MgTlQgMy41IGFuZCBuZXdlci4KKyAqLworc3RhdGljIGludCBnZXRfUkVHX1NaKEhLRVkgaEtleSwgY29uc3QgY2hhciAqbGVhZktleU5hbWUsIGNoYXIgKipvdXRwdHIpCit7CisgIERXT1JEIHNpemUgPSAwOworICBpbnQgICByZXM7CisKKyAgKm91dHB0ciA9IE5VTEw7CisKKyAgLyogRmluZCBvdXQgc2l6ZSBvZiBzdHJpbmcgc3RvcmVkIGluIHJlZ2lzdHJ5ICovCisgIHJlcyA9IFJlZ1F1ZXJ5VmFsdWVFeChoS2V5LCBsZWFmS2V5TmFtZSwgMCwgTlVMTCwgTlVMTCwgJnNpemUpOworICBpZiAoKHJlcyAhPSBFUlJPUl9TVUNDRVNTICYmIHJlcyAhPSBFUlJPUl9NT1JFX0RBVEEpIHx8ICFzaXplKQorICAgIHJldHVybiAwOworCisgIC8qIEFsbG9jYXRlIGJ1ZmZlciBvZiBpbmRpY2F0ZWQgc2l6ZSBwbHVzIG9uZSBnaXZlbiB0aGF0IHN0cmluZworICAgICBtaWdodCBoYXZlIGJlZW4gc3RvcmVkIHdpdGhvdXQgbnVsbCB0ZXJtaW5hdGlvbiAqLworICAqb3V0cHRyID0gYXJlc19tYWxsb2Moc2l6ZSsxKTsKKyAgaWYgKCEqb3V0cHRyKQorICAgIHJldHVybiAwOworCisgIC8qIEdldCB0aGUgdmFsdWUgZm9yIHJlYWwgKi8KKyAgcmVzID0gUmVnUXVlcnlWYWx1ZUV4KGhLZXksIGxlYWZLZXlOYW1lLCAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikqb3V0cHRyLCAmc2l6ZSk7CisgIGlmICgocmVzICE9IEVSUk9SX1NVQ0NFU1MpIHx8IChzaXplID09IDEpKQorICB7CisgICAgYXJlc19mcmVlKCpvdXRwdHIpOworICAgICpvdXRwdHIgPSBOVUxMOworICAgIHJldHVybiAwOworICB9CisKKyAgLyogTnVsbCB0ZXJtaW5hdGUgYnVmZmVyIGFsbHdheXMgKi8KKyAgKigqb3V0cHRyICsgc2l6ZSkgPSAnXDAnOworCisgIHJldHVybiAxOworfQorCisvKgorICogZ2V0X1JFR19TWl85WCgpCisgKgorICogRnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBnZXRfUkVHX1NaKCkKKyAqCisgKiBTdXBwb3J0ZWQgb24gV2luZG93cyA5NSwgOTggYW5kIE1FLgorICovCitzdGF0aWMgaW50IGdldF9SRUdfU1pfOVgoSEtFWSBoS2V5LCBjb25zdCBjaGFyICpsZWFmS2V5TmFtZSwgY2hhciAqKm91dHB0cikKK3sKKyAgRFdPUkQgZGF0YVR5cGUgPSAwOworICBEV09SRCBzaXplID0gMDsKKyAgaW50ICAgcmVzOworCisgICpvdXRwdHIgPSBOVUxMOworCisgIC8qIEZpbmQgb3V0IHNpemUgb2Ygc3RyaW5nIHN0b3JlZCBpbiByZWdpc3RyeSAqLworICByZXMgPSBSZWdRdWVyeVZhbHVlRXgoaEtleSwgbGVhZktleU5hbWUsIDAsICZkYXRhVHlwZSwgTlVMTCwgJnNpemUpOworICBpZiAoKHJlcyAhPSBFUlJPUl9TVUNDRVNTICYmIHJlcyAhPSBFUlJPUl9NT1JFX0RBVEEpIHx8ICFzaXplKQorICAgIHJldHVybiAwOworCisgIC8qIEFsbG9jYXRlIGJ1ZmZlciBvZiBpbmRpY2F0ZWQgc2l6ZSBwbHVzIG9uZSBnaXZlbiB0aGF0IHN0cmluZworICAgICBtaWdodCBoYXZlIGJlZW4gc3RvcmVkIHdpdGhvdXQgbnVsbCB0ZXJtaW5hdGlvbiAqLworICAqb3V0cHRyID0gYXJlc19tYWxsb2Moc2l6ZSsxKTsKKyAgaWYgKCEqb3V0cHRyKQorICAgIHJldHVybiAwOworCisgIC8qIEdldCB0aGUgdmFsdWUgZm9yIHJlYWwgKi8KKyAgcmVzID0gUmVnUXVlcnlWYWx1ZUV4KGhLZXksIGxlYWZLZXlOYW1lLCAwLCAmZGF0YVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSpvdXRwdHIsICZzaXplKTsKKyAgaWYgKChyZXMgIT0gRVJST1JfU1VDQ0VTUykgfHwgKHNpemUgPT0gMSkpCisgIHsKKyAgICBhcmVzX2ZyZWUoKm91dHB0cik7CisgICAgKm91dHB0ciA9IE5VTEw7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBOdWxsIHRlcm1pbmF0ZSBidWZmZXIgYWxsd2F5cyAqLworICAqKCpvdXRwdHIgKyBzaXplKSA9ICdcMCc7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBnZXRfZW51bV9SRUdfU1ooKQorICoKKyAqIEdpdmVuIGEgJ2hLZXlQYXJlbnQnIGhhbmRsZSB0byBhbiBvcGVuIHJlZ2lzdHJ5IGtleSBhbmQgYSAnbGVhZktleU5hbWUnCisgKiBwb2ludGVyIHRvIHRoZSBuYW1lIG9mIHRoZSByZWdpc3RyeSBsZWFmIGtleSB0byBiZSBxdWVyaWVkLCBwYXJlbnQga2V5CisgKiBpcyBlbnVtZXJhdGVkIHNlYXJjaGluZyBpbiBjaGlsZCBrZXlzIGZvciBnaXZlbiBsZWFmIGtleSBuYW1lIGFuZCBpdHMKKyAqIGFzc29jaWF0ZWQgc3RyaW5nIHZhbHVlLiBXaGVuIGxvY2F0ZWQsIHRoaXMgcmV0dXJucyBhIHBvaW50ZXIgaW4gKm91dHB0cgorICogdG8gYSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGFyZWEgaG9sZGluZyBpdCBhcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisgKgorICogUmV0dXJucyAwIGFuZCBudWxsaWZpZXMgKm91dHB0ciB1cG9uIGluYWJpbGl0eSB0byByZXR1cm4gYSBzdHJpbmcgdmFsdWUuCisgKgorICogUmV0dXJucyAxIGFuZCBzZXRzICpvdXRwdHIgd2hlbiByZXR1cm5pbmcgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLgorICoKKyAqIFN1cHBvcnRlZCBvbiBXaW5kb3dzIE5UIDMuNSBhbmQgbmV3ZXIuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2VudW1fUkVHX1NaKEhLRVkgaEtleVBhcmVudCwgY29uc3QgY2hhciAqbGVhZktleU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyKQoreworICBjaGFyICBlbnVtS2V5TmFtZVsyNTZdOworICBEV09SRCBlbnVtS2V5TmFtZUJ1ZmZTaXplOworICBEV09SRCBlbnVtS2V5SWR4ID0gMDsKKyAgSEtFWSAgaEtleUVudW07CisgIGludCAgIGdvdFN0cmluZzsKKyAgaW50ICAgcmVzOworCisgICpvdXRwdHIgPSBOVUxMOworCisgIGZvcig7OykKKyAgeworICAgIGVudW1LZXlOYW1lQnVmZlNpemUgPSBzaXplb2YoZW51bUtleU5hbWUpOworICAgIHJlcyA9IFJlZ0VudW1LZXlFeChoS2V5UGFyZW50LCBlbnVtS2V5SWR4KyssIGVudW1LZXlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAmZW51bUtleU5hbWVCdWZmU2l6ZSwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgYnJlYWs7CisgICAgcmVzID0gUmVnT3BlbktleUV4KGhLZXlQYXJlbnQsIGVudW1LZXlOYW1lLCAwLCBLRVlfUVVFUllfVkFMVUUsCisgICAgICAgICAgICAgICAgICAgICAgICZoS2V5RW51bSk7CisgICAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgY29udGludWU7CisgICAgZ290U3RyaW5nID0gZ2V0X1JFR19TWihoS2V5RW51bSwgbGVhZktleU5hbWUsIG91dHB0cik7CisgICAgUmVnQ2xvc2VLZXkoaEtleUVudW0pOworICAgIGlmIChnb3RTdHJpbmcpCisgICAgICBicmVhazsKKyAgfQorCisgIGlmICghKm91dHB0cikKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworLyoKKyAqIGdldF9ETlNfUmVnaXN0cnlfOVgoKQorICoKKyAqIEZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gZ2V0X0ROU19SZWdpc3RyeSgpCisgKgorICogSW1wbGVtZW50YXRpb24gc3VwcG9ydHMgV2luZG93cyA5NSwgOTggYW5kIE1FLgorICovCitzdGF0aWMgaW50IGdldF9ETlNfUmVnaXN0cnlfOVgoY2hhciAqKm91dHB0cikKK3sKKyAgSEtFWSBoS2V5X1Z4RF9NU3RjcDsKKyAgaW50ICBnb3RTdHJpbmc7CisgIGludCAgcmVzOworCisgICpvdXRwdHIgPSBOVUxMOworCisgIHJlcyA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFdJTl9OU185WCwgMCwgS0VZX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAmaEtleV9WeERfTVN0Y3ApOworICBpZiAocmVzICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgcmV0dXJuIDA7CisKKyAgZ290U3RyaW5nID0gZ2V0X1JFR19TWl85WChoS2V5X1Z4RF9NU3RjcCwgTkFNRVNFUlZFUiwgb3V0cHRyKTsKKyAgUmVnQ2xvc2VLZXkoaEtleV9WeERfTVN0Y3ApOworCisgIGlmICghZ290U3RyaW5nIHx8ICEqb3V0cHRyKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCisvKgorICogZ2V0X0ROU19SZWdpc3RyeV9OVCgpCisgKgorICogRnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBnZXRfRE5TX1JlZ2lzdHJ5KCkKKyAqCisgKiBSZWZzOiBNaWNyb3NvZnQgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZXMgS0IxMjA2NDIgYW5kIEtCMzE0MDUzLgorICoKKyAqIEltcGxlbWVudGF0aW9uIHN1cHBvcnRzIFdpbmRvd3MgTlQgMy41IGFuZCBuZXdlci4KKyAqLworc3RhdGljIGludCBnZXRfRE5TX1JlZ2lzdHJ5X05UKGNoYXIgKipvdXRwdHIpCit7CisgIEhLRVkgaEtleV9JbnRlcmZhY2VzID0gTlVMTDsKKyAgSEtFWSBoS2V5X1RjcGlwX1BhcmFtZXRlcnM7CisgIGludCAgZ290U3RyaW5nOworICBpbnQgIHJlczsKKworICAqb3V0cHRyID0gTlVMTDsKKworICByZXMgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBXSU5fTlNfTlRfS0VZLCAwLCBLRVlfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICZoS2V5X1RjcGlwX1BhcmFtZXRlcnMpOworICBpZiAocmVzICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgcmV0dXJuIDA7CisKKyAgLyoKKyAgKiogR2xvYmFsIEROUyBzZXR0aW5ncyBvdmVycmlkZSBhZGFwdGVyIHNwZWNpZmljIHBhcmFtZXRlcnMgd2hlbiBib3RoCisgICoqIGFyZSBzZXQuIEFkZGl0aW9uYWxseSBzdGF0aWMgRE5TIHNldHRpbmdzIG92ZXJyaWRlIERIQ1AtY29uZmlndXJlZAorICAqKiBwYXJhbWV0ZXJzIHdoZW4gYm90aCBhcmUgc2V0LgorICAqLworCisgIC8qIEdsb2JhbCBETlMgc3RhdGljIHBhcmFtZXRlcnMgKi8KKyAgZ290U3RyaW5nID0gZ2V0X1JFR19TWihoS2V5X1RjcGlwX1BhcmFtZXRlcnMsIE5BTUVTRVJWRVIsIG91dHB0cik7CisgIGlmIChnb3RTdHJpbmcpCisgICAgZ290byBkb25lOworCisgIC8qIEdsb2JhbCBETlMgREhDUC1jb25maWd1cmVkIHBhcmFtZXRlcnMgKi8KKyAgZ290U3RyaW5nID0gZ2V0X1JFR19TWihoS2V5X1RjcGlwX1BhcmFtZXRlcnMsIERIQ1BOQU1FU0VSVkVSLCBvdXRwdHIpOworICBpZiAoZ290U3RyaW5nKQorICAgIGdvdG8gZG9uZTsKKworICAvKiBUcnkgYWRhcHRlciBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisgIHJlcyA9IFJlZ09wZW5LZXlFeChoS2V5X1RjcGlwX1BhcmFtZXRlcnMsICJJbnRlcmZhY2VzIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgIEtFWV9RVUVSWV9WQUxVRSB8IEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsCisgICAgICAgICAgICAgICAgICAgICAmaEtleV9JbnRlcmZhY2VzKTsKKyAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKQorICB7CisgICAgaEtleV9JbnRlcmZhY2VzID0gTlVMTDsKKyAgICBnb3RvIGRvbmU7CisgIH0KKworICAvKiBBZGFwdGVyIHNwZWNpZmljIEROUyBzdGF0aWMgcGFyYW1ldGVycyAqLworICBnb3RTdHJpbmcgPSBnZXRfZW51bV9SRUdfU1ooaEtleV9JbnRlcmZhY2VzLCBOQU1FU0VSVkVSLCBvdXRwdHIpOworICBpZiAoZ290U3RyaW5nKQorICAgIGdvdG8gZG9uZTsKKworICAvKiBBZGFwdGVyIHNwZWNpZmljIEROUyBESENQLWNvbmZpZ3VyZWQgcGFyYW1ldGVycyAqLworICBnb3RTdHJpbmcgPSBnZXRfZW51bV9SRUdfU1ooaEtleV9JbnRlcmZhY2VzLCBESENQTkFNRVNFUlZFUiwgb3V0cHRyKTsKKworZG9uZToKKyAgaWYgKGhLZXlfSW50ZXJmYWNlcykKKyAgICBSZWdDbG9zZUtleShoS2V5X0ludGVyZmFjZXMpOworCisgIFJlZ0Nsb3NlS2V5KGhLZXlfVGNwaXBfUGFyYW1ldGVycyk7CisKKyAgaWYgKCFnb3RTdHJpbmcgfHwgISpvdXRwdHIpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBnZXRfRE5TX1JlZ2lzdHJ5KCkKKyAqCisgKiBMb2NhdGVzIEROUyBpbmZvIGluIHRoZSByZWdpc3RyeS4gV2hlbiBsb2NhdGVkLCB0aGlzIHJldHVybnMgYSBwb2ludGVyCisgKiBpbiAqb3V0cHRyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcgYSBudWxsLXRlcm1pbmF0ZWQKKyAqIHN0cmluZyB3aXRoIGEgc3BhY2Ugb3IgY29tbWEgc2VwZXJhdGVkIGxpc3Qgb2YgRE5TIElQIGFkZHJlc3Nlcy4KKyAqCisgKiBSZXR1cm5zIDAgYW5kIG51bGxpZmllcyAqb3V0cHRyIHVwb24gaW5hYmlsaXR5IHRvIHJldHVybiBETlNlcyBzdHJpbmcuCisgKgorICogUmV0dXJucyAxIGFuZCBzZXRzICpvdXRwdHIgd2hlbiByZXR1cm5pbmcgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLgorICovCitzdGF0aWMgaW50IGdldF9ETlNfUmVnaXN0cnkoY2hhciAqKm91dHB0cikKK3sKKyAgd2luX3BsYXRmb3JtIHBsYXRmb3JtOworICBpbnQgZ290U3RyaW5nID0gMDsKKworICAqb3V0cHRyID0gTlVMTDsKKworICBwbGF0Zm9ybSA9IGFyZXNfX2dldHBsYXRmb3JtKCk7CisKKyAgaWYgKHBsYXRmb3JtID09IFdJTl9OVCkKKyAgICBnb3RTdHJpbmcgPSBnZXRfRE5TX1JlZ2lzdHJ5X05UKG91dHB0cik7CisgIGVsc2UgaWYgKHBsYXRmb3JtID09IFdJTl85WCkKKyAgICBnb3RTdHJpbmcgPSBnZXRfRE5TX1JlZ2lzdHJ5XzlYKG91dHB0cik7CisKKyAgaWYgKCFnb3RTdHJpbmcpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBjb21tYWpvaW4oKQorICoKKyAqIFJURiBjb2RlLgorICovCitzdGF0aWMgdm9pZCBjb21tYWpvaW4oY2hhciAqKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworICBjaGFyICp0bXA7CisKKyAgaWYgKCpkc3QpCisgIHsKKyAgICB0bXAgPSBhcmVzX21hbGxvYyhzdHJsZW4oKmRzdCkgKyBzdHJsZW4oc3JjKSArIDIpOworICAgIGlmICghdG1wKQorICAgICAgcmV0dXJuOworICAgIHNwcmludGYodG1wLCAiJXMsJXMiLCAqZHN0LCBzcmMpOworICAgIGFyZXNfZnJlZSgqZHN0KTsKKyAgICAqZHN0ID0gdG1wOworICB9CisgIGVsc2UKKyAgeworICAgICpkc3QgPSBhcmVzX21hbGxvYyhzdHJsZW4oc3JjKSArIDEpOworICAgIGlmICghKmRzdCkKKyAgICAgIHJldHVybjsKKyAgICBzdHJjcHkoKmRzdCwgc3JjKTsKKyAgfQorfQorCisvKgorICogZ2V0X0ROU19OZXR3b3JrUGFyYW1zKCkKKyAqCisgKiBMb2NhdGVzIEROUyBpbmZvIHVzaW5nIEdldE5ldHdvcmtQYXJhbXMoKSBmdW5jdGlvbiBmcm9tIHRoZSBJbnRlcm5ldAorICogUHJvdG9jb2wgSGVscGVyIChJUCBIZWxwZXIpIEFQSS4gV2hlbiBsb2NhdGVkLCB0aGlzIHJldHVybnMgYSBwb2ludGVyCisgKiBpbiAqb3V0cHRyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcgYSBudWxsLXRlcm1pbmF0ZWQKKyAqIHN0cmluZyB3aXRoIGEgc3BhY2Ugb3IgY29tbWEgc2VwZXJhdGVkIGxpc3Qgb2YgRE5TIElQIGFkZHJlc3Nlcy4KKyAqCisgKiBSZXR1cm5zIDAgYW5kIG51bGxpZmllcyAqb3V0cHRyIHVwb24gaW5hYmlsaXR5IHRvIHJldHVybiBETlNlcyBzdHJpbmcuCisgKgorICogUmV0dXJucyAxIGFuZCBzZXRzICpvdXRwdHIgd2hlbiByZXR1cm5pbmcgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLgorICoKKyAqIEltcGxlbWVudGF0aW9uIHN1cHBvcnRzIFdpbmRvd3MgOTggYW5kIG5ld2VyLgorICoKKyAqIE5vdGU6IEFuY2llbnQgUFNESyByZXF1aXJlZCBpbiBvcmRlciB0byBidWlsZCBhIFc5OCB0YXJnZXQuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X0ROU19OZXR3b3JrUGFyYW1zKGNoYXIgKipvdXRwdHIpCit7CisgIEZJWEVEX0lORk8gICAgICAgKmZpLCAqbmV3Zmk7CisgIHN0cnVjdCBhcmVzX2FkZHIgbmFtZXNydnI7CisgIGNoYXIgICAgICAgICAgICAgKnR4dGFkZHI7CisgIElQX0FERFJfU1RSSU5HICAgKmlwQWRkcjsKKyAgaW50ICAgICAgICAgICAgICByZXM7CisgIERXT1JEICAgICAgICAgICAgc2l6ZSA9IHNpemVvZiAoKmZpKTsKKworICAqb3V0cHRyID0gTlVMTDsKKworICAvKiBWZXJpZnkgcnVuLXRpbWUgYXZhaWxhYmlsaXR5IG9mIEdldE5ldHdvcmtQYXJhbXMoKSAqLworICBpZiAoYXJlc19mcEdldE5ldHdvcmtQYXJhbXMgPT0gWkVST19OVUxMKQorICAgIHJldHVybiAwOworCisgIGZpID0gYXJlc19tYWxsb2Moc2l6ZSk7CisgIGlmICghZmkpCisgICAgcmV0dXJuIDA7CisKKyAgcmVzID0gKCphcmVzX2ZwR2V0TmV0d29ya1BhcmFtcykgKGZpLCAmc2l6ZSk7CisgIGlmICgocmVzICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKSkKKyAgICBnb3RvIGRvbmU7CisKKyAgbmV3ZmkgPSBhcmVzX3JlYWxsb2MoZmksIHNpemUpOworICBpZiAoIW5ld2ZpKQorICAgIGdvdG8gZG9uZTsKKworICBmaSA9IG5ld2ZpOworICByZXMgPSAoKmFyZXNfZnBHZXROZXR3b3JrUGFyYW1zKSAoZmksICZzaXplKTsKKyAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKQorICAgIGdvdG8gZG9uZTsKKworICBmb3IgKGlwQWRkciA9ICZmaS0+RG5zU2VydmVyTGlzdDsgaXBBZGRyOyBpcEFkZHIgPSBpcEFkZHItPk5leHQpCisgIHsKKyAgICB0eHRhZGRyID0gJmlwQWRkci0+SXBBZGRyZXNzLlN0cmluZ1swXTsKKworICAgIC8qIFZhbGlkYXRlIGNvbnZlcnRpbmcgdGV4dHVhbCBhZGRyZXNzIHRvIGJpbmFyeSBmb3JtYXQuICovCisgICAgaWYgKGFyZXNfaW5ldF9wdG9uKEFGX0lORVQsIHR4dGFkZHIsICZuYW1lc3J2ci5hZGRyVjQpID09IDEpCisgICAgeworICAgICAgaWYgKChuYW1lc3J2ci5hZGRyVjQuU191bi5TX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKKyAgICAgICAgICAobmFtZXNydnIuYWRkclY0LlNfdW4uU19hZGRyID09IElOQUREUl9OT05FKSkKKyAgICAgICAgY29udGludWU7CisgICAgfQorICAgIGVsc2UgaWYgKGFyZXNfaW5ldF9wdG9uKEFGX0lORVQ2LCB0eHRhZGRyLCAmbmFtZXNydnIuYWRkclY2KSA9PSAxKQorICAgIHsKKyAgICAgIGlmIChtZW1jbXAoJm5hbWVzcnZyLmFkZHJWNiwgJmFyZXNfaW42YWRkcl9hbnksCisgICAgICAgICAgICAgICAgIHNpemVvZihuYW1lc3J2ci5hZGRyVjYpKSA9PSAwKQorICAgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZWxzZQorICAgICAgY29udGludWU7CisKKyAgICBjb21tYWpvaW4ob3V0cHRyLCB0eHRhZGRyKTsKKworICAgIGlmICghKm91dHB0cikKKyAgICAgIGJyZWFrOworICB9CisKK2RvbmU6CisgIGlmIChmaSkKKyAgICBhcmVzX2ZyZWUoZmkpOworCisgIGlmICghKm91dHB0cikKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworLyoKKyAqIGdldF9ETlNfQWRhcHRlcnNBZGRyZXNzZXMoKQorICoKKyAqIExvY2F0ZXMgRE5TIGluZm8gdXNpbmcgR2V0QWRhcHRlcnNBZGRyZXNzZXMoKSBmdW5jdGlvbiBmcm9tIHRoZSBJbnRlcm5ldAorICogUHJvdG9jb2wgSGVscGVyIChJUCBIZWxwZXIpIEFQSS4gV2hlbiBsb2NhdGVkLCB0aGlzIHJldHVybnMgYSBwb2ludGVyCisgKiBpbiAqb3V0cHRyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcgYSBudWxsLXRlcm1pbmF0ZWQKKyAqIHN0cmluZyB3aXRoIGEgc3BhY2Ugb3IgY29tbWEgc2VwZXJhdGVkIGxpc3Qgb2YgRE5TIElQIGFkZHJlc3Nlcy4KKyAqCisgKiBSZXR1cm5zIDAgYW5kIG51bGxpZmllcyAqb3V0cHRyIHVwb24gaW5hYmlsaXR5IHRvIHJldHVybiBETlNlcyBzdHJpbmcuCisgKgorICogUmV0dXJucyAxIGFuZCBzZXRzICpvdXRwdHIgd2hlbiByZXR1cm5pbmcgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLgorICoKKyAqIEltcGxlbWVudGF0aW9uIHN1cHBvcnRzIFdpbmRvd3MgWFAgYW5kIG5ld2VyLgorICovCisjZGVmaW5lIElQQUFfSU5JVElBTF9CVUZfU1ogMTUgKiAxMDI0CisjZGVmaW5lIElQQUFfTUFYX1RSSUVTIDMKK3N0YXRpYyBpbnQgZ2V0X0ROU19BZGFwdGVyc0FkZHJlc3NlcyhjaGFyICoqb3V0cHRyKQoreworICBJUF9BREFQVEVSX0ROU19TRVJWRVJfQUREUkVTUyAqaXBhRE5TQWRkcjsKKyAgSVBfQURBUFRFUl9BRERSRVNTRVMgKmlwYWEsICpuZXdpcGFhLCAqaXBhYUVudHJ5OworICBVTE9ORyBSZXFCdWZzeiA9IElQQUFfSU5JVElBTF9CVUZfU1o7CisgIFVMT05HIEJ1ZnN6ID0gSVBBQV9JTklUSUFMX0JVRl9TWjsKKyAgVUxPTkcgQWRkckZsYWdzID0gMDsKKyAgaW50IHRyeWluZyA9IElQQUFfTUFYX1RSSUVTOworICBpbnQgcmVzOworCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgICpzYTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gICpzYTQ7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2E2OworICB9IG5hbWVzcnZyOworCisgIGNoYXIgdHh0YWRkcltzaXplb2YoImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOjI1NS4yNTUuMjU1LjI1NSIpXTsKKworICAqb3V0cHRyID0gTlVMTDsKKworICAvKiBWZXJpZnkgcnVuLXRpbWUgYXZhaWxhYmlsaXR5IG9mIEdldEFkYXB0ZXJzQWRkcmVzc2VzKCkgKi8KKyAgaWYgKGFyZXNfZnBHZXRBZGFwdGVyc0FkZHJlc3NlcyA9PSBaRVJPX05VTEwpCisgICAgcmV0dXJuIDA7CisKKyAgaXBhYSA9IGFyZXNfbWFsbG9jKEJ1ZnN6KTsKKyAgaWYgKCFpcGFhKQorICAgIHJldHVybiAwOworCisgIC8qIFVzdWFsbHkgdGhpcyBjYWxsIHN1Y2VlZHMgd2l0aCBpbml0aWFsIGJ1ZmZlciBzaXplICovCisgIHJlcyA9ICgqYXJlc19mcEdldEFkYXB0ZXJzQWRkcmVzc2VzKSAoQUZfVU5TUEVDLCBBZGRyRmxhZ3MsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhYSwgJlJlcUJ1ZnN6KTsKKyAgaWYgKChyZXMgIT0gRVJST1JfQlVGRkVSX09WRVJGTE9XKSAmJiAocmVzICE9IEVSUk9SX1NVQ0NFU1MpKQorICAgIGdvdG8gZG9uZTsKKworICB3aGlsZSAoKHJlcyA9PSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1cpICYmICgtLXRyeWluZykpCisgIHsKKyAgICBpZiAoQnVmc3ogPCBSZXFCdWZzeikKKyAgICB7CisgICAgICBuZXdpcGFhID0gYXJlc19yZWFsbG9jKGlwYWEsIFJlcUJ1ZnN6KTsKKyAgICAgIGlmICghbmV3aXBhYSkKKyAgICAgICAgZ290byBkb25lOworICAgICAgQnVmc3ogPSBSZXFCdWZzejsKKyAgICAgIGlwYWEgPSBuZXdpcGFhOworICAgIH0KKyAgICByZXMgPSAoKmFyZXNfZnBHZXRBZGFwdGVyc0FkZHJlc3NlcykgKEFGX1VOU1BFQywgQWRkckZsYWdzLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhYSwgJlJlcUJ1ZnN6KTsKKyAgICBpZiAocmVzID09IEVSUk9SX1NVQ0NFU1MpCisgICAgICBicmVhazsKKyAgfQorICBpZiAocmVzICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgZ290byBkb25lOworCisgIGZvciAoaXBhYUVudHJ5ID0gaXBhYTsgaXBhYUVudHJ5OyBpcGFhRW50cnkgPSBpcGFhRW50cnktPk5leHQpCisgIHsKKyAgICBpZihpcGFhRW50cnktPk9wZXJTdGF0dXMgIT0gSWZPcGVyU3RhdHVzVXApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgZm9yIChpcGFETlNBZGRyID0gaXBhYUVudHJ5LT5GaXJzdERuc1NlcnZlckFkZHJlc3M7CisgICAgICAgICBpcGFETlNBZGRyOworICAgICAgICAgaXBhRE5TQWRkciA9IGlwYUROU0FkZHItPk5leHQpCisgICAgeworICAgICAgbmFtZXNydnIuc2EgPSBpcGFETlNBZGRyLT5BZGRyZXNzLmxwU29ja2FkZHI7CisKKyAgICAgIGlmIChuYW1lc3J2ci5zYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICB7CisgICAgICAgIGlmICgobmFtZXNydnIuc2E0LT5zaW5fYWRkci5TX3VuLlNfYWRkciA9PSBJTkFERFJfQU5ZKSB8fAorICAgICAgICAgICAgKG5hbWVzcnZyLnNhNC0+c2luX2FkZHIuU191bi5TX2FkZHIgPT0gSU5BRERSX05PTkUpKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoISBhcmVzX2luZXRfbnRvcChBRl9JTkVULCAmbmFtZXNydnIuc2E0LT5zaW5fYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0YWRkciwgc2l6ZW9mKHR4dGFkZHIpKSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5hbWVzcnZyLnNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgICB7CisgICAgICAgIGlmIChtZW1jbXAoJm5hbWVzcnZyLnNhNi0+c2luNl9hZGRyLCAmYXJlc19pbjZhZGRyX2FueSwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YobmFtZXNydnIuc2E2LT5zaW42X2FkZHIpKSA9PSAwKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoISBhcmVzX2luZXRfbnRvcChBRl9JTkVUNiwgJm5hbWVzcnZyLnNhNi0+c2luNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRhZGRyLCBzaXplb2YodHh0YWRkcikpKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBjb250aW51ZTsKKworICAgICAgY29tbWFqb2luKG91dHB0ciwgdHh0YWRkcik7CisKKyAgICAgIGlmICghKm91dHB0cikKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgfQorCitkb25lOgorICBpZiAoaXBhYSkKKyAgICBhcmVzX2ZyZWUoaXBhYSk7CisKKyAgaWYgKCEqb3V0cHRyKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCisvKgorICogZ2V0X0ROU19XaW5kb3dzKCkKKyAqCisgKiBMb2NhdGVzIEROUyBpbmZvIGZyb20gV2luZG93cyBlbXBsb3lpbmcgbW9zdCBzdWl0YWJsZSBtZXRob2RzIGF2YWlsYWJsZSBhdAorICogcnVuLXRpbWUgbm8gbWF0dGVyIHdoaWNoIFdpbmRvd3MgdmVyc2lvbiBpdCBpcy4gV2hlbiBsb2NhdGVkLCB0aGlzIHJldHVybnMKKyAqIGEgcG9pbnRlciBpbiAqb3V0cHRyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcgYSBzdHJpbmcgd2l0aAorICogYSBzcGFjZSBvciBjb21tYSBzZXBlcmF0ZWQgbGlzdCBvZiBETlMgSVAgYWRkcmVzc2VzLCBudWxsLXRlcm1pbmF0ZWQuCisgKgorICogUmV0dXJucyAwIGFuZCBudWxsaWZpZXMgKm91dHB0ciB1cG9uIGluYWJpbGl0eSB0byByZXR1cm4gRE5TZXMgc3RyaW5nLgorICoKKyAqIFJldHVybnMgMSBhbmQgc2V0cyAqb3V0cHRyIHdoZW4gcmV0dXJuaW5nIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZy4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBXaW5kb3dzIDk1IGFuZCBuZXdlci4KKyAqLworc3RhdGljIGludCBnZXRfRE5TX1dpbmRvd3MoY2hhciAqKm91dHB0cikKK3sKKyAgLyoKKyAgICAgVXNlIEdldE5ldHdvcmtQYXJhbXMgRmlyc3QgaW4gY2FzZSBvZgorICAgICBtdWx0aXBsZSBhZGFwdGVyIGlzIGVuYWJsZWQgb24gdGhpcyBtYWNoaW5lLgorICAgICBHZXRBZGFwdGVyc0FkZHJlc3NlcyB3aWxsIHJldHJpdmUgZHVtbXkgZG5zIHNlcnZlcnMuCisgICAgIFRoYXQgd2lsbCBzbG93aW5nIEROUyBsb29rdXAuCisgICovCisgIC8qIFRyeSB1c2luZyBJUCBoZWxwZXIgQVBJIEdldE5ldHdvcmtQYXJhbXMoKSAqLworICBpZiAoZ2V0X0ROU19OZXR3b3JrUGFyYW1zKG91dHB0cikpCisgICAgcmV0dXJuIDE7CisKKyAgLyogVHJ5IHVzaW5nIElQIGhlbHBlciBBUEkgR2V0QWRhcHRlcnNBZGRyZXNzZXMoKSAqLworICBpZiAoZ2V0X0ROU19BZGFwdGVyc0FkZHJlc3NlcyhvdXRwdHIpKQorICAgIHJldHVybiAxOworCisgIC8qIEZhbGwtYmFjayB0byByZWdpc3RyeSBpbmZvcm1hdGlvbiAqLworICByZXR1cm4gZ2V0X0ROU19SZWdpc3RyeShvdXRwdHIpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5pdF9ieV9yZXNvbHZfY29uZihhcmVzX2NoYW5uZWwgY2hhbm5lbCkKK3sKKyNpZiAhZGVmaW5lZChBTkRST0lEKSAmJiAhZGVmaW5lZChfX0FORFJPSURfXykgJiYgIWRlZmluZWQoV0FUVDMyKSAmJiBcCisgICAgIWRlZmluZWQoQ0FSRVNfVVNFX0xJQlJFU09MVikKKyAgY2hhciAqbGluZSA9IE5VTEw7CisjZW5kaWYKKyAgaW50IHN0YXR1cyA9IC0xLCBuc2VydmVycyA9IDAsIG5zb3J0ID0gMDsKKyAgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVycyA9IE5VTEw7CisgIHN0cnVjdCBhcGF0dGVybiAqc29ydGxpc3QgPSBOVUxMOworCisjaWZkZWYgV0lOMzIKKworICBpZiAoY2hhbm5lbC0+bnNlcnZlcnMgPiAtMSkgIC8qIGRvbid0IG92ZXJyaWRlIEFSRVNfT1BUX1NFUlZFUiAqLworICAgICByZXR1cm4gQVJFU19TVUNDRVNTOworCisgIGlmIChnZXRfRE5TX1dpbmRvd3MoJmxpbmUpKQorICB7CisgICAgc3RhdHVzID0gY29uZmlnX25hbWVzZXJ2ZXIoJnNlcnZlcnMsICZuc2VydmVycywgbGluZSk7CisgICAgYXJlc19mcmVlKGxpbmUpOworICB9CisKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpCisgICAgc3RhdHVzID0gQVJFU19FT0Y7CisgIGVsc2UKKyAgICAvKiBDYXRjaCB0aGUgY2FzZSB3aGVuIGFsbCB0aGUgYWJvdmUgY2hlY2tzIGZhaWwgKHdoaWNoIGhhcHBlbnMgd2hlbiB0aGVyZQorICAgICAgIGlzIG5vIG5ldHdvcmsgY2FyZCBvciB0aGUgY2FibGUgaXMgdW5wbHVnZ2VkKSAqLworICAgIHN0YXR1cyA9IEFSRVNfRUZJTEU7CisKKyNlbGlmIGRlZmluZWQoX19yaXNjb3NfXykKKworICAvKiBVbmRlciBSSVNDIE9TLCBuYW1lIHNlcnZlcnMgYXJlIGxpc3RlZCBpbiB0aGUKKyAgICAgc3lzdGVtIHZhcmlhYmxlIEluZXQkUmVzb2x2ZXJzLCBzcGFjZSBzZXBhcmF0ZWQuICovCisKKyAgbGluZSA9IGdldGVudigiSW5ldCRSZXNvbHZlcnMiKTsKKyAgc3RhdHVzID0gQVJFU19FT0Y7CisgIGlmIChsaW5lKSB7CisgICAgY2hhciAqcmVzb2x2ZXJzID0gYXJlc19zdHJkdXAobGluZSksICpwb3MsICpzcGFjZTsKKworICAgIGlmICghcmVzb2x2ZXJzKQorICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworCisgICAgcG9zID0gcmVzb2x2ZXJzOworICAgIGRvIHsKKyAgICAgIHNwYWNlID0gc3RyY2hyKHBvcywgJyAnKTsKKyAgICAgIGlmIChzcGFjZSkKKyAgICAgICAgKnNwYWNlID0gJ1wwJzsKKyAgICAgIHN0YXR1cyA9IGNvbmZpZ19uYW1lc2VydmVyKCZzZXJ2ZXJzLCAmbnNlcnZlcnMsIHBvcyk7CisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgYnJlYWs7CisgICAgICBwb3MgPSBzcGFjZSArIDE7CisgICAgfSB3aGlsZSAoc3BhY2UpOworCisgICAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpCisgICAgICBzdGF0dXMgPSBBUkVTX0VPRjsKKworICAgIGFyZXNfZnJlZShyZXNvbHZlcnMpOworICB9CisKKyNlbGlmIGRlZmluZWQoV0FUVDMyKQorICBpbnQgaTsKKworICBzb2NrX2luaXQoKTsKKyAgZm9yIChpID0gMDsgZGVmX25hbWVzZXJ2ZXJzW2ldOyBpKyspCisgICAgICA7CisgIGlmIChpID09IDApCisgICAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsgLyogdXNlIGxvY2FsaG9zdCBETlMgc2VydmVyICovCisKKyAgbnNlcnZlcnMgPSBpOworICBzZXJ2ZXJzID0gYXJlc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2ZXJfc3RhdGUpKTsKKyAgaWYgKCFzZXJ2ZXJzKQorICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgIG1lbXNldChzZXJ2ZXJzLCAwLCBzaXplb2Yoc3RydWN0IHNlcnZlcl9zdGF0ZSkpOworCisgIGZvciAoaSA9IDA7IGRlZl9uYW1lc2VydmVyc1tpXTsgaSsrKQorICB7CisgICAgc2VydmVyc1tpXS5hZGRyLmFkZHJWNC5zX2FkZHIgPSBodG9ubChkZWZfbmFtZXNlcnZlcnNbaV0pOworICAgIHNlcnZlcnNbaV0uYWRkci5mYW1pbHkgPSBBRl9JTkVUOworICAgIHNlcnZlcnNbaV0uYWRkci51ZHBfcG9ydCA9IDA7CisgICAgc2VydmVyc1tpXS5hZGRyLnRjcF9wb3J0ID0gMDsKKyAgfQorICBzdGF0dXMgPSBBUkVTX0VPRjsKKworI2VsaWYgZGVmaW5lZChBTkRST0lEKSB8fCBkZWZpbmVkKF9fQU5EUk9JRF9fKQorICB1bnNpZ25lZCBpbnQgaTsKKyAgY2hhciBwcm9wbmFtZVtQUk9QX05BTUVfTUFYXTsKKyAgY2hhciBwcm9wdmFsdWVbUFJPUF9WQUxVRV9NQVhdPSIiOworCisgIGZvciAoaSA9IDE7IGkgPD0gTUFYX0ROU19QUk9QRVJUSUVTOyBpKyspIHsKKyAgICBzbnByaW50Zihwcm9wbmFtZSwgc2l6ZW9mKHByb3BuYW1lKSwgIiVzJXUiLCBETlNfUFJPUF9OQU1FX1BSRUZJWCwgaSk7CisgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wbmFtZSwgcHJvcHZhbHVlKSA8IDEpIHsKKyAgICAgIHN0YXR1cyA9IEFSRVNfRU9GOworICAgICAgYnJlYWs7CisgICAgfQorICAgIHN0YXR1cyA9IGNvbmZpZ19uYW1lc2VydmVyKCZzZXJ2ZXJzLCAmbnNlcnZlcnMsIHByb3B2YWx1ZSk7CisgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICBicmVhazsKKyAgICBzdGF0dXMgPSBBUkVTX0VPRjsKKyAgfQorI2VsaWYgZGVmaW5lZChDQVJFU19VU0VfTElCUkVTT0xWKQorICBzdHJ1Y3QgX19yZXNfc3RhdGUgcmVzOworICBtZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOworICBpbnQgcmVzdWx0ID0gcmVzX25pbml0KCZyZXMpOworICBpZiAocmVzdWx0ID09IDAgJiYgKHJlcy5vcHRpb25zICYgUkVTX0lOSVQpKSB7CisgICAgc3RhdHVzID0gQVJFU19FT0Y7CisKKyAgICBpZiAoY2hhbm5lbC0+bnNlcnZlcnMgPT0gLTEpIHsKKyAgICAgIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiBhZGRyW01BWE5TXTsKKyAgICAgIGludCBuc2NvdW50ID0gcmVzX2dldHNlcnZlcnMoJnJlcywgYWRkciwgTUFYTlMpOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuc2NvdW50OyArK2kpIHsKKyAgICAgICAgY2hhciBzdHJbSU5FVDZfQUREUlNUUkxFTl07CisgICAgICAgIGludCBjb25maWdfc3RhdHVzOworICAgICAgICBzYV9mYW1pbHlfdCBmYW1pbHkgPSBhZGRyW2ldLnNpbi5zaW5fZmFtaWx5OworICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpIHsKKyAgICAgICAgICBhcmVzX2luZXRfbnRvcChmYW1pbHksICZhZGRyW2ldLnNpbi5zaW5fYWRkciwgc3RyLCBzaXplb2Yoc3RyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgICAgYXJlc19pbmV0X250b3AoZmFtaWx5LCAmYWRkcltpXS5zaW42LnNpbjZfYWRkciwgc3RyLCBzaXplb2Yoc3RyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjb25maWdfc3RhdHVzID0gY29uZmlnX25hbWVzZXJ2ZXIoJnNlcnZlcnMsICZuc2VydmVycywgc3RyKTsKKyAgICAgICAgaWYgKGNvbmZpZ19zdGF0dXMgIT0gQVJFU19TVUNDRVNTKSB7CisgICAgICAgICAgc3RhdHVzID0gY29uZmlnX3N0YXR1czsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoY2hhbm5lbC0+bmRvbWFpbnMgPT0gLTEpIHsKKyAgICAgIGludCBlbnRyaWVzID0gMDsKKyAgICAgIHdoaWxlICgoZW50cmllcyA8IE1BWEROU1JDSCkgJiYgcmVzLmRuc3JjaFtlbnRyaWVzXSkKKyAgICAgICAgZW50cmllcysrOworCisgICAgICBjaGFubmVsLT5kb21haW5zID0gYXJlc19tYWxsb2MoZW50cmllcyAqIHNpemVvZihjaGFyICopKTsKKyAgICAgIGlmICghY2hhbm5lbC0+ZG9tYWlucykgeworICAgICAgICBzdGF0dXMgPSBBUkVTX0VOT01FTTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNoYW5uZWwtPm5kb21haW5zID0gZW50cmllczsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFubmVsLT5uZG9tYWluczsgKytpKSB7CisgICAgICAgICAgY2hhbm5lbC0+ZG9tYWluc1tpXSA9IGFyZXNfc3RyZHVwKHJlcy5kbnNyY2hbaV0pOworICAgICAgICAgIGlmICghY2hhbm5lbC0+ZG9tYWluc1tpXSkKKyAgICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRU5PTUVNOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChjaGFubmVsLT5uZG90cyA9PSAtMSkKKyAgICAgIGNoYW5uZWwtPm5kb3RzID0gcmVzLm5kb3RzOworICAgIGlmIChjaGFubmVsLT50cmllcyA9PSAtMSkKKyAgICAgIGNoYW5uZWwtPnRyaWVzID0gcmVzLnJldHJ5OworICAgIGlmIChjaGFubmVsLT5yb3RhdGUgPT0gLTEpCisgICAgICBjaGFubmVsLT5yb3RhdGUgPSByZXMub3B0aW9ucyAmIFJFU19ST1RBVEU7CisgICAgaWYgKGNoYW5uZWwtPnRpbWVvdXQgPT0gLTEpCisgICAgICBjaGFubmVsLT50aW1lb3V0ID0gcmVzLnJldHJhbnMgKiAxMDAwOworCisgICAgcmVzX25kZXN0cm95KCZyZXMpOworICB9CisjZWxzZQorICB7CisgICAgY2hhciAqcDsKKyAgICBGSUxFICpmcDsKKyAgICBzaXplX3QgbGluZXNpemU7CisgICAgaW50IGVycm9yOworICAgIGludCB1cGRhdGVfZG9tYWluczsKKworICAgIC8qIERvbid0IHJlYWQgcmVzb2x2LmNvbmYgYW5kIGZyaWVuZHMgaWYgd2UgZG9uJ3QgaGF2ZSB0byAqLworICAgIGlmIChBUkVTX0NPTkZJR19DSEVDSyhjaGFubmVsKSkKKyAgICAgICAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKKworICAgIC8qIE9ubHkgdXBkYXRlIHNlYXJjaCBkb21haW5zIGlmIHRoZXkncmUgbm90IGFscmVhZHkgc3BlY2lmaWVkICovCisgICAgdXBkYXRlX2RvbWFpbnMgPSAoY2hhbm5lbC0+bmRvbWFpbnMgPT0gLTEpOworCisgICAgZnAgPSBmb3BlbihQQVRIX1JFU09MVl9DT05GLCAiciIpOworICAgIGlmIChmcCkgeworICAgICAgd2hpbGUgKChzdGF0dXMgPSBhcmVzX19yZWFkX2xpbmUoZnAsICZsaW5lLCAmbGluZXNpemUpKSA9PSBBUkVTX1NVQ0NFU1MpCisgICAgICB7CisgICAgICAgIGlmICgocCA9IHRyeV9jb25maWcobGluZSwgImRvbWFpbiIsICc7JykpICYmIHVwZGF0ZV9kb21haW5zKQorICAgICAgICAgIHN0YXR1cyA9IGNvbmZpZ19kb21haW4oY2hhbm5lbCwgcCk7CisgICAgICAgIGVsc2UgaWYgKChwID0gdHJ5X2NvbmZpZyhsaW5lLCAibG9va3VwIiwgJzsnKSkgJiYgIWNoYW5uZWwtPmxvb2t1cHMpCisgICAgICAgICAgc3RhdHVzID0gY29uZmlnX2xvb2t1cChjaGFubmVsLCBwLCAiYmluZCIsIE5VTEwsICJmaWxlIik7CisgICAgICAgIGVsc2UgaWYgKChwID0gdHJ5X2NvbmZpZyhsaW5lLCAic2VhcmNoIiwgJzsnKSkgJiYgdXBkYXRlX2RvbWFpbnMpCisgICAgICAgICAgc3RhdHVzID0gc2V0X3NlYXJjaChjaGFubmVsLCBwKTsKKyAgICAgICAgZWxzZSBpZiAoKHAgPSB0cnlfY29uZmlnKGxpbmUsICJuYW1lc2VydmVyIiwgJzsnKSkgJiYKKyAgICAgICAgICAgICAgICAgY2hhbm5lbC0+bnNlcnZlcnMgPT0gLTEpCisgICAgICAgICAgc3RhdHVzID0gY29uZmlnX25hbWVzZXJ2ZXIoJnNlcnZlcnMsICZuc2VydmVycywgcCk7CisgICAgICAgIGVsc2UgaWYgKChwID0gdHJ5X2NvbmZpZyhsaW5lLCAic29ydGxpc3QiLCAnOycpKSAmJgorICAgICAgICAgICAgICAgICBjaGFubmVsLT5uc29ydCA9PSAtMSkKKyAgICAgICAgICBzdGF0dXMgPSBjb25maWdfc29ydGxpc3QoJnNvcnRsaXN0LCAmbnNvcnQsIHApOworICAgICAgICBlbHNlIGlmICgocCA9IHRyeV9jb25maWcobGluZSwgIm9wdGlvbnMiLCAnOycpKSkKKyAgICAgICAgICBzdGF0dXMgPSBzZXRfb3B0aW9ucyhjaGFubmVsLCBwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0YXR1cyA9IEFSRVNfU1VDQ0VTUzsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBmY2xvc2UoZnApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGVycm9yID0gRVJSTk87CisgICAgICBzd2l0Y2goZXJyb3IpIHsKKyAgICAgIGNhc2UgRU5PRU5UOgorICAgICAgY2FzZSBFU1JDSDoKKyAgICAgICAgc3RhdHVzID0gQVJFU19FT0Y7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpKTsKKyAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAlc1xuIiwgUEFUSF9SRVNPTFZfQ09ORikpOworICAgICAgICBzdGF0dXMgPSBBUkVTX0VGSUxFOworICAgICAgfQorICAgIH0KKworICAgIGlmICgoc3RhdHVzID09IEFSRVNfRU9GKSAmJiAoIWNoYW5uZWwtPmxvb2t1cHMpKSB7CisgICAgICAvKiBNYW55IHN5c3RlbXMgKFNvbGFyaXMsIExpbnV4LCBCU0QncykgdXNlIG5zc3dpdGNoLmNvbmYgKi8KKyAgICAgIGZwID0gZm9wZW4oIi9ldGMvbnNzd2l0Y2guY29uZiIsICJyIik7CisgICAgICBpZiAoZnApIHsKKyAgICAgICAgd2hpbGUgKChzdGF0dXMgPSBhcmVzX19yZWFkX2xpbmUoZnAsICZsaW5lLCAmbGluZXNpemUpKSA9PQorICAgICAgICAgICAgICAgQVJFU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChwID0gdHJ5X2NvbmZpZyhsaW5lLCAiaG9zdHM6IiwgJ1wwJykpICYmICFjaGFubmVsLT5sb29rdXBzKQorICAgICAgICAgICAgKHZvaWQpY29uZmlnX2xvb2t1cChjaGFubmVsLCBwLCAiZG5zIiwgInJlc29sdmUiLCAiZmlsZXMiKTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZnApOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGVycm9yID0gRVJSTk87CisgICAgICAgIHN3aXRjaChlcnJvcikgeworICAgICAgICBjYXNlIEVOT0VOVDoKKyAgICAgICAgY2FzZSBFU1JDSDoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKSk7CisgICAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiL2V0Yy9uc3N3aXRjaC5jb25mIikpOworICAgICAgICB9CisKKyAgICAgICAgLyogaWdub3JlIGVycm9yLCBtYXliZSB3ZSB3aWxsIGdldCBsdWNrIGluIG5leHQgaWYgY2xhdXNlICovCisgICAgICAgIHN0YXR1cyA9IEFSRVNfRU9GOworICAgICAgfQorICAgIH0KKworICAgIGlmICgoc3RhdHVzID09IEFSRVNfRU9GKSAmJiAoIWNoYW5uZWwtPmxvb2t1cHMpKSB7CisgICAgICAvKiBMaW51eCAvIEdOVSBsaWJjIDIueCBhbmQgcG9zc2libHkgb3RoZXJzIGhhdmUgaG9zdC5jb25mICovCisgICAgICBmcCA9IGZvcGVuKCIvZXRjL2hvc3QuY29uZiIsICJyIik7CisgICAgICBpZiAoZnApIHsKKyAgICAgICAgd2hpbGUgKChzdGF0dXMgPSBhcmVzX19yZWFkX2xpbmUoZnAsICZsaW5lLCAmbGluZXNpemUpKSA9PQorICAgICAgICAgICAgICAgQVJFU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChwID0gdHJ5X2NvbmZpZyhsaW5lLCAib3JkZXIiLCAnXDAnKSkgJiYgIWNoYW5uZWwtPmxvb2t1cHMpCisgICAgICAgICAgICAvKiBpZ25vcmUgZXJyb3JzICovCisgICAgICAgICAgICAodm9pZCljb25maWdfbG9va3VwKGNoYW5uZWwsIHAsICJiaW5kIiwgTlVMTCwgImhvc3RzIik7CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBlcnJvciA9IEVSUk5POworICAgICAgICBzd2l0Y2goZXJyb3IpIHsKKyAgICAgICAgY2FzZSBFTk9FTlQ6CisgICAgICAgIGNhc2UgRVNSQ0g6CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSkpOworICAgICAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgZmlsZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIi9ldGMvaG9zdC5jb25mIikpOworICAgICAgICB9CisKKyAgICAgICAgLyogaWdub3JlIGVycm9yLCBtYXliZSB3ZSB3aWxsIGdldCBsdWNrIGluIG5leHQgaWYgY2xhdXNlICovCisgICAgICAgIHN0YXR1cyA9IEFSRVNfRU9GOworICAgICAgfQorICAgIH0KKworICAgIGlmICgoc3RhdHVzID09IEFSRVNfRU9GKSAmJiAoIWNoYW5uZWwtPmxvb2t1cHMpKSB7CisgICAgICAvKiBUcnU2NCB1c2VzIC9ldGMvc3ZjLmNvbmYgKi8KKyAgICAgIGZwID0gZm9wZW4oIi9ldGMvc3ZjLmNvbmYiLCAiciIpOworICAgICAgaWYgKGZwKSB7CisgICAgICAgIHdoaWxlICgoc3RhdHVzID0gYXJlc19fcmVhZF9saW5lKGZwLCAmbGluZSwgJmxpbmVzaXplKSkgPT0KKyAgICAgICAgICAgICAgIEFSRVNfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGlmICgocCA9IHRyeV9jb25maWcobGluZSwgImhvc3RzPSIsICdcMCcpKSAmJiAhY2hhbm5lbC0+bG9va3VwcykKKyAgICAgICAgICAgIC8qIGlnbm9yZSBlcnJvcnMgKi8KKyAgICAgICAgICAgICh2b2lkKWNvbmZpZ19sb29rdXAoY2hhbm5lbCwgcCwgImJpbmQiLCBOVUxMLCAibG9jYWwiKTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZnApOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGVycm9yID0gRVJSTk87CisgICAgICAgIHN3aXRjaChlcnJvcikgeworICAgICAgICBjYXNlIEVOT0VOVDoKKyAgICAgICAgY2FzZSBFU1JDSDoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKSk7CisgICAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAlc1xuIiwgIi9ldGMvc3ZjLmNvbmYiKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBpZ25vcmUgZXJyb3IsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSBjaG9zZW4gZm9yIGBjaGFubmVsLT5sb29rdXBzYCAqLworICAgICAgICBzdGF0dXMgPSBBUkVTX0VPRjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihsaW5lKQorICAgICAgYXJlc19mcmVlKGxpbmUpOworICB9CisKKyNlbmRpZgorCisgIC8qIEhhbmRsZSBlcnJvcnMuICovCisgIGlmIChzdGF0dXMgIT0gQVJFU19FT0YpCisgICAgeworICAgICAgaWYgKHNlcnZlcnMgIT0gTlVMTCkKKyAgICAgICAgYXJlc19mcmVlKHNlcnZlcnMpOworICAgICAgaWYgKHNvcnRsaXN0ICE9IE5VTEwpCisgICAgICAgIGFyZXNfZnJlZShzb3J0bGlzdCk7CisgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAvKiBJZiB3ZSBnb3QgYW55IG5hbWUgc2VydmVyIGVudHJpZXMsIGZpbGwgdGhlbSBpbi4gKi8KKyAgaWYgKHNlcnZlcnMpCisgICAgeworICAgICAgY2hhbm5lbC0+c2VydmVycyA9IHNlcnZlcnM7CisgICAgICBjaGFubmVsLT5uc2VydmVycyA9IG5zZXJ2ZXJzOworICAgIH0KKworICAvKiBJZiB3ZSBnb3QgYW55IHNvcnRsaXN0IGVudHJpZXMsIGZpbGwgdGhlbSBpbi4gKi8KKyAgaWYgKHNvcnRsaXN0KQorICAgIHsKKyAgICAgIGNoYW5uZWwtPnNvcnRsaXN0ID0gc29ydGxpc3Q7CisgICAgICBjaGFubmVsLT5uc29ydCA9IG5zb3J0OworICAgIH0KKworICByZXR1cm4gQVJFU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IGluaXRfYnlfZGVmYXVsdHMoYXJlc19jaGFubmVsIGNoYW5uZWwpCit7CisgIGNoYXIgKmhvc3RuYW1lID0gTlVMTDsKKyAgaW50IHJjID0gQVJFU19TVUNDRVNTOworI2lmZGVmIEhBVkVfR0VUSE9TVE5BTUUKKyAgY2hhciAqZG90OworI2VuZGlmCisKKyAgaWYgKGNoYW5uZWwtPmZsYWdzID09IC0xKQorICAgIGNoYW5uZWwtPmZsYWdzID0gMDsKKyAgaWYgKGNoYW5uZWwtPnRpbWVvdXQgPT0gLTEpCisgICAgY2hhbm5lbC0+dGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKKyAgaWYgKGNoYW5uZWwtPnRyaWVzID09IC0xKQorICAgIGNoYW5uZWwtPnRyaWVzID0gREVGQVVMVF9UUklFUzsKKyAgaWYgKGNoYW5uZWwtPm5kb3RzID09IC0xKQorICAgIGNoYW5uZWwtPm5kb3RzID0gMTsKKyAgaWYgKGNoYW5uZWwtPnJvdGF0ZSA9PSAtMSkKKyAgICBjaGFubmVsLT5yb3RhdGUgPSAwOworICBpZiAoY2hhbm5lbC0+dWRwX3BvcnQgPT0gLTEpCisgICAgY2hhbm5lbC0+dWRwX3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOworICBpZiAoY2hhbm5lbC0+dGNwX3BvcnQgPT0gLTEpCisgICAgY2hhbm5lbC0+dGNwX3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOworCisgIGlmIChjaGFubmVsLT5lZG5zcHN6ID09IC0xKQorICAgIGNoYW5uZWwtPmVkbnNwc3ogPSBFRE5TUEFDS0VUU1o7CisKKyAgaWYgKGNoYW5uZWwtPm5zZXJ2ZXJzID09IC0xKSB7CisgICAgLyogSWYgbm9ib2R5IHNwZWNpZmllZCBzZXJ2ZXJzLCB0cnkgYSBsb2NhbCBuYW1lZC4gKi8KKyAgICBjaGFubmVsLT5zZXJ2ZXJzID0gYXJlc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2ZXJfc3RhdGUpKTsKKyAgICBpZiAoIWNoYW5uZWwtPnNlcnZlcnMpIHsKKyAgICAgIHJjID0gQVJFU19FTk9NRU07CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBjaGFubmVsLT5zZXJ2ZXJzWzBdLmFkZHIuZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBjaGFubmVsLT5zZXJ2ZXJzWzBdLmFkZHIuYWRkclY0LnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisgICAgY2hhbm5lbC0+c2VydmVyc1swXS5hZGRyLnVkcF9wb3J0ID0gMDsKKyAgICBjaGFubmVsLT5zZXJ2ZXJzWzBdLmFkZHIudGNwX3BvcnQgPSAwOworICAgIGNoYW5uZWwtPm5zZXJ2ZXJzID0gMTsKKyAgfQorCisjaWYgZGVmaW5lZChVU0VfV0lOU09DSykKKyNkZWZpbmUgdG9vbG9uZyh4KSAoeCA9PSAtMSkgJiYgIChTT0NLRVJSTk8gPT0gV1NBRUZBVUxUKQorI2VsaWYgZGVmaW5lZChFTkFNRVRPT0xPTkcpCisjZGVmaW5lIHRvb2xvbmcoeCkgKHggPT0gLTEpICYmICgoU09DS0VSUk5PID09IEVOQU1FVE9PTE9ORykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNPQ0tFUlJOTyA9PSBFSU5WQUwpKQorI2Vsc2UKKyNkZWZpbmUgdG9vbG9uZyh4KSAoeCA9PSAtMSkgJiYgIChTT0NLRVJSTk8gPT0gRUlOVkFMKQorI2VuZGlmCisKKyAgaWYgKGNoYW5uZWwtPm5kb21haW5zID09IC0xKSB7CisgICAgLyogRGVyaXZlIGEgZGVmYXVsdCBkb21haW4gc2VhcmNoIGxpc3QgZnJvbSB0aGUga2VybmVsIGhvc3RuYW1lLAorICAgICAqIG9yIHNldCBpdCB0byBlbXB0eSBpZiB0aGUgaG9zdG5hbWUgaXNuJ3QgaGVscGZ1bC4KKyAgICAgKi8KKyNpZm5kZWYgSEFWRV9HRVRIT1NUTkFNRQorICAgIGNoYW5uZWwtPm5kb21haW5zID0gMDsgLyogZGVmYXVsdCB0byBub25lICovCisjZWxzZQorICAgIEdFVEhPU1ROQU1FX1RZUEVfQVJHMiBsZW52ID0gNjQ7CisgICAgc2l6ZV90IGxlbiA9IDY0OworICAgIGludCByZXM7CisgICAgY2hhbm5lbC0+bmRvbWFpbnMgPSAwOyAvKiBkZWZhdWx0IHRvIG5vbmUgKi8KKworICAgIGhvc3RuYW1lID0gYXJlc19tYWxsb2MobGVuKTsKKyAgICBpZighaG9zdG5hbWUpIHsKKyAgICAgIHJjID0gQVJFU19FTk9NRU07CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGRvIHsKKyAgICAgIHJlcyA9IGdldGhvc3RuYW1lKGhvc3RuYW1lLCBsZW52KTsKKworICAgICAgaWYodG9vbG9uZyhyZXMpKSB7CisgICAgICAgIGNoYXIgKnA7CisgICAgICAgIGxlbiAqPSAyOworICAgICAgICBsZW52ICo9IDI7CisgICAgICAgIHAgPSBhcmVzX3JlYWxsb2MoaG9zdG5hbWUsIGxlbik7CisgICAgICAgIGlmKCFwKSB7CisgICAgICAgICAgcmMgPSBBUkVTX0VOT01FTTsKKyAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGhvc3RuYW1lID0gcDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJlcykgeworICAgICAgICByYyA9IEFSRVNfRUJBRE5BTUU7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisKKyAgICB9IHdoaWxlIChyZXMgIT0gMCk7CisKKyAgICBkb3QgPSBzdHJjaHIoaG9zdG5hbWUsICcuJyk7CisgICAgaWYgKGRvdCkgeworICAgICAgLyogYSBkb3Qgd2FzIGZvdW5kICovCisgICAgICBjaGFubmVsLT5kb21haW5zID0gYXJlc19tYWxsb2Moc2l6ZW9mKGNoYXIgKikpOworICAgICAgaWYgKCFjaGFubmVsLT5kb21haW5zKSB7CisgICAgICAgIHJjID0gQVJFU19FTk9NRU07CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisgICAgICBjaGFubmVsLT5kb21haW5zWzBdID0gYXJlc19zdHJkdXAoZG90ICsgMSk7CisgICAgICBpZiAoIWNoYW5uZWwtPmRvbWFpbnNbMF0pIHsKKyAgICAgICAgcmMgPSBBUkVTX0VOT01FTTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKyAgICAgIGNoYW5uZWwtPm5kb21haW5zID0gMTsKKyAgICB9CisjZW5kaWYKKyAgfQorCisgIGlmIChjaGFubmVsLT5uc29ydCA9PSAtMSkgeworICAgIGNoYW5uZWwtPnNvcnRsaXN0ID0gTlVMTDsKKyAgICBjaGFubmVsLT5uc29ydCA9IDA7CisgIH0KKworICBpZiAoIWNoYW5uZWwtPmxvb2t1cHMpIHsKKyAgICBjaGFubmVsLT5sb29rdXBzID0gYXJlc19zdHJkdXAoImZiIik7CisgICAgaWYgKCFjaGFubmVsLT5sb29rdXBzKQorICAgICAgcmMgPSBBUkVTX0VOT01FTTsKKyAgfQorCisgIGVycm9yOgorICBpZihyYykgeworICAgIGlmKGNoYW5uZWwtPnNlcnZlcnMpIHsKKyAgICAgIGFyZXNfZnJlZShjaGFubmVsLT5zZXJ2ZXJzKTsKKyAgICAgIGNoYW5uZWwtPnNlcnZlcnMgPSBOVUxMOworICAgIH0KKworICAgIGlmKGNoYW5uZWwtPmRvbWFpbnMgJiYgY2hhbm5lbC0+ZG9tYWluc1swXSkKKyAgICAgIGFyZXNfZnJlZShjaGFubmVsLT5kb21haW5zWzBdKTsKKyAgICBpZihjaGFubmVsLT5kb21haW5zKSB7CisgICAgICBhcmVzX2ZyZWUoY2hhbm5lbC0+ZG9tYWlucyk7CisgICAgICBjaGFubmVsLT5kb21haW5zID0gTlVMTDsKKyAgICB9CisKKyAgICBpZihjaGFubmVsLT5sb29rdXBzKSB7CisgICAgICBhcmVzX2ZyZWUoY2hhbm5lbC0+bG9va3Vwcyk7CisgICAgICBjaGFubmVsLT5sb29rdXBzID0gTlVMTDsKKyAgICB9CisgIH0KKworICBpZihob3N0bmFtZSkKKyAgICBhcmVzX2ZyZWUoaG9zdG5hbWUpOworCisgIHJldHVybiByYzsKK30KKworI2lmICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChXQVRUMzIpICYmIFwKKyAgICAhZGVmaW5lZChBTkRST0lEKSAmJiAhZGVmaW5lZChfX0FORFJPSURfXykgJiYgIWRlZmluZWQoQ0FSRVNfVVNFX0xJQlJFU09MVikKK3N0YXRpYyBpbnQgY29uZmlnX2RvbWFpbihhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY2hhciAqc3RyKQoreworICBjaGFyICpxOworCisgIC8qIFNldCBhIHNpbmdsZSBzZWFyY2ggZG9tYWluLiAqLworICBxID0gc3RyOworICB3aGlsZSAoKnEgJiYgIUlTU1BBQ0UoKnEpKQorICAgIHErKzsKKyAgKnEgPSAnXDAnOworICByZXR1cm4gc2V0X3NlYXJjaChjaGFubmVsLCBzdHIpOworfQorCisjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAmJiAoX19JTlRFTF9DT01QSUxFUiA9PSA5MTApICYmIFwKKyAgICBkZWZpbmVkKF9fT1BUSU1JWkVfXykgJiYgZGVmaW5lZChfX3VuaXhfXykgJiYgIGRlZmluZWQoX19pMzg2X18pCisgIC8qIHdvcmthcm91bmQgaWNjIDkuMSBvcHRpbWl6ZXIgaXNzdWUgKi8KKyMgZGVmaW5lIHZxdWFsaWZpZXIgdm9sYXRpbGUKKyNlbHNlCisjIGRlZmluZSB2cXVhbGlmaWVyCisjZW5kaWYKKworc3RhdGljIGludCBjb25maWdfbG9va3VwKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmluZGNoLCBjb25zdCBjaGFyICphbHRiaW5kY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZWNoKQoreworICBjaGFyIGxvb2t1cHNbM10sICpsOworICBjb25zdCBjaGFyICp2cXVhbGlmaWVyIHA7CisKKyAgaWYgKGFsdGJpbmRjaCA9PSBOVUxMKQorICAgIGFsdGJpbmRjaCA9IGJpbmRjaDsKKworICAvKiBTZXQgdGhlIGxvb2t1cCBvcmRlci4gIE9ubHkgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmsKKyAgICogaXMgcmVsZXZhbnQsIGFuZCBpdCBoYXMgdG8gYmUgImIiIGZvciBETlMgb3IgImYiIGZvciB0aGUKKyAgICogaG9zdCBmaWxlLiAgSWdub3JlIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICovCisgIGwgPSBsb29rdXBzOworICBwID0gc3RyOworICB3aGlsZSAoKnApCisgICAgeworICAgICAgaWYgKCgqcCA9PSAqYmluZGNoIHx8ICpwID09ICphbHRiaW5kY2ggfHwgKnAgPT0gKmZpbGVjaCkgJiYgbCA8IGxvb2t1cHMgKyAyKSB7CisgICAgICAgIGlmICgqcCA9PSAqYmluZGNoIHx8ICpwID09ICphbHRiaW5kY2gpICpsKysgPSAnYic7CisgICAgICAgIGVsc2UgKmwrKyA9ICdmJzsKKyAgICAgIH0KKyAgICAgIHdoaWxlICgqcCAmJiAhSVNTUEFDRSgqcCkgJiYgKCpwICE9ICcsJykpCisgICAgICAgIHArKzsKKyAgICAgIHdoaWxlICgqcCAmJiAoSVNTUEFDRSgqcCkgfHwgKCpwID09ICcsJykpKQorICAgICAgICBwKys7CisgICAgfQorICAqbCA9ICdcMCc7CisgIGNoYW5uZWwtPmxvb2t1cHMgPSBhcmVzX3N0cmR1cChsb29rdXBzKTsKKyAgcmV0dXJuIChjaGFubmVsLT5sb29rdXBzKSA/IEFSRVNfU1VDQ0VTUyA6IEFSRVNfRU5PTUVNOworfQorI2VuZGlmICAvKiAhV0lOMzIgJiAhV0FUVDMyICYgIUFORFJPSUQgJiAhX19BTkRST0lEX18gJiAhQ0FSRVNfVVNFX0xJQlJFU09MViAqLworCisjaWZuZGVmIFdBVFQzMgorc3RhdGljIGludCBjb25maWdfbmFtZXNlcnZlcihzdHJ1Y3Qgc2VydmVyX3N0YXRlICoqc2VydmVycywgaW50ICpuc2VydmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RyKQoreworICBzdHJ1Y3QgYXJlc19hZGRyIGhvc3Q7CisgIHN0cnVjdCBzZXJ2ZXJfc3RhdGUgKm5ld3NlcnY7CisgIGNoYXIgKnAsICp0eHRhZGRyOworICAvKiBPbiBXaW5kb3dzLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBuYW1lc2VydmVyIHNwZWNpZmllZCBpbiB0aGUgc2FtZQorICAgKiByZWdpc3RyeSBrZXksIHNvIHdlIHBhcnNlIGlucHV0IGFzIGEgc3BhY2Ugb3IgY29tbWEgc2VwZXJhdGVkIGxpc3QuCisgICAqLworICBmb3IgKHAgPSBzdHI7IHA7KQorICAgIHsKKyAgICAgIC8qIFNraXAgd2hpdGVzcGFjZSBhbmQgY29tbWFzLiAqLworICAgICAgd2hpbGUgKCpwICYmIChJU1NQQUNFKCpwKSB8fCAoKnAgPT0gJywnKSkpCisgICAgICAgIHArKzsKKyAgICAgIGlmICghKnApCisgICAgICAgIC8qIE5vIG1vcmUgaW5wdXQsIGRvbmUuICovCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIElQdjQgb3IgSVB2NiBhZGRyZXNzIHBhcnQuICovCisgICAgICB0eHRhZGRyID0gcDsKKworICAgICAgLyogQWR2YW5jZSBwYXN0IHRoaXMgYWRkcmVzcy4gKi8KKyAgICAgIHdoaWxlICgqcCAmJiAhSVNTUEFDRSgqcCkgJiYgKCpwICE9ICcsJykpCisgICAgICAgIHArKzsKKyAgICAgIGlmICgqcCkKKyAgICAgICAgLyogTnVsbCB0ZXJtaW5hdGUgdGhpcyBhZGRyZXNzLiAqLworICAgICAgICAqcCsrID0gJ1wwJzsKKyAgICAgIGVsc2UKKyAgICAgICAgLyogUmVhY2hlZCBlbmQgb2YgaW5wdXQsIGRvbmUgd2hlbiB0aGlzIGFkZHJlc3MgaXMgcHJvY2Vzc2VkLiAqLworICAgICAgICBwID0gTlVMTDsKKworICAgICAgLyogQ29udmVydCB0ZXh0dWFsIGFkZHJlc3MgdG8gYmluYXJ5IGZvcm1hdC4gKi8KKyAgICAgIGlmIChhcmVzX2luZXRfcHRvbihBRl9JTkVULCB0eHRhZGRyLCAmaG9zdC5hZGRyVjQpID09IDEpCisgICAgICAgIGhvc3QuZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGVsc2UgaWYgKGFyZXNfaW5ldF9wdG9uKEFGX0lORVQ2LCB0eHRhZGRyLCAmaG9zdC5hZGRyVjYpID09IDEpCisgICAgICAgIGhvc3QuZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICBlbHNlCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBSZXNpemUgc2VydmVycyBzdGF0ZSBhcnJheS4gKi8KKyAgICAgIG5ld3NlcnYgPSBhcmVzX3JlYWxsb2MoKnNlcnZlcnMsICgqbnNlcnZlcnMgKyAxKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2VydmVyX3N0YXRlKSk7CisgICAgICBpZiAoIW5ld3NlcnYpCisgICAgICAgIHJldHVybiBBUkVTX0VOT01FTTsKKworICAgICAgLyogU3RvcmUgYWRkcmVzcyBkYXRhLiAqLworICAgICAgbmV3c2VydlsqbnNlcnZlcnNdLmFkZHIuZmFtaWx5ID0gaG9zdC5mYW1pbHk7CisgICAgICBuZXdzZXJ2Wypuc2VydmVyc10uYWRkci51ZHBfcG9ydCA9IDA7CisgICAgICBuZXdzZXJ2Wypuc2VydmVyc10uYWRkci50Y3BfcG9ydCA9IDA7CisgICAgICBpZiAoaG9zdC5mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgbWVtY3B5KCZuZXdzZXJ2Wypuc2VydmVyc10uYWRkci5hZGRyVjQsICZob3N0LmFkZHJWNCwKKyAgICAgICAgICAgICAgIHNpemVvZihob3N0LmFkZHJWNCkpOworICAgICAgZWxzZQorICAgICAgICBtZW1jcHkoJm5ld3NlcnZbKm5zZXJ2ZXJzXS5hZGRyLmFkZHJWNiwgJmhvc3QuYWRkclY2LAorICAgICAgICAgICAgICAgc2l6ZW9mKGhvc3QuYWRkclY2KSk7CisKKyAgICAgIC8qIFVwZGF0ZSBhcmd1bWVudHMuICovCisgICAgICAqc2VydmVycyA9IG5ld3NlcnY7CisgICAgICAqbnNlcnZlcnMgKz0gMTsKKyAgICB9CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKyNlbmRpZiAgLyogIVdBVFQzMiAqLworCitzdGF0aWMgaW50IGNvbmZpZ19zb3J0bGlzdChzdHJ1Y3QgYXBhdHRlcm4gKipzb3J0bGlzdCwgaW50ICpuc29ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgc3RydWN0IGFwYXR0ZXJuIHBhdDsKKyAgY29uc3QgY2hhciAqcTsKKworICAvKiBBZGQgc29ydGxpc3QgZW50cmllcy4gKi8KKyAgd2hpbGUgKCpzdHIgJiYgKnN0ciAhPSAnOycpCisgICAgeworICAgICAgaW50IGJpdHM7CisgICAgICBjaGFyIGlwYnVmWzE2XSwgaXBidWZwZnhbMzJdOworICAgICAgLyogRmluZCBqdXN0IHRoZSBJUCAqLworICAgICAgcSA9IHN0cjsKKyAgICAgIHdoaWxlICgqcSAmJiAqcSAhPSAnLycgJiYgKnEgIT0gJzsnICYmICFJU1NQQUNFKCpxKSkKKyAgICAgICAgcSsrOworICAgICAgbWVtY3B5KGlwYnVmLCBzdHIsIHEtc3RyKTsKKyAgICAgIGlwYnVmW3Etc3RyXSA9ICdcMCc7CisgICAgICAvKiBGaW5kIHRoZSBwcmVmaXggKi8KKyAgICAgIGlmICgqcSA9PSAnLycpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpzdHIyID0gcSsxOworICAgICAgICAgIHdoaWxlICgqcSAmJiAqcSAhPSAnOycgJiYgIUlTU1BBQ0UoKnEpKQorICAgICAgICAgICAgcSsrOworICAgICAgICAgIG1lbWNweShpcGJ1ZnBmeCwgc3RyLCBxLXN0cik7CisgICAgICAgICAgaXBidWZwZnhbcS1zdHJdID0gJ1wwJzsKKyAgICAgICAgICBzdHIgPSBzdHIyOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGlwYnVmcGZ4WzBdID0gJ1wwJzsKKyAgICAgIC8qIExldHMgc2VlIGlmIGl0IGlzIENJRFIgKi8KKyAgICAgIC8qIEZpcnN0IHdlJ2xsIHRyeSBJUHY2ICovCisgICAgICBpZiAoKGJpdHMgPSBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsIGlwYnVmcGZ4WzBdID8gaXBidWZwZnggOiBpcGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGF0LmFkZHJWNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGF0LmFkZHJWNikpKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBwYXQudHlwZSA9IFBBVFRFUk5fQ0lEUjsKKyAgICAgICAgICBwYXQubWFzay5iaXRzID0gKHVuc2lnbmVkIHNob3J0KWJpdHM7CisgICAgICAgICAgcGF0LmZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgIGlmICghc29ydGxpc3RfYWxsb2Moc29ydGxpc3QsIG5zb3J0LCAmcGF0KSkgeworICAgICAgICAgICAgYXJlc19mcmVlKCpzb3J0bGlzdCk7CisgICAgICAgICAgICAqc29ydGxpc3QgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoaXBidWZwZnhbMF0gJiYKKyAgICAgICAgICAgICAgIChiaXRzID0gYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsIGlwYnVmcGZ4LCAmcGF0LmFkZHJWNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwYXQuYWRkclY0KSkpID4gMCkKKyAgICAgICAgeworICAgICAgICAgIHBhdC50eXBlID0gUEFUVEVSTl9DSURSOworICAgICAgICAgIHBhdC5tYXNrLmJpdHMgPSAodW5zaWduZWQgc2hvcnQpYml0czsKKyAgICAgICAgICBwYXQuZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICBpZiAoIXNvcnRsaXN0X2FsbG9jKHNvcnRsaXN0LCBuc29ydCwgJnBhdCkpIHsKKyAgICAgICAgICAgIGFyZXNfZnJlZSgqc29ydGxpc3QpOworICAgICAgICAgICAgKnNvcnRsaXN0ID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBBUkVTX0VOT01FTTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIC8qIFNlZSBpZiBpdCBpcyBqdXN0IGEgcmVndWxhciBJUCAqLworICAgICAgZWxzZSBpZiAoaXBfYWRkcihpcGJ1ZiwgcS1zdHIsICZwYXQuYWRkclY0KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGlwYnVmcGZ4WzBdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtZW1jcHkoaXBidWYsIHN0ciwgcS1zdHIpOworICAgICAgICAgICAgICBpcGJ1ZltxLXN0cl0gPSAnXDAnOworICAgICAgICAgICAgICBpZiAoaXBfYWRkcihpcGJ1ZiwgcS1zdHIsICZwYXQubWFzay5hZGRyNCkgIT0gMCkKKyAgICAgICAgICAgICAgICBuYXR1cmFsX21hc2soJnBhdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbmF0dXJhbF9tYXNrKCZwYXQpOworICAgICAgICAgIHBhdC5mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgIHBhdC50eXBlID0gUEFUVEVSTl9NQVNLOworICAgICAgICAgIGlmICghc29ydGxpc3RfYWxsb2Moc29ydGxpc3QsIG5zb3J0LCAmcGF0KSkgeworICAgICAgICAgICAgYXJlc19mcmVlKCpzb3J0bGlzdCk7CisgICAgICAgICAgICAqc29ydGxpc3QgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgd2hpbGUgKCpxICYmICpxICE9ICc7JyAmJiAhSVNTUEFDRSgqcSkpCisgICAgICAgICAgICBxKys7CisgICAgICAgIH0KKyAgICAgIHN0ciA9IHE7CisgICAgICB3aGlsZSAoSVNTUEFDRSgqc3RyKSkKKyAgICAgICAgc3RyKys7CisgICAgfQorCisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NlYXJjaChhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqc3RyKQoreworICBpbnQgbjsKKyAgY29uc3QgY2hhciAqcCwgKnE7CisKKyAgaWYoY2hhbm5lbC0+bmRvbWFpbnMgIT0gLTEpIHsKKyAgICAvKiBMQ09WX0VYQ0xfU1RBUlQ6IGFsbCBjYWxsZXJzIGNoZWNrIG5kb21haW5zID09IC0xICovCisgICAgLyogaWYgd2UgYWxyZWFkeSBoYXZlIHNvbWUgZG9tYWlucyBwcmVzZW50LCBmcmVlIHRoZW0gZmlyc3QgKi8KKyAgICBmb3Iobj0wOyBuIDwgY2hhbm5lbC0+bmRvbWFpbnM7IG4rKykKKyAgICAgIGFyZXNfZnJlZShjaGFubmVsLT5kb21haW5zW25dKTsKKyAgICBhcmVzX2ZyZWUoY2hhbm5lbC0+ZG9tYWlucyk7CisgICAgY2hhbm5lbC0+ZG9tYWlucyA9IE5VTEw7CisgICAgY2hhbm5lbC0+bmRvbWFpbnMgPSAtMTsKKyAgfSAvKiBMQ09WX0VYQ0xfU1RPUCAqLworCisgIC8qIENvdW50IHRoZSBkb21haW5zIGdpdmVuLiAqLworICBuID0gMDsKKyAgcCA9IHN0cjsKKyAgd2hpbGUgKCpwKQorICAgIHsKKyAgICAgIHdoaWxlICgqcCAmJiAhSVNTUEFDRSgqcCkpCisgICAgICAgIHArKzsKKyAgICAgIHdoaWxlIChJU1NQQUNFKCpwKSkKKyAgICAgICAgcCsrOworICAgICAgbisrOworICAgIH0KKworICBpZiAoIW4pCisgICAgeworICAgICAgY2hhbm5lbC0+bmRvbWFpbnMgPSAwOworICAgICAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKKyAgICB9CisKKyAgY2hhbm5lbC0+ZG9tYWlucyA9IGFyZXNfbWFsbG9jKG4gKiBzaXplb2YoY2hhciAqKSk7CisgIGlmICghY2hhbm5lbC0+ZG9tYWlucykKKyAgICByZXR1cm4gQVJFU19FTk9NRU07CisKKyAgLyogTm93IGNvcHkgdGhlIGRvbWFpbnMuICovCisgIG4gPSAwOworICBwID0gc3RyOworICB3aGlsZSAoKnApCisgICAgeworICAgICAgY2hhbm5lbC0+bmRvbWFpbnMgPSBuOworICAgICAgcSA9IHA7CisgICAgICB3aGlsZSAoKnEgJiYgIUlTU1BBQ0UoKnEpKQorICAgICAgICBxKys7CisgICAgICBjaGFubmVsLT5kb21haW5zW25dID0gYXJlc19tYWxsb2MocSAtIHAgKyAxKTsKKyAgICAgIGlmICghY2hhbm5lbC0+ZG9tYWluc1tuXSkKKyAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgbWVtY3B5KGNoYW5uZWwtPmRvbWFpbnNbbl0sIHAsIHEgLSBwKTsKKyAgICAgIGNoYW5uZWwtPmRvbWFpbnNbbl1bcSAtIHBdID0gMDsKKyAgICAgIHAgPSBxOworICAgICAgd2hpbGUgKElTU1BBQ0UoKnApKQorICAgICAgICBwKys7CisgICAgICBuKys7CisgICAgfQorICBjaGFubmVsLT5uZG9tYWlucyA9IG47CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBzZXRfb3B0aW9ucyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqc3RyKQoreworICBjb25zdCBjaGFyICpwLCAqcSwgKnZhbDsKKworICBwID0gc3RyOworICB3aGlsZSAoKnApCisgICAgeworICAgICAgcSA9IHA7CisgICAgICB3aGlsZSAoKnEgJiYgIUlTU1BBQ0UoKnEpKQorICAgICAgICBxKys7CisgICAgICB2YWwgPSB0cnlfb3B0aW9uKHAsIHEsICJuZG90czoiKTsKKyAgICAgIGlmICh2YWwgJiYgY2hhbm5lbC0+bmRvdHMgPT0gLTEpCisgICAgICAgIGNoYW5uZWwtPm5kb3RzID0gYXJlc3hfc2x0b3NpKHN0cnRvbCh2YWwsIE5VTEwsIDEwKSk7CisgICAgICB2YWwgPSB0cnlfb3B0aW9uKHAsIHEsICJyZXRyYW5zOiIpOworICAgICAgaWYgKHZhbCAmJiBjaGFubmVsLT50aW1lb3V0ID09IC0xKQorICAgICAgICBjaGFubmVsLT50aW1lb3V0ID0gYXJlc3hfc2x0b3NpKHN0cnRvbCh2YWwsIE5VTEwsIDEwKSk7CisgICAgICB2YWwgPSB0cnlfb3B0aW9uKHAsIHEsICJyZXRyeToiKTsKKyAgICAgIGlmICh2YWwgJiYgY2hhbm5lbC0+dHJpZXMgPT0gLTEpCisgICAgICAgIGNoYW5uZWwtPnRyaWVzID0gYXJlc3hfc2x0b3NpKHN0cnRvbCh2YWwsIE5VTEwsIDEwKSk7CisgICAgICB2YWwgPSB0cnlfb3B0aW9uKHAsIHEsICJyb3RhdGUiKTsKKyAgICAgIGlmICh2YWwgJiYgY2hhbm5lbC0+cm90YXRlID09IC0xKQorICAgICAgICBjaGFubmVsLT5yb3RhdGUgPSAxOworICAgICAgcCA9IHE7CisgICAgICB3aGlsZSAoSVNTUEFDRSgqcCkpCisgICAgICAgIHArKzsKKyAgICB9CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRyeV9vcHRpb24oY29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqcSwgY29uc3QgY2hhciAqb3B0KQoreworICBzaXplX3QgbGVuID0gc3RybGVuKG9wdCk7CisgIHJldHVybiAoKHNpemVfdCkocSAtIHApID49IGxlbiAmJiAhc3RybmNtcChwLCBvcHQsIGxlbikpID8gJnBbbGVuXSA6IE5VTEw7Cit9CisKKyNpZiAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoV0FUVDMyKSAmJiBcCisgICAgIWRlZmluZWQoQU5EUk9JRCkgJiYgIWRlZmluZWQoX19BTkRST0lEX18pICYmICFkZWZpbmVkKENBUkVTX1VTRV9MSUJSRVNPTFYpCitzdGF0aWMgY2hhciAqdHJ5X2NvbmZpZyhjaGFyICpzLCBjb25zdCBjaGFyICpvcHQsIGNoYXIgc2NjKQoreworICBzaXplX3QgbGVuOworICBjaGFyICpwOworICBjaGFyICpxOworCisgIGlmICghcyB8fCAhb3B0KQorICAgIC8qIG5vIGxpbmUgb3Igbm8gb3B0aW9uICovCisgICAgcmV0dXJuIE5VTEw7ICAvKiBMQ09WX0VYQ0xfTElORSAqLworCisgIC8qIEhhc2ggJyMnIGNoYXJhY3RlciBpcyBhbHdheXMgdXNlZCBhcyBwcmltYXJ5IGNvbW1lbnQgY2hhciwgYWRkaXRpb25hbGx5CisgICAgIGEgbm90LU5VTCBzZWNvbmRhcnkgY29tbWVudCBjaGFyIHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuIHNwZWNpZmllZC4gKi8KKworICAvKiB0cmltIGxpbmUgY29tbWVudCAqLworICBwID0gczsKKyAgaWYoc2NjKQorICAgIHdoaWxlICgqcCAmJiAoKnAgIT0gJyMnKSAmJiAoKnAgIT0gc2NjKSkKKyAgICAgIHArKzsKKyAgZWxzZQorICAgIHdoaWxlICgqcCAmJiAoKnAgIT0gJyMnKSkKKyAgICAgIHArKzsKKyAgKnAgPSAnXDAnOworCisgIC8qIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworICBxID0gcCAtIDE7CisgIHdoaWxlICgocSA+PSBzKSAmJiBJU1NQQUNFKCpxKSkKKyAgICBxLS07CisgICorK3EgPSAnXDAnOworCisgIC8qIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisgIHAgPSBzOworICB3aGlsZSAoKnAgJiYgSVNTUEFDRSgqcCkpCisgICAgcCsrOworCisgIGlmICghKnApCisgICAgLyogZW1wdHkgbGluZSAqLworICAgIHJldHVybiBOVUxMOworCisgIGlmICgobGVuID0gc3RybGVuKG9wdCkpID09IDApCisgICAgLyogZW1wdHkgb3B0aW9uICovCisgICAgcmV0dXJuIE5VTEw7ICAvKiBMQ09WX0VYQ0xfTElORSAqLworCisgIGlmIChzdHJuY21wKHAsIG9wdCwgbGVuKSAhPSAwKQorICAgIC8qIGxpbmUgYW5kIG9wdGlvbiBkbyBub3QgbWF0Y2ggKi8KKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBza2lwIG92ZXIgZ2l2ZW4gb3B0aW9uIG5hbWUgKi8KKyAgcCArPSBsZW47CisKKyAgaWYgKCEqcCkKKyAgICAvKiBubyBvcHRpb24gdmFsdWUgKi8KKyAgICByZXR1cm4gTlVMTDsgIC8qIExDT1ZfRVhDTF9MSU5FICovCisKKyAgaWYgKChvcHRbbGVuLTFdICE9ICc6JykgJiYgKG9wdFtsZW4tMV0gIT0gJz0nKSAmJiAhSVNTUEFDRSgqcCkpCisgICAgLyogd2hpdGVzcGFjZSBiZXR3ZWVuIG9wdGlvbiBuYW1lIGFuZCB2YWx1ZSBpcyBtYW5kYXRvcnkKKyAgICAgICBmb3IgZ2l2ZW4gb3B0aW9uIG5hbWVzIHdoaWNoIGRvIG5vdCBlbmQgd2l0aCAnOicgb3IgJz0nICovCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogc2tpcCBvdmVyIHdoaXRlc3BhY2UgKi8KKyAgd2hpbGUgKCpwICYmIElTU1BBQ0UoKnApKQorICAgIHArKzsKKworICBpZiAoISpwKQorICAgIC8qIG5vIG9wdGlvbiB2YWx1ZSAqLworICAgIHJldHVybiBOVUxMOworCisgIC8qIHJldHVybiBwb2ludGVyIHRvIG9wdGlvbiB2YWx1ZSAqLworICByZXR1cm4gcDsKK30KKyNlbmRpZiAgLyogIVdJTjMyICYgIVdBVFQzMiAmICFBTkRST0lEICYgIV9fQU5EUk9JRF9fICovCisKK3N0YXRpYyBpbnQgaXBfYWRkcihjb25zdCBjaGFyICppcGJ1Ziwgc3NpemVfdCBsZW4sIHN0cnVjdCBpbl9hZGRyICphZGRyKQoreworCisgIC8qIEZvdXIgb2N0ZXRzIGFuZCB0aHJlZSBwZXJpb2RzIHlpZWxkcyBhdCBtb3N0IDE1IGNoYXJhY3RlcnMuICovCisgIGlmIChsZW4gPiAxNSkKKyAgICByZXR1cm4gLTE7CisKKyAgYWRkci0+c19hZGRyID0gaW5ldF9hZGRyKGlwYnVmKTsKKyAgaWYgKGFkZHItPnNfYWRkciA9PSBJTkFERFJfTk9ORSAmJiBzdHJjbXAoaXBidWYsICIyNTUuMjU1LjI1NS4yNTUiKSAhPSAwKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5hdHVyYWxfbWFzayhzdHJ1Y3QgYXBhdHRlcm4gKnBhdCkKK3sKKyAgc3RydWN0IGluX2FkZHIgYWRkcjsKKworICAvKiBTdG9yZSBhIGhvc3QtYnl0ZS1vcmRlciBjb3B5IG9mIHBhdCBpbiBhIHN0cnVjdCBpbl9hZGRyLiAgSWNreSwKKyAgICogYnV0IHBvcnRhYmxlLgorICAgKi8KKyAgYWRkci5zX2FkZHIgPSBudG9obChwYXQtPmFkZHJWNC5zX2FkZHIpOworCisgIC8qIFRoaXMgaXMgb3V0IG9mIGRhdGUgaW4gdGhlIENJRFIgd29ybGQsIGJ1dCBzb21lIHBlb3BsZSBtaWdodAorICAgKiBzdGlsbCByZWx5IG9uIGl0LgorICAgKi8KKyAgaWYgKElOX0NMQVNTQShhZGRyLnNfYWRkcikpCisgICAgcGF0LT5tYXNrLmFkZHI0LnNfYWRkciA9IGh0b25sKElOX0NMQVNTQV9ORVQpOworICBlbHNlIGlmIChJTl9DTEFTU0IoYWRkci5zX2FkZHIpKQorICAgIHBhdC0+bWFzay5hZGRyNC5zX2FkZHIgPSBodG9ubChJTl9DTEFTU0JfTkVUKTsKKyAgZWxzZQorICAgIHBhdC0+bWFzay5hZGRyNC5zX2FkZHIgPSBodG9ubChJTl9DTEFTU0NfTkVUKTsKK30KKworc3RhdGljIGludCBzb3J0bGlzdF9hbGxvYyhzdHJ1Y3QgYXBhdHRlcm4gKipzb3J0bGlzdCwgaW50ICpuc29ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFwYXR0ZXJuICpwYXQpCit7CisgIHN0cnVjdCBhcGF0dGVybiAqbmV3c29ydDsKKyAgbmV3c29ydCA9IGFyZXNfcmVhbGxvYygqc29ydGxpc3QsICgqbnNvcnQgKyAxKSAqIHNpemVvZihzdHJ1Y3QgYXBhdHRlcm4pKTsKKyAgaWYgKCFuZXdzb3J0KQorICAgIHJldHVybiAwOworICBuZXdzb3J0Wypuc29ydF0gPSAqcGF0OworICAqc29ydGxpc3QgPSBuZXdzb3J0OworICAoKm5zb3J0KSsrOworICByZXR1cm4gMTsKK30KKworLyogaW5pdGlhbGl6ZSBhbiByYzQga2V5LiBJZiBwb3NzaWJsZSBhIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSByYW5kb20ga2V5CisgICBpcyBnZW5lcmF0ZWQgdXNpbmcgYSBzdWl0YWJsZSBmdW5jdGlvbiAoZm9yIGV4YW1wbGUgd2luMzIncyBSdGxHZW5SYW5kb20gYXMKKyAgIGRlc2NyaWJlZCBpbgorICAgaHR0cDovL2Jsb2dzLm1zZG4uY29tL21pY2hhZWxfaG93YXJkL2FyY2hpdmUvMjAwNS8wMS8xNC8zNTMzNzkuYXNweAorICAgb3RoZXJ3aXNlIHRoZSBjb2RlIGRlZmF1bHRzIHRvIGNyb3NzLXBsYXRmb3JtIGFsYmVpdCBsZXNzIHNlY3VyZSBtZWNoYW5pc20KKyAgIHVzaW5nIHJhbmQKKyovCitzdGF0aWMgdm9pZCByYW5kb21pemVfa2V5KHVuc2lnbmVkIGNoYXIqIGtleSxpbnQga2V5X2RhdGFfbGVuKQoreworICBpbnQgcmFuZG9taXplZCA9IDA7CisgIGludCBjb3VudGVyPTA7CisjaWZkZWYgV0lOMzIKKyAgQk9PTEVBTiByZXM7CisgIGlmIChhcmVzX2ZwU3lzdGVtRnVuY3Rpb24wMzYpCisgICAgeworICAgICAgcmVzID0gKCphcmVzX2ZwU3lzdGVtRnVuY3Rpb24wMzYpIChrZXksIGtleV9kYXRhX2xlbik7CisgICAgICBpZiAocmVzKQorICAgICAgICByYW5kb21pemVkID0gMTsKKyAgICB9CisjZWxzZSAvKiAhV0lOMzIgKi8KKyNpZmRlZiBSQU5ET01fRklMRQorICBGSUxFICpmID0gZm9wZW4oUkFORE9NX0ZJTEUsICJyYiIpOworICBpZihmKSB7CisgICAgY291bnRlciA9IGFyZXN4X3V6dG9zaShmcmVhZChrZXksIDEsIGtleV9kYXRhX2xlbiwgZikpOworICAgIGZjbG9zZShmKTsKKyAgfQorI2VuZGlmCisjZW5kaWYgLyogV0lOMzIgKi8KKworICBpZiAoIXJhbmRvbWl6ZWQpIHsKKyAgICBmb3IgKDtjb3VudGVyPGtleV9kYXRhX2xlbjtjb3VudGVyKyspCisgICAgICBrZXlbY291bnRlcl09KHVuc2lnbmVkIGNoYXIpKHJhbmQoKSAlIDI1Nik7ICAvKiBMQ09WX0VYQ0xfTElORSAqLworICB9Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9pZF9rZXkocmM0X2tleSoga2V5LGludCBrZXlfZGF0YV9sZW4pCit7CisgIHVuc2lnbmVkIGNoYXIgaW5kZXgxOworICB1bnNpZ25lZCBjaGFyIGluZGV4MjsKKyAgdW5zaWduZWQgY2hhciogc3RhdGU7CisgIHNob3J0IGNvdW50ZXI7CisgIHVuc2lnbmVkIGNoYXIgKmtleV9kYXRhX3B0ciA9IDA7CisKKyAga2V5X2RhdGFfcHRyID0gYXJlc19tYWxsb2Moa2V5X2RhdGFfbGVuKTsKKyAgaWYgKCFrZXlfZGF0YV9wdHIpCisgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICBtZW1zZXQoa2V5X2RhdGFfcHRyLCAwLCBrZXlfZGF0YV9sZW4pOworCisgIHN0YXRlID0gJmtleS0+c3RhdGVbMF07CisgIGZvcihjb3VudGVyID0gMDsgY291bnRlciA8IDI1NjsgY291bnRlcisrKQorICAgIC8qIHVubmVjZXNzYXJ5IEFORCBidXQgaXQga2VlcHMgc29tZSBjb21waWxlcnMgaGFwcGllciAqLworICAgIHN0YXRlW2NvdW50ZXJdID0gKHVuc2lnbmVkIGNoYXIpKGNvdW50ZXIgJiAweGZmKTsKKyAgcmFuZG9taXplX2tleShrZXktPnN0YXRlLGtleV9kYXRhX2xlbik7CisgIGtleS0+eCA9IDA7CisgIGtleS0+eSA9IDA7CisgIGluZGV4MSA9IDA7CisgIGluZGV4MiA9IDA7CisgIGZvcihjb3VudGVyID0gMDsgY291bnRlciA8IDI1NjsgY291bnRlcisrKQorICB7CisgICAgaW5kZXgyID0gKHVuc2lnbmVkIGNoYXIpKChrZXlfZGF0YV9wdHJbaW5kZXgxXSArIHN0YXRlW2NvdW50ZXJdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4MikgJSAyNTYpOworICAgIEFSRVNfU1dBUF9CWVRFKCZzdGF0ZVtjb3VudGVyXSwgJnN0YXRlW2luZGV4Ml0pOworCisgICAgaW5kZXgxID0gKHVuc2lnbmVkIGNoYXIpKChpbmRleDEgKyAxKSAlIGtleV9kYXRhX2xlbik7CisgIH0KKyAgYXJlc19mcmVlKGtleV9kYXRhX3B0cik7CisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CisKK3ZvaWQgYXJlc19zZXRfbG9jYWxfaXA0KGFyZXNfY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgbG9jYWxfaXApCit7CisgIGNoYW5uZWwtPmxvY2FsX2lwNCA9IGxvY2FsX2lwOworfQorCisvKiBsb2NhbF9pcDYgc2hvdWxkIGJlIDE2IGJ5dGVzIGluIGxlbmd0aCAqLwordm9pZCBhcmVzX3NldF9sb2NhbF9pcDYoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsb2NhbF9pcDYpCit7CisgIG1lbWNweSgmY2hhbm5lbC0+bG9jYWxfaXA2LCBsb2NhbF9pcDYsIHNpemVvZihjaGFubmVsLT5sb2NhbF9pcDYpKTsKK30KKworLyogbG9jYWxfZGV2X25hbWUgc2hvdWxkIGJlIG51bGwgdGVybWluYXRlZC4gKi8KK3ZvaWQgYXJlc19zZXRfbG9jYWxfZGV2KGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbG9jYWxfZGV2X25hbWUpCit7CisgIHN0cm5jcHkoY2hhbm5lbC0+bG9jYWxfZGV2X25hbWUsIGxvY2FsX2Rldl9uYW1lLAorICAgICAgICAgIHNpemVvZihjaGFubmVsLT5sb2NhbF9kZXZfbmFtZSkpOworICBjaGFubmVsLT5sb2NhbF9kZXZfbmFtZVtzaXplb2YoY2hhbm5lbC0+bG9jYWxfZGV2X25hbWUpIC0gMV0gPSAwOworfQorCisKK3ZvaWQgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrKGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrX2NyZWF0ZV9jYWxsYmFjayBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCit7CisgIGNoYW5uZWwtPnNvY2tfY3JlYXRlX2NiID0gY2I7CisgIGNoYW5uZWwtPnNvY2tfY3JlYXRlX2NiX2RhdGEgPSBkYXRhOworfQorCit2b2lkIGFyZXNfc2V0X3NvY2tldF9jb25maWd1cmVfY2FsbGJhY2soYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrX2NvbmZpZ19jYWxsYmFjayBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQoreworICBjaGFubmVsLT5zb2NrX2NvbmZpZ19jYiA9IGNiOworICBjaGFubmVsLT5zb2NrX2NvbmZpZ19jYl9kYXRhID0gZGF0YTsKK30KKworaW50IGFyZXNfc2V0X3NvcnRsaXN0KGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpzb3J0c3RyKQoreworICBpbnQgbnNvcnQgPSAwOworICBzdHJ1Y3QgYXBhdHRlcm4gKnNvcnRsaXN0ID0gTlVMTDsKKyAgaW50IHN0YXR1czsKKworICBpZiAoIWNoYW5uZWwpCisgICAgcmV0dXJuIEFSRVNfRU5PREFUQTsKKworICBzdGF0dXMgPSBjb25maWdfc29ydGxpc3QoJnNvcnRsaXN0LCAmbnNvcnQsIHNvcnRzdHIpOworICBpZiAoc3RhdHVzID09IEFSRVNfU1VDQ0VTUyAmJiBzb3J0bGlzdCkgeworICAgIGlmIChjaGFubmVsLT5zb3J0bGlzdCkKKyAgICAgIGFyZXNfZnJlZShjaGFubmVsLT5zb3J0bGlzdCk7CisgICAgY2hhbm5lbC0+c29ydGxpc3QgPSBzb3J0bGlzdDsKKyAgICBjaGFubmVsLT5uc29ydCA9IG5zb3J0OworICB9CisgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgYXJlc19faW5pdF9zZXJ2ZXJzX3N0YXRlKGFyZXNfY2hhbm5lbCBjaGFubmVsKQoreworICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXI7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5uc2VydmVyczsgaSsrKQorICAgIHsKKyAgICAgIHNlcnZlciA9ICZjaGFubmVsLT5zZXJ2ZXJzW2ldOworICAgICAgc2VydmVyLT51ZHBfc29ja2V0ID0gQVJFU19TT0NLRVRfQkFEOworICAgICAgc2VydmVyLT50Y3Bfc29ja2V0ID0gQVJFU19TT0NLRVRfQkFEOworICAgICAgc2VydmVyLT50Y3BfY29ubmVjdGlvbl9nZW5lcmF0aW9uID0gKytjaGFubmVsLT50Y3BfY29ubmVjdGlvbl9nZW5lcmF0aW9uOworICAgICAgc2VydmVyLT50Y3BfbGVuYnVmX3BvcyA9IDA7CisgICAgICBzZXJ2ZXItPnRjcF9idWZmZXJfcG9zID0gMDsKKyAgICAgIHNlcnZlci0+dGNwX2J1ZmZlciA9IE5VTEw7CisgICAgICBzZXJ2ZXItPnRjcF9sZW5ndGggPSAwOworICAgICAgc2VydmVyLT5xaGVhZCA9IE5VTEw7CisgICAgICBzZXJ2ZXItPnF0YWlsID0gTlVMTDsKKyAgICAgIGFyZXNfX2luaXRfbGlzdF9oZWFkKCZzZXJ2ZXItPnF1ZXJpZXNfdG9fc2VydmVyKTsKKyAgICAgIHNlcnZlci0+Y2hhbm5lbCA9IGNoYW5uZWw7CisgICAgICBzZXJ2ZXItPmlzX2Jyb2tlbiA9IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19pbml0X29wdGlvbnMuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaW5pdF9vcHRpb25zLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2NzdjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaW5pdF9vcHRpb25zLjMKQEAgLTAsMCArMSwyNjIgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIGJ5IERhbmllbCBTdGVuYmVyZworLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19JTklUIDMgIjUgTWFyY2ggMjAxMCIKKy5TSCBOQU1FCithcmVzX2luaXRfb3B0aW9ucyBcLSBJbml0aWFsaXplIGEgcmVzb2x2ZXIgY2hhbm5lbAorLlNIIFNZTk9QU0lTCisubmYKKyNpbmNsdWRlIDxhcmVzLmg+CisKK2ludCBhcmVzX2luaXRfb3B0aW9ucyhhcmVzX2NoYW5uZWwgKlxmSWNoYW5uZWxwdHJcZlAsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyZXNfb3B0aW9ucyAqXGZJb3B0aW9uc1xmUCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgXGZJb3B0bWFza1xmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCYXJlc19pbml0X29wdGlvbnMoMylcZlAgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBjb21tdW5pY2F0aW9ucyBjaGFubmVsCitmb3IgbmFtZSBzZXJ2aWNlIGxvb2t1cHMuICBJZiBpdCByZXR1cm5zIHN1Y2Nlc3NmdWxseSwKK1xmQmFyZXNfaW5pdF9vcHRpb25zKDMpXGZQIHdpbGwgc2V0IHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CitcZkljaGFubmVscHRyXGZQIHRvIGEgaGFuZGxlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG5hbWUgc2VydmljZSBjaGFubmVsLiAgVGhlCitjYWxsZXIgc2hvdWxkIGludm9rZSBcZklhcmVzX2Rlc3Ryb3koMylcZlAgb24gdGhlIGhhbmRsZSB3aGVuIHRoZSBjaGFubmVsIGlzCitubyBsb25nZXIgbmVlZGVkLgorCitUaGUgXGZJb3B0bWFza1xmUCBwYXJhbWV0ZXIgZ2VuZXJhbGx5IHNwZWNpZmllcyB3aGljaCBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvCitieSBcZklvcHRpb25zXGZQIGFyZSBzZXQsIGFzIGZvbGxvd3M6CisuVFAgMTgKKy5CIEFSRVNfT1BUX0ZMQUdTCisuQiBpbnQgXGZJZmxhZ3NcZlA7CisuYnIKK0ZsYWdzIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgcmVzb2x2ZXIuICBTZWUgYmVsb3cgZm9yIGEKK2Rlc2NyaXB0aW9uIG9mIHBvc3NpYmxlIGZsYWcgdmFsdWVzLgorLlRQIDE4CisuQiBBUkVTX09QVF9USU1FT1VUCisuQiBpbnQgXGZJdGltZW91dFxmUDsKKy5icgorVGhlIG51bWJlciBvZiBzZWNvbmRzIGVhY2ggbmFtZSBzZXJ2ZXIgaXMgZ2l2ZW4gdG8gcmVzcG9uZCB0byBhIHF1ZXJ5IG9uIHRoZQorZmlyc3QgdHJ5LiAgKEFmdGVyIHRoZSBmaXJzdCB0cnksIHRoZSB0aW1lb3V0IGFsZ29yaXRobSBiZWNvbWVzIG1vcmUKK2NvbXBsaWNhdGVkLCBidXQgc2NhbGVzIGxpbmVhcmx5IHdpdGggdGhlIHZhbHVlIG9mIFxmSXRpbWVvdXRcZlAuKSAgVGhlCitkZWZhdWx0IGlzIGZpdmUgc2Vjb25kcy4gVGhpcyBvcHRpb24gaXMgYmVpbmcgZGVwcmVjYXRlZCBieQorXGZJQVJFU19PUFRfVElNRU9VVE1TXGZQIHN0YXJ0aW5nIGluIGMtYXJlcyAxLjUuMi4KKy5UUCAxOAorLkIgQVJFU19PUFRfVElNRU9VVE1TCisuQiBpbnQgXGZJdGltZW91dFxmUDsKKy5icgorVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZWFjaCBuYW1lIHNlcnZlciBpcyBnaXZlbiB0byByZXNwb25kIHRvIGEgcXVlcnkgb24KK3RoZSBmaXJzdCB0cnkuICAoQWZ0ZXIgdGhlIGZpcnN0IHRyeSwgdGhlIHRpbWVvdXQgYWxnb3JpdGhtIGJlY29tZXMgbW9yZQorY29tcGxpY2F0ZWQsIGJ1dCBzY2FsZXMgbGluZWFybHkgd2l0aCB0aGUgdmFsdWUgb2YgXGZJdGltZW91dFxmUC4pICBUaGUKK2RlZmF1bHQgaXMgZml2ZSBzZWNvbmRzLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIHdpdGggdGhlIHNhbWUKK3N0cnVjdCBmaWVsZCBhcyB0aGUgZm9ybWVyIFxmSUFSRVNfT1BUX1RJTUVPVVRcZlAsIGl0IGlzIGJ1dCB0aGUgb3B0aW9uIGJpdHMKK3RoYXQgdGVsbCBjLWFyZXMgaG93IHRvIGludGVycHJldCB0aGUgbnVtYmVyLiBUaGlzIG9wdGlvbiB3YXMgYWRkZWQgaW4gYy1hcmVzCisxLjUuMi4KKy5UUCAxOAorLkIgQVJFU19PUFRfVFJJRVMKKy5CIGludCBcZkl0cmllc1xmUDsKKy5icgorVGhlIG51bWJlciBvZiB0cmllcyB0aGUgcmVzb2x2ZXIgd2lsbCB0cnkgY29udGFjdGluZyBlYWNoIG5hbWUgc2VydmVyCitiZWZvcmUgZ2l2aW5nIHVwLiAgVGhlIGRlZmF1bHQgaXMgZm91ciB0cmllcy4KKy5UUCAxOAorLkIgQVJFU19PUFRfTkRPVFMKKy5CIGludCBcZkluZG90c1xmUDsKKy5icgorVGhlIG51bWJlciBvZiBkb3RzIHdoaWNoIG11c3QgYmUgcHJlc2VudCBpbiBhIGRvbWFpbiBuYW1lIGZvciBpdCB0byBiZQorcXVlcmllZCBmb3IgImFzIGlzIiBwcmlvciB0byBxdWVyeWluZyBmb3IgaXQgd2l0aCB0aGUgZGVmYXVsdCBkb21haW4KK2V4dGVuc2lvbnMgYXBwZW5kZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxIHVubGVzcyBzZXQgb3RoZXJ3aXNlIGJ5CityZXNvbHYuY29uZiBvciB0aGUgUkVTX09QVElPTlMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisuVFAgMTgKKy5CIEFSRVNfT1BUX1VEUF9QT1JUCisuQiB1bnNpZ25lZCBzaG9ydCBcZkl1ZHBfcG9ydFxmUDsKKy5icgorVGhlIHBvcnQgdG8gdXNlIGZvciBxdWVyaWVzIG92ZXIgVURQLCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MyAoaW4gbmV0d29yayBieXRlIG9yZGVyKSwgdGhlIHN0YW5kYXJkIG5hbWUKK3NlcnZpY2UgcG9ydC4KKy5UUCAxOAorLkIgQVJFU19PUFRfVENQX1BPUlQKKy5CIHVuc2lnbmVkIHNob3J0IFxmSXRjcF9wb3J0XGZQOworLmJyCitUaGUgcG9ydCB0byB1c2UgZm9yIHF1ZXJpZXMgb3ZlciBUQ1AsIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDUzIChpbiBuZXR3b3JrIGJ5dGUgb3JkZXIpLCB0aGUgc3RhbmRhcmQgbmFtZQorc2VydmljZSBwb3J0LgorLlRQIDE4CisuQiBBUkVTX09QVF9TRVJWRVJTCisuQiBzdHJ1Y3QgaW5fYWRkciAqXGZJc2VydmVyc1xmUDsKKy5icgorLkIgaW50IFxmSW5zZXJ2ZXJzXGZQOworLmJyCitUaGUgbGlzdCBvZiBJUHY0IHNlcnZlcnMgdG8gY29udGFjdCwgaW5zdGVhZCBvZiB0aGUgc2VydmVycyBzcGVjaWZpZWQgaW4KK3Jlc29sdi5jb25mIG9yIHRoZSBsb2NhbCBuYW1lZC4gSW4gb3JkZXIgdG8gYWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBlaXRoZXIKK0lQdjQgb3IgSVB2NiBuYW1lIHNlcnZlcnMsIHRoZQorLkJSIGFyZXNfc2V0X3NlcnZlcnMoMykKK2Z1bmN0aW9uIG11c3QgYmUgdXNlZCBpbnN0ZWFkLgorLlRQIDE4CisuQiBBUkVTX09QVF9ET01BSU5TCisuQiBjaGFyICoqXGZJZG9tYWluc1xmUDsKKy5icgorLkIgaW50IFxmSW5kb21haW5zXGZQOworLmJyCitUaGUgZG9tYWlucyB0byBzZWFyY2gsIGluc3RlYWQgb2YgdGhlIGRvbWFpbnMgc3BlY2lmaWVkIGluIHJlc29sdi5jb25mCitvciB0aGUgZG9tYWluIGRlcml2ZWQgZnJvbSB0aGUga2VybmVsIGhvc3RuYW1lIHZhcmlhYmxlLgorLlRQIDE4CisuQiBBUkVTX09QVF9MT09LVVBTCisuQiBjaGFyICpcZklsb29rdXBzXGZQOworLmJyCitUaGUgbG9va3VwcyB0byBwZXJmb3JtIGZvciBob3N0IHF1ZXJpZXMuCisuSSBsb29rdXBzCitzaG91bGQgYmUgc2V0IHRvIGEgc3RyaW5nIG9mIHRoZSBjaGFyYWN0ZXJzICJiIiBvciAiZiIsIHdoZXJlICJiIgoraW5kaWNhdGVzIGEgRE5TIGxvb2t1cCBhbmQgImYiIGluZGljYXRlcyBhIGxvb2t1cCBpbiB0aGUgaG9zdHMgZmlsZS4KKy5UUCAxOAorLkIgQVJFU19PUFRfU09DS19TVEFURV9DQgorLkIgdm9pZCAoKlxmSXNvY2tfc3RhdGVfY2JcZlApKHZvaWQgKmRhdGEsIGludCBzLCBpbnQgcmVhZCwgaW50IHdyaXRlKTsKKy5icgorLkIgdm9pZCAqXGZJc29ja19zdGF0ZV9jYl9kYXRhXGZQOworLmJyCitBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiBhIHNvY2tldCBjaGFuZ2VzIHN0YXRlLgorLkkgcword2lsbCBiZSBwYXNzZWQgdGhlIHNvY2tldCB3aG9zZSBzdGF0ZSBoYXMgY2hhbmdlZDsKKy5JIHJlYWQKK3dpbGwgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHNvY2tldCBzaG91bGQgbGlzdGVuIGZvciByZWFkIGV2ZW50cywgYW5kCisuSSB3cml0ZQord2lsbCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGUgc29ja2V0IHNob3VsZCBsaXN0ZW4gZm9yIHdyaXRlIGV2ZW50cy4KK1RoZSB2YWx1ZSBvZgorLkkgc29ja19zdGF0ZV9jYl9kYXRhCit3aWxsIGJlIHBhc3NlZCBhcyB0aGUKKy5JIGRhdGEKK2FyZ3VtZW50LgorLlRQIDE4CisuQiBBUkVTX09QVF9TT1JUTElTVAorLkIgc3RydWN0IGFwYXR0ZXJuICpcZklzb3J0bGlzdFxmUDsKKy5icgorLkIgaW50IFxmSW5zb3J0XGZQOworLmJyCitBIGxpc3Qgb2YgSVAgYWRkcmVzcyByYW5nZXMgdGhhdCBzcGVjaWZpZXMgdGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgdGhhdAorcmVzdWx0cyBmcm9tIFxmSWFyZXNfZ2V0aG9zdGJ5bmFtZVxmUCBzaG91bGQgYmUgcmV0dXJuZWQgaW4uICBOb3RlIHRoYXQKK3RoaXMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGEgc29ydGxpc3QgcmV0cmlldmVkIHZpYQorXGZCYXJlc19zYXZlX29wdGlvbnMoMylcZlAgKGJlY2F1c2UKKy5CIHN0cnVjdCBhcGF0dGVybgoraXMgb3BhcXVlKTsgdG8gc2V0IGEgZnJlc2ggc29ydCBsaXN0LCB1c2UgXGZCYXJlc19zZXRfc29ydGxpc3QoMylcZlAuCisuVFAgMTgKKy5CIEFSRVNfT1BUX1NPQ0tfU05EQlVGCisuQiBpbnQgXGZJc29ja2V0X3NlbmRfYnVmZmVyX3NpemVcZlA7CisuYnIKK1RoZSBzZW5kIGJ1ZmZlciBzaXplIHRvIHNldCBmb3IgdGhlIHNvY2tldC4KKy5UUCAxOAorLkIgQVJFU19PUFRfU09DS19SQ1ZCVUYKKy5CIGludCBcZklzb2NrZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZVxmUDsKKy5icgorVGhlIHJlY2VpdmUgYnVmZmVyIHNpemUgdG8gc2V0IGZvciB0aGUgc29ja2V0LgorLlRQIDE4CisuQiBBUkVTX09QVF9FRE5TUFNaCisuQiBpbnQgXGZJZWRuc3BzelxmUDsKKy5icgorVGhlIG1lc3NhZ2Ugc2l6ZSB0byBiZSBhZHZlcnRpemVkIGluIEVETlM7IG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZQorLkIgQVJFU19GTEFHX0VETlMKK2ZsYWcgaXMgc2V0LgorLmJyCisuUFAKK1RoZSBcZklvcHRtYXNrXGZQIHBhcmFtZXRlciBhbHNvIGluY2x1ZGVzIG9wdGlvbnMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcKK2ZpZWxkIGluIHRoZQorLkIgYXJlc19vcHRpb25zCitzdHJ1Y3R1cmUsIGFzIGZvbGxvd3M6CisuVFAgMjMKKy5CIEFSRVNfT1BUX1JPVEFURQorUGVyZm9ybSByb3VuZC1yb2JpbiBzZWxlY3Rpb24gb2YgdGhlIG5hbWVzZXJ2ZXJzIGNvbmZpZ3VyZWQgZm9yIHRoZSBjaGFubmVsCitmb3IgZWFjaCByZXNvbHV0aW9uLgorLlRQIDIzCisuQiBBUkVTX09QVF9OT1JPVEFURQorRG8gbm90IHBlcmZvcm0gcm91bmQtcm9iaW4gbmFtZXNlcnZlciBzZWxlY3Rpb247IGFsd2F5cyB1c2UgdGhlIGxpc3Qgb2YKK25hbWVzZXJ2ZXJzIGluIHRoZSBzYW1lIG9yZGVyLgorLlBQCitUaGUKKy5JIGZsYWdzCitmaWVsZCBzaG91bGQgYmUgdGhlIGJpdHdpc2Ugb3Igb2Ygc29tZSBzdWJzZXQgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuVFAgMjMKKy5CIEFSRVNfRkxBR19VU0VWQworQWx3YXlzIHVzZSBUQ1AgcXVlcmllcyAodGhlICJ2aXJ0dWFsIGNpcmN1aXQiKSBpbnN0ZWFkIG9mIFVEUAorcXVlcmllcy4gIE5vcm1hbGx5LCBUQ1AgaXMgb25seSB1c2VkIGlmIGEgVURQIHF1ZXJ5IHlpZWxkcyBhIHRydW5jYXRlZAorcmVzdWx0LgorLlRQIDIzCisuQiBBUkVTX0ZMQUdfUFJJTUFSWQorT25seSBxdWVyeSB0aGUgZmlyc3Qgc2VydmVyIGluIHRoZSBsaXN0IG9mIHNlcnZlcnMgdG8gcXVlcnkuCisuVFAgMjMKKy5CIEFSRVNfRkxBR19JR05UQworSWYgYSB0cnVuY2F0ZWQgcmVzcG9uc2UgdG8gYSBVRFAgcXVlcnkgaXMgcmVjZWl2ZWQsIGRvIG5vdCBmYWxsIGJhY2sKK3RvIFRDUDsgc2ltcGx5IGNvbnRpbnVlIG9uIHdpdGggdGhlIHRydW5jYXRlZCByZXNwb25zZS4KKy5UUCAyMworLkIgQVJFU19GTEFHX05PUkVDVVJTRQorRG8gbm90IHNldCB0aGUgInJlY3Vyc2lvbiBkZXNpcmVkIiBiaXQgb24gb3V0Z29pbmcgcXVlcmllcywgc28gdGhhdCB0aGUgbmFtZQorc2VydmVyIGJlaW5nIGNvbnRhY3RlZCB3aWxsIG5vdCB0cnkgdG8gZmV0Y2ggdGhlIGFuc3dlciBmcm9tIG90aGVyIHNlcnZlcnMgaWYKK2l0IGRvZXNuJ3Qga25vdyB0aGUgYW5zd2VyIGxvY2FsbHkuIEJlIGF3YXJlIHRoYXQgYXJlcyB3aWxsIG5vdCBkbyB0aGUKK3JlY3Vyc2lvbiBmb3IgeW91LiAgUmVjdXJzaW9uIG11c3QgYmUgaGFuZGxlZCBieSB0aGUgYXBwbGljYXRpb24gY2FsbGluZyBhcmVzCitpZiBcZklBUkVTX0ZMQUdfTk9SRUNVUlNFXGZQIGlzIHNldC4KKy5UUCAyMworLkIgQVJFU19GTEFHX1NUQVlPUEVOCitEbyBub3QgY2xvc2UgY29tbXVuaWNhdGlvbnMgc29ja2V0cyB3aGVuIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMKK2Ryb3BzIHRvIHplcm8uCisuVFAgMjMKKy5CIEFSRVNfRkxBR19OT1NFQVJDSAorRG8gbm90IHVzZSB0aGUgZGVmYXVsdCBzZWFyY2ggZG9tYWluczsgb25seSBxdWVyeSBob3N0bmFtZXMgYXMtaXMgb3IKK2FzIGFsaWFzZXMuCisuVFAgMjMKKy5CIEFSRVNfRkxBR19OT0FMSUFTRVMKK0RvIG5vdCBob25vciB0aGUgSE9TVEFMSUFTRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIG5vcm1hbGx5CitzcGVjaWZpZXMgYSBmaWxlIG9mIGhvc3RuYW1lIHRyYW5zbGF0aW9ucy4KKy5UUCAyMworLkIgQVJFU19GTEFHX05PQ0hFQ0tSRVNQCitEbyBub3QgZGlzY2FyZCByZXNwb25zZXMgd2l0aCB0aGUgU0VSVkZBSUwsIE5PVElNUCwgb3IgUkVGVVNFRAorcmVzcG9uc2UgY29kZSBvciByZXNwb25zZXMgd2hvc2UgcXVlc3Rpb25zIGRvbid0IG1hdGNoIHRoZSBxdWVzdGlvbnMKK2luIHRoZSByZXF1ZXN0LiAgUHJpbWFyaWx5IHVzZWZ1bCBmb3Igd3JpdGluZyBjbGllbnRzIHdoaWNoIG1pZ2h0IGJlCit1c2VkIHRvIHRlc3Qgb3IgZGVidWcgbmFtZSBzZXJ2ZXJzLgorLlRQIDIzCisuQiBBUkVTX0ZMQUdfRUROUworSW5jbHVkZSBhbiBFRE5TIHBzZXVkby1yZXNvdXJjZSByZWNvcmQgKFJGQyAyNjcxKSBpbiBnZW5lcmF0ZWQgcmVxdWVzdHMuCisuU0ggUkVUVVJOIFZBTFVFUworXGZCYXJlc19pbml0X29wdGlvbnMoMylcZlAgY2FuIHJldHVybiBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuVFAgMTQKKy5CIEFSRVNfU1VDQ0VTUworSW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLgorLlRQIDE0CisuQiBBUkVTX0VGSUxFCitBIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3VsZCBub3QgYmUgcmVhZC4KKy5UUCAxNAorLkIgQVJFU19FTk9NRU0KK1RoZSBwcm9jZXNzJ3MgYXZhaWxhYmxlIG1lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlRQIDE0CisuQiBBUkVTX0VOT1RJTklUSUFMSVpFRAorYy1hcmVzIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gbm90IHlldCBwZXJmb3JtZWQuCisuU0ggTk9URVMKK1doZW4gaW5pdGlhbGl6aW5nIGZyb20KKy5CIC9ldGMvcmVzb2x2LmNvbmYsCitcZkJhcmVzX2luaXRfb3B0aW9ucygzKVxmUCByZWFkcyB0aGUgXGZJZG9tYWluXGZQIGFuZCBcZklzZWFyY2hcZlAgZGlyZWN0aXZlcwordG8gYWxsb3cgbG9va3VwcyBvZiBzaG9ydCBuYW1lcyByZWxhdGl2ZSB0byB0aGUgZG9tYWlucyBzcGVjaWZpZWQuIFRoZQorXGZJZG9tYWluXGZQIGFuZCBcZklzZWFyY2hcZlAgZGlyZWN0aXZlcyBvdmVycmlkZSBvbmUgYW5vdGhlci4gSWYgbW9yZSB0aGF0CitvbmUgaW5zdGFuY2Ugb2YgZWl0aGVyIFxmSWRvbWFpblxmUCBvciBcZklzZWFyY2hcZlAgZGlyZWN0aXZlcyBpcyBzcGVjaWZpZWQsCit0aGUgbGFzdCBvY2N1cnJlbmNlIHdpbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZQorLkJSIHJlc29sdi5jb25mICg1KQorbWFudWFsIHBhZ2UuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2luaXQoMyksCisuQlIgYXJlc19kZXN0cm95KDMpLAorLkJSIGFyZXNfZHVwKDMpLAorLkJSIGFyZXNfbGlicmFyeV9pbml0KDMpLAorLkJSIGFyZXNfc2F2ZV9vcHRpb25zKDMpLAorLkJSIGFyZXNfc2V0X3NlcnZlcnMoMyksCisuQlIgYXJlc19zZXRfc29ydGxpc3QoMykKKy5TSCBBVVRIT1IKK0dyZWcgSHVkc29uLCBNSVQgSW5mb3JtYXRpb24gU3lzdGVtcworLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5icgorQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgYnkgRGFuaWVsIFN0ZW5iZXJnLgorCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2lwaGxwYXBpLmggYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2lwaGxwYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzYWVlMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaXBobHBhcGkuaApAQCAtMCwwICsxLDIyMSBAQAorI2lmbmRlZiBIRUFERVJfQ0FSRVNfSVBITFBBUElfSAorI2RlZmluZSBIRUFERVJfQ0FSRVNfSVBITFBBUElfSAorCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMTEgYnkgRGFuaWVsIFN0ZW5iZXJnIGV0IGFsCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2lmIGRlZmluZWQoVVNFX1dJTlNPQ0spCisKKyNpZm5kZWYgSU5FVF9BRERSU1RSTEVOCisjZGVmaW5lIElORVRfQUREUlNUUkxFTiAgMjIKKyNlbmRpZgorCisjaWZuZGVmIElORVQ2X0FERFJTVFJMRU4KKyNkZWZpbmUgSU5FVDZfQUREUlNUUkxFTiA2NQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiAhZGVmaW5lZChfV1MyREVGXykgICAgICAgICAgICYmIFwKKyAgICAhZGVmaW5lZChfX0NTQUREUl9ERUZJTkVEX18pICYmIFwKKyAgICAhZGVmaW5lZChfX0NTQUREUl9UX0RFRklORUQpCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgc3RydWN0IF9TT0NLRVRfQUREUkVTUyB7CisgIExQU09DS0FERFIgbHBTb2NrYWRkcjsKKyAgSU5UIGlTb2NrYWRkckxlbmd0aDsKK30gU09DS0VUX0FERFJFU1MsICpQU09DS0VUX0FERFJFU1M7CisKK3R5cGVkZWYgc3RydWN0IF9DU0FERFJfSU5GTyB7CisgIFNPQ0tFVF9BRERSRVNTIExvY2FsQWRkcjsKKyAgU09DS0VUX0FERFJFU1MgUmVtb3RlQWRkcjsKKyAgSU5UIGlTb2NrZXRUeXBlOworICBJTlQgaVByb3RvY29sOworfSBDU0FERFJfSU5GTywgKlBDU0FERFJfSU5GTzsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZW5kaWYgLyogISBfV1MyREVGXyAgICAgICAgICAgJiYgXCAgKi8KKy8qICAgICAgICAhIF9fQ1NBRERSX0RFRklORURfXyAmJiBcICAqLworLyogICAgICAgICEgX19DU0FERFJfVF9ERUZJTkVEICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmICFkZWZpbmVkKElQX0FEQVBURVJfREROU19FTkFCTEVEKQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIElQX0FEQVBURVJfQUREUkVTU19ETlNfRUxJR0lCTEUgIDB4MDAwMQorI2RlZmluZSBJUF9BREFQVEVSX0FERFJFU1NfVFJBTlNJRU5UICAgICAweDAwMDIKKworI2RlZmluZSBJUF9BREFQVEVSX0RETlNfRU5BQkxFRCAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgSVBfQURBUFRFUl9SRUdJU1RFUl9BREFQVEVSX1NVRkZJWCAgICAgMHgwMDAyCisjZGVmaW5lIElQX0FEQVBURVJfREhDUF9FTkFCTEVEICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJUF9BREFQVEVSX1JFQ0VJVkVfT05MWSAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgSVBfQURBUFRFUl9OT19NVUxUSUNBU1QgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIElQX0FEQVBURVJfSVBWNl9PVEhFUl9TVEFURUZVTF9DT05GSUcgIDB4MDAyMAorCisjZGVmaW5lIEdBQV9GTEFHX1NLSVBfVU5JQ0FTVCAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdBQV9GTEFHX1NLSVBfQU5ZQ0FTVCAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdBQV9GTEFHX1NLSVBfTVVMVElDQVNUICAgICAgMHgwMDA0CisjZGVmaW5lIEdBQV9GTEFHX1NLSVBfRE5TX1NFUlZFUiAgICAgMHgwMDA4CisjZGVmaW5lIEdBQV9GTEFHX0lOQ0xVREVfUFJFRklYICAgICAgMHgwMDEwCisjZGVmaW5lIEdBQV9GTEFHX1NLSVBfRlJJRU5ETFlfTkFNRSAgMHgwMDIwCisKK3R5cGVkZWYgZW51bSB7CisgIElwUHJlZml4T3JpZ2luT3RoZXIgPSAwLAorICBJcFByZWZpeE9yaWdpbk1hbnVhbCwKKyAgSXBQcmVmaXhPcmlnaW5XZWxsS25vd24sCisgIElwUHJlZml4T3JpZ2luRGhjcCwKKyAgSXBQcmVmaXhPcmlnaW5Sb3V0ZXJBZHZlcnRpc2VtZW50Cit9IElQX1BSRUZJWF9PUklHSU47CisKK3R5cGVkZWYgZW51bSB7CisgIElwU3VmZml4T3JpZ2luT3RoZXIgPSAwLAorICBJcFN1ZmZpeE9yaWdpbk1hbnVhbCwKKyAgSXBTdWZmaXhPcmlnaW5XZWxsS25vd24sCisgIElwU3VmZml4T3JpZ2luRGhjcCwKKyAgSXBTdWZmaXhPcmlnaW5MaW5rTGF5ZXJBZGRyZXNzLAorICBJcFN1ZmZpeE9yaWdpblJhbmRvbQorfSBJUF9TVUZGSVhfT1JJR0lOOworCit0eXBlZGVmIGVudW0geworICBJcERhZFN0YXRlSW52YWxpZCA9IDAsCisgIElwRGFkU3RhdGVUZW50YXRpdmUsCisgIElwRGFkU3RhdGVEdXBsaWNhdGUsCisgIElwRGFkU3RhdGVEZXByZWNhdGVkLAorICBJcERhZFN0YXRlUHJlZmVycmVkCit9IElQX0RBRF9TVEFURTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSWZPcGVyU3RhdHVzVXAgPSAxLAorICBJZk9wZXJTdGF0dXNEb3duLAorICBJZk9wZXJTdGF0dXNUZXN0aW5nLAorICBJZk9wZXJTdGF0dXNVbmtub3duLAorICBJZk9wZXJTdGF0dXNEb3JtYW50LAorICBJZk9wZXJTdGF0dXNOb3RQcmVzZW50LAorICBJZk9wZXJTdGF0dXNMb3dlckxheWVyRG93bgorfSBJRl9PUEVSX1NUQVRVUzsKKwordHlwZWRlZiBlbnVtIHsKKyAgU2NvcGVMZXZlbEludGVyZmFjZSAgICA9IDB4MDAwMSwKKyAgU2NvcGVMZXZlbExpbmsgICAgICAgICA9IDB4MDAwMiwKKyAgU2NvcGVMZXZlbFN1Ym5ldCAgICAgICA9IDB4MDAwMywKKyAgU2NvcGVMZXZlbEFkbWluICAgICAgICA9IDB4MDAwNCwKKyAgU2NvcGVMZXZlbFNpdGUgICAgICAgICA9IDB4MDAwNSwKKyAgU2NvcGVMZXZlbE9yZ2FuaXphdGlvbiA9IDB4MDAwOCwKKyAgU2NvcGVMZXZlbEdsb2JhbCAgICAgICA9IDB4MDAwRQorfSBTQ09QRV9MRVZFTDsKKwordHlwZWRlZiBzdHJ1Y3QgX0lQX0FEQVBURVJfVU5JQ0FTVF9BRERSRVNTIHsKKyAgdW5pb24geworICAgIFVMT05HTE9ORyBBbGlnbm1lbnQ7CisgICAgc3RydWN0IHsKKyAgICAgIFVMT05HIExlbmd0aDsKKyAgICAgIERXT1JEIEZsYWdzOworICAgIH0gczsKKyAgfSB1OworICBzdHJ1Y3QgX0lQX0FEQVBURVJfVU5JQ0FTVF9BRERSRVNTICpOZXh0OworICBTT0NLRVRfQUREUkVTUyBBZGRyZXNzOworICBJUF9QUkVGSVhfT1JJR0lOIFByZWZpeE9yaWdpbjsKKyAgSVBfU1VGRklYX09SSUdJTiBTdWZmaXhPcmlnaW47CisgIElQX0RBRF9TVEFURSBEYWRTdGF0ZTsKKyAgVUxPTkcgVmFsaWRMaWZldGltZTsKKyAgVUxPTkcgUHJlZmVycmVkTGlmZXRpbWU7CisgIFVMT05HIExlYXNlTGlmZXRpbWU7Cit9IElQX0FEQVBURVJfVU5JQ0FTVF9BRERSRVNTLCAqUElQX0FEQVBURVJfVU5JQ0FTVF9BRERSRVNTOworCit0eXBlZGVmIHN0cnVjdCBfSVBfQURBUFRFUl9BTllDQVNUX0FERFJFU1MgeworICB1bmlvbiB7CisgICAgVUxPTkdMT05HIEFsaWdubWVudDsKKyAgICBzdHJ1Y3QgeworICAgICAgVUxPTkcgTGVuZ3RoOworICAgICAgRFdPUkQgRmxhZ3M7CisgICAgfSBzOworICB9IHU7CisgIHN0cnVjdCBfSVBfQURBUFRFUl9BTllDQVNUX0FERFJFU1MgKk5leHQ7CisgIFNPQ0tFVF9BRERSRVNTIEFkZHJlc3M7Cit9IElQX0FEQVBURVJfQU5ZQ0FTVF9BRERSRVNTLCAqUElQX0FEQVBURVJfQU5ZQ0FTVF9BRERSRVNTOworCit0eXBlZGVmIHN0cnVjdCBfSVBfQURBUFRFUl9NVUxUSUNBU1RfQUREUkVTUyB7CisgIHVuaW9uIHsKKyAgICBVTE9OR0xPTkcgQWxpZ25tZW50OworICAgIHN0cnVjdCB7CisgICAgICBVTE9ORyBMZW5ndGg7CisgICAgICBEV09SRCBGbGFnczsKKyAgICB9IHM7CisgIH0gdTsKKyAgc3RydWN0IF9JUF9BREFQVEVSX01VTFRJQ0FTVF9BRERSRVNTICpOZXh0OworICBTT0NLRVRfQUREUkVTUyBBZGRyZXNzOworfSBJUF9BREFQVEVSX01VTFRJQ0FTVF9BRERSRVNTLCAqUElQX0FEQVBURVJfTVVMVElDQVNUX0FERFJFU1M7CisKK3R5cGVkZWYgc3RydWN0IF9JUF9BREFQVEVSX0ROU19TRVJWRVJfQUREUkVTUyB7CisgIHVuaW9uIHsKKyAgICBVTE9OR0xPTkcgQWxpZ25tZW50OworICAgIHN0cnVjdCB7CisgICAgICBVTE9ORyBMZW5ndGg7CisgICAgICBEV09SRCBSZXNlcnZlZDsKKyAgICB9IHM7CisgIH0gdTsKKyAgc3RydWN0IF9JUF9BREFQVEVSX0ROU19TRVJWRVJfQUREUkVTUyAqTmV4dDsKKyAgU09DS0VUX0FERFJFU1MgQWRkcmVzczsKK30gSVBfQURBUFRFUl9ETlNfU0VSVkVSX0FERFJFU1MsICpQSVBfQURBUFRFUl9ETlNfU0VSVkVSX0FERFJFU1M7CisKK3R5cGVkZWYgc3RydWN0IF9JUF9BREFQVEVSX1BSRUZJWCB7CisgIHVuaW9uIHsKKyAgICBVTE9OR0xPTkcgQWxpZ25tZW50OworICAgIHN0cnVjdCB7CisgICAgICBVTE9ORyBMZW5ndGg7CisgICAgICBEV09SRCBGbGFnczsKKyAgICB9IHM7CisgIH0gdTsKKyAgc3RydWN0IF9JUF9BREFQVEVSX1BSRUZJWCAqTmV4dDsKKyAgU09DS0VUX0FERFJFU1MgQWRkcmVzczsKKyAgVUxPTkcgUHJlZml4TGVuZ3RoOworfSBJUF9BREFQVEVSX1BSRUZJWCwgKlBJUF9BREFQVEVSX1BSRUZJWDsKKwordHlwZWRlZiBzdHJ1Y3QgX0lQX0FEQVBURVJfQUREUkVTU0VTIHsKKyAgdW5pb24geworICAgIFVMT05HTE9ORyBBbGlnbm1lbnQ7CisgICAgc3RydWN0IHsKKyAgICAgIFVMT05HIExlbmd0aDsKKyAgICAgIERXT1JEIElmSW5kZXg7CisgICAgfSBzOworICB9IHU7CisgIHN0cnVjdCBfSVBfQURBUFRFUl9BRERSRVNTRVMgKk5leHQ7CisgIFBDSEFSIEFkYXB0ZXJOYW1lOworICBQSVBfQURBUFRFUl9VTklDQVNUX0FERFJFU1MgRmlyc3RVbmljYXN0QWRkcmVzczsKKyAgUElQX0FEQVBURVJfQU5ZQ0FTVF9BRERSRVNTIEZpcnN0QW55Y2FzdEFkZHJlc3M7CisgIFBJUF9BREFQVEVSX01VTFRJQ0FTVF9BRERSRVNTIEZpcnN0TXVsdGljYXN0QWRkcmVzczsKKyAgUElQX0FEQVBURVJfRE5TX1NFUlZFUl9BRERSRVNTIEZpcnN0RG5zU2VydmVyQWRkcmVzczsKKyAgUFdDSEFSIERuc1N1ZmZpeDsKKyAgUFdDSEFSIERlc2NyaXB0aW9uOworICBQV0NIQVIgRnJpZW5kbHlOYW1lOworICBCWVRFIFBoeXNpY2FsQWRkcmVzc1tNQVhfQURBUFRFUl9BRERSRVNTX0xFTkdUSF07CisgIERXT1JEIFBoeXNpY2FsQWRkcmVzc0xlbmd0aDsKKyAgRFdPUkQgRmxhZ3M7CisgIERXT1JEIE10dTsKKyAgRFdPUkQgSWZUeXBlOworICBJRl9PUEVSX1NUQVRVUyBPcGVyU3RhdHVzOworICBEV09SRCBJcHY2SWZJbmRleDsKKyAgRFdPUkQgWm9uZUluZGljZXNbMTZdOworICBQSVBfQURBUFRFUl9QUkVGSVggRmlyc3RQcmVmaXg7Cit9IElQX0FEQVBURVJfQUREUkVTU0VTLCAqUElQX0FEQVBURVJfQUREUkVTU0VTOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2VuZGlmIC8qICEgSVBfQURBUFRFUl9ERE5TX0VOQUJMRUQgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBVU0VfV0lOU09DSyAqLworCisjZW5kaWYgLyogSEVBREVSX0NBUkVTX0lQSExQQVBJX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaXB2Ni5oIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19pcHY2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwMTdmMQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfaXB2Ni5oCkBAIC0wLDAgKzEsNzggQEAKKworLyogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IERvbWluaWNrIE1lZ2xpbworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpZm5kZWYgQVJFU19JUFY2X0gKKyNkZWZpbmUgQVJFU19JUFY2X0gKKworI2lmbmRlZiBIQVZFX1BGX0lORVQ2CisjZGVmaW5lIFBGX0lORVQ2IEFGX0lORVQ2CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjYKK3N0cnVjdCBzb2NrYWRkcl9pbjYKK3sKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgc2luNl9mYW1pbHk7CisgIHVuc2lnbmVkIHNob3J0ICAgICAgIHNpbjZfcG9ydDsKKyAgdW5zaWduZWQgbG9uZyAgICAgICAgc2luNl9mbG93aW5mbzsKKyAgc3RydWN0IGFyZXNfaW42X2FkZHIgc2luNl9hZGRyOworICB1bnNpZ25lZCBpbnQgICAgICAgICBzaW42X3Njb3BlX2lkOworfTsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSVUNUX0FERFJJTkZPCitzdHJ1Y3QgYWRkcmluZm8KK3sKKyAgaW50ICAgICAgICAgICAgICBhaV9mbGFnczsKKyAgaW50ICAgICAgICAgICAgICBhaV9mYW1pbHk7CisgIGludCAgICAgICAgICAgICAgYWlfc29ja3R5cGU7CisgIGludCAgICAgICAgICAgICAgYWlfcHJvdG9jb2w7CisgIGFyZXNfc29ja2xlbl90ICAgYWlfYWRkcmxlbjsgICAvKiBGb2xsb3cgcmZjMzQ5MyBzdHJ1Y3QgYWRkcmluZm8gKi8KKyAgY2hhciAgICAgICAgICAgICphaV9jYW5vbm5hbWU7CisgIHN0cnVjdCBzb2NrYWRkciAqYWlfYWRkcjsKKyAgc3RydWN0IGFkZHJpbmZvICphaV9uZXh0OworfTsKKyNlbmRpZgorCisjaWZuZGVmIE5TX0lONkFERFJTWgorI2lmbmRlZiBIQVZFX1NUUlVDVF9JTjZfQUREUgorLyogV2UgY2Fubm90IGhhdmUgaXQgc2V0IHRvIHplcm8sIHNvIHdlIHBpY2sgYSBmaXhlZCB2YWx1ZSBoZXJlICovCisjZGVmaW5lIE5TX0lONkFERFJTWiAxNgorI2Vsc2UKKyNkZWZpbmUgTlNfSU42QUREUlNaIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5TX0lOQUREUlNaCisjZGVmaW5lIE5TX0lOQUREUlNaIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikKKyNlbmRpZgorCisjaWZuZGVmIE5TX0lOVDE2U1oKKyNkZWZpbmUgTlNfSU5UMTZTWiAyCisjZW5kaWYKKworI2lmbmRlZiBJRl9OQU1FU0laRQorI2lmZGVmIElGTkFNU0laCisjZGVmaW5lIElGX05BTUVTSVpFIElGTkFNU0laCisjZWxzZQorI2RlZmluZSBJRl9OQU1FU0laRSAyNTYKKyNlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZWQgaW4gaW5ldF9uZXRfcHRvbi5jIGZvciBubyBwYXJ0aWN1bGFyIHJlYXNvbi4gKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXJlc19pbjZfYWRkciBhcmVzX2luNmFkZHJfYW55OyAvKiA6OiAqLworCisKKyNlbmRpZiAvKiBBUkVTX0lQVjZfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19saWJyYXJ5X2NsZWFudXAuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGlicmFyeV9jbGVhbnVwLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwYzM3OAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGlicmFyeV9jbGVhbnVwLjMKQEAgLTAsMCArMSw4NiBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgYnkgRGFuaWVsIFN0ZW5iZXJnCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX0xJQlJBUllfQ0xFQU5VUCAzICIxOSBNYXkgMjAwOSIKKy5TSCBOQU1FCithcmVzX2xpYnJhcnlfY2xlYW51cCBcLSBjLWFyZXMgbGlicmFyeSBkZWluaXRpYWxpemF0aW9uCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgdm9pZCBhcmVzX2xpYnJhcnlfY2xlYW51cCh2b2lkKQorLlBQCisuQiBjYyBmaWxlLmMgLWxjYXJlcworLmZpCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhlCisuQiBhcmVzX2xpYnJhcnlfY2xlYW51cAorZnVuY3Rpb24gdW5pbml0aWFsaXplcyB0aGUgYy1hcmVzIGxpYnJhcnksIGZyZWVpbmcgYWxsIHJlc291cmNlcworcHJldmlvdXNseSBhY3F1aXJlZCBieSBcZklhcmVzX2xpYnJhcnlfaW5pdCgzKVxmUCB3aGVuIHRoZSBsaWJyYXJ5Cit3YXMgaW5pdGlhbGl6ZWQsIHByb3ZpZGVkIHRoZXJlIHdhcyBvbmx5IG9uZSBzaW5nbGUgcHJldmlvdXMgY2FsbCB0bworXGZJYXJlc19saWJyYXJ5X2luaXQoMylcZlAuIElmIHRoZXJlIHdhcyBtb3JlIHRoYW4gb25lIHByZXZpb3VzIGNhbGwgdG8KK1xmSWFyZXNfbGlicmFyeV9pbml0KDMpXGZQLCB0aGlzIGZ1bmN0aW9uIHVuaW5pdGlhbGl6ZXMgdGhlIGMtYXJlcworbGlicmFyeSBvbmx5IGlmIGl0IGlzIHRoZSBjYWxsIG1hdGNoaW5nIHRoZSBjYWxsIHRvCitcZklhcmVzX2xpYnJhcnlfaW5pdCgzKVxmUCB3aGljaCBpbml0aWFsaXplZCB0aGUgbGlicmFyeQorKHVzdWFsbHkgdGhlIHZlcnkgZmlyc3QgY2FsbCB0byBcZklhcmVzX2xpYnJhcnlfaW5pdCgzKVxmUCkuCitPdGhlciBjYWxscyB0byBcZklhcmVzX2xpYnJhcnlfY2xlYW51cCgzKVxmUCBoYXZlIG5vIGVmZmVjdCBvdGhlciB0aGFuCitkZWNyZW1lbnRpbmcgYW4gaW50ZXJuYWwgY291bnRlci4KKy5QUAorVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBwcm9ncmFtIHVzaW5nIGMtYXJlcyB3aWxsCitubyBsb25nZXIgbmVlZCBhbnkgYy1hcmVzIGZ1bmN0aW9uLiBPbmNlIHRoZSBwcm9ncmFtIGhhcyBjYWxsZWQKK1xmSWFyZXNfbGlicmFyeV9jbGVhbnVwKDMpXGZQIHN1ZmZpY2llbnRseSBvZnRlbiBzdWNoIHRoYXQgdGhlCitsaWJyYXJ5IGlzIHVuaW5pdGlhbGlzZWQsIGl0IHNoYWxsIG5vdCBtYWtlIGFueSBmdXJ0aGVyIGNhbGwgdG8gYW55CitjLWFyZXMgZnVuY3Rpb24uCisuUFAKK1RoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2FuY2VsIGFueSBwZW5kaW5nIGMtYXJlcyBsb29rdXBzIG9yIHJlcXVlc3RzCitwcmV2aW91c2x5IGRvbmUuIFByb2dyYW0gIG11c3QgdXNlIFxmSWFyZXNfY2FuY2VsKDMpXGZQIGZvciB0aGlzIHB1cnBvc2UuCisuUFAKKy5CIFRoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZCBzYWZlLgorWW91IGhhdmUgdG8gY2FsbCBpdCBvbmNlIHRoZSBwcm9ncmFtIGlzIGFib3V0IHRvIHRlcm1pbmF0ZSwgYnV0IHRoaXMgY2FsbCBtdXN0CitiZSBkb25lIG9uY2UgdGhlIHByb2dyYW0gaGFzIHRlcm1pbmF0ZWQgZXZlcnkgc2luZ2xlIHRocmVhZCB0aGF0IGl0IGNvdWxkIGhhdmUKK2luaXRpYXRlZC4gVGhpcyBpcyByZXF1aXJlZCB0byBhdm9pZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIGxpYnJhcnkKK2RlaW5pdGlhbGl6YXRpb24sIGFuZCBhbHNvIGR1ZSB0byB0aGUgZmFjdCB0aGF0IFxmSWFyZXNfbGlicmFyeV9jbGVhbnVwKDMpXGZQCittaWdodCBjYWxsIGZ1bmN0aW9ucyBmcm9tIG90aGVyIGxpYnJhcmllcyB0aGF0IGFyZSB0aHJlYWQgdW5zYWZlLCBhbmQgY291bGQKK2NvbmZsaWN0IHdpdGggYW55IG90aGVyIHRocmVhZCB0aGF0IGlzIGFscmVhZHkgdXNpbmcgdGhlc2Ugb3RoZXIgbGlicmFyaWVzLgorLlBQCitXaW4zMi82NCBhcHBsaWNhdGlvbiBETExzIHNoYWxsIG5vdCBjYWxsIFxmSWFyZXNfbGlicmFyeV9jbGVhbnVwKDMpXGZQIGZyb20KK3RoZSBEbGxNYWluIGZ1bmN0aW9uLiBEb2luZyBzbyB3aWxsIHByb2R1Y2UgZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoaXMgZnVuY3Rpb24gd2FzIGZpcnN0IGludHJvZHVjZWQgaW4gYy1hcmVzIHZlcnNpb24gMS43LjAgYWxvbmcgd2l0aCB0aGUKK2RlZmluaXRpb24gb2YgcHJlcHJvY2Vzc29yIHN5bWJvbCBcZklDQVJFU19IQVZFX0FSRVNfTElCUkFSWV9DTEVBTlVQXGZQIGFzIGFuCitpbmRpY2F0aW9uIG9mIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi4gUmVmZXJlbmNlIGNvdW50aW5nIGluCitcZklhcmVzX2xpYnJhcnlfaW5pdCgpXGZQIGFuZCBcZklhcmVzX2xpYnJhcnlfY2xlYW51cCgpXGZQLCB3aGljaCByZXF1aXJlcworY2FsbHMgdG8gdGhlIGZvcm1lciBmdW5jdGlvbiB0byBtYXRjaCBjYWxscyB0byB0aGUgbGF0dGVyLCBpcyBwcmVzZW50IHNpbmNlCitjLWFyZXMgdmVyc2lvbiAxLjEwLjAuCitFYXJsaWVyIHZlcnNpb25zIHdvdWxkIGRlaW5pdGlhbGl6ZSB0aGUgbGlicmFyeSBvbiB0aGUgZmlyc3QgY2FsbAordG8gXGZJYXJlc19saWJyYXJ5X2NsZWFudXAoKVxmUC4KKy5QUAorU2luY2UgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLCBpdCBpcyBhYnNvbHV0ZWx5IG1hbmRhdG9yeSB0byBjYWxsIGl0Citmb3IgYW55IFdpbjMyLzY0IHByb2dyYW0gdXNpbmcgYy1hcmVzLgorLlBQCitOb24tV2luMzIvNjQgc3lzdGVtcyBjYW4gc3RpbGwgdXNlIGMtYXJlcyB2ZXJzaW9uIDEuNy4wIHdpdGhvdXQgY2FsbGluZworXGZJYXJlc19saWJyYXJ5X2NsZWFudXAoMylcZlAgZHVlIHRvIHRoZSBmYWN0IHRoYXQgXGZJY3VycmVudGx5XGZQIGl0IGlzIG5lYXJseQorYSBkby1ub3RoaW5nIGZ1bmN0aW9uIG9uIG5vbi1XaW4zMi82NCBwbGF0Zm9ybXMuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2xpYnJhcnlfaW5pdCgzKSwKKy5CUiBhcmVzX2NhbmNlbCgzKQorLlNIIEFVVEhPUgorWWFuZyBUc2UKKy5QUAorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuYnIKK0NvcHlyaWdodCAoQykgMjAwNC0yMDA5IGJ5IERhbmllbCBTdGVuYmVyZy4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGlicmFyeV9pbml0LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2xpYnJhcnlfaW5pdC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzRmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2xpYnJhcnlfaW5pdC4zCkBAIC0wLDAgKzEsMTExIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5cIiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBieSBEYW5pZWwgU3RlbmJlcmcKKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfTElCUkFSWV9JTklUIDMgIjE5IE1heSAyMDA5IgorLlNIIE5BTUUKK2FyZXNfbGlicmFyeV9pbml0IFwtIGMtYXJlcyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uCisuU0ggU1lOT1BTSVMKKy5uZgorI2luY2x1ZGUgPGFyZXMuaD4KKworaW50IGFyZXNfbGlicmFyeV9pbml0KGludCBcZklmbGFnc1xmUCkKKworaW50IGFyZXNfbGlicmFyeV9pbml0X21lbShpbnQgXGZJZmxhZ3NcZlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqXGZJYW1hbGxvY1xmUCkoc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKlxmSWFmcmVlXGZQKSh2b2lkICpwdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqXGZJYXJlYWxsb2NcZlApKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpKQorLmZpCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhlCisuQiBhcmVzX2xpYnJhcnlfaW5pdAorZnVuY3Rpb24gcGVyZm9ybXMgaW5pdGlhbGl6YXRpb25zIGludGVybmFsbHkgcmVxdWlyZWQgYnkgdGhlIGMtYXJlcworbGlicmFyeSB0aGF0IG11c3QgdGFrZSBwbGFjZSBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5CitjLWFyZXMgY2FuIGJlIHVzZWQgaW4gYSBwcm9ncmFtLgorLlBQCitUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2Ugd2l0aGluIHRoZSBsaWZlIG9mIGEgcHJvZ3JhbSwKK2JlZm9yZSB0aGUgcHJvZ3JhbSBhY3R1YWxseSBleGVjdXRlcyBhbnkgb3RoZXIgYy1hcmVzIGxpYnJhcnkgZnVuY3Rpb24uCitJbml0aWFsaXphdGlvbnMgZG9uZSBieSB0aGlzIGZ1bmN0aW9uIHJlbWFpbiBlZmZlY3RpdmUgdW50aWwgYSBudW1iZXIgb2YKK2NhbGxzIHRvIFxmSWFyZXNfbGlicmFyeV9jbGVhbnVwKDMpXGZQIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8KK3RoaXMgZnVuY3Rpb24gYXJlIHBlcmZvcm1lZC4KKy5QUAorU3VjY2Vzc2l2ZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGRvIG5vdGhpbmcgZnVydGhlciwgb25seSB0aGUgZmlyc3QKK2NhbGwgZG9uZSB3aGVuIGMtYXJlcyBpcyBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlIGlzIGFjdHVhbGx5CitlZmZlY3RpdmUuCisuUFAKK1RoZQorLkkgZmxhZ3MKK3BhcmFtZXRlciBpcyBhIGJpdCBwYXR0ZXJuIHRoYXQgdGVsbHMgYy1hcmVzIGV4YWN0bHkgd2hpY2ggZmVhdHVyZXMKK3Nob3VsZCBiZSBpbml0aWFsaXplZCwgYXMgZGVzY3JpYmVkIGJlbG93LiBTZXQgdGhlIGRlc2lyZWQgYml0cyBieQorT1JpbmcgdGhlIHZhbHVlcyB0b2dldGhlci4gSW4gbm9ybWFsIG9wZXJhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkKK1xmSUFSRVNfTElCX0lOSVRfQUxMXGZQLiBEb24ndCB1c2UgYW55IG90aGVyIHZhbHVlIHVubGVzcyB5b3UgYXJlCitmYW1pbGlhciB3aXRoIGl0IGFuZCB0cnlpbmcgdG8gY29udHJvbCBzb21lIGludGVybmFsIGMtYXJlcyBmZWF0dXJlLgorLlBQCitUaGUKKy5CIGFyZXNfbGlicmFyeV9pbml0X21lbQorZnVuY3Rpb24gYWxsb3dzIHRoZSBjYWxsZXIgdG8gcHJvdmlkZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgdGhhdCB0aGUKK2MtYXJlcyBsaWJyYXJ5IHdpbGwgYmUgdXNlIGluc3RlYWQgb2YgXGZJbWFsbG9jKDMpXGZQLCBcZklmcmVlKDMpXGZQIGFuZAorXGZJcmVhbGxvYygzKVxmUC4KKy5QUAorLkIgVGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUuCitZb3UgaGF2ZSB0byBjYWxsIGl0IG9uY2UgdGhlIHByb2dyYW0gaGFzIHN0YXJ0ZWQsIGJ1dCB0aGlzIGNhbGwgbXVzdCBiZSBkb25lCitiZWZvcmUgdGhlIHByb2dyYW0gc3RhcnRzIGFueSBvdGhlciB0aHJlYWQuIFRoaXMgaXMgcmVxdWlyZWQgdG8gYXZvaWQKK3BvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gbGlicmFyeSBpbml0aWFsaXphdGlvbiwgYW5kIGFsc28gZHVlIHRvIHRoZSBmYWN0Cit0aGF0IFxmSWFyZXNfbGlicmFyeV9pbml0KDMpXGZQIG1pZ2h0IGNhbGwgZnVuY3Rpb25zIGZyb20gb3RoZXIgbGlicmFyaWVzIHRoYXQKK2FyZSB0aHJlYWQgdW5zYWZlLCBhbmQgY291bGQgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIgdGhyZWFkIHRoYXQgaXMgYWxyZWFkeQordXNpbmcgdGhlc2Ugb3RoZXIgbGlicmFyaWVzLgorLlBQCitXaW4zMi82NCBhcHBsaWNhdGlvbiBETExzIHNoYWxsIG5vdCBjYWxsIFxmSWFyZXNfbGlicmFyeV9pbml0KDMpXGZQIGZyb20gdGhlCitEbGxNYWluIGZ1bmN0aW9uLiBEb2luZyBzbyB3aWxsIHByb2R1Y2UgZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy4KKy5TSCBGTEFHUworLlRQIDUKKy5CIEFSRVNfTElCX0lOSVRfQUxMCitJbml0aWFsaXplIGV2ZXJ5dGhpbmcgcG9zc2libGUuIFRoaXMgc2V0cyBhbGwga25vd24gYml0cy4KKy5UUAorLkIgQVJFU19MSUJfSU5JVF9XSU4zMgorSW5pdGlhbGl6ZSBXaW4zMi82NCBzcGVjaWZpYyBsaWJyYXJpZXMuCisuVFAKKy5CIEFSRVNfTElCX0lOSVRfTk9ORQorSW5pdGlhbGl6ZSBub3RoaW5nIGV4dHJhLiBUaGlzIHNldHMgbm8gYml0LgorLlNIIFJFVFVSTiBWQUxVRQorVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGFyZXNfbGlicmFyeV9pbml0KCkgd2lsbCByZXR1cm4gMC4gIE90aGVyd2lzZSwgYQorbm9uLXplcm8gZXJyb3IgbnVtYmVyIHdpbGwgYmUgcmV0dXJuZWQgdG8gaW5kaWNhdGUgdGhlIGVycm9yLiBFeGNlcHQgZm9yCitcZklhcmVzX3N0cmVycm9yKDMpXGZQLCB5b3Ugc2hhbGwgbm90IGNhbGwgYW55IG90aGVyIGMtYXJlcyBmdW5jdGlvbiB1cG9uCitcZklhcmVzX2xpYnJhcnlfaW5pdCgzKVxmUCBmYWlsdXJlLgorLlNIIEFWQUlMQUJJTElUWQorVGhpcyBmdW5jdGlvbiB3YXMgZmlyc3QgaW50cm9kdWNlZCBpbiBjLWFyZXMgdmVyc2lvbiAxLjcuMCBhbG9uZyB3aXRoIHRoZQorZGVmaW5pdGlvbiBvZiBwcmVwcm9jZXNzb3Igc3ltYm9sIFxmSUNBUkVTX0hBVkVfQVJFU19MSUJSQVJZX0lOSVRcZlAgYXMgYW4KK2luZGljYXRpb24gb2YgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uLiBJdHMgcmVjdXJzaXZlIGJlaGF2aW9yLAord2hpY2ggcmVxdWlyZXMgYSBtYXRjaGluZyBudW1iZXIgb2YgY2FsbHMgdG8gXGZJYXJlc19saWJyYXJ5X2NsZWFudXAoKVxmUAoraW4gb3JkZXIgdG8gZGVpbml0aWFsaXplIHRoZSBsaWJyYXJ5LCBpcyBwcmVzZW50IHNpbmNlIGMtYXJlcyB2ZXJzaW9uCisxLjEwLjAuIEVhcmxpZXIgdmVyc2lvbnMgd291bGQgZGVpbml0aWFsaXplIHRoZSBsaWJyYXJ5IG9uIHRoZSBmaXJzdCBjYWxsCit0byBcZklhcmVzX2xpYnJhcnlfY2xlYW51cCgpXGZQLgorLlBQCitTaW5jZSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaXQgaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkgdG8KK2NhbGwgaXQgZm9yIGFueSBXaW4zMi82NCBwcm9ncmFtIHVzaW5nIGMtYXJlcy4KKy5QUAorTm9uLVdpbjMyLzY0IHN5c3RlbXMgY2FuIHN0aWxsIHVzZSBjLWFyZXMgdmVyc2lvbiAxLjcuMCB3aXRob3V0IGNhbGxpbmcKK1xmSWFyZXNfbGlicmFyeV9pbml0KDMpXGZQIGR1ZSB0byB0aGUgZmFjdCB0aGF0IFxmSWN1cnJlbnRseVxmUCBpdCBpcyBuZWFybHkKK2EgZG8tbm90aGluZyBmdW5jdGlvbiBvbiBub24tV2luMzIvNjQgcGxhdGZvcm1zIGF0IHRoaXMgcG9pbnQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2xpYnJhcnlfY2xlYW51cCgzKSwKKy5CUiBhcmVzX3N0cmVycm9yKDMpCisuU0ggQVVUSE9SCitZYW5nIFRzZQorLlBQCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5icgorQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgYnkgRGFuaWVsIFN0ZW5iZXJnLgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19saWJyYXJ5X2luaXQuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGlicmFyeV9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4NWExNgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGlicmFyeV9pbml0LmMKQEAgLTAsMCArMSwxNjcgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBieSBEYW5pZWwgU3RlbmJlcmcKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfbGlicmFyeV9pbml0LmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKKy8qIGxpYnJhcnktcHJpdmF0ZSBnbG9iYWwgYW5kIHVuaXF1ZSBpbnN0YW5jZSB2YXJzICovCisKKyNpZmRlZiBVU0VfV0lOU09DSworZnBHZXROZXR3b3JrUGFyYW1zX3QgYXJlc19mcEdldE5ldHdvcmtQYXJhbXMgPSBaRVJPX05VTEw7CitmcFN5c3RlbUZ1bmN0aW9uMDM2X3QgYXJlc19mcFN5c3RlbUZ1bmN0aW9uMDM2ID0gWkVST19OVUxMOworZnBHZXRBZGFwdGVyc0FkZHJlc3Nlc190IGFyZXNfZnBHZXRBZGFwdGVyc0FkZHJlc3NlcyA9IFpFUk9fTlVMTDsKKyNlbmRpZgorCisvKiBsaWJyYXJ5LXByaXZhdGUgZ2xvYmFsIHZhcnMgd2l0aCBzb3VyY2UgdmlzaWJpbGl0eSByZXN0cmljdGVkIHRvIHRoaXMgZmlsZSAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGFyZXNfaW5pdGlhbGl6ZWQ7CitzdGF0aWMgaW50ICAgICAgICAgIGFyZXNfaW5pdF9mbGFnczsKKworLyogbGlicmFyeS1wcml2YXRlIGdsb2JhbCB2YXJzIHdpdGggdmlzaWJpbGl0eSBhY3Jvc3MgdGhlIHdob2xlIGxpYnJhcnkgKi8KK3ZvaWQgKigqYXJlc19tYWxsb2MpKHNpemVfdCBzaXplKSA9IG1hbGxvYzsKK3ZvaWQgKigqYXJlc19yZWFsbG9jKSh2b2lkICpwdHIsIHNpemVfdCBzaXplKSA9IHJlYWxsb2M7Cit2b2lkICgqYXJlc19mcmVlKSh2b2lkICpwdHIpID0gZnJlZTsKKworI2lmZGVmIFVTRV9XSU5TT0NLCitzdGF0aWMgSE1PRFVMRSBobmRfaXBobHBhcGk7CitzdGF0aWMgSE1PRFVMRSBobmRfYWR2YXBpMzI7CisjZW5kaWYKKworCitzdGF0aWMgaW50IGFyZXNfd2luMzJfaW5pdCh2b2lkKQoreworI2lmZGVmIFVTRV9XSU5TT0NLCisKKyAgaG5kX2lwaGxwYXBpID0gMDsKKyAgaG5kX2lwaGxwYXBpID0gTG9hZExpYnJhcnlXKEwiaXBobHBhcGkuZGxsIik7CisgIGlmICghaG5kX2lwaGxwYXBpKQorICAgIHJldHVybiBBUkVTX0VMT0FESVBITFBBUEk7CisKKyAgYXJlc19mcEdldE5ldHdvcmtQYXJhbXMgPSAoZnBHZXROZXR3b3JrUGFyYW1zX3QpCisgICAgR2V0UHJvY0FkZHJlc3MoaG5kX2lwaGxwYXBpLCAiR2V0TmV0d29ya1BhcmFtcyIpOworICBpZiAoIWFyZXNfZnBHZXROZXR3b3JrUGFyYW1zKQorICAgIHsKKyAgICAgIEZyZWVMaWJyYXJ5KGhuZF9pcGhscGFwaSk7CisgICAgICByZXR1cm4gQVJFU19FQUREUkdFVE5FVFdPUktQQVJBTVM7CisgICAgfQorCisgIGFyZXNfZnBHZXRBZGFwdGVyc0FkZHJlc3NlcyA9IChmcEdldEFkYXB0ZXJzQWRkcmVzc2VzX3QpCisgICAgR2V0UHJvY0FkZHJlc3MoaG5kX2lwaGxwYXBpLCAiR2V0QWRhcHRlcnNBZGRyZXNzZXMiKTsKKyAgaWYgKCFhcmVzX2ZwR2V0QWRhcHRlcnNBZGRyZXNzZXMpCisgICAgeworICAgICAgLyogVGhpcyBjYW4gaGFwcGVuIG9uIGNsaWVudHMgYmVmb3JlIFdpblhQLCBJIGRvbid0CisgICAgICAgICB0aGluayBpdCBzaG91bGQgYmUgYW4gZXJyb3IsIHVubGVzcyB3ZSBkb24ndCB3YW50IHRvCisgICAgICAgICBzdXBwb3J0IFdpbmRvd3MgMjAwMCBhbnltb3JlICovCisgICAgfQorCisgIC8qCisgICAqIFdoZW4gYWR2YXBpMzIuZGxsIGlzIHVuYXZhaWxhYmxlIG9yIGFkdmFwaTMyLmRsbCBoYXMgbm8gU3lzdGVtRnVuY3Rpb24wMzYsCisgICAqIGFsc28ga25vd24gYXMgUnRsR2VuUmFuZG9tLCB3aGljaCBpcyB0aGUgY2FzZSBmb3IgV2luZG93cyB2ZXJzaW9ucyBwcmlvcgorICAgKiB0byBXaW5YUCB0aGVuIGMtYXJlcyB1c2VzIHBvcnRhYmxlIHJhbmQoKSBmdW5jdGlvbi4gVGhlbiBkb24ndCBlcnJvciBoZXJlLgorICAgKi8KKworICBobmRfYWR2YXBpMzIgPSAwOworICBobmRfYWR2YXBpMzIgPSBMb2FkTGlicmFyeVcoTCJhZHZhcGkzMi5kbGwiKTsKKyAgaWYgKGhuZF9hZHZhcGkzMikKKyAgICB7CisgICAgICBhcmVzX2ZwU3lzdGVtRnVuY3Rpb24wMzYgPSAoZnBTeXN0ZW1GdW5jdGlvbjAzNl90KQorICAgICAgICBHZXRQcm9jQWRkcmVzcyhobmRfYWR2YXBpMzIsICJTeXN0ZW1GdW5jdGlvbjAzNiIpOworICAgIH0KKworI2VuZGlmCisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CisKKworc3RhdGljIHZvaWQgYXJlc193aW4zMl9jbGVhbnVwKHZvaWQpCit7CisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgaWYgKGhuZF9hZHZhcGkzMikKKyAgICBGcmVlTGlicmFyeShobmRfYWR2YXBpMzIpOworICBpZiAoaG5kX2lwaGxwYXBpKQorICAgIEZyZWVMaWJyYXJ5KGhuZF9pcGhscGFwaSk7CisjZW5kaWYKK30KKworCitpbnQgYXJlc19saWJyYXJ5X2luaXQoaW50IGZsYWdzKQoreworICBpbnQgcmVzOworCisgIGlmIChhcmVzX2luaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGFyZXNfaW5pdGlhbGl6ZWQrKzsKKyAgICAgIHJldHVybiBBUkVTX1NVQ0NFU1M7CisgICAgfQorICBhcmVzX2luaXRpYWxpemVkKys7CisKKyAgaWYgKGZsYWdzICYgQVJFU19MSUJfSU5JVF9XSU4zMikKKyAgICB7CisgICAgICByZXMgPSBhcmVzX3dpbjMyX2luaXQoKTsKKyAgICAgIGlmIChyZXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gcmVzOyAgLyogTENPVl9FWENMX0xJTkU6IGNhbid0IHRlc3QgV2luMzIgaW5pdCBmYWlsdXJlICovCisgICAgfQorCisgIGFyZXNfaW5pdF9mbGFncyA9IGZsYWdzOworCisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CisKK2ludCBhcmVzX2xpYnJhcnlfaW5pdF9tZW0oaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKmFtYWxsb2MpKHNpemVfdCBzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmFmcmVlKSh2b2lkICpwdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKmFyZWFsbG9jKSh2b2lkICpwdHIsIHNpemVfdCBzaXplKSkKK3sKKyAgaWYgKGFtYWxsb2MpCisgICAgYXJlc19tYWxsb2MgPSBhbWFsbG9jOworICBpZiAoYXJlYWxsb2MpCisgICAgYXJlc19yZWFsbG9jID0gYXJlYWxsb2M7CisgIGlmIChhZnJlZSkKKyAgICBhcmVzX2ZyZWUgPSBhZnJlZTsKKyAgcmV0dXJuIGFyZXNfbGlicmFyeV9pbml0KGZsYWdzKTsKK30KKworCit2b2lkIGFyZXNfbGlicmFyeV9jbGVhbnVwKHZvaWQpCit7CisgIGlmICghYXJlc19pbml0aWFsaXplZCkKKyAgICByZXR1cm47CisgIGFyZXNfaW5pdGlhbGl6ZWQtLTsKKyAgaWYgKGFyZXNfaW5pdGlhbGl6ZWQpCisgICAgcmV0dXJuOworCisgIGlmIChhcmVzX2luaXRfZmxhZ3MgJiBBUkVTX0xJQl9JTklUX1dJTjMyKQorICAgIGFyZXNfd2luMzJfY2xlYW51cCgpOworCisgIGFyZXNfaW5pdF9mbGFncyA9IEFSRVNfTElCX0lOSVRfTk9ORTsKKyAgYXJlc19tYWxsb2MgPSBtYWxsb2M7CisgIGFyZXNfcmVhbGxvYyA9IHJlYWxsb2M7CisgIGFyZXNfZnJlZSA9IGZyZWU7Cit9CisKKworaW50IGFyZXNfbGlicmFyeV9pbml0aWFsaXplZCh2b2lkKQoreworI2lmZGVmIFVTRV9XSU5TT0NLCisgIGlmICghYXJlc19pbml0aWFsaXplZCkKKyAgICByZXR1cm4gQVJFU19FTk9USU5JVElBTElaRUQ7CisjZW5kaWYKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGlicmFyeV9pbml0LmggYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2xpYnJhcnlfaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZTVjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX2xpYnJhcnlfaW5pdC5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgSEVBREVSX0NBUkVTX0xJQlJBUllfSU5JVF9ICisjZGVmaW5lIEhFQURFUl9DQVJFU19MSUJSQVJZX0lOSVRfSAorCisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9XSU5TT0NLCisKKyNpbmNsdWRlIDxpcGhscGFwaS5oPgorI2luY2x1ZGUgPGFyZXNfaXBobHBhcGkuaD4KKwordHlwZWRlZiBEV09SRCAoV0lOQVBJICpmcEdldE5ldHdvcmtQYXJhbXNfdCkgKEZJWEVEX0lORk8qLCBEV09SRCopOwordHlwZWRlZiBCT09MRUFOIChBUElFTlRSWSAqZnBTeXN0ZW1GdW5jdGlvbjAzNl90KSAodm9pZCosIFVMT05HKTsKK3R5cGVkZWYgVUxPTkcgKFdJTkFQSSAqZnBHZXRBZGFwdGVyc0FkZHJlc3Nlc190KSAoIFVMT05HLCBVTE9ORywgdm9pZCosIElQX0FEQVBURVJfQUREUkVTU0VTKiwgVUxPTkcqICk7CisKKy8qIEZvcndhcmQtZGVjbGFyYXRpb24gb2YgdmFyaWFibGVzIGRlZmluZWQgaW4gYXJlc19saWJyYXJ5X2luaXQuYyAqLworLyogdGhhdCBhcmUgZ2xvYmFsIGFuZCB1bmlxdWUgaW5zdGFuY2VzIGZvciB3aG9sZSBjLWFyZXMgbGlicmFyeS4gICovCisKK2V4dGVybiBmcEdldE5ldHdvcmtQYXJhbXNfdCBhcmVzX2ZwR2V0TmV0d29ya1BhcmFtczsKK2V4dGVybiBmcFN5c3RlbUZ1bmN0aW9uMDM2X3QgYXJlc19mcFN5c3RlbUZ1bmN0aW9uMDM2OworZXh0ZXJuIGZwR2V0QWRhcHRlcnNBZGRyZXNzZXNfdCBhcmVzX2ZwR2V0QWRhcHRlcnNBZGRyZXNzZXM7CisKKyNlbmRpZiAvKiBVU0VfV0lOU09DSyAqLworCisjZW5kaWYgLyogSEVBREVSX0NBUkVTX0xJQlJBUllfSU5JVF9IICovCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGxpc3QuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmNhODRjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19sbGlzdC5jCkBAIC0wLDAgKzEsNjMgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworLyogUm91dGluZXMgZm9yIG1hbmFnaW5nIGRvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlua2VkIGxpc3RzIHdpdGggYQorICogZHVtbXkgaGVhZC4KKyAqLworCisvKiBJbml0aWFsaXplIGEgbmV3IGhlYWQgbm9kZSAqLwordm9pZCBhcmVzX19pbml0X2xpc3RfaGVhZChzdHJ1Y3QgbGlzdF9ub2RlKiBoZWFkKSB7CisgIGhlYWQtPnByZXYgPSBoZWFkOworICBoZWFkLT5uZXh0ID0gaGVhZDsKKyAgaGVhZC0+ZGF0YSA9IE5VTEw7Cit9CisKKy8qIEluaXRpYWxpemUgYSBsaXN0IG5vZGUgKi8KK3ZvaWQgYXJlc19faW5pdF9saXN0X25vZGUoc3RydWN0IGxpc3Rfbm9kZSogbm9kZSwgdm9pZCogZCkgeworICBub2RlLT5wcmV2ID0gTlVMTDsKKyAgbm9kZS0+bmV4dCA9IE5VTEw7CisgIG5vZGUtPmRhdGEgPSBkOworfQorCisvKiBSZXR1cm5zIHRydWUgaWZmIHRoZSBnaXZlbiBsaXN0IGlzIGVtcHR5ICovCitpbnQgYXJlc19faXNfbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9ub2RlKiBoZWFkKSB7CisgIHJldHVybiAoKGhlYWQtPm5leHQgPT0gaGVhZCkgJiYgKGhlYWQtPnByZXYgPT0gaGVhZCkpOworfQorCisvKiBJbnNlcnRzIG5ld19ub2RlIGJlZm9yZSBvbGRfbm9kZSAqLwordm9pZCBhcmVzX19pbnNlcnRfaW5fbGlzdChzdHJ1Y3QgbGlzdF9ub2RlKiBuZXdfbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxpc3Rfbm9kZSogb2xkX25vZGUpIHsKKyAgbmV3X25vZGUtPm5leHQgPSBvbGRfbm9kZTsKKyAgbmV3X25vZGUtPnByZXYgPSBvbGRfbm9kZS0+cHJldjsKKyAgb2xkX25vZGUtPnByZXYtPm5leHQgPSBuZXdfbm9kZTsKKyAgb2xkX25vZGUtPnByZXYgPSBuZXdfbm9kZTsKK30KKworLyogUmVtb3ZlcyB0aGUgbm9kZSBmcm9tIHRoZSBsaXN0IGl0J3MgaW4sIGlmIGFueSAqLwordm9pZCBhcmVzX19yZW1vdmVfZnJvbV9saXN0KHN0cnVjdCBsaXN0X25vZGUqIG5vZGUpIHsKKyAgaWYgKG5vZGUtPm5leHQgIT0gTlVMTCkgeworICAgIG5vZGUtPnByZXYtPm5leHQgPSBub2RlLT5uZXh0OworICAgIG5vZGUtPm5leHQtPnByZXYgPSBub2RlLT5wcmV2OworICAgIG5vZGUtPnByZXYgPSBOVUxMOworICAgIG5vZGUtPm5leHQgPSBOVUxMOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGxpc3QuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGY0ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19sbGlzdC5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgX19BUkVTX0xMSVNUX0gKKyNkZWZpbmUgX19BUkVTX0xMSVNUX0gKKworCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisKKy8qIE5vZGUgZGVmaW5pdGlvbiBmb3IgY2lyY3VsYXIsIGRvdWJseS1saW5rZWQgbGlzdCAqLworc3RydWN0IGxpc3Rfbm9kZSB7CisgIHN0cnVjdCBsaXN0X25vZGUgKnByZXY7CisgIHN0cnVjdCBsaXN0X25vZGUgKm5leHQ7CisgIHZvaWQqIGRhdGE7Cit9OworCit2b2lkIGFyZXNfX2luaXRfbGlzdF9oZWFkKHN0cnVjdCBsaXN0X25vZGUqIGhlYWQpOworCit2b2lkIGFyZXNfX2luaXRfbGlzdF9ub2RlKHN0cnVjdCBsaXN0X25vZGUqIG5vZGUsIHZvaWQqIGQpOworCitpbnQgYXJlc19faXNfbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9ub2RlKiBoZWFkKTsKKwordm9pZCBhcmVzX19pbnNlcnRfaW5fbGlzdChzdHJ1Y3QgbGlzdF9ub2RlKiBuZXdfbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxpc3Rfbm9kZSogb2xkX25vZGUpOworCit2b2lkIGFyZXNfX3JlbW92ZV9mcm9tX2xpc3Qoc3RydWN0IGxpc3Rfbm9kZSogbm9kZSk7CisKKyNlbmRpZiAvKiBfX0FSRVNfTExJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ta3F1ZXJ5LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX21rcXVlcnkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM5MGE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ta3F1ZXJ5LjMKQEAgLTAsMCArMSw4MiBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTgsIDIwMDAgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX01LUVVFUlkgMyAiMjAgTm92IDIwMDkiCisuU0ggTkFNRQorYXJlc19ta3F1ZXJ5IFwtIENvbXBvc2UgYSBzaW5nbGUtcXVlc3Rpb24gRE5TIHF1ZXJ5IGJ1ZmZlcgorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX21rcXVlcnkoY29uc3QgY2hhciAqXGZJbmFtZVxmUCwgaW50IFxmSWRuc2NsYXNzXGZQLCBpbnQgXGZJdHlwZVxmUCwKKy5CCXVuc2lnbmVkIHNob3J0IFxmSWlkXGZQLCBpbnQgXGZJcmRcZlAsIHVuc2lnbmVkIGNoYXIgKipcZklidWZcZlAsCisuQglpbnQgKlxmSWJ1ZmxlblxmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitEZXByZWNhdGVkIGZ1bmN0aW9uLiBTZWUgXGZJYXJlc19jcmVhdGVfcXVlcnkoMylcZlAgaW5zdGVhZCEKKworVGhlCisuQiBhcmVzX21rcXVlcnkKK2Z1bmN0aW9uIGNvbXBvc2VzIGEgRE5TIHF1ZXJ5IHdpdGggYSBzaW5nbGUgcXVlc3Rpb24uCitUaGUgcGFyYW1ldGVyCisuSSBuYW1lCitnaXZlcyB0aGUgcXVlcnkgbmFtZSBhcyBhIE5VTC10ZXJtaW5hdGVkIEMgc3RyaW5nIG9mIHBlcmlvZC1zZXBhcmF0ZWQKK2xhYmVscyBvcHRpb25hbGx5IGVuZGluZyB3aXRoIGEgcGVyaW9kOyBwZXJpb2RzIGFuZCBiYWNrc2xhc2hlcyB3aXRoaW4KK2EgbGFiZWwgbXVzdCBiZSBlc2NhcGVkIHdpdGggYSBiYWNrbGFzaC4gIFRoZSBwYXJhbWV0ZXJzCisuSSBkbnNjbGFzcworYW5kCisuSSB0eXBlCitnaXZlIHRoZSBjbGFzcyBhbmQgdHlwZSBvZiB0aGUgcXVlcnkgdXNpbmcgdGhlIHZhbHVlcyBkZWZpbmVkIGluCisuQlIgPGFycGEvbmFtZXNlci5oPiAuCitUaGUgcGFyYW1ldGVyCisuSSBpZAorZ2l2ZXMgYSAxNi1iaXQgaWRlbnRpZmllciBmb3IgdGhlIHF1ZXJ5LiAgVGhlIHBhcmFtZXRlcgorLkkgcmQKK3Nob3VsZCBiZSBub256ZXJvIGlmIHJlY3Vyc2lvbiBpcyBkZXNpcmVkLCB6ZXJvIGlmIG5vdC4gIFRoZSBxdWVyeQord2lsbCBiZSBwbGFjZWQgaW4gYW4gYWxsb2NhdGVkIGJ1ZmZlciwgYSBwb2ludGVyIHRvIHdoaWNoIHdpbGwgYmUKK3N0b3JlZCBpbiB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieQorLklSIGJ1ZiAsCithbmQgdGhlIGxlbmd0aCBvZiB3aGljaCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieQorLklSIGJ1ZmxlbiAuCitJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGlzIGJ1ZmZlciB1c2luZworXGZJYXJlc19mcmVlX3N0cmluZygzKVxmUCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisKK1VzYWdlIG9mIFxmSWFyZXNfbWtxdWVyeSgzKVxmUCBpcyBkZXByZWNhdGVkLCB3aGVyZWFzIHRoZSBmdW5jdGlvbiBpcworZXF1aXZhbGVudCB0byBcZklhcmVzX2NyZWF0ZV9xdWVyeSgzKVxmUCB3aXRoIFxmQm1heF91ZHBfc2l6ZVxmUCBzZXQgdG8KKzAuCisKKy5TSCBSRVRVUk4gVkFMVUVTCisuQiBhcmVzX21rcXVlcnkKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK0NvbnN0cnVjdGlvbiBvZiB0aGUgRE5TIHF1ZXJ5IHN1Y2NlZWRlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFETkFNRQorVGhlIHF1ZXJ5IG5hbWUKKy5JIG5hbWUKK2NvdWxkIG5vdCBiZSBlbmNvZGVkIGFzIGEgZG9tYWluIG5hbWUsIGVpdGhlciBiZWNhdXNlIGl0IGNvbnRhaW5lZCBhCit6ZXJvLWxlbmd0aCBsYWJlbCBvciBiZWNhdXNlIGl0IGNvbnRhaW5lZCBhIGxhYmVsIG9mIG1vcmUgdGhhbiA2MworY2hhcmFjdGVycy4KKy5UUCAxNQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19leHBhbmRfbmFtZSAoMyksCisuQlIgYXJlc19mcmVlX3N0cmluZyAoMykKKy5TSCBBVVRIT1IKK0dyZWcgSHVkc29uLCBNSVQgSW5mb3JtYXRpb24gU3lzdGVtcworLmJyCitDb3B5cmlnaHQgMTk5OCwgMjAwMCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbWtxdWVyeS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ta3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlYTkxNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbWtxdWVyeS5jCkBAIC0wLDAgKzEsMjQgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKyNpbmNsdWRlICJhcmVzLmgiCisKK2ludCBhcmVzX21rcXVlcnkoY29uc3QgY2hhciAqbmFtZSwgaW50IGRuc2NsYXNzLCBpbnQgdHlwZSwgdW5zaWduZWQgc2hvcnQgaWQsCisgICAgICAgICAgICAgICAgIGludCByZCwgdW5zaWduZWQgY2hhciAqKmJ1ZiwgaW50ICpidWZsZW4pCit7CisgIHJldHVybiBhcmVzX2NyZWF0ZV9xdWVyeShuYW1lLCBkbnNjbGFzcywgdHlwZSwgaWQsIHJkLCBidWYsIGJ1ZmxlbiwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX25vd2Fybi5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ub3dhcm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjkwMzVjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ub3dhcm4uYwpAQCAtMCwwICsxLDI2MCBAQAorCisvKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBieSBEYW5pZWwgU3RlbmJlcmcKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZmRlZiBIQVZFX0FTU0VSVF9ICisjICBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIGRlZmluZWQoX191bml4X18pCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorIyAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fSU5URUxfQ09NUElMRVIgJiYgX191bml4X18gKi8KKworI2RlZmluZSBCVUlMRElOR19BUkVTX05PV0FSTl9DIDEKKworI2luY2x1ZGUgImFyZXNfbm93YXJuLmgiCisKKyNpZm5kZWYgSEFWRV9MSU1JVFNfSAorLyogc3lzdGVtcyB3aXRob3V0IDxsaW1pdHMuaD4gd2UgZ3Vlc3MgaGF2ZSAxNiBiaXQgc2hvcnRzLCAzMmJpdCBpbnRzIGFuZAorICAgMzJiaXQgbG9uZ3MgKi8KKyMgIGRlZmluZSBDQVJFU19NQVNLX1NTSE9SVCAgMHg3RkZGCisjICBkZWZpbmUgQ0FSRVNfTUFTS19VU0hPUlQgIDB4RkZGRgorIyAgZGVmaW5lIENBUkVTX01BU0tfU0lOVCAgICAweDdGRkZGRkZGCisjICBkZWZpbmUgQ0FSRVNfTUFTS19VSU5UICAgIDB4RkZGRkZGRkYKKyMgIGRlZmluZSBDQVJFU19NQVNLX1NMT05HICAgMHg3RkZGRkZGRkwKKyMgIGRlZmluZSBDQVJFU19NQVNLX1VMT05HICAgMHhGRkZGRkZGRlVMCisjZWxzZQorIyAgZGVmaW5lIENBUkVTX01BU0tfU1NIT1JUICBTSFJUX01BWAorIyAgZGVmaW5lIENBUkVTX01BU0tfVVNIT1JUICBVU0hSVF9NQVgKKyMgIGRlZmluZSBDQVJFU19NQVNLX1NJTlQgICAgSU5UX01BWAorIyAgZGVmaW5lIENBUkVTX01BU0tfVUlOVCAgICBVSU5UX01BWAorIyAgZGVmaW5lIENBUkVTX01BU0tfU0xPTkcgICBMT05HX01BWAorIyAgZGVmaW5lIENBUkVTX01BU0tfVUxPTkcgICBVTE9OR19NQVgKKyNlbmRpZgorCisvKgorKiogdW5zaWduZWQgc2l6ZV90IHRvIHNpZ25lZCBsb25nCisqLworCitsb25nIGFyZXN4X3V6dG9zbChzaXplX3QgdXpudW0pCit7CisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyNlbmRpZgorCisgIHJldHVybiAobG9uZykodXpudW0gJiAoc2l6ZV90KSBDQVJFU19NQVNLX1NMT05HKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogdW5zaWduZWQgc2l6ZV90IHRvIHNpZ25lZCBpbnQKKyovCisKK2ludCBhcmVzeF91enRvc2koc2l6ZV90IHV6bnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICByZXR1cm4gKGludCkodXpudW0gJiAoc2l6ZV90KSBDQVJFU19NQVNLX1NJTlQpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKKy8qCisqKiB1bnNpZ25lZCBzaXplX3QgdG8gc2lnbmVkIHNob3J0CisqLworCitzaG9ydCBhcmVzeF91enRvc3Moc2l6ZV90IHV6bnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICByZXR1cm4gKHNob3J0KSh1em51bSAmIChzaXplX3QpIENBUkVTX01BU0tfU1NIT1JUKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogc2lnbmVkIGludCB0byBzaWduZWQgc2hvcnQKKyovCisKK3Nob3J0IGFyZXN4X3NpdG9zcyhpbnQgc2ludW0pCit7CisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyNlbmRpZgorCisgIERFQlVHQVNTRVJUKHNpbnVtID49IDApOworICByZXR1cm4gKHNob3J0KShzaW51bSAmIChpbnQpIENBUkVTX01BU0tfU1NIT1JUKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogc2lnbmVkIGxvbmcgdG8gc2lnbmVkIGludAorKi8KKworaW50IGFyZXN4X3NsdG9zaShsb25nIHNsbnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVChzbG51bSA+PSAwKTsKKyAgcmV0dXJuIChpbnQpKHNsbnVtICYgKGxvbmcpIENBUkVTX01BU0tfU0lOVCk7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKK30KKworLyoKKyoqIHNpZ25lZCBzc2l6ZV90IHRvIHNpZ25lZCBpbnQKKyovCisKK2ludCBhcmVzeF9zenRvc2koc3NpemVfdCBzem51bSkKK3sKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwdXNoKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo4MTApIC8qIGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cyAqLworI2VuZGlmCisKKyAgREVCVUdBU1NFUlQoc3pudW0gPj0gMCk7CisgIHJldHVybiAoaW50KShzem51bSAmIChzc2l6ZV90KSBDQVJFU19NQVNLX1NJTlQpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKKy8qCisqKiBzaWduZWQgc3NpemVfdCB0byB1bnNpZ25lZCBpbnQKKyovCisKK3Vuc2lnbmVkIGludCBhcmVzeF9zenRvdWkoc3NpemVfdCBzem51bSkKK3sKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwdXNoKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo4MTApIC8qIGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cyAqLworI2VuZGlmCisKKyAgREVCVUdBU1NFUlQoc3pudW0gPj0gMCk7CisgIHJldHVybiAodW5zaWduZWQgaW50KShzem51bSAmIChzc2l6ZV90KSBDQVJFU19NQVNLX1VJTlQpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKKy8qCisqKiBzaWduZWQgaW50IHRvIHVuc2lnbmVkIHNob3J0CisqLworCit1bnNpZ25lZCBzaG9ydCBhcmVzeF9zaXRvdXMoaW50IHNpbnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVChzaW51bSA+PSAwKTsKKyAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCkoc2ludW0gJiAoaW50KSBDQVJFU19NQVNLX1VTSE9SVCk7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgZGVmaW5lZChfX3VuaXhfXykKKworaW50IGFyZXN4X0ZEX0lTU0VUKGludCBmZCwgZmRfc2V0ICpmZHNldCkKK3sKKyAgI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjE0NjkpIC8qIGNsb2JiZXIgaWdub3JlZCAqLworICByZXR1cm4gRkRfSVNTRVQoZmQsIGZkc2V0KTsKKyAgI3ByYWdtYSB3YXJuaW5nKHBvcCkKK30KKwordm9pZCBhcmVzeF9GRF9TRVQoaW50IGZkLCBmZF9zZXQgKmZkc2V0KQoreworICAjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6MTQ2OSkgLyogY2xvYmJlciBpZ25vcmVkICovCisgIEZEX1NFVChmZCwgZmRzZXQpOworICAjcHJhZ21hIHdhcm5pbmcocG9wKQorfQorCit2b2lkIGFyZXN4X0ZEX1pFUk8oZmRfc2V0ICpmZHNldCkKK3sKKyAgI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjU5MykgLyogdmFyaWFibGUgd2FzIHNldCBidXQgbmV2ZXIgdXNlZCAqLworICBGRF9aRVJPKGZkc2V0KTsKKyAgI3ByYWdtYSB3YXJuaW5nKHBvcCkKK30KKwordW5zaWduZWQgc2hvcnQgYXJlc3hfaHRvbnModW5zaWduZWQgc2hvcnQgdXNudW0pCit7CisjaWYgKF9fSU5URUxfQ09NUElMRVIgPT0gOTEwKSAmJiBkZWZpbmVkKF9faTM4Nl9fKQorICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgoKHVzbnVtIDw8IDgpICYgMHhGRjAwKSB8ICgodXNudW0gPj4gOCkgJiAweDAwRkYpKTsKKyNlbHNlCisgICNwcmFnbWEgd2FybmluZyhwdXNoKQorICAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo4MTApIC8qIGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cyAqLworICByZXR1cm4gaHRvbnModXNudW0pOworICAjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKK3Vuc2lnbmVkIHNob3J0IGFyZXN4X250b2hzKHVuc2lnbmVkIHNob3J0IHVzbnVtKQoreworI2lmIChfX0lOVEVMX0NPTVBJTEVSID09IDkxMCkgJiYgZGVmaW5lZChfX2kzODZfXykKKyAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCkoKCh1c251bSA8PCA4KSAmIDB4RkYwMCkgfCAoKHVzbnVtID4+IDgpICYgMHgwMEZGKSk7CisjZWxzZQorICAjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyAgcmV0dXJuIG50b2hzKHVzbnVtKTsKKyAgI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX19JTlRFTF9DT01QSUxFUiAmJiBfX3VuaXhfXyAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ub3dhcm4uaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbm93YXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3NmQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfbm93YXJuLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBIRUFERVJfQ0FSRVNfTk9XQVJOX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX05PV0FSTl9ICisKKworLyogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworbG9uZyAgYXJlc3hfdXp0b3NsKHNpemVfdCB1em51bSk7CitpbnQgICBhcmVzeF91enRvc2koc2l6ZV90IHV6bnVtKTsKK3Nob3J0IGFyZXN4X3V6dG9zcyhzaXplX3QgdXpudW0pOworCitzaG9ydCBhcmVzeF9zaXRvc3MoaW50IHNpbnVtKTsKKworaW50IGFyZXN4X3NsdG9zaShsb25nIHNsbnVtKTsKKworaW50IGFyZXN4X3N6dG9zaShzc2l6ZV90IHN6bnVtKTsKKwordW5zaWduZWQgaW50IGFyZXN4X3N6dG91aShzc2l6ZV90IHN6bnVtKTsKKwordW5zaWduZWQgc2hvcnQgYXJlc3hfc2l0b3VzKGludCBzaW51bSk7CisKKyNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIGRlZmluZWQoX191bml4X18pCisKK2ludCBhcmVzeF9GRF9JU1NFVChpbnQgZmQsIGZkX3NldCAqZmRzZXQpOworCit2b2lkIGFyZXN4X0ZEX1NFVChpbnQgZmQsIGZkX3NldCAqZmRzZXQpOworCit2b2lkIGFyZXN4X0ZEX1pFUk8oZmRfc2V0ICpmZHNldCk7CisKK3Vuc2lnbmVkIHNob3J0IGFyZXN4X2h0b25zKHVuc2lnbmVkIHNob3J0IHVzbnVtKTsKKwordW5zaWduZWQgc2hvcnQgYXJlc3hfbnRvaHModW5zaWduZWQgc2hvcnQgdXNudW0pOworCisjaWZuZGVmIEJVSUxESU5HX0FSRVNfTk9XQVJOX0MKKyMgIHVuZGVmICBGRF9JU1NFVAorIyAgZGVmaW5lIEZEX0lTU0VUKGEsYikgYXJlc3hfRkRfSVNTRVQoKGEpLChiKSkKKyMgIHVuZGVmICBGRF9TRVQKKyMgIGRlZmluZSBGRF9TRVQoYSxiKSAgIGFyZXN4X0ZEX1NFVCgoYSksKGIpKQorIyAgdW5kZWYgIEZEX1pFUk8KKyMgIGRlZmluZSBGRF9aRVJPKGEpICAgIGFyZXN4X0ZEX1pFUk8oKGEpKQorIyAgdW5kZWYgIGh0b25zCisjICBkZWZpbmUgaHRvbnMoYSkgICAgICBhcmVzeF9odG9ucygoYSkpCisjICB1bmRlZiAgbnRvaHMKKyMgIGRlZmluZSBudG9ocyhhKSAgICAgIGFyZXN4X250b2hzKChhKSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19JTlRFTF9DT01QSUxFUiAmJiBfX3VuaXhfXyAqLworCisjZW5kaWYgLyogSEVBREVSX0NBUkVTX05PV0FSTl9IICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX29wdGlvbnMuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfb3B0aW9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzY2JkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX29wdGlvbnMuYwpAQCAtMCwwICsxLDQwMiBAQAorCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIGJ5IERhbmllbCBTdGVuYmVyZworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19kYXRhLmgiCisjaW5jbHVkZSAiYXJlc19pbmV0X25ldF9wdG9uLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKKworaW50IGFyZXNfZ2V0X3NlcnZlcnMoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKipzZXJ2ZXJzKQoreworICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKnNydnJfaGVhZCA9IE5VTEw7CisgIHN0cnVjdCBhcmVzX2FkZHJfbm9kZSAqc3J2cl9sYXN0ID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfYWRkcl9ub2RlICpzcnZyX2N1cnI7CisgIGludCBzdGF0dXMgPSBBUkVTX1NVQ0NFU1M7CisgIGludCBpOworCisgIGlmICghY2hhbm5lbCkKKyAgICByZXR1cm4gQVJFU19FTk9EQVRBOworCisgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5uc2VydmVyczsgaSsrKQorICAgIHsKKyAgICAgIC8qIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoaXMgc2VydmVyIG5vZGUgYXBwZW5kaW5nIGl0IHRvIHRoZSBsaXN0ICovCisgICAgICBzcnZyX2N1cnIgPSBhcmVzX21hbGxvY19kYXRhKEFSRVNfREFUQVRZUEVfQUREUl9OT0RFKTsKKyAgICAgIGlmICghc3J2cl9jdXJyKQorICAgICAgICB7CisgICAgICAgICAgc3RhdHVzID0gQVJFU19FTk9NRU07CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlmIChzcnZyX2xhc3QpCisgICAgICAgIHsKKyAgICAgICAgICBzcnZyX2xhc3QtPm5leHQgPSBzcnZyX2N1cnI7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHNydnJfaGVhZCA9IHNydnJfY3VycjsKKyAgICAgICAgfQorICAgICAgc3J2cl9sYXN0ID0gc3J2cl9jdXJyOworCisgICAgICAvKiBGaWxsIHRoaXMgc2VydmVyIG5vZGUgZGF0YSAqLworICAgICAgc3J2cl9jdXJyLT5mYW1pbHkgPSBjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuZmFtaWx5OworICAgICAgaWYgKHNydnJfY3Vyci0+ZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIG1lbWNweSgmc3J2cl9jdXJyLT5hZGRyVjQsICZjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuYWRkclY0LAorICAgICAgICAgICAgICAgc2l6ZW9mKHNydnJfY3Vyci0+YWRkclY0KSk7CisgICAgICBlbHNlCisgICAgICAgIG1lbWNweSgmc3J2cl9jdXJyLT5hZGRyVjYsICZjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuYWRkclY2LAorICAgICAgICAgICAgICAgc2l6ZW9mKHNydnJfY3Vyci0+YWRkclY2KSk7CisgICAgfQorCisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIGlmIChzcnZyX2hlYWQpCisgICAgICAgIHsKKyAgICAgICAgICBhcmVzX2ZyZWVfZGF0YShzcnZyX2hlYWQpOworICAgICAgICAgIHNydnJfaGVhZCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgKnNlcnZlcnMgPSBzcnZyX2hlYWQ7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KKworaW50IGFyZXNfZ2V0X3NlcnZlcnNfcG9ydHMoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSAqKnNlcnZlcnMpCit7CisgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlICpzcnZyX2hlYWQgPSBOVUxMOworICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSAqc3J2cl9sYXN0ID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfYWRkcl9wb3J0X25vZGUgKnNydnJfY3VycjsKKyAgaW50IHN0YXR1cyA9IEFSRVNfU1VDQ0VTUzsKKyAgaW50IGk7CisKKyAgaWYgKCFjaGFubmVsKQorICAgIHJldHVybiBBUkVTX0VOT0RBVEE7CisKKyAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5zZXJ2ZXJzOyBpKyspCisgICAgeworICAgICAgLyogQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhpcyBzZXJ2ZXIgbm9kZSBhcHBlbmRpbmcgaXQgdG8gdGhlIGxpc3QgKi8KKyAgICAgIHNydnJfY3VyciA9IGFyZXNfbWFsbG9jX2RhdGEoQVJFU19EQVRBVFlQRV9BRERSX1BPUlRfTk9ERSk7CisgICAgICBpZiAoIXNydnJfY3VycikKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRU5PTUVNOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAoc3J2cl9sYXN0KQorICAgICAgICB7CisgICAgICAgICAgc3J2cl9sYXN0LT5uZXh0ID0gc3J2cl9jdXJyOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzcnZyX2hlYWQgPSBzcnZyX2N1cnI7CisgICAgICAgIH0KKyAgICAgIHNydnJfbGFzdCA9IHNydnJfY3VycjsKKworICAgICAgLyogRmlsbCB0aGlzIHNlcnZlciBub2RlIGRhdGEgKi8KKyAgICAgIHNydnJfY3Vyci0+ZmFtaWx5ID0gY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLmZhbWlseTsKKyAgICAgIHNydnJfY3Vyci0+dWRwX3BvcnQgPSBudG9ocygodW5zaWduZWQgc2hvcnQpY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLnVkcF9wb3J0KTsKKyAgICAgIHNydnJfY3Vyci0+dGNwX3BvcnQgPSBudG9ocygodW5zaWduZWQgc2hvcnQpY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLnRjcF9wb3J0KTsKKyAgICAgIGlmIChzcnZyX2N1cnItPmZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICBtZW1jcHkoJnNydnJfY3Vyci0+YWRkclY0LCAmY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLmFkZHJWNCwKKyAgICAgICAgICAgICAgIHNpemVvZihzcnZyX2N1cnItPmFkZHJWNCkpOworICAgICAgZWxzZQorICAgICAgICBtZW1jcHkoJnNydnJfY3Vyci0+YWRkclY2LCAmY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLmFkZHJWNiwKKyAgICAgICAgICAgICAgIHNpemVvZihzcnZyX2N1cnItPmFkZHJWNikpOworICAgIH0KKworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAoc3J2cl9oZWFkKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlX2RhdGEoc3J2cl9oZWFkKTsKKyAgICAgICAgICBzcnZyX2hlYWQgPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICpzZXJ2ZXJzID0gc3J2cl9oZWFkOworCisgIHJldHVybiBzdGF0dXM7Cit9CisKK2ludCBhcmVzX3NldF9zZXJ2ZXJzKGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyZXNfYWRkcl9ub2RlICpzZXJ2ZXJzKQoreworICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKnNydnI7CisgIGludCBudW1fc3J2cnMgPSAwOworICBpbnQgaTsKKworICBpZiAoYXJlc19saWJyYXJ5X2luaXRpYWxpemVkKCkgIT0gQVJFU19TVUNDRVNTKQorICAgIHJldHVybiBBUkVTX0VOT1RJTklUSUFMSVpFRDsgIC8qIExDT1ZfRVhDTF9MSU5FOiBuL2Egb24gbm9uLVdpblNvY2sgKi8KKworICBpZiAoIWNoYW5uZWwpCisgICAgcmV0dXJuIEFSRVNfRU5PREFUQTsKKworICBhcmVzX19kZXN0cm95X3NlcnZlcnNfc3RhdGUoY2hhbm5lbCk7CisKKyAgZm9yIChzcnZyID0gc2VydmVyczsgc3J2cjsgc3J2ciA9IHNydnItPm5leHQpCisgICAgeworICAgICAgbnVtX3NydnJzKys7CisgICAgfQorCisgIGlmIChudW1fc3J2cnMgPiAwKQorICAgIHsKKyAgICAgIC8qIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHNlcnZlcnMgc3RhdGUgKi8KKyAgICAgIGNoYW5uZWwtPnNlcnZlcnMgPSBhcmVzX21hbGxvYyhudW1fc3J2cnMgKiBzaXplb2Yoc3RydWN0IHNlcnZlcl9zdGF0ZSkpOworICAgICAgaWYgKCFjaGFubmVsLT5zZXJ2ZXJzKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgICB9CisgICAgICBjaGFubmVsLT5uc2VydmVycyA9IG51bV9zcnZyczsKKyAgICAgIC8qIEZpbGwgc2VydmVycyBzdGF0ZSBhZGRyZXNzIGRhdGEgKi8KKyAgICAgIGZvciAoaSA9IDAsIHNydnIgPSBzZXJ2ZXJzOyBzcnZyOyBpKyssIHNydnIgPSBzcnZyLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLmZhbWlseSA9IHNydnItPmZhbWlseTsKKyAgICAgICAgICBjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIudWRwX3BvcnQgPSAwOworICAgICAgICAgIGNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci50Y3BfcG9ydCA9IDA7CisgICAgICAgICAgaWYgKHNydnItPmZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgbWVtY3B5KCZjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuYWRkclY0LCAmc3J2ci0+YWRkclY0LAorICAgICAgICAgICAgICAgICAgIHNpemVvZihzcnZyLT5hZGRyVjQpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoJmNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci5hZGRyVjYsICZzcnZyLT5hZGRyVjYsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNydnItPmFkZHJWNikpOworICAgICAgICB9CisgICAgICAvKiBJbml0aWFsaXplIHNlcnZlcnMgc3RhdGUgcmVtYWluaW5nIGRhdGEgKi8KKyAgICAgIGFyZXNfX2luaXRfc2VydmVyc19zdGF0ZShjaGFubmVsKTsKKyAgICB9CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworaW50IGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSAqc2VydmVycykKK3sKKyAgc3RydWN0IGFyZXNfYWRkcl9wb3J0X25vZGUgKnNydnI7CisgIGludCBudW1fc3J2cnMgPSAwOworICBpbnQgaTsKKworICBpZiAoYXJlc19saWJyYXJ5X2luaXRpYWxpemVkKCkgIT0gQVJFU19TVUNDRVNTKQorICAgIHJldHVybiBBUkVTX0VOT1RJTklUSUFMSVpFRDsgIC8qIExDT1ZfRVhDTF9MSU5FOiBuL2Egb24gbm9uLVdpblNvY2sgKi8KKworICBpZiAoIWNoYW5uZWwpCisgICAgcmV0dXJuIEFSRVNfRU5PREFUQTsKKworICBhcmVzX19kZXN0cm95X3NlcnZlcnNfc3RhdGUoY2hhbm5lbCk7CisKKyAgZm9yIChzcnZyID0gc2VydmVyczsgc3J2cjsgc3J2ciA9IHNydnItPm5leHQpCisgICAgeworICAgICAgbnVtX3NydnJzKys7CisgICAgfQorCisgIGlmIChudW1fc3J2cnMgPiAwKQorICAgIHsKKyAgICAgIC8qIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHNlcnZlcnMgc3RhdGUgKi8KKyAgICAgIGNoYW5uZWwtPnNlcnZlcnMgPSBhcmVzX21hbGxvYyhudW1fc3J2cnMgKiBzaXplb2Yoc3RydWN0IHNlcnZlcl9zdGF0ZSkpOworICAgICAgaWYgKCFjaGFubmVsLT5zZXJ2ZXJzKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICAgICAgICB9CisgICAgICBjaGFubmVsLT5uc2VydmVycyA9IG51bV9zcnZyczsKKyAgICAgIC8qIEZpbGwgc2VydmVycyBzdGF0ZSBhZGRyZXNzIGRhdGEgKi8KKyAgICAgIGZvciAoaSA9IDAsIHNydnIgPSBzZXJ2ZXJzOyBzcnZyOyBpKyssIHNydnIgPSBzcnZyLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgY2hhbm5lbC0+c2VydmVyc1tpXS5hZGRyLmZhbWlseSA9IHNydnItPmZhbWlseTsKKyAgICAgICAgICBjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIudWRwX3BvcnQgPSBodG9ucygodW5zaWduZWQgc2hvcnQpc3J2ci0+dWRwX3BvcnQpOworICAgICAgICAgIGNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci50Y3BfcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydClzcnZyLT50Y3BfcG9ydCk7CisgICAgICAgICAgaWYgKHNydnItPmZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgbWVtY3B5KCZjaGFubmVsLT5zZXJ2ZXJzW2ldLmFkZHIuYWRkclY0LCAmc3J2ci0+YWRkclY0LAorICAgICAgICAgICAgICAgICAgIHNpemVvZihzcnZyLT5hZGRyVjQpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoJmNoYW5uZWwtPnNlcnZlcnNbaV0uYWRkci5hZGRyVjYsICZzcnZyLT5hZGRyVjYsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNydnItPmFkZHJWNikpOworICAgICAgICB9CisgICAgICAvKiBJbml0aWFsaXplIHNlcnZlcnMgc3RhdGUgcmVtYWluaW5nIGRhdGEgKi8KKyAgICAgIGFyZXNfX2luaXRfc2VydmVyc19zdGF0ZShjaGFubmVsKTsKKyAgICB9CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworLyogSW5jb21taW5nIHN0cmluZyBmb3JtYXQ6IGhvc3RbOnBvcnRdWyxob3N0Wzpwb3J0XV0uLi4gKi8KKy8qIElQdjYgYWRkcmVzc2VzIHdpdGggcG9ydHMgcmVxdWlyZSBzcXVhcmUgYnJhY2tldHMgW2ZlODA6OjElbG8wXTo1MyAqLworc3RhdGljIGludCBzZXRfc2VydmVyc19jc3YoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfY3N2LCBpbnQgdXNlX3BvcnQpCit7CisgIHNpemVfdCBpOworICBjaGFyKiBjc3YgPSBOVUxMOworICBjaGFyKiBwdHI7CisgIGNoYXIqIHN0YXJ0X2hvc3Q7CisgIGludCBjYyA9IDA7CisgIGludCBydiA9IEFSRVNfU1VDQ0VTUzsKKyAgc3RydWN0IGFyZXNfYWRkcl9wb3J0X25vZGUgKnNlcnZlcnMgPSBOVUxMOworICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSAqbGFzdCA9IE5VTEw7CisKKyAgaWYgKGFyZXNfbGlicmFyeV9pbml0aWFsaXplZCgpICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXR1cm4gQVJFU19FTk9USU5JVElBTElaRUQ7ICAvKiBMQ09WX0VYQ0xfTElORTogbi9hIG9uIG5vbi1XaW5Tb2NrICovCisKKyAgaWYgKCFjaGFubmVsKQorICAgIHJldHVybiBBUkVTX0VOT0RBVEE7CisKKyAgYXJlc19fZGVzdHJveV9zZXJ2ZXJzX3N0YXRlKGNoYW5uZWwpOworCisgIGkgPSBzdHJsZW4oX2Nzdik7CisgIGlmIChpID09IDApCisgICAgIHJldHVybiBBUkVTX1NVQ0NFU1M7IC8qIGJsYW5rIGFsbCBzZXJ2ZXJzICovCisKKyAgY3N2ID0gYXJlc19tYWxsb2MoaSArIDIpOworICBpZiAoIWNzdikKKyAgICByZXR1cm4gQVJFU19FTk9NRU07CisKKyAgc3RyY3B5KGNzdiwgX2Nzdik7CisgIGlmIChjc3ZbaS0xXSAhPSAnLCcpIHsgLyogbWFrZSBwYXJzaW5nIGVhc2llciBieSBlbnN1cmluZyBlbmRpbmcgJywnICovCisgICAgY3N2W2ldID0gJywnOworICAgIGNzdltpKzFdID0gMDsKKyAgfQorCisgIHN0YXJ0X2hvc3QgPSBjc3Y7CisgIGZvciAocHRyID0gY3N2OyAqcHRyOyBwdHIrKykgeworICAgIGlmICgqcHRyID09ICc6JykgeworICAgICAgLyogY291bnQgY29sb25zIHRvIGRldGVybWluZSBpZiB3ZSBoYXZlIGFuIElQdjYgbnVtYmVyIG9yIElQdjQgd2l0aAorICAgICAgICAgcG9ydCAqLworICAgICAgY2MrKzsKKyAgICB9CisgICAgZWxzZSBpZiAoKnB0ciA9PSAnWycpIHsKKyAgICAgIC8qIG1vdmUgc3RhcnRfaG9zdCBpZiBhbiBvcGVuIHNxdWFyZSBicmFja2V0IGlzIGZvdW5kIHdyYXBwaW5nIGFuIElQdjYKKyAgICAgICAgIGFkZHJlc3MgKi8KKyAgICAgIHN0YXJ0X2hvc3QgPSBwdHIgKyAxOworICAgIH0KKyAgICBlbHNlIGlmICgqcHRyID09ICcsJykgeworICAgICAgY2hhciogcHAgPSBwdHIgLSAxOworICAgICAgY2hhciogcCA9IHB0cjsKKyAgICAgIGludCBwb3J0ID0gMDsKKyAgICAgIHN0cnVjdCBpbl9hZGRyIGluNDsKKyAgICAgIHN0cnVjdCBhcmVzX2luNl9hZGRyIGluNjsKKyAgICAgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlICpzID0gTlVMTDsKKworICAgICAgKnB0ciA9IDA7IC8qIG51bGwgdGVybWluYXRlIGhvc3Q6cG9ydCBzdHJpbmcgKi8KKyAgICAgIC8qIEdvdCBhbiBlbnRyeS4uc2VlIGlmIHRoZSBwb3J0IHdhcyBzcGVjaWZpZWQuICovCisgICAgICBpZiAoY2MgPiAwKSB7CisgICAgICAgIHdoaWxlIChwcCA+IHN0YXJ0X2hvc3QpIHsKKyAgICAgICAgICAvKiBhIHNpbmdsZSBjbG9zZSBzcXVhcmUgYnJhY2tldCBmb2xsb3dlZCBieSBhIGNvbG9uLCAnXTonIGluZGljYXRlcworICAgICAgICAgICAgIGFuIElQdjYgYWRkcmVzcyB3aXRoIHBvcnQgKi8KKyAgICAgICAgICBpZiAoKCpwcCA9PSAnXScpICYmICgqcCA9PSAnOicpKQorICAgICAgICAgICAgYnJlYWs7IC8qIGZvdW5kIHBvcnQgKi8KKyAgICAgICAgICAvKiBhIHNpbmdsZSBjb2xvbiwgJzonIGluZGljYXRlcyBhbiBJUHY0IGFkZHJlc3Mgd2l0aCBwb3J0ICovCisgICAgICAgICAgaWYgKCgqcHAgPT0gJzonKSAmJiAoY2MgPT0gMSkpCisgICAgICAgICAgICBicmVhazsgLyogZm91bmQgcG9ydCAqLworICAgICAgICAgIGlmICghKElTRElHSVQoKnBwKSB8fCAoKnBwID09ICc6JykpKSB7CisgICAgICAgICAgICAvKiBGb3VuZCBlbmQgb2YgZGlnaXRzIGJlZm9yZSB3ZSBmb3VuZCA6LCBzbyB3YXNuJ3QgYSBwb3J0ICovCisgICAgICAgICAgICAvKiBtdXN0IGFsbG93ICc6JyBmb3IgSVB2NiBjYXNlIG9mICddOicgaW5kaWNhdGVzIHdlIGZvdW5kIGEgcG9ydCAqLworICAgICAgICAgICAgcHAgPSBwID0gcHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHBwLS07CisgICAgICAgICAgcC0tOworICAgICAgICB9CisgICAgICAgIGlmICgocHAgIT0gc3RhcnRfaG9zdCkgJiYgKChwcCArIDEpIDwgcHRyKSkgeworICAgICAgICAgIC8qIEZvdW5kIGl0LiBQYXJzZSBvdmVyIHRoZSBwb3J0IG51bWJlciAqLworICAgICAgICAgIC8qIHdoZW4gYW4gSVB2NiBhZGRyZXNzIGlzIHdyYXBwZWQgd2l0aCBzcXVhcmUgYnJhY2tldHMgdGhlIHBvcnQKKyAgICAgICAgICAgICBzdGFydHMgYXQgcHAgKyAyICovCisgICAgICAgICAgaWYgKCpwcCA9PSAnXScpCisgICAgICAgICAgICBwKys7IC8qIG1vdmUgcCBiZWZvcmUgJzonICovCisgICAgICAgICAgLyogcCB3aWxsIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgcG9ydCAqLworICAgICAgICAgIHBvcnQgPSAoaW50KXN0cnRvbChwLCBOVUxMLCAxMCk7CisgICAgICAgICAgKnBwID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgaG9zdCAqLworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiByZXNvbHZlIGhvc3QsIHRyeSBpcHY0IGZpcnN0LCByc2x0IGlzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworICAgICAgcnYgPSBhcmVzX2luZXRfcHRvbihBRl9JTkVULCBzdGFydF9ob3N0LCAmaW40KTsKKyAgICAgIGlmICghcnYpIHsKKyAgICAgICAgLyogT2ssIHRyeSBJUHY2IHRoZW4gKi8KKyAgICAgICAgcnYgPSBhcmVzX2luZXRfcHRvbihBRl9JTkVUNiwgc3RhcnRfaG9zdCwgJmluNik7CisgICAgICAgIGlmICghcnYpIHsKKyAgICAgICAgICBydiA9IEFSRVNfRUJBRFNUUjsKKyAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICAvKiB3YXMgaXB2NiwgYWRkIG5ldyBzZXJ2ZXIgKi8KKyAgICAgICAgcyA9IGFyZXNfbWFsbG9jKHNpemVvZigqcykpOworICAgICAgICBpZiAoIXMpIHsKKyAgICAgICAgICBydiA9IEFSRVNfRU5PTUVNOworICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIHMtPmZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBtZW1jcHkoJnMtPmFkZHIsICZpbjYsIHNpemVvZihzdHJ1Y3QgYXJlc19pbjZfYWRkcikpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHdhcyBpcHY0LCBhZGQgbmV3IHNlcnZlciAqLworICAgICAgICBzID0gYXJlc19tYWxsb2Moc2l6ZW9mKCpzKSk7CisgICAgICAgIGlmICghcykgeworICAgICAgICAgIHJ2ID0gQVJFU19FTk9NRU07CisgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgcy0+ZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbWVtY3B5KCZzLT5hZGRyLCAmaW40LCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyAgICAgIH0KKyAgICAgIGlmIChzKSB7CisgICAgICAgIHMtPnVkcF9wb3J0ID0gdXNlX3BvcnQgPyBwb3J0OiAwOworICAgICAgICBzLT50Y3BfcG9ydCA9IHMtPnVkcF9wb3J0OworICAgICAgICBzLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgaWYgKGxhc3QpIHsKKyAgICAgICAgICBsYXN0LT5uZXh0ID0gczsKKyAgICAgICAgICAvKiBuZWVkIHRvIG1vdmUgbGFzdCB0byBtYWludGFpbiB0aGUgbGlua2VkIGxpc3QgKi8KKyAgICAgICAgICBsYXN0ID0gbGFzdC0+bmV4dDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzZXJ2ZXJzID0gczsKKyAgICAgICAgICBsYXN0ID0gczsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBTZXQgdXAgZm9yIG5leHQgb25lICovCisgICAgICBzdGFydF9ob3N0ID0gcHRyICsgMTsKKyAgICAgIGNjID0gMDsKKyAgICB9CisgIH0KKworICBydiA9IGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMoY2hhbm5lbCwgc2VydmVycyk7CisKKyAgb3V0OgorICBpZiAoY3N2KQorICAgIGFyZXNfZnJlZShjc3YpOworICB3aGlsZSAoc2VydmVycykgeworICAgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlICpzID0gc2VydmVyczsKKyAgICBzZXJ2ZXJzID0gc2VydmVycy0+bmV4dDsKKyAgICBhcmVzX2ZyZWUocyk7CisgIH0KKworICByZXR1cm4gcnY7Cit9CisKK2ludCBhcmVzX3NldF9zZXJ2ZXJzX2NzdihhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfY3N2KQoreworICByZXR1cm4gc2V0X3NlcnZlcnNfY3N2KGNoYW5uZWwsIF9jc3YsIEZBTFNFKTsKK30KKworaW50IGFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2KGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9jc3YpCit7CisgIHJldHVybiBzZXRfc2VydmVyc19jc3YoY2hhbm5lbCwgX2NzdiwgVFJVRSk7Cit9CisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfYV9yZXBseS4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9hX3JlcGx5LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiOGVkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfYV9yZXBseS4zCkBAIC0wLDAgKzEsNzggQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19QQVJTRV9BX1JFUExZIDMgIjI1IEp1bHkgMTk5OCIKKy5TSCBOQU1FCithcmVzX3BhcnNlX2FfcmVwbHkgXC0gUGFyc2UgYSByZXBseSB0byBhIEROUyBxdWVyeSBvZiB0eXBlIEEKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiBpbnQgYXJlc19wYXJzZV9hX3JlcGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKlxmSWFidWZcZlAsIGludCBcZklhbGVuXGZQLAorLkIgCXN0cnVjdCBob3N0ZW50ICoqXGZJaG9zdFxmUCwKKy5CICAgICAgc3RydWN0IGFyZXNfYWRkcnR0bCAqXGZJYWRkcnR0bHNcZlAsIGludCAqXGZJbmFkZHJ0dGxzXGZQKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfcGFyc2VfYV9yZXBseQorZnVuY3Rpb24gcGFyc2VzIHRoZSByZXNwb25zZSB0byBhIHF1ZXJ5IG9mIHR5cGUgQSBpbnRvIGEKKy5CUiAic3RydWN0IGhvc3RlbnQiCithbmQvb3IgYW4gYXJyYXkgb2YKKy5CUiAic3RydWN0IGFyZXNfYWRkcnR0bHMiIC4gCitUaGUgcGFyYW1ldGVycworLkkgYWJ1ZgorYW5kCisuSSBhbGVuCitnaXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UuICBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiBhbGxvY2F0ZWQKK21lbW9yeSBhbmQgYSBwb2ludGVyIHRvIGl0IHN0b3JlZCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CisuSVIgaG9zdCAsCitpZiBob3N0IGlzIG5vbm51bGwuCitJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmVzdWx0aW5nIGhvc3Qgc3RydWN0dXJlCit1c2luZworLkJSIGFyZXNfZnJlZV9ob3N0ZW50ICgzKQord2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorLlBQCitJZgorLklSIGFkZHJ0dGxzCithbmQKKy5JUiBuYWRkcnR0bHMKK2FyZSBib3RoIG5vbm51bGwsCit0aGVuIHVwIHRvICpuYWRkcnR0bHMKKy5CUiAic3RydWN0IGFyZXNfYWRkcnR0bCIKK3JlY29yZHMgYXJlIHN0b3JlZCBpbiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSBhZGRydHRscywKK2FuZCB0aGVuICpuYWRkcnR0bHMgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBzbyBzdG9yZWQuCitOb3RlIHRoYXQgdGhlIG1lbW9yeSBmb3IgdGhlc2UgcmVjb3JkcyBpcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgorLlNIIFJFVFVSTiBWQUxVRVMKKy5CIGFyZXNfcGFyc2VfYV9yZXBseQorY2FuIHJldHVybiBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuVFAgMTUKKy5CIEFSRVNfU1VDQ0VTUworVGhlIHJlc3BvbnNlIHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkLgorLlRQIDE1CisuQiBBUkVTX0VCQURSRVNQCitUaGUgcmVzcG9uc2Ugd2FzIG1hbGZvcm1hdHRlZC4KKy5UUCAxNQorLkIgQVJFU19FTk9EQVRBCitUaGUgcmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGFuIGFuc3dlciB0byB0aGUgcXVlcnkuCisuVFAgMTUKKy5CIEFSRVNfRU5PTUVNCitNZW1vcnkgd2FzIGV4aGF1c3RlZC4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfZ2V0aG9zdGJ5bmFtZSAoMyksCisuQlIgYXJlc19mcmVlX2hvc3RlbnQgKDMpCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX2FfcmVwbHkuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfYV9yZXBseS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjJiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX2FfcmVwbHkuYwpAQCAtMCwwICsxLDI2NCBAQAorCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCitpbnQgYXJlc19wYXJzZV9hX3JlcGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX2FkZHJ0dGwgKmFkZHJ0dGxzLCBpbnQgKm5hZGRydHRscykKK3sKKyAgdW5zaWduZWQgaW50IHFkY291bnQsIGFuY291bnQ7CisgIGludCBzdGF0dXMsIGksIHJyX3R5cGUsIHJyX2NsYXNzLCBycl9sZW4sIHJyX3R0bCwgbmFkZHJzOworICBpbnQgY25hbWVfdHRsID0gSU5UX01BWDsgIC8qIHRoZSBUVEwgaW1wb3NlZCBieSB0aGUgQ05BTUUgY2hhaW4gKi8KKyAgaW50IG5hbGlhc2VzOworICBsb25nIGxlbjsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYXB0cjsKKyAgY2hhciAqaG9zdG5hbWUsICpycl9uYW1lLCAqcnJfZGF0YSwgKiphbGlhc2VzOworICBzdHJ1Y3QgaW5fYWRkciAqYWRkcnM7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ZW50OworICBjb25zdCBpbnQgbWF4X2FkZHJfdHRscyA9IChhZGRydHRscyAmJiBuYWRkcnR0bHMpID8gKm5hZGRydHRscyA6IDA7CisKKyAgLyogU2V0ICpob3N0IHRvIE5VTEwgZm9yIGFsbCBmYWlsdXJlIGNhc2VzLiAqLworICBpZiAoaG9zdCkKKyAgICAqaG9zdCA9IE5VTEw7CisgIC8qIFNhbWUgd2l0aCAqbmFkZHJ0dGxzLiAqLworICBpZiAobmFkZHJ0dGxzKQorICAgICpuYWRkcnR0bHMgPSAwOworCisgIC8qIEdpdmUgdXAgaWYgYWJ1ZiBkb2Vzbid0IGhhdmUgcm9vbSBmb3IgYSBoZWFkZXIuICovCisgIGlmIChhbGVuIDwgSEZJWEVEU1opCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisKKyAgLyogRmV0Y2ggdGhlIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgY291bnQgZnJvbSB0aGUgaGVhZGVyLiAqLworICBxZGNvdW50ID0gRE5TX0hFQURFUl9RRENPVU5UKGFidWYpOworICBhbmNvdW50ID0gRE5TX0hFQURFUl9BTkNPVU5UKGFidWYpOworICBpZiAocWRjb3VudCAhPSAxKQorICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworCisgIC8qIEV4cGFuZCB0aGUgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiwgYW5kIHNraXAgcGFzdCB0aGUgcXVlc3Rpb24uICovCisgIGFwdHIgPSBhYnVmICsgSEZJWEVEU1o7CisgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmaG9zdG5hbWUsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXR1cm4gc3RhdHVzOworICBpZiAoYXB0ciArIGxlbiArIFFGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgeworICAgICAgYXJlc19mcmVlKGhvc3RuYW1lKTsKKyAgICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworICAgIH0KKyAgYXB0ciArPSBsZW4gKyBRRklYRURTWjsKKworICBpZiAoaG9zdCkKKyAgICB7CisgICAgICAvKiBBbGxvY2F0ZSBhZGRyZXNzZXMgYW5kIGFsaWFzZXM7IGFuY291bnQgZ2l2ZXMgYW4gdXBwZXIgYm91bmQgZm9yCisgICAgICAgICBib3RoLiAqLworICAgICAgYWRkcnMgPSBhcmVzX21hbGxvYyhhbmNvdW50ICogc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisgICAgICBpZiAoIWFkZHJzKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlKGhvc3RuYW1lKTsKKyAgICAgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgICAgIH0KKyAgICAgIGFsaWFzZXMgPSBhcmVzX21hbGxvYygoYW5jb3VudCArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgaWYgKCFhbGlhc2VzKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlKGhvc3RuYW1lKTsKKyAgICAgICAgICBhcmVzX2ZyZWUoYWRkcnMpOworICAgICAgICAgIHJldHVybiBBUkVTX0VOT01FTTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFkZHJzID0gTlVMTDsKKyAgICAgIGFsaWFzZXMgPSBOVUxMOworICAgIH0KKworICBuYWRkcnMgPSAwOworICBuYWxpYXNlcyA9IDA7CisKKyAgLyogRXhhbWluZSBlYWNoIGFuc3dlciByZXNvdXJjZSByZWNvcmQgKFJSKSBpbiB0dXJuLiAqLworICBmb3IgKGkgPSAwOyBpIDwgKGludClhbmNvdW50OyBpKyspCisgICAgeworICAgICAgLyogRGVjb2RlIHRoZSBSUiB1cCB0byB0aGUgZGF0YSBmaWVsZC4gKi8KKyAgICAgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmcnJfbmFtZSwgJmxlbik7CisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgYnJlYWs7CisgICAgICBhcHRyICs9IGxlbjsKKyAgICAgIGlmIChhcHRyICsgUlJGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgcnJfdHlwZSA9IEROU19SUl9UWVBFKGFwdHIpOworICAgICAgcnJfY2xhc3MgPSBETlNfUlJfQ0xBU1MoYXB0cik7CisgICAgICBycl9sZW4gPSBETlNfUlJfTEVOKGFwdHIpOworICAgICAgcnJfdHRsID0gRE5TX1JSX1RUTChhcHRyKTsKKyAgICAgIGFwdHIgKz0gUlJGSVhFRFNaOworICAgICAgaWYgKGFwdHIgKyBycl9sZW4gPiBhYnVmICsgYWxlbikKKyAgICAgICAgeworICAgICAgICAgIGFyZXNfZnJlZShycl9uYW1lKTsKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VCQURSRVNQOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIGlmIChycl9jbGFzcyA9PSBDX0lOICYmIHJyX3R5cGUgPT0gVF9BCisgICAgICAgICAgJiYgcnJfbGVuID09IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikKKyAgICAgICAgICAmJiBzdHJjYXNlY21wKHJyX25hbWUsIGhvc3RuYW1lKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGFkZHJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoYXB0ciArIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikgPiBhYnVmICsgYWxlbikKKyAgICAgICAgICAgICAgeyAgLyogTENPVl9FWENMX1NUQVJUOiBhbHJlYWR5IGNoZWNrZWQgYWJvdmUgKi8KKyAgICAgICAgICAgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfSAgLyogTENPVl9FWENMX1NUT1AgKi8KKyAgICAgICAgICAgICAgbWVtY3B5KCZhZGRyc1tuYWRkcnNdLCBhcHRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobmFkZHJzIDwgbWF4X2FkZHJfdHRscykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RydWN0IGFyZXNfYWRkcnR0bCAqIGNvbnN0IGF0ID0gJmFkZHJ0dGxzW25hZGRyc107CisgICAgICAgICAgICAgIGlmIChhcHRyICsgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSA+IGFidWYgKyBhbGVuKQorICAgICAgICAgICAgICB7ICAvKiBMQ09WX0VYQ0xfU1RBUlQ6IGFscmVhZHkgY2hlY2tlZCBhYm92ZSAqLworICAgICAgICAgICAgICAgIGFyZXNfZnJlZShycl9uYW1lKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VCQURSRVNQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9ICAvKiBMQ09WX0VYQ0xfU1RPUCAqLworICAgICAgICAgICAgICBtZW1jcHkoJmF0LT5pcGFkZHIsIGFwdHIsICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyAgICAgICAgICAgICAgYXQtPnR0bCA9IHJyX3R0bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBuYWRkcnMrKzsKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX1NVQ0NFU1M7CisgICAgICAgIH0KKworICAgICAgaWYgKHJyX2NsYXNzID09IENfSU4gJiYgcnJfdHlwZSA9PSBUX0NOQU1FKQorICAgICAgICB7CisgICAgICAgICAgLyogUmVjb3JkIHRoZSBSUiBuYW1lIGFzIGFuIGFsaWFzLiAqLworICAgICAgICAgIGlmIChhbGlhc2VzKQorICAgICAgICAgICAgYWxpYXNlc1tuYWxpYXNlc10gPSBycl9uYW1lOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZXNfZnJlZShycl9uYW1lKTsKKyAgICAgICAgICBuYWxpYXNlcysrOworCisgICAgICAgICAgLyogRGVjb2RlIHRoZSBSUiBkYXRhIGFuZCByZXBsYWNlIHRoZSBob3N0bmFtZSB3aXRoIGl0LiAqLworICAgICAgICAgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmcnJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbik7CisgICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBhcmVzX2ZyZWUoaG9zdG5hbWUpOworICAgICAgICAgIGhvc3RuYW1lID0gcnJfZGF0YTsKKworICAgICAgICAgIC8qIFRha2UgdGhlIG1pbiBvZiB0aGUgVFRMcyB3ZSBzZWUgaW4gdGhlIENOQU1FIGNoYWluLiAqLworICAgICAgICAgIGlmIChjbmFtZV90dGwgPiBycl90dGwpCisgICAgICAgICAgICBjbmFtZV90dGwgPSBycl90dGw7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworCisgICAgICBhcHRyICs9IHJyX2xlbjsKKyAgICAgIGlmIChhcHRyID4gYWJ1ZiArIGFsZW4pCisgICAgICAgIHsgIC8qIExDT1ZfRVhDTF9TVEFSVDogYWxyZWFkeSBjaGVja2VkIGFib3ZlICovCisgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgLyogTENPVl9FWENMX1NUT1AgKi8KKyAgICB9CisKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MgJiYgbmFkZHJzID09IDAgJiYgbmFsaWFzZXMgPT0gMCkKKyAgICAvKiB0aGUgY2hlY2sgZm9yIG5hbGlhc2VzIHRvIGJlIHplcm8gaXMgdG8gbWFrZSBzdXJlIENOQU1FIHJlc3BvbnNlcworICAgICAgIGRvbid0IGdldCBjYXVnaHQgaGVyZSAqLworICAgIHN0YXR1cyA9IEFSRVNfRU5PREFUQTsKKyAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgLyogV2UgZ290IG91ciBhbnN3ZXIuICovCisgICAgICBpZiAobmFkZHJ0dGxzKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgaW50IG4gPSBuYWRkcnMgPCBtYXhfYWRkcl90dGxzID8gbmFkZHJzIDogbWF4X2FkZHJfdHRsczsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCBlYWNoIEEgVFRMIGlzIG5vIGxhcmdlciB0aGFuIHRoZSBDTkFNRSBUVEwuICovCisgICAgICAgICAgICAgIGlmIChhZGRydHRsc1tpXS50dGwgPiBjbmFtZV90dGwpCisgICAgICAgICAgICAgICAgYWRkcnR0bHNbaV0udHRsID0gY25hbWVfdHRsOworICAgICAgICAgICAgfQorICAgICAgICAgICpuYWRkcnR0bHMgPSBuOworICAgICAgICB9CisgICAgICBpZiAoYWxpYXNlcykKKyAgICAgICAgYWxpYXNlc1tuYWxpYXNlc10gPSBOVUxMOworICAgICAgaWYgKGhvc3QpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgdG8gYnVpbGQgdGhlIGhvc3QgZW50cnkuICovCisgICAgICAgICAgaG9zdGVudCA9IGFyZXNfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG9zdGVudCkpOworICAgICAgICAgIGlmIChob3N0ZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdCA9IGFyZXNfbWFsbG9jKChuYWRkcnMgKyAxKSAqIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgICAgICAgaWYgKGhvc3RlbnQtPmhfYWRkcl9saXN0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIGhvc3RlbnQgYW5kIHJldHVybiBzdWNjZXNzZnVsbHkuICovCisgICAgICAgICAgICAgICAgICBob3N0ZW50LT5oX25hbWUgPSBob3N0bmFtZTsKKyAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfYWxpYXNlcyA9IGFsaWFzZXM7CisgICAgICAgICAgICAgICAgICBob3N0ZW50LT5oX2FkZHJ0eXBlID0gQUZfSU5FVDsKKyAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYWRkcnM7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgaG9zdGVudC0+aF9hZGRyX2xpc3RbaV0gPSAoY2hhciAqKSAmYWRkcnNbaV07CisgICAgICAgICAgICAgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdFtuYWRkcnNdID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIGlmICghbmFkZHJzICYmIGFkZHJzKQorICAgICAgICAgICAgICAgICAgICBhcmVzX2ZyZWUoYWRkcnMpOworICAgICAgICAgICAgICAgICAgKmhvc3QgPSBob3N0ZW50OworICAgICAgICAgICAgICAgICAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGFyZXNfZnJlZShob3N0ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VOT01FTTsKKyAgICAgICAgfQorICAgICB9CisgIGlmIChhbGlhc2VzKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuYWxpYXNlczsgaSsrKQorICAgICAgICBhcmVzX2ZyZWUoYWxpYXNlc1tpXSk7CisgICAgICBhcmVzX2ZyZWUoYWxpYXNlcyk7CisgICAgfQorICBhcmVzX2ZyZWUoYWRkcnMpOworICBhcmVzX2ZyZWUoaG9zdG5hbWUpOworICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9hYWFhX3JlcGx5LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX2FhYWFfcmVwbHkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzZhM2YxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9hYWFhX3JlcGx5LjMKQEAgLTAsMCArMSw3OCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDIwMDUgYnkgRG9taW5pY2sgTWVnbGlvLgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19QQVJTRV9BQUFBX1JFUExZIDMgIjIwIE5vdiAyMDA5IgorLlNIIE5BTUUKK2FyZXNfcGFyc2VfYWFhYV9yZXBseSBcLSBQYXJzZSBhIHJlcGx5IHRvIGEgRE5TIHF1ZXJ5IG9mIHR5cGUgQUFBQQorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciAqXGZJYWJ1ZlxmUCwgaW50IFxmSWFsZW5cZlAsCisuQiAJc3RydWN0IGhvc3RlbnQgKipcZklob3N0XGZQLCAgICAgICAgIAorLkIgICAgICBzdHJ1Y3QgYXJlc19hZGRyNnR0bCAqXGZJYWRkcnR0bHNcZlAsIGludCAqXGZJbmFkZHJ0dGxzXGZQKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfcGFyc2VfYWFhYV9yZXBseQorZnVuY3Rpb24gcGFyc2VzIHRoZSByZXNwb25zZSB0byBhIHF1ZXJ5IG9mIHR5cGUgQUFBQSBpbnRvIGEKKy5CUiAic3RydWN0IGhvc3RlbnQiCithbmQvb3IgYW4gYXJyYXkgb2YKKy5CUiAic3RydWN0IGFyZXNfYWRkcjZ0dGwiIC4gCitUaGUgcGFyYW1ldGVycworLkkgYWJ1ZgorYW5kCisuSSBhbGVuCitnaXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UuICBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiBhbGxvY2F0ZWQKK21lbW9yeSBhbmQgYSBwb2ludGVyIHRvIGl0IHN0b3JlZCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CisuSVIgaG9zdCAsCitpZiBob3N0IGlzIG5vbm51bGwuCitJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmVzdWx0aW5nIGhvc3Qgc3RydWN0dXJlCit1c2luZworLkJSIGFyZXNfZnJlZV9ob3N0ZW50ICgzKQord2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorLlBQCitJZgorLklSIGFkZHJ0dGxzCithbmQKKy5JUiBuYWRkcnR0bHMKK2FyZSBib3RoIG5vbm51bGwsCit0aGVuIHVwIHRvICpuYWRkcnR0bHMKKy5CUiAic3RydWN0IGFyZXNfYWRkcjZ0dGwiCityZWNvcmRzIGFyZSBzdG9yZWQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgYWRkcnR0bHMsCithbmQgdGhlbiAqbmFkZHJ0dGxzIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHJlY29yZHMgc28gc3RvcmVkLgorTm90ZSB0aGF0IHRoZSBtZW1vcnkgZm9yIHRoZXNlIHJlY29yZHMgaXMgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4KKy5TSCBSRVRVUk4gVkFMVUVTCisuQiBhcmVzX3BhcnNlX2FhYWFfcmVwbHkKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFEUkVTUAorVGhlIHJlc3BvbnNlIHdhcyBtYWxmb3JtYXR0ZWQuCisuVFAgMTUKKy5CIEFSRVNfRU5PREFUQQorVGhlIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhbnN3ZXIgdG8gdGhlIHF1ZXJ5LgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2dldGhvc3RieW5hbWUgKDMpLAorLkJSIGFyZXNfZnJlZV9ob3N0ZW50ICgzKQorLlNIIEFVVEhPUgorRG9taW5pY2sgTWVnbGlvCisuYnIKK0NvcHlyaWdodCAyMDA1IGJ5IERvbWluaWNrIE1lZ2xpby4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfYWFhYV9yZXBseS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9hYWFhX3JlcGx5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzOGJiNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfYWFhYV9yZXBseS5jCkBAIC0wLDAgKzEsMjY0IEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IDIwMDUgRG9taW5pY2sgTWVnbGlvCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElNSVRTX0gKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19kbnMuaCIKKyNpbmNsdWRlICJhcmVzX2luZXRfbmV0X3B0b24uaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworaW50IGFyZXNfcGFyc2VfYWFhYV9yZXBseShjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipob3N0LCBzdHJ1Y3QgYXJlc19hZGRyNnR0bCAqYWRkcnR0bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmFkZHJ0dGxzKQoreworICB1bnNpZ25lZCBpbnQgcWRjb3VudCwgYW5jb3VudDsKKyAgaW50IHN0YXR1cywgaSwgcnJfdHlwZSwgcnJfY2xhc3MsIHJyX2xlbiwgcnJfdHRsLCBuYWRkcnM7CisgIGludCBjbmFtZV90dGwgPSBJTlRfTUFYOyAgLyogdGhlIFRUTCBpbXBvc2VkIGJ5IHRoZSBDTkFNRSBjaGFpbiAqLworICBpbnQgbmFsaWFzZXM7CisgIGxvbmcgbGVuOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyOworICBjaGFyICpob3N0bmFtZSwgKnJyX25hbWUsICpycl9kYXRhLCAqKmFsaWFzZXM7CisgIHN0cnVjdCBhcmVzX2luNl9hZGRyICphZGRyczsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3RlbnQ7CisgIGNvbnN0IGludCBtYXhfYWRkcl90dGxzID0gKGFkZHJ0dGxzICYmIG5hZGRydHRscykgPyAqbmFkZHJ0dGxzIDogMDsKKworICAvKiBTZXQgKmhvc3QgdG8gTlVMTCBmb3IgYWxsIGZhaWx1cmUgY2FzZXMuICovCisgIGlmIChob3N0KQorICAgICpob3N0ID0gTlVMTDsKKyAgLyogU2FtZSB3aXRoICpuYWRkcnR0bHMuICovCisgIGlmIChuYWRkcnR0bHMpCisgICAgKm5hZGRydHRscyA9IDA7CisKKyAgLyogR2l2ZSB1cCBpZiBhYnVmIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBhIGhlYWRlci4gKi8KKyAgaWYgKGFsZW4gPCBIRklYRURTWikKKyAgICByZXR1cm4gQVJFU19FQkFEUkVTUDsKKworICAvKiBGZXRjaCB0aGUgcXVlc3Rpb24gYW5kIGFuc3dlciBjb3VudCBmcm9tIHRoZSBoZWFkZXIuICovCisgIHFkY291bnQgPSBETlNfSEVBREVSX1FEQ09VTlQoYWJ1Zik7CisgIGFuY291bnQgPSBETlNfSEVBREVSX0FOQ09VTlQoYWJ1Zik7CisgIGlmIChxZGNvdW50ICE9IDEpCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisKKyAgLyogRXhwYW5kIHRoZSBuYW1lIGZyb20gdGhlIHF1ZXN0aW9uLCBhbmQgc2tpcCBwYXN0IHRoZSBxdWVzdGlvbi4gKi8KKyAgYXB0ciA9IGFidWYgKyBIRklYRURTWjsKKyAgc3RhdHVzID0gYXJlc19fZXhwYW5kX25hbWVfZm9yX3Jlc3BvbnNlKGFwdHIsIGFidWYsIGFsZW4sICZob3N0bmFtZSwgJmxlbik7CisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHJldHVybiBzdGF0dXM7CisgIGlmIChhcHRyICsgbGVuICsgUUZJWEVEU1ogPiBhYnVmICsgYWxlbikKKyAgICB7CisgICAgICBhcmVzX2ZyZWUoaG9zdG5hbWUpOworICAgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisgICAgfQorICBhcHRyICs9IGxlbiArIFFGSVhFRFNaOworCisgIC8qIEFsbG9jYXRlIGFkZHJlc3NlcyBhbmQgYWxpYXNlczsgYW5jb3VudCBnaXZlcyBhbiB1cHBlciBib3VuZCBmb3IgYm90aC4gKi8KKyAgaWYgKGhvc3QpCisgICAgeworICAgICAgYWRkcnMgPSBhcmVzX21hbGxvYyhhbmNvdW50ICogc2l6ZW9mKHN0cnVjdCBhcmVzX2luNl9hZGRyKSk7CisgICAgICBpZiAoIWFkZHJzKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlKGhvc3RuYW1lKTsKKyAgICAgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgICAgIH0KKyAgICAgIGFsaWFzZXMgPSBhcmVzX21hbGxvYygoYW5jb3VudCArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgaWYgKCFhbGlhc2VzKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlKGhvc3RuYW1lKTsKKyAgICAgICAgICBhcmVzX2ZyZWUoYWRkcnMpOworICAgICAgICAgIHJldHVybiBBUkVTX0VOT01FTTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFkZHJzID0gTlVMTDsKKyAgICAgIGFsaWFzZXMgPSBOVUxMOworICAgIH0KKyAgbmFkZHJzID0gMDsKKyAgbmFsaWFzZXMgPSAwOworCisgIC8qIEV4YW1pbmUgZWFjaCBhbnN3ZXIgcmVzb3VyY2UgcmVjb3JkIChSUikgaW4gdHVybi4gKi8KKyAgZm9yIChpID0gMDsgaSA8IChpbnQpYW5jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIC8qIERlY29kZSB0aGUgUlIgdXAgdG8gdGhlIGRhdGEgZmllbGQuICovCisgICAgICBzdGF0dXMgPSBhcmVzX19leHBhbmRfbmFtZV9mb3JfcmVzcG9uc2UoYXB0ciwgYWJ1ZiwgYWxlbiwgJnJyX25hbWUsICZsZW4pOworICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgIGJyZWFrOworICAgICAgYXB0ciArPSBsZW47CisgICAgICBpZiAoYXB0ciArIFJSRklYRURTWiA+IGFidWYgKyBhbGVuKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIHJyX3R5cGUgPSBETlNfUlJfVFlQRShhcHRyKTsKKyAgICAgIHJyX2NsYXNzID0gRE5TX1JSX0NMQVNTKGFwdHIpOworICAgICAgcnJfbGVuID0gRE5TX1JSX0xFTihhcHRyKTsKKyAgICAgIHJyX3R0bCA9IEROU19SUl9UVEwoYXB0cik7CisgICAgICBhcHRyICs9IFJSRklYRURTWjsKKyAgICAgIGlmIChhcHRyICsgcnJfbGVuID4gYWJ1ZiArIGFsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICBpZiAocnJfY2xhc3MgPT0gQ19JTiAmJiBycl90eXBlID09IFRfQUFBQQorICAgICAgICAgICYmIHJyX2xlbiA9PSBzaXplb2Yoc3RydWN0IGFyZXNfaW42X2FkZHIpCisgICAgICAgICAgJiYgc3RyY2FzZWNtcChycl9uYW1lLCBob3N0bmFtZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhZGRycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGFwdHIgKyBzaXplb2Yoc3RydWN0IGFyZXNfaW42X2FkZHIpID4gYWJ1ZiArIGFsZW4pCisgICAgICAgICAgICAgIHsgIC8qIExDT1ZfRVhDTF9TVEFSVDogYWxyZWFkeSBjaGVja2VkIGFib3ZlICovCisgICAgICAgICAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0gIC8qIExDT1ZfRVhDTF9TVE9QICovCisgICAgICAgICAgICAgIG1lbWNweSgmYWRkcnNbbmFkZHJzXSwgYXB0ciwgc2l6ZW9mKHN0cnVjdCBhcmVzX2luNl9hZGRyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKG5hZGRycyA8IG1heF9hZGRyX3R0bHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX2FkZHI2dHRsICogY29uc3QgYXQgPSAmYWRkcnR0bHNbbmFkZHJzXTsKKyAgICAgICAgICAgICAgaWYgKGFwdHIgKyBzaXplb2Yoc3RydWN0IGFyZXNfaW42X2FkZHIpID4gYWJ1ZiArIGFsZW4pCisgICAgICAgICAgICAgIHsgIC8qIExDT1ZfRVhDTF9TVEFSVDogYWxyZWFkeSBjaGVja2VkIGFib3ZlICovCisgICAgICAgICAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0gIC8qIExDT1ZfRVhDTF9TVE9QICovCisgICAgICAgICAgICAgIG1lbWNweSgmYXQtPmlwNmFkZHIsIGFwdHIsICBzaXplb2Yoc3RydWN0IGFyZXNfaW42X2FkZHIpKTsKKyAgICAgICAgICAgICAgYXQtPnR0bCA9IHJyX3R0bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBuYWRkcnMrKzsKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX1NVQ0NFU1M7CisgICAgICAgIH0KKworICAgICAgaWYgKHJyX2NsYXNzID09IENfSU4gJiYgcnJfdHlwZSA9PSBUX0NOQU1FKQorICAgICAgICB7CisgICAgICAgICAgLyogUmVjb3JkIHRoZSBSUiBuYW1lIGFzIGFuIGFsaWFzLiAqLworICAgICAgICAgIGlmIChhbGlhc2VzKQorICAgICAgICAgICAgYWxpYXNlc1tuYWxpYXNlc10gPSBycl9uYW1lOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZXNfZnJlZShycl9uYW1lKTsKKyAgICAgICAgICBuYWxpYXNlcysrOworCisgICAgICAgICAgLyogRGVjb2RlIHRoZSBSUiBkYXRhIGFuZCByZXBsYWNlIHRoZSBob3N0bmFtZSB3aXRoIGl0LiAqLworICAgICAgICAgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmcnJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbik7CisgICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBhcmVzX2ZyZWUoaG9zdG5hbWUpOworICAgICAgICAgIGhvc3RuYW1lID0gcnJfZGF0YTsKKworICAgICAgICAgIC8qIFRha2UgdGhlIG1pbiBvZiB0aGUgVFRMcyB3ZSBzZWUgaW4gdGhlIENOQU1FIGNoYWluLiAqLworICAgICAgICAgIGlmIChjbmFtZV90dGwgPiBycl90dGwpCisgICAgICAgICAgICBjbmFtZV90dGwgPSBycl90dGw7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworCisgICAgICBhcHRyICs9IHJyX2xlbjsKKyAgICAgIGlmIChhcHRyID4gYWJ1ZiArIGFsZW4pCisgICAgICAgIHsgIC8qIExDT1ZfRVhDTF9TVEFSVDogYWxyZWFkeSBjaGVja2VkIGFib3ZlICovCisgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgLyogTENPVl9FWENMX1NUT1AgKi8KKyAgICB9CisKKyAgLyogdGhlIGNoZWNrIGZvciBuYWxpYXNlcyB0byBiZSB6ZXJvIGlzIHRvIG1ha2Ugc3VyZSBDTkFNRSByZXNwb25zZXMKKyAgICAgZG9uJ3QgZ2V0IGNhdWdodCBoZXJlICovCisgIGlmIChzdGF0dXMgPT0gQVJFU19TVUNDRVNTICYmIG5hZGRycyA9PSAwICYmIG5hbGlhc2VzID09IDApCisgICAgc3RhdHVzID0gQVJFU19FTk9EQVRBOworICBpZiAoc3RhdHVzID09IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAvKiBXZSBnb3Qgb3VyIGFuc3dlci4gKi8KKyAgICAgIGlmIChuYWRkcnR0bHMpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBpbnQgbiA9IG5hZGRycyA8IG1heF9hZGRyX3R0bHMgPyBuYWRkcnMgOiBtYXhfYWRkcl90dGxzOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEVuc3VyZSB0aGF0IGVhY2ggQSBUVEwgaXMgbm8gbGFyZ2VyIHRoYW4gdGhlIENOQU1FIFRUTC4gKi8KKyAgICAgICAgICAgICAgaWYgKGFkZHJ0dGxzW2ldLnR0bCA+IGNuYW1lX3R0bCkKKyAgICAgICAgICAgICAgICBhZGRydHRsc1tpXS50dGwgPSBjbmFtZV90dGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgKm5hZGRydHRscyA9IG47CisgICAgICAgIH0KKyAgICAgIGlmIChhbGlhc2VzKQorICAgICAgICBhbGlhc2VzW25hbGlhc2VzXSA9IE5VTEw7CisgICAgICBpZiAoaG9zdCkKKyAgICAgICAgeworICAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSB0byBidWlsZCB0aGUgaG9zdCBlbnRyeS4gKi8KKyAgICAgICAgICBob3N0ZW50ID0gYXJlc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSk7CisgICAgICAgICAgaWYgKGhvc3RlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGhvc3RlbnQtPmhfYWRkcl9saXN0ID0gYXJlc19tYWxsb2MoKG5hZGRycyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICAgICAgICBpZiAoaG9zdGVudC0+aF9hZGRyX2xpc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogRmlsbCBpbiB0aGUgaG9zdGVudCBhbmQgcmV0dXJuIHN1Y2Nlc3NmdWxseS4gKi8KKyAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfbmFtZSA9IGhvc3RuYW1lOworICAgICAgICAgICAgICAgICAgaG9zdGVudC0+aF9hbGlhc2VzID0gYWxpYXNlczsKKyAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfYWRkcnR5cGUgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhcmVzX2luNl9hZGRyKTsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYWRkcnM7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgaG9zdGVudC0+aF9hZGRyX2xpc3RbaV0gPSAoY2hhciAqKSAmYWRkcnNbaV07CisgICAgICAgICAgICAgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdFtuYWRkcnNdID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIGlmICghbmFkZHJzICYmIGFkZHJzKQorICAgICAgICAgICAgICAgICAgICBhcmVzX2ZyZWUoYWRkcnMpOworICAgICAgICAgICAgICAgICAgKmhvc3QgPSBob3N0ZW50OworICAgICAgICAgICAgICAgICAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGFyZXNfZnJlZShob3N0ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VOT01FTTsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGFsaWFzZXMpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IG5hbGlhc2VzOyBpKyspCisgICAgICAgIGFyZXNfZnJlZShhbGlhc2VzW2ldKTsKKyAgICAgIGFyZXNfZnJlZShhbGlhc2VzKTsKKyAgICB9CisgIGFyZXNfZnJlZShhZGRycyk7CisgIGFyZXNfZnJlZShob3N0bmFtZSk7CisgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX214X3JlcGx5LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX214X3JlcGx5LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkZjQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfbXhfcmVwbHkuMwpAQCAtMCwwICsxLDc5IEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfUEFSU0VfTVhfUkVQTFkgMyAiNCBBdWd1c3QgMjAwOSIKKy5TSCBOQU1FCithcmVzX3BhcnNlX214X3JlcGx5IFwtIFBhcnNlIGEgcmVwbHkgdG8gYSBETlMgcXVlcnkgb2YgdHlwZSBNWAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX3BhcnNlX214X3JlcGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIFxmSWFidWZcZlAsIGludCBcZklhbGVuXGZQLAorLkIgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX214X3JlcGx5KiogXGZJbXhfb3V0XGZQKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfcGFyc2VfbXhfcmVwbHkKK2Z1bmN0aW9uIHBhcnNlcyB0aGUgcmVzcG9uc2UgdG8gYSBxdWVyeSBvZiB0eXBlIE1YIGludG8gYQorbGlua2VkIGxpc3Qgb2YKKy5JIHN0cnVjdCBhcmVzX214X3JlcGx5IAorVGhlIHBhcmFtZXRlcnMKKy5JIGFidWYKK2FuZAorLkkgYWxlbgorZ2l2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlLiAgVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gYWxsb2NhdGVkCittZW1vcnkgYW5kIGEgcG9pbnRlciB0byBpdCBzdG9yZWQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieQorLklSIG14X291dCAuCitJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmVzdWx0aW5nCisuSVIgbXhfb3V0CitzdHJ1Y3R1cmUgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkIHVzaW5nIHRoZSBmdW5jdGlvbgorLkIgYXJlc19mcmVlX2RhdGEKKy5QUAorVGhlIHN0cnVjdHVyZSAKKy5JIGFyZXNfbXhfcmVwbHkKK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorLnNwCisuaW4gKzRuCisubmYKK3N0cnVjdCBhcmVzX214X3JlcGx5IHsKKyAgICBzdHJ1Y3QgYXJlc19teF9yZXBseSAqbmV4dDsKKyAgICBjaGFyICpob3N0OworICAgIHVuc2lnbmVkIHNob3J0IHByaW9yaXR5OworfTsKKy5maQorLmluCisuUFAKKy5TSCBSRVRVUk4gVkFMVUVTCisuQiBhcmVzX3BhcnNlX214X3JlcGx5CitjYW4gcmV0dXJuIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxNQorLkIgQVJFU19TVUNDRVNTCitUaGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuCisuVFAgMTUKKy5CIEFSRVNfRUJBRFJFU1AKK1RoZSByZXNwb25zZSB3YXMgbWFsZm9ybWF0dGVkLgorLlRQIDE1CisuQiBBUkVTX0VOT0RBVEEKK1RoZSByZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gYW4gYW5zd2VyIHRvIHRoZSBxdWVyeS4KKy5UUCAxNQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlNIIEFWQUlMQUJJTElUWQorVGhpcyBmdW5jdGlvbiB3YXMgZmlyc3QgaW50cm9kdWNlZCBpbiBjLWFyZXMgdmVyc2lvbiAxLjcuMi4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfcXVlcnkgKDMpCisuQlIgYXJlc19mcmVlX2RhdGEgKDMpCisuU0ggQVVUSE9SCitXcml0dGVuIGJ5IEplcmVteSBMYWwgPGthcG91ZXJAbWVsaXgub3JnPgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9teF9yZXBseS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9teF9yZXBseS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MzM2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX214X3JlcGx5LmMKQEAgLTAsMCArMSwxNzAgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmVyZW15IExhbCA8a2Fwb3VlckBtZWxpeC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorI2luY2x1ZGUgImFyZXNfZGF0YS5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCitpbnQKK2FyZXNfcGFyc2VfbXhfcmVwbHkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyZXNfbXhfcmVwbHkgKipteF9vdXQpCit7CisgIHVuc2lnbmVkIGludCBxZGNvdW50LCBhbmNvdW50LCBpOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyLCAqdnB0cjsKKyAgaW50IHN0YXR1cywgcnJfdHlwZSwgcnJfY2xhc3MsIHJyX2xlbjsKKyAgbG9uZyBsZW47CisgIGNoYXIgKmhvc3RuYW1lID0gTlVMTCwgKnJyX25hbWUgPSBOVUxMOworICBzdHJ1Y3QgYXJlc19teF9yZXBseSAqbXhfaGVhZCA9IE5VTEw7CisgIHN0cnVjdCBhcmVzX214X3JlcGx5ICpteF9sYXN0ID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfbXhfcmVwbHkgKm14X2N1cnI7CisKKyAgLyogU2V0ICpteF9vdXQgdG8gTlVMTCBmb3IgYWxsIGZhaWx1cmUgY2FzZXMuICovCisgICpteF9vdXQgPSBOVUxMOworCisgIC8qIEdpdmUgdXAgaWYgYWJ1ZiBkb2Vzbid0IGhhdmUgcm9vbSBmb3IgYSBoZWFkZXIuICovCisgIGlmIChhbGVuIDwgSEZJWEVEU1opCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisKKyAgLyogRmV0Y2ggdGhlIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgY291bnQgZnJvbSB0aGUgaGVhZGVyLiAqLworICBxZGNvdW50ID0gRE5TX0hFQURFUl9RRENPVU5UIChhYnVmKTsKKyAgYW5jb3VudCA9IEROU19IRUFERVJfQU5DT1VOVCAoYWJ1Zik7CisgIGlmIChxZGNvdW50ICE9IDEpCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisgIGlmIChhbmNvdW50ID09IDApCisgICAgcmV0dXJuIEFSRVNfRU5PREFUQTsKKworICAvKiBFeHBhbmQgdGhlIG5hbWUgZnJvbSB0aGUgcXVlc3Rpb24sIGFuZCBza2lwIHBhc3QgdGhlIHF1ZXN0aW9uLiAqLworICBhcHRyID0gYWJ1ZiArIEhGSVhFRFNaOworICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9uYW1lIChhcHRyLCBhYnVmLCBhbGVuLCAmaG9zdG5hbWUsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXR1cm4gc3RhdHVzOworCisgIGlmIChhcHRyICsgbGVuICsgUUZJWEVEU1ogPiBhYnVmICsgYWxlbikKKyAgICB7CisgICAgICBhcmVzX2ZyZWUgKGhvc3RuYW1lKTsKKyAgICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworICAgIH0KKyAgYXB0ciArPSBsZW4gKyBRRklYRURTWjsKKworICAvKiBFeGFtaW5lIGVhY2ggYW5zd2VyIHJlc291cmNlIHJlY29yZCAoUlIpIGluIHR1cm4uICovCisgIGZvciAoaSA9IDA7IGkgPCBhbmNvdW50OyBpKyspCisgICAgeworICAgICAgLyogRGVjb2RlIHRoZSBSUiB1cCB0byB0aGUgZGF0YSBmaWVsZC4gKi8KKyAgICAgIHN0YXR1cyA9IGFyZXNfZXhwYW5kX25hbWUgKGFwdHIsIGFidWYsIGFsZW4sICZycl9uYW1lLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGFwdHIgKz0gbGVuOworICAgICAgaWYgKGFwdHIgKyBSUkZJWEVEU1ogPiBhYnVmICsgYWxlbikKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIHJyX3R5cGUgPSBETlNfUlJfVFlQRSAoYXB0cik7CisgICAgICBycl9jbGFzcyA9IEROU19SUl9DTEFTUyAoYXB0cik7CisgICAgICBycl9sZW4gPSBETlNfUlJfTEVOIChhcHRyKTsKKyAgICAgIGFwdHIgKz0gUlJGSVhFRFNaOworICAgICAgaWYgKGFwdHIgKyBycl9sZW4gPiBhYnVmICsgYWxlbikKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgLyogQ2hlY2sgaWYgd2UgYXJlIHJlYWxseSBsb29raW5nIGF0IGEgTVggcmVjb3JkICovCisgICAgICBpZiAocnJfY2xhc3MgPT0gQ19JTiAmJiBycl90eXBlID09IFRfTVgpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBwYXJzZSB0aGUgTVggcmVjb3JkIGl0c2VsZiAqLworICAgICAgICAgIGlmIChycl9sZW4gPCAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VCQURSRVNQOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoaXMgTVggYW5zd2VyIGFwcGVuZGluZyBpdCB0byB0aGUgbGlzdCAqLworICAgICAgICAgIG14X2N1cnIgPSBhcmVzX21hbGxvY19kYXRhKEFSRVNfREFUQVRZUEVfTVhfUkVQTFkpOworICAgICAgICAgIGlmICghbXhfY3VycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdHVzID0gQVJFU19FTk9NRU07CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChteF9sYXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBteF9sYXN0LT5uZXh0ID0gbXhfY3VycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG14X2hlYWQgPSBteF9jdXJyOworICAgICAgICAgICAgfQorICAgICAgICAgIG14X2xhc3QgPSBteF9jdXJyOworCisgICAgICAgICAgdnB0ciA9IGFwdHI7CisgICAgICAgICAgbXhfY3Vyci0+cHJpb3JpdHkgPSBETlNfXzE2QklUKHZwdHIpOworICAgICAgICAgIHZwdHIgKz0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKworICAgICAgICAgIHN0YXR1cyA9IGFyZXNfZXhwYW5kX25hbWUgKHZwdHIsIGFidWYsIGFsZW4sICZteF9jdXJyLT5ob3N0LCAmbGVuKTsKKyAgICAgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIERvbid0IGxvc2UgbWVtb3J5IGluIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgYXJlc19mcmVlIChycl9uYW1lKTsKKyAgICAgIHJyX25hbWUgPSBOVUxMOworCisgICAgICAvKiBNb3ZlIG9uIHRvIHRoZSBuZXh0IHJlY29yZCAqLworICAgICAgYXB0ciArPSBycl9sZW47CisgICAgfQorCisgIGlmIChob3N0bmFtZSkKKyAgICBhcmVzX2ZyZWUgKGhvc3RuYW1lKTsKKyAgaWYgKHJyX25hbWUpCisgICAgYXJlc19mcmVlIChycl9uYW1lKTsKKworICAvKiBjbGVhbiB1cCBvbiBlcnJvciAqLworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAobXhfaGVhZCkKKyAgICAgICAgYXJlc19mcmVlX2RhdGEgKG14X2hlYWQpOworICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgLyogZXZlcnl0aGluZyBsb29rcyBmaW5lLCByZXR1cm4gdGhlIGRhdGEgKi8KKyAgKm14X291dCA9IG14X2hlYWQ7CisKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfbmFwdHJfcmVwbHkuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfbmFwdHJfcmVwbHkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTVmMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9uYXB0cl9yZXBseS4zCkBAIC0wLDAgKzEsODMgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19QQVJTRV9OQVBUUl9SRVBMWSAzICIyMyBGZWJydWFyeSAyMDEyIgorLlNIIE5BTUUKK2FyZXNfcGFyc2VfbmFwdHJfcmVwbHkgXC0gUGFyc2UgYSByZXBseSB0byBhIEROUyBxdWVyeSBvZiB0eXBlIE5BUFRSCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgaW50IGFyZXNfcGFyc2VfbmFwdHJfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciogXGZJYWJ1ZlxmUCwgaW50IFxmSWFsZW5cZlAsCisuQiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkqKiBcZkluYXB0cl9vdXRcZlApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19wYXJzZV9uYXB0cl9yZXBseQorZnVuY3Rpb24gcGFyc2VzIHRoZSByZXNwb25zZSB0byBhIHF1ZXJ5IG9mIHR5cGUgTkFQVFIgaW50byBhCitsaW5rZWQgbGlzdCBvZgorLkkgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkgCitUaGUgcGFyYW1ldGVycworLkkgYWJ1ZgorYW5kCisuSSBhbGVuCitnaXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UuICBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiBhbGxvY2F0ZWQKK21lbW9yeSBhbmQgYSBwb2ludGVyIHRvIGl0IHN0b3JlZCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CisuSVIgbmFwdHJfb3V0IC4KK0l0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoZSByZXN1bHRpbmcKKy5JUiBuYXB0cl9vdXQKK3N0cnVjdHVyZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdXNpbmcgdGhlIGZ1bmN0aW9uCisuQiBhcmVzX2ZyZWVfZGF0YQorLlBQCitUaGUgc3RydWN0dXJlIAorLkkgYXJlc19uYXB0cl9yZXBseQorY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHM6Cisuc3AKKy5pbiArNG4KKy5uZgorc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkgeworICAgIHN0cnVjdCBhcmVzX25hcHRyX3JlcGx5ICpuZXh0OworICAgIHVuc2lnbmVkIGNoYXIgKmZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgKnNlcnZpY2U7CisgICAgdW5zaWduZWQgY2hhciAqcmVnZXhwOworICAgIGNoYXIgKnJlcGxhY2VtZW50OworICAgIHVuc2lnbmVkIHNob3J0IG9yZGVyOworICAgIHVuc2lnbmVkIHNob3J0IHByZWZlcmVuY2U7Cit9OworLmZpCisuaW4KKy5QUAorLlNIIFJFVFVSTiBWQUxVRVMKKy5CIGFyZXNfcGFyc2VfbmFwdHJfcmVwbHkKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFEUkVTUAorVGhlIHJlc3BvbnNlIHdhcyBtYWxmb3JtYXR0ZWQuCisuVFAgMTUKKy5CIEFSRVNfRU5PREFUQQorVGhlIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhbnN3ZXIgdG8gdGhlIHF1ZXJ5LgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuU0ggQVZBSUxBQklMSVRZCitUaGlzIGZ1bmN0aW9uIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIGMtYXJlcyB2ZXJzaW9uIDEuNy42LgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19xdWVyeSAoMykKKy5CUiBhcmVzX2ZyZWVfZGF0YSAoMykKKy5TSCBBVVRIT1IKK1dyaXR0ZW4gYnkgSmFrdWIgSHJvemVrIDxqaHJvemVrQHJlZGhhdC5jb20+LCBvbiBiZWhhbGYgb2YgUmVkIEhhdCwgSW5jIGh0dHA6Ly93d3cucmVkaGF0LmNvbQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4NDVkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX25hcHRyX3JlcGx5LmMKQEAgLTAsMCArMSwxOTQgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSmFrdWIgSHJvemVrIDxqaHJvemVrQHJlZGhhdC5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorI2luY2x1ZGUgImFyZXNfZGF0YS5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCisvKiBBSVggcG9ydGFiaWxpdHkgY2hlY2sgKi8KKyNpZm5kZWYgVF9OQVBUUgorCSNkZWZpbmUgVF9OQVBUUiAzNSAvKiBuYW1pbmcgYXV0aG9yaXR5IHBvaW50ZXIgKi8KKyNlbmRpZgorCitpbnQKK2FyZXNfcGFyc2VfbmFwdHJfcmVwbHkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkgKipuYXB0cl9vdXQpCit7CisgIHVuc2lnbmVkIGludCBxZGNvdW50LCBhbmNvdW50LCBpOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyLCAqdnB0cjsKKyAgaW50IHN0YXR1cywgcnJfdHlwZSwgcnJfY2xhc3MsIHJyX2xlbjsKKyAgbG9uZyBsZW47CisgIGNoYXIgKmhvc3RuYW1lID0gTlVMTCwgKnJyX25hbWUgPSBOVUxMOworICBzdHJ1Y3QgYXJlc19uYXB0cl9yZXBseSAqbmFwdHJfaGVhZCA9IE5VTEw7CisgIHN0cnVjdCBhcmVzX25hcHRyX3JlcGx5ICpuYXB0cl9sYXN0ID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkgKm5hcHRyX2N1cnI7CisKKyAgLyogU2V0ICpuYXB0cl9vdXQgdG8gTlVMTCBmb3IgYWxsIGZhaWx1cmUgY2FzZXMuICovCisgICpuYXB0cl9vdXQgPSBOVUxMOworCisgIC8qIEdpdmUgdXAgaWYgYWJ1ZiBkb2Vzbid0IGhhdmUgcm9vbSBmb3IgYSBoZWFkZXIuICovCisgIGlmIChhbGVuIDwgSEZJWEVEU1opCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisKKyAgLyogRmV0Y2ggdGhlIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgY291bnQgZnJvbSB0aGUgaGVhZGVyLiAqLworICBxZGNvdW50ID0gRE5TX0hFQURFUl9RRENPVU5UIChhYnVmKTsKKyAgYW5jb3VudCA9IEROU19IRUFERVJfQU5DT1VOVCAoYWJ1Zik7CisgIGlmIChxZGNvdW50ICE9IDEpCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisgIGlmIChhbmNvdW50ID09IDApCisgICAgcmV0dXJuIEFSRVNfRU5PREFUQTsKKworICAvKiBFeHBhbmQgdGhlIG5hbWUgZnJvbSB0aGUgcXVlc3Rpb24sIGFuZCBza2lwIHBhc3QgdGhlIHF1ZXN0aW9uLiAqLworICBhcHRyID0gYWJ1ZiArIEhGSVhFRFNaOworICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9uYW1lIChhcHRyLCBhYnVmLCBhbGVuLCAmaG9zdG5hbWUsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXR1cm4gc3RhdHVzOworCisgIGlmIChhcHRyICsgbGVuICsgUUZJWEVEU1ogPiBhYnVmICsgYWxlbikKKyAgICB7CisgICAgICBhcmVzX2ZyZWUgKGhvc3RuYW1lKTsKKyAgICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworICAgIH0KKyAgYXB0ciArPSBsZW4gKyBRRklYRURTWjsKKworICAvKiBFeGFtaW5lIGVhY2ggYW5zd2VyIHJlc291cmNlIHJlY29yZCAoUlIpIGluIHR1cm4uICovCisgIGZvciAoaSA9IDA7IGkgPCBhbmNvdW50OyBpKyspCisgICAgeworICAgICAgLyogRGVjb2RlIHRoZSBSUiB1cCB0byB0aGUgZGF0YSBmaWVsZC4gKi8KKyAgICAgIHN0YXR1cyA9IGFyZXNfZXhwYW5kX25hbWUgKGFwdHIsIGFidWYsIGFsZW4sICZycl9uYW1lLCAmbGVuKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGFwdHIgKz0gbGVuOworICAgICAgaWYgKGFwdHIgKyBSUkZJWEVEU1ogPiBhYnVmICsgYWxlbikKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIHJyX3R5cGUgPSBETlNfUlJfVFlQRSAoYXB0cik7CisgICAgICBycl9jbGFzcyA9IEROU19SUl9DTEFTUyAoYXB0cik7CisgICAgICBycl9sZW4gPSBETlNfUlJfTEVOIChhcHRyKTsKKyAgICAgIGFwdHIgKz0gUlJGSVhFRFNaOworICAgICAgaWYgKGFwdHIgKyBycl9sZW4gPiBhYnVmICsgYWxlbikKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwkJLypDVkUtMjAxNy0xMDAwMzgxIGh0dHBzOi8vYy1hcmVzLmhheHguc2UvQ1ZFLTIwMTctMTAwMDM4MS5wYXRjaCovCisgICAgICAgLyogUlIgbXVzdCBjb250YWluIGF0IGxlYXN0IDcgYnl0ZXMgPSAyIHggaW50MTYgKyAzIHggbmFtZSAqLworICAgICAgIGlmIChycl9sZW4gPCA3KQorICAgICAgICAgeworICAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VCQURSRVNQOworICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgIC8qIENoZWNrIGlmIHdlIGFyZSByZWFsbHkgbG9va2luZyBhdCBhIE5BUFRSIHJlY29yZCAqLworICAgICAgaWYgKHJyX2NsYXNzID09IENfSU4gJiYgcnJfdHlwZSA9PSBUX05BUFRSKQorICAgICAgICB7CisgICAgICAgICAgLyogcGFyc2UgdGhlIE5BUFRSIHJlY29yZCBpdHNlbGYgKi8KKworICAgICAgICAgIC8qIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoaXMgTkFQVFIgYW5zd2VyIGFwcGVuZGluZyBpdCB0byB0aGUgbGlzdCAqLworICAgICAgICAgIG5hcHRyX2N1cnIgPSBhcmVzX21hbGxvY19kYXRhKEFSRVNfREFUQVRZUEVfTkFQVFJfUkVQTFkpOworICAgICAgICAgIGlmICghbmFwdHJfY3VycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdHVzID0gQVJFU19FTk9NRU07CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChuYXB0cl9sYXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuYXB0cl9sYXN0LT5uZXh0ID0gbmFwdHJfY3VycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG5hcHRyX2hlYWQgPSBuYXB0cl9jdXJyOworICAgICAgICAgICAgfQorICAgICAgICAgIG5hcHRyX2xhc3QgPSBuYXB0cl9jdXJyOworCisgICAgICAgICAgdnB0ciA9IGFwdHI7CisgICAgICAgICAgbmFwdHJfY3Vyci0+b3JkZXIgPSBETlNfXzE2QklUKHZwdHIpOworICAgICAgICAgIHZwdHIgKz0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgICAgICBuYXB0cl9jdXJyLT5wcmVmZXJlbmNlID0gRE5TX18xNkJJVCh2cHRyKTsKKyAgICAgICAgICB2cHRyICs9IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisKKyAgICAgICAgICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9zdHJpbmcodnB0ciwgYWJ1ZiwgYWxlbiwgJm5hcHRyX2N1cnItPmZsYWdzLCAmbGVuKTsKKyAgICAgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIHZwdHIgKz0gbGVuOworCisgICAgICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHZwdHIsIGFidWYsIGFsZW4sICZuYXB0cl9jdXJyLT5zZXJ2aWNlLCAmbGVuKTsKKyAgICAgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIHZwdHIgKz0gbGVuOworCisgICAgICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfc3RyaW5nKHZwdHIsIGFidWYsIGFsZW4sICZuYXB0cl9jdXJyLT5yZWdleHAsICZsZW4pOworICAgICAgICAgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgdnB0ciArPSBsZW47CisKKyAgICAgICAgICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9uYW1lKHZwdHIsIGFidWYsIGFsZW4sICZuYXB0cl9jdXJyLT5yZXBsYWNlbWVudCwgJmxlbik7CisgICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBEb24ndCBsb3NlIG1lbW9yeSBpbiB0aGUgbmV4dCBpdGVyYXRpb24gKi8KKyAgICAgIGFyZXNfZnJlZSAocnJfbmFtZSk7CisgICAgICBycl9uYW1lID0gTlVMTDsKKworICAgICAgLyogTW92ZSBvbiB0byB0aGUgbmV4dCByZWNvcmQgKi8KKyAgICAgIGFwdHIgKz0gcnJfbGVuOworICAgIH0KKworICBpZiAoaG9zdG5hbWUpCisgICAgYXJlc19mcmVlIChob3N0bmFtZSk7CisgIGlmIChycl9uYW1lKQorICAgIGFyZXNfZnJlZSAocnJfbmFtZSk7CisKKyAgLyogY2xlYW4gdXAgb24gZXJyb3IgKi8KKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgaWYgKG5hcHRyX2hlYWQpCisgICAgICAgIGFyZXNfZnJlZV9kYXRhIChuYXB0cl9oZWFkKTsKKyAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgIC8qIGV2ZXJ5dGhpbmcgbG9va3MgZmluZSwgcmV0dXJuIHRoZSBkYXRhICovCisgICpuYXB0cl9vdXQgPSBuYXB0cl9oZWFkOworCisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfbnNfcmVwbHkuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfbnNfcmVwbHkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjM0MGFjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9uc19yZXBseS4zCkBAIC0wLDAgKzEsNjYgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19QQVJTRV9OU19SRVBMWSAzICIxMCBGZWJydWFyeSAyMDA3IgorLlNIIE5BTUUKK2FyZXNfcGFyc2VfbnNfcmVwbHkgXC0gUGFyc2UgYSByZXBseSB0byBhIEROUyBxdWVyeSBvZiB0eXBlIE5TIGludG8gYSBob3N0ZW50CisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgaW50IGFyZXNfcGFyc2VfbnNfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciAqXGZJYWJ1ZlxmUCwgaW50IFxmSWFsZW5cZlAsCisuQiAJc3RydWN0IGhvc3RlbnQgKipcZklob3N0XGZQKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfcGFyc2VfbnNfcmVwbHkKK2Z1bmN0aW9uIHBhcnNlcyB0aGUgcmVzcG9uc2UgdG8gYSBxdWVyeSBvZiB0eXBlIE5TIGludG8gYQorLkJSICJzdHJ1Y3QgaG9zdGVudCIgLgorVGhlIHBhcmFtZXRlcnMKKy5JIGFidWYKK2FuZAorLkkgYWxlbgorZ2l2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlLiAgVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gYWxsb2NhdGVkCittZW1vcnkgYW5kIGEgcG9pbnRlciB0byBpdCBzdG9yZWQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieQorLklSIGhvc3QgLiAKK1RoZSBuYW1lc2VydmVycyBhcmUgc3RvcmVkIGludG8gdGhlIAorLkJSIGFsaWFzZXMgCitmaWVsZCBvZiB0aGUgCisuSVIgaG9zdCAKK3N0cnVjdHVyZS4gCitJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmVzdWx0aW5nIGhvc3Qgc3RydWN0dXJlCit1c2luZworLkJSIGFyZXNfZnJlZV9ob3N0ZW50ICgzKQord2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorLlNIIFJFVFVSTiBWQUxVRVMKKy5CIGFyZXNfcGFyc2VfbnNfcmVwbHkKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFEUkVTUAorVGhlIHJlc3BvbnNlIHdhcyBtYWxmb3JtYXR0ZWQuCisuVFAgMTUKKy5CIEFSRVNfRU5PREFUQQorVGhlIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhbnN3ZXIgdG8gdGhlIHF1ZXJ5LgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3F1ZXJ5ICgzKSwKKy5CUiBhcmVzX2ZyZWVfaG9zdGVudCAoMykKKy5TSCBBVVRIT1IKK1dyaXR0ZW4gYnkgVmxhZCBEaW51bGVzY3UgPHZsYWQuZGludWxlc2N1QGF2aXJhLmNvbT4sIG9uIGJlaGFsZiBvZiBBVklSQSBHbWJoIGh0dHA6Ly93d3cuYXZpcmEuY29tCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX25zX3JlcGx5LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX25zX3JlcGx5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNTE0MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfbnNfcmVwbHkuYwpAQCAtMCwwICsxLDE4MyBAQAorLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoKKyAqIGFyZXNfcGFyc2VfbnNfcmVwbHkgY3JlYXRlZCBieSBWbGFkIERpbnVsZXNjdSA8dmxhZC5kaW51bGVzY3VAYXZpcmEuY29tPgorICogICAgICBvbiBiZWhhbGYgb2YgQVZJUkEgR21iaCAtIGh0dHA6Ly93d3cuYXZpcmEuY29tCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCitpbnQgYXJlc19wYXJzZV9uc19yZXBseSggY29uc3QgdW5zaWduZWQgY2hhciogYWJ1ZiwgaW50IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQqKiBob3N0ICkKK3sKKyAgdW5zaWduZWQgaW50IHFkY291bnQsIGFuY291bnQ7CisgIGludCBzdGF0dXMsIGksIHJyX3R5cGUsIHJyX2NsYXNzLCBycl9sZW47CisgIGludCBuYW1lc2VydmVyc19udW07CisgIGxvbmcgbGVuOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyOworICBjaGFyKiBob3N0bmFtZSwgKnJyX25hbWUsICpycl9kYXRhLCAqKm5hbWVzZXJ2ZXJzOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdGVudDsKKworICAvKiBTZXQgKmhvc3QgdG8gTlVMTCBmb3IgYWxsIGZhaWx1cmUgY2FzZXMuICovCisgICpob3N0ID0gTlVMTDsKKworICAvKiBHaXZlIHVwIGlmIGFidWYgZG9lc24ndCBoYXZlIHJvb20gZm9yIGEgaGVhZGVyLiAqLworICBpZiAoIGFsZW4gPCBIRklYRURTWiApCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisKKyAgLyogRmV0Y2ggdGhlIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgY291bnQgZnJvbSB0aGUgaGVhZGVyLiAqLworICBxZGNvdW50ID0gRE5TX0hFQURFUl9RRENPVU5UKCBhYnVmICk7CisgIGFuY291bnQgPSBETlNfSEVBREVSX0FOQ09VTlQoIGFidWYgKTsKKyAgaWYgKCBxZGNvdW50ICE9IDEgKQorICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworCisgIC8qIEV4cGFuZCB0aGUgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiwgYW5kIHNraXAgcGFzdCB0aGUgcXVlc3Rpb24uICovCisgIGFwdHIgPSBhYnVmICsgSEZJWEVEU1o7CisgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZSggYXB0ciwgYWJ1ZiwgYWxlbiwgJmhvc3RuYW1lLCAmbGVuKTsKKyAgaWYgKCBzdGF0dXMgIT0gQVJFU19TVUNDRVNTICkKKyAgICByZXR1cm4gc3RhdHVzOworICBpZiAoIGFwdHIgKyBsZW4gKyBRRklYRURTWiA+IGFidWYgKyBhbGVuICkKKyAgeworICAgIGFyZXNfZnJlZSggaG9zdG5hbWUgKTsKKyAgICByZXR1cm4gQVJFU19FQkFEUkVTUDsKKyAgfQorICBhcHRyICs9IGxlbiArIFFGSVhFRFNaOworCisgIC8qIEFsbG9jYXRlIG5hbWVzZXJ2ZXJzIGFycmF5OyBhbmNvdW50IGdpdmVzIGFuIHVwcGVyIGJvdW5kICovCisgIG5hbWVzZXJ2ZXJzID0gYXJlc19tYWxsb2MoICggYW5jb3VudCArIDEgKSAqIHNpemVvZiggY2hhciAqICkgKTsKKyAgaWYgKCAhbmFtZXNlcnZlcnMgKQorICB7CisgICAgYXJlc19mcmVlKCBob3N0bmFtZSApOworICAgIHJldHVybiBBUkVTX0VOT01FTTsKKyAgfQorICBuYW1lc2VydmVyc19udW0gPSAwOworCisgIC8qIEV4YW1pbmUgZWFjaCBhbnN3ZXIgcmVzb3VyY2UgcmVjb3JkIChSUikgaW4gdHVybi4gKi8KKyAgZm9yICggaSA9IDA7IGkgPCAoIGludCApIGFuY291bnQ7IGkrKyApCisgIHsKKyAgICAvKiBEZWNvZGUgdGhlIFJSIHVwIHRvIHRoZSBkYXRhIGZpZWxkLiAqLworICAgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZSggYXB0ciwgYWJ1ZiwgYWxlbiwgJnJyX25hbWUsICZsZW4gKTsKKyAgICBpZiAoIHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MgKQorICAgICAgYnJlYWs7CisgICAgYXB0ciArPSBsZW47CisgICAgaWYgKCBhcHRyICsgUlJGSVhFRFNaID4gYWJ1ZiArIGFsZW4gKQorICAgIHsKKyAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgcnJfdHlwZSA9IEROU19SUl9UWVBFKCBhcHRyICk7CisgICAgcnJfY2xhc3MgPSBETlNfUlJfQ0xBU1MoIGFwdHIgKTsKKyAgICBycl9sZW4gPSBETlNfUlJfTEVOKCBhcHRyICk7CisgICAgYXB0ciArPSBSUkZJWEVEU1o7CisgICAgaWYgKGFwdHIgKyBycl9sZW4gPiBhYnVmICsgYWxlbikKKyAgICAgIHsKKyAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworICAgICAgICBzdGF0dXMgPSBBUkVTX0VCQURSRVNQOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIGlmICggcnJfY2xhc3MgPT0gQ19JTiAmJiBycl90eXBlID09IFRfTlMgKQorICAgIHsKKyAgICAgIC8qIERlY29kZSB0aGUgUlIgZGF0YSBhbmQgYWRkIGl0IHRvIHRoZSBuYW1lc2VydmVycyBsaXN0ICovCisgICAgICBzdGF0dXMgPSBhcmVzX19leHBhbmRfbmFtZV9mb3JfcmVzcG9uc2UoIGFwdHIsIGFidWYsIGFsZW4sICZycl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuKTsKKyAgICAgIGlmICggc3RhdHVzICE9IEFSRVNfU1VDQ0VTUyApCisgICAgICB7CisgICAgICAgIGFyZXNfZnJlZShycl9uYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIG5hbWVzZXJ2ZXJzW25hbWVzZXJ2ZXJzX251bV0gPSBhcmVzX21hbGxvYyhzdHJsZW4ocnJfZGF0YSkrMSk7CisKKyAgICAgIGlmIChuYW1lc2VydmVyc1tuYW1lc2VydmVyc19udW1dPT1OVUxMKQorICAgICAgeworICAgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICAgIGFyZXNfZnJlZShycl9kYXRhKTsKKyAgICAgICAgc3RhdHVzPUFSRVNfRU5PTUVNOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0cmNweShuYW1lc2VydmVyc1tuYW1lc2VydmVyc19udW1dLHJyX2RhdGEpOworICAgICAgYXJlc19mcmVlKHJyX2RhdGEpOworCisgICAgICBuYW1lc2VydmVyc19udW0rKzsKKyAgICB9CisKKyAgICBhcmVzX2ZyZWUoIHJyX25hbWUgKTsKKworICAgIGFwdHIgKz0gcnJfbGVuOworICAgIGlmICggYXB0ciA+IGFidWYgKyBhbGVuICkKKyAgICB7ICAvKiBMQ09WX0VYQ0xfU1RBUlQ6IGFscmVhZHkgY2hlY2tlZCBhYm92ZSAqLworICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgIGJyZWFrOworICAgIH0gIC8qIExDT1ZfRVhDTF9TVE9QICovCisgIH0KKworICBpZiAoIHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MgJiYgbmFtZXNlcnZlcnNfbnVtID09IDAgKQorICB7CisgICAgc3RhdHVzID0gQVJFU19FTk9EQVRBOworICB9CisgIGlmICggc3RhdHVzID09IEFSRVNfU1VDQ0VTUyApCisgIHsKKyAgICAvKiBXZSBnb3Qgb3VyIGFuc3dlci4gIEFsbG9jYXRlIG1lbW9yeSB0byBidWlsZCB0aGUgaG9zdCBlbnRyeS4gKi8KKyAgICBuYW1lc2VydmVyc1tuYW1lc2VydmVyc19udW1dID0gTlVMTDsKKyAgICBob3N0ZW50ID0gYXJlc19tYWxsb2MoIHNpemVvZiggc3RydWN0IGhvc3RlbnQgKSApOworICAgIGlmICggaG9zdGVudCApCisgICAgeworICAgICAgaG9zdGVudC0+aF9hZGRyX2xpc3QgPSBhcmVzX21hbGxvYyggMSAqIHNpemVvZiggY2hhciAqICkgKTsKKyAgICAgIGlmICggaG9zdGVudC0+aF9hZGRyX2xpc3QgKQorICAgICAgeworICAgICAgICAvKiBGaWxsIGluIHRoZSBob3N0ZW50IGFuZCByZXR1cm4gc3VjY2Vzc2Z1bGx5LiAqLworICAgICAgICBob3N0ZW50LT5oX25hbWUgPSBob3N0bmFtZTsKKyAgICAgICAgaG9zdGVudC0+aF9hbGlhc2VzID0gbmFtZXNlcnZlcnM7CisgICAgICAgIGhvc3RlbnQtPmhfYWRkcnR5cGUgPSBBRl9JTkVUOworICAgICAgICBob3N0ZW50LT5oX2xlbmd0aCA9IHNpemVvZiggc3RydWN0IGluX2FkZHIgKTsKKyAgICAgICAgaG9zdGVudC0+aF9hZGRyX2xpc3RbMF0gPSBOVUxMOworICAgICAgICAqaG9zdCA9IGhvc3RlbnQ7CisgICAgICAgIHJldHVybiBBUkVTX1NVQ0NFU1M7CisgICAgICB9CisgICAgICBhcmVzX2ZyZWUoIGhvc3RlbnQgKTsKKyAgICB9CisgICAgc3RhdHVzID0gQVJFU19FTk9NRU07CisgIH0KKyAgZm9yICggaSA9IDA7IGkgPCBuYW1lc2VydmVyc19udW07IGkrKyApCisgICAgYXJlc19mcmVlKCBuYW1lc2VydmVyc1tpXSApOworICBhcmVzX2ZyZWUoIG5hbWVzZXJ2ZXJzICk7CisgIGFyZXNfZnJlZSggaG9zdG5hbWUgKTsKKyAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfcHRyX3JlcGx5LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3B0cl9yZXBseS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTZhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3B0cl9yZXBseS4zCkBAIC0wLDAgKzEsNzQgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19QQVJTRV9QVFJfUkVQTFkgMyAiMjUgSnVseSAxOTk4IgorLlNIIE5BTUUKK2FyZXNfcGFyc2VfcHRyX3JlcGx5IFwtIFBhcnNlIGEgcmVwbHkgdG8gYSBETlMgcXVlcnkgb2YgdHlwZSBQVFIgaW50byBhIGhvc3RlbnQKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiBpbnQgYXJlc19wYXJzZV9wdHJfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciAqXGZJYWJ1ZlxmUCwgaW50IFxmSWFsZW5cZlAsCisuQiAJY29uc3Qgdm9pZCAqXGZJYWRkclxmUCwgaW50IFxmSWFkZHJsZW5cZlAsIGludCBcZklmYW1pbHlcZlAsCisuQglzdHJ1Y3QgaG9zdGVudCAqKlxmSWhvc3RcZlApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19wYXJzZV9wdHJfcmVwbHkKK2Z1bmN0aW9uIHBhcnNlcyB0aGUgcmVzcG9uc2UgdG8gYSBxdWVyeSBvZiB0eXBlIFBUUiBpbnRvIGEKKy5CUiAic3RydWN0IGhvc3RlbnQiIC4KK1RoZSBwYXJhbWV0ZXJzCisuSSBhYnVmCithbmQKKy5JIGFsZW4KK2dpdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZS4gIFRoZSBwYXJhbWV0ZXJzCisuSVIgYWRkciAsCisuSVIgYWRkcmxlbiAsCithbmQKKy5JIGZhbWlseQorc3BlY2lmeSB3aGljaCBhZGRyZXNzIHdhcyBxdWVyaWVkIGZvcjsgdGhleSBhcmUgbm90IHVzZWQgdG8gdmVyaWZ5IHRoZQorcmVzcG9uc2UsIG1lcmVseSB1c2VkIHRvIGZpbGwgaW4gdGhlIGFkZHJlc3Mgb2YgdGhlCisuQlIgInN0cnVjdCBob3N0ZW50IiAuCitUaGUgcmVzdWx0aW5nCisuQiBzdHJ1Y3QgaG9zdGVudAoraXMgc3RvcmVkIGluIGFsbG9jYXRlZCBtZW1vcnkgYW5kIGEgcG9pbnRlciB0byBpdCBzdG9yZWQgaW50byB0aGUKK3ZhcmlhYmxlIHBvaW50ZWQgdG8gYnkKKy5JUiBob3N0IC4KK0l0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoZSByZXN1bHRpbmcgaG9zdCBzdHJ1Y3R1cmUKK3VzaW5nCisuQlIgYXJlc19mcmVlX2hvc3RlbnQgKDMpCit3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisuU0ggUkVUVVJOIFZBTFVFUworLkIgYXJlc19wYXJzZV9wdHJfcmVwbHkKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFEUkVTUAorVGhlIHJlc3BvbnNlIHdhcyBtYWxmb3JtYXR0ZWQuCisuVFAgMTUKKy5CIEFSRVNfRU5PREFUQQorVGhlIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhbnN3ZXIgdG8gdGhlIHF1ZXJ5LgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2dldGhvc3RieWFkZHIgKDMpLAorLkJSIGFyZXNfZnJlZV9ob3N0ZW50ICgzKQorLlNIIEFVVEhPUgorR3JlZyBIdWRzb24sIE1JVCBJbmZvcm1hdGlvbiBTeXN0ZW1zCisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV9wdHJfcmVwbHkuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfcHRyX3JlcGx5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2YTUzMQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2VfcHRyX3JlcGx5LmMKQEAgLTAsMCArMSwyMTkgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNlbHNlCisjICBpbmNsdWRlICJuYW1lc2VyLmgiCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9DT01QQVRfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyX2NvbXBhdC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyAgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19kbnMuaCIKKyNpbmNsdWRlICJhcmVzX25vd2Fybi5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCitpbnQgYXJlc19wYXJzZV9wdHJfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4sIGNvbnN0IHZvaWQgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkZHJsZW4sIGludCBmYW1pbHksIHN0cnVjdCBob3N0ZW50ICoqaG9zdCkKK3sKKyAgdW5zaWduZWQgaW50IHFkY291bnQsIGFuY291bnQ7CisgIGludCBzdGF0dXMsIGksIHJyX3R5cGUsIHJyX2NsYXNzLCBycl9sZW47CisgIGxvbmcgbGVuOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyOworICBjaGFyICpwdHJuYW1lLCAqaG9zdG5hbWUsICpycl9uYW1lLCAqcnJfZGF0YTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3RlbnQ7CisgIGludCBhbGlhc2NudCA9IDA7CisgIGludCBhbGlhc19hbGxvYyA9IDg7CisgIGNoYXIgKiogYWxpYXNlczsKKworICAvKiBTZXQgKmhvc3QgdG8gTlVMTCBmb3IgYWxsIGZhaWx1cmUgY2FzZXMuICovCisgICpob3N0ID0gTlVMTDsKKworICAvKiBHaXZlIHVwIGlmIGFidWYgZG9lc24ndCBoYXZlIHJvb20gZm9yIGEgaGVhZGVyLiAqLworICBpZiAoYWxlbiA8IEhGSVhFRFNaKQorICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworCisgIC8qIEZldGNoIHRoZSBxdWVzdGlvbiBhbmQgYW5zd2VyIGNvdW50IGZyb20gdGhlIGhlYWRlci4gKi8KKyAgcWRjb3VudCA9IEROU19IRUFERVJfUURDT1VOVChhYnVmKTsKKyAgYW5jb3VudCA9IEROU19IRUFERVJfQU5DT1VOVChhYnVmKTsKKyAgaWYgKHFkY291bnQgIT0gMSkKKyAgICByZXR1cm4gQVJFU19FQkFEUkVTUDsKKworICAvKiBFeHBhbmQgdGhlIG5hbWUgZnJvbSB0aGUgcXVlc3Rpb24sIGFuZCBza2lwIHBhc3QgdGhlIHF1ZXN0aW9uLiAqLworICBhcHRyID0gYWJ1ZiArIEhGSVhFRFNaOworICBzdGF0dXMgPSBhcmVzX19leHBhbmRfbmFtZV9mb3JfcmVzcG9uc2UoYXB0ciwgYWJ1ZiwgYWxlbiwgJnB0cm5hbWUsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXR1cm4gc3RhdHVzOworICBpZiAoYXB0ciArIGxlbiArIFFGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgeworICAgICAgYXJlc19mcmVlKHB0cm5hbWUpOworICAgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisgICAgfQorICBhcHRyICs9IGxlbiArIFFGSVhFRFNaOworCisgIC8qIEV4YW1pbmUgZWFjaCBhbnN3ZXIgcmVzb3VyY2UgcmVjb3JkIChSUikgaW4gdHVybi4gKi8KKyAgaG9zdG5hbWUgPSBOVUxMOworICBhbGlhc2VzID0gYXJlc19tYWxsb2MoYWxpYXNfYWxsb2MgKiBzaXplb2YoY2hhciAqKSk7CisgIGlmICghYWxpYXNlcykKKyAgICB7CisgICAgICBhcmVzX2ZyZWUocHRybmFtZSk7CisgICAgICByZXR1cm4gQVJFU19FTk9NRU07CisgICAgfQorICBmb3IgKGkgPSAwOyBpIDwgKGludClhbmNvdW50OyBpKyspCisgICAgeworICAgICAgLyogRGVjb2RlIHRoZSBSUiB1cCB0byB0aGUgZGF0YSBmaWVsZC4gKi8KKyAgICAgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmcnJfbmFtZSwgJmxlbik7CisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgYnJlYWs7CisgICAgICBhcHRyICs9IGxlbjsKKyAgICAgIGlmIChhcHRyICsgUlJGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgcnJfdHlwZSA9IEROU19SUl9UWVBFKGFwdHIpOworICAgICAgcnJfY2xhc3MgPSBETlNfUlJfQ0xBU1MoYXB0cik7CisgICAgICBycl9sZW4gPSBETlNfUlJfTEVOKGFwdHIpOworICAgICAgYXB0ciArPSBSUkZJWEVEU1o7CisgICAgICBpZiAoYXB0ciArIHJyX2xlbiA+IGFidWYgKyBhbGVuKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgaWYgKHJyX2NsYXNzID09IENfSU4gJiYgcnJfdHlwZSA9PSBUX1BUUgorICAgICAgICAgICYmIHN0cmNhc2VjbXAocnJfbmFtZSwgcHRybmFtZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIERlY29kZSB0aGUgUlIgZGF0YSBhbmQgc2V0IGhvc3RuYW1lIHRvIGl0LiAqLworICAgICAgICAgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmcnJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbik7CisgICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGFyZXNfZnJlZShycl9uYW1lKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGhvc3RuYW1lKQorICAgICAgICAgICAgYXJlc19mcmVlKGhvc3RuYW1lKTsKKyAgICAgICAgICBob3N0bmFtZSA9IHJyX2RhdGE7CisgICAgICAgICAgYWxpYXNlc1thbGlhc2NudF0gPSBhcmVzX21hbGxvYygoc3RybGVuKHJyX2RhdGEpKzEpICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICBpZiAoIWFsaWFzZXNbYWxpYXNjbnRdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRU5PTUVNOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzdHJuY3B5KGFsaWFzZXNbYWxpYXNjbnRdLCBycl9kYXRhLCBzdHJsZW4ocnJfZGF0YSkrMSk7CisgICAgICAgICAgYWxpYXNjbnQrKzsKKyAgICAgICAgICBpZiAoYWxpYXNjbnQgPj0gYWxpYXNfYWxsb2MpIHsKKyAgICAgICAgICAgIGNoYXIgKipwdHI7CisgICAgICAgICAgICBhbGlhc19hbGxvYyAqPSAyOworICAgICAgICAgICAgcHRyID0gYXJlc19yZWFsbG9jKGFsaWFzZXMsIGFsaWFzX2FsbG9jICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICAgICAgaWYoIXB0cikgeworICAgICAgICAgICAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgICAgICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRU5PTUVNOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFsaWFzZXMgPSBwdHI7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGlmIChycl9jbGFzcyA9PSBDX0lOICYmIHJyX3R5cGUgPT0gVF9DTkFNRSkKKyAgICAgICAgeworICAgICAgICAgIC8qIERlY29kZSB0aGUgUlIgZGF0YSBhbmQgcmVwbGFjZSBwdHJuYW1lIHdpdGggaXQuICovCisgICAgICAgICAgc3RhdHVzID0gYXJlc19fZXhwYW5kX25hbWVfZm9yX3Jlc3BvbnNlKGFwdHIsIGFidWYsIGFsZW4sICZycl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuKTsKKyAgICAgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBhcmVzX2ZyZWUocHRybmFtZSk7CisgICAgICAgICAgcHRybmFtZSA9IHJyX2RhdGE7CisgICAgICAgIH0KKworICAgICAgYXJlc19mcmVlKHJyX25hbWUpOworICAgICAgYXB0ciArPSBycl9sZW47CisgICAgICBpZiAoYXB0ciA+IGFidWYgKyBhbGVuKQorICAgICAgICB7ICAvKiBMQ09WX0VYQ0xfU1RBUlQ6IGFscmVhZHkgY2hlY2tlZCBhYm92ZSAqLworICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gIC8qIExDT1ZfRVhDTF9TVE9QICovCisgICAgfQorCisgIGlmIChzdGF0dXMgPT0gQVJFU19TVUNDRVNTICYmICFob3N0bmFtZSkKKyAgICBzdGF0dXMgPSBBUkVTX0VOT0RBVEE7CisgIGlmIChzdGF0dXMgPT0gQVJFU19TVUNDRVNTKQorICAgIHsKKyAgICAgIC8qIFdlIGdvdCBvdXIgYW5zd2VyLiAgQWxsb2NhdGUgbWVtb3J5IHRvIGJ1aWxkIHRoZSBob3N0IGVudHJ5LiAqLworICAgICAgaG9zdGVudCA9IGFyZXNfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG9zdGVudCkpOworICAgICAgaWYgKGhvc3RlbnQpCisgICAgICAgIHsKKyAgICAgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdCA9IGFyZXNfbWFsbG9jKDIgKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgICAgaWYgKGhvc3RlbnQtPmhfYWRkcl9saXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBob3N0ZW50LT5oX2FkZHJfbGlzdFswXSA9IGFyZXNfbWFsbG9jKGFkZHJsZW4pOworICAgICAgICAgICAgICBpZiAoaG9zdGVudC0+aF9hZGRyX2xpc3RbMF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaG9zdGVudC0+aF9hbGlhc2VzID0gYXJlc19tYWxsb2MoKGFsaWFzY250KzEpICogc2l6ZW9mIChjaGFyICopKTsKKyAgICAgICAgICAgICAgICAgIGlmIChob3N0ZW50LT5oX2FsaWFzZXMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSBob3N0ZW50IGFuZCByZXR1cm4gc3VjY2Vzc2Z1bGx5LiAqLworICAgICAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfbmFtZSA9IGhvc3RuYW1lOworICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wIDsgaTxhbGlhc2NudCA7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfYWxpYXNlc1tpXSA9IGFsaWFzZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgaG9zdGVudC0+aF9hbGlhc2VzW2FsaWFzY250XSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgaG9zdGVudC0+aF9hZGRydHlwZSA9IGFyZXN4X3NpdG9zcyhmYW1pbHkpOworICAgICAgICAgICAgICAgICAgICAgIGhvc3RlbnQtPmhfbGVuZ3RoID0gYXJlc3hfc2l0b3NzKGFkZHJsZW4pOworICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShob3N0ZW50LT5oX2FkZHJfbGlzdFswXSwgYWRkciwgYWRkcmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgaG9zdGVudC0+aF9hZGRyX2xpc3RbMV0gPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICpob3N0ID0gaG9zdGVudDsKKyAgICAgICAgICAgICAgICAgICAgICBhcmVzX2ZyZWUoYWxpYXNlcyk7CisgICAgICAgICAgICAgICAgICAgICAgYXJlc19mcmVlKHB0cm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBUkVTX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGFyZXNfZnJlZShob3N0ZW50LT5oX2FkZHJfbGlzdFswXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBhcmVzX2ZyZWUoaG9zdGVudC0+aF9hZGRyX2xpc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgIGFyZXNfZnJlZShob3N0ZW50KTsKKyAgICAgICAgfQorICAgICAgc3RhdHVzID0gQVJFU19FTk9NRU07CisgICAgfQorICBmb3IgKGk9MCA7IGk8YWxpYXNjbnQgOyBpKyspCisgICAgaWYgKGFsaWFzZXNbaV0pCisgICAgICBhcmVzX2ZyZWUoYWxpYXNlc1tpXSk7CisgIGFyZXNfZnJlZShhbGlhc2VzKTsKKyAgaWYgKGhvc3RuYW1lKQorICAgIGFyZXNfZnJlZShob3N0bmFtZSk7CisgIGFyZXNfZnJlZShwdHJuYW1lKTsKKyAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2Vfc29hX3JlcGx5LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3NvYV9yZXBseS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDQ1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3NvYV9yZXBseS4zCkBAIC0wLDAgKzEsODAgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19QQVJTRV9TT0FfUkVQTFkgMyAiMjkgTWF5IDIwMTIiCisuU0ggTkFNRQorYXJlc19wYXJzZV9zb2FfcmVwbHkgXC0gUGFyc2UgYSByZXBseSB0byBhIEROUyBxdWVyeSBvZiB0eXBlIFNPQQorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX3BhcnNlX3NvYV9yZXBseShjb25zdCB1bnNpZ25lZCBjaGFyKiBcZklhYnVmXGZQLCBpbnQgXGZJYWxlblxmUCwKKy5CCQkJCXN0cnVjdCBhcmVzX3NvYV9yZXBseSoqIFxmSXNvYV9vdXRcZlApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19wYXJzZV9zb2FfcmVwbHkKK2Z1bmN0aW9uIHBhcnNlcyB0aGUgcmVzcG9uc2UgdG8gYSBxdWVyeSBvZiB0eXBlIFNPQSBpbnRvIGEKKy5JUiBzdHJ1Y3RcIGFyZXNfc29hX3JlcGx5IC4KK1RoZSBwYXJhbWV0ZXJzCisuSSBhYnVmCithbmQKKy5JIGFsZW4KK2dpdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZS4gIFRoZSByZXN1bHQgaXMgc3RvcmVkIGluIGFsbG9jYXRlZAorbWVtb3J5IGFuZCBhIHBvaW50ZXIgdG8gaXQgc3RvcmVkIGludG8gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkKKy5JUiBzb2Ffb3V0IC4KK0l0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoZSByZXN1bHRpbmcKKy5JUiBzb2Ffb3V0CitzdHJ1Y3R1cmUgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkIHVzaW5nIHRoZSBmdW5jdGlvbgorLkIgYXJlc19mcmVlX2RhdGEKKy5QUAorVGhlIHN0cnVjdHVyZSAKKy5JIGFyZXNfc29hX3JlcGx5Citjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkczoKKy5zcAorLmluICs0bgorLm5mCitzdHJ1Y3QgYXJlc19zb2FfcmVwbHkgeworCWNoYXIgKm5zbmFtZTsKKwljaGFyICpob3N0bWFzdGVyOworCXVuc2lnbmVkIGludCBzZXJpYWw7CisJdW5zaWduZWQgaW50IHJlZnJlc2g7CisJdW5zaWduZWQgaW50IHJldHJ5OworCXVuc2lnbmVkIGludCBleHBpcmU7CisJdW5zaWduZWQgaW50IG1pbnR0bDsKK307CisuZmkKKy5pbgorLlBQCisuU0ggUkVUVVJOIFZBTFVFUworLkIgYXJlc19wYXJzZV9zb2FfcmVwbHkKK2NhbiByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKy5UUCAxNQorLkIgQVJFU19FQkFEUkVTUAorVGhlIHJlc3BvbnNlIHdhcyBtYWxmb3JtYXR0ZWQuCisuVFAgMTUKKy5CIEFSRVNfRU5PREFUQQorVGhlIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhbnN3ZXIgdG8gdGhlIHF1ZXJ5LgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuU0ggQVZBSUxBQklMSVRZCitUaGlzIGZ1bmN0aW9uIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIGMtYXJlcyB2ZXJzaW9uIDEuOS4wLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19xdWVyeSAoMykKKy5CUiBhcmVzX2ZyZWVfZGF0YSAoMykKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2Vfc29hX3JlcGx5LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3NvYV9yZXBseS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YWYwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3NvYV9yZXBseS5jCkBAIC0wLDAgKzEsMTMzIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDEyIE1hcmtvIEtyZWVuIDxtYXJrb2tyQGdtYWlsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfZG5zLmgiCisjaW5jbHVkZSAiYXJlc19kYXRhLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKK2ludAorYXJlc19wYXJzZV9zb2FfcmVwbHkoY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4sCisJCSAgICAgc3RydWN0IGFyZXNfc29hX3JlcGx5ICoqc29hX291dCkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYXB0cjsKKyAgbG9uZyBsZW47CisgIGNoYXIgKnFuYW1lID0gTlVMTCwgKnJyX25hbWUgPSBOVUxMOworICBzdHJ1Y3QgYXJlc19zb2FfcmVwbHkgKnNvYSA9IE5VTEw7CisgIGludCBxZGNvdW50LCBhbmNvdW50OworICBpbnQgc3RhdHVzOworCisgIGlmIChhbGVuIDwgSEZJWEVEU1opCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisKKyAgLyogcGFyc2UgbWVzc2FnZSBoZWFkZXIgKi8KKyAgcWRjb3VudCA9IEROU19IRUFERVJfUURDT1VOVChhYnVmKTsKKyAgYW5jb3VudCA9IEROU19IRUFERVJfQU5DT1VOVChhYnVmKTsKKyAgaWYgKHFkY291bnQgIT0gMSB8fCBhbmNvdW50ICE9IDEpCisgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisgIGFwdHIgPSBhYnVmICsgSEZJWEVEU1o7CisKKyAgLyogcXVlcnkgbmFtZSAqLworICBzdGF0dXMgPSBhcmVzX19leHBhbmRfbmFtZV9mb3JfcmVzcG9uc2UoYXB0ciwgYWJ1ZiwgYWxlbiwgJnFuYW1lLCAmbGVuKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgZ290byBmYWlsZWRfc3RhdDsKKyAgYXB0ciArPSBsZW47CisKKyAgLyogc2tpcCBxdHlwZSAmIHFjbGFzcyAqLworICBpZiAoYXB0ciArIFFGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgZ290byBmYWlsZWQ7CisgIGFwdHIgKz0gUUZJWEVEU1o7CisKKyAgLyogcnJfbmFtZSAqLworICBzdGF0dXMgPSBhcmVzX19leHBhbmRfbmFtZV9mb3JfcmVzcG9uc2UoYXB0ciwgYWJ1ZiwgYWxlbiwgJnJyX25hbWUsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICBnb3RvIGZhaWxlZF9zdGF0OworICBhcHRyICs9IGxlbjsKKworICAvKiBza2lwIHJyX3R5cGUsIHJyX2NsYXNzLCBycl90dGwsIHJyX3JkbGVuICovCisgIGlmIChhcHRyICsgUlJGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgZ290byBmYWlsZWQ7CisgIGFwdHIgKz0gUlJGSVhFRFNaOworCisgIC8qIGFsbG9jYXRlIHJlc3VsdCBzdHJ1Y3QgKi8KKyAgc29hID0gYXJlc19tYWxsb2NfZGF0YShBUkVTX0RBVEFUWVBFX1NPQV9SRVBMWSk7CisgIGlmICghc29hKQorICAgIHsKKyAgICAgIHN0YXR1cyA9IEFSRVNfRU5PTUVNOworICAgICAgZ290byBmYWlsZWRfc3RhdDsKKyAgICB9CisKKyAgLyogbnNuYW1lICovCisgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmc29hLT5uc25hbWUsICZsZW4pOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICBnb3RvIGZhaWxlZF9zdGF0OworICBhcHRyICs9IGxlbjsKKworICAvKiBob3N0bWFzdGVyICovCisgIHN0YXR1cyA9IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShhcHRyLCBhYnVmLCBhbGVuLCAmc29hLT5ob3N0bWFzdGVyLCAmbGVuKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgZ290byBmYWlsZWRfc3RhdDsKKyAgYXB0ciArPSBsZW47CisKKyAgLyogaW50ZWdlciBmaWVsZHMgKi8KKyAgaWYgKGFwdHIgKyA1ICogNCA+IGFidWYgKyBhbGVuKQorICAgIGdvdG8gZmFpbGVkOworICBzb2EtPnNlcmlhbCA9IEROU19fMzJCSVQoYXB0ciArIDAgKiA0KTsKKyAgc29hLT5yZWZyZXNoID0gRE5TX18zMkJJVChhcHRyICsgMSAqIDQpOworICBzb2EtPnJldHJ5ID0gRE5TX18zMkJJVChhcHRyICsgMiAqIDQpOworICBzb2EtPmV4cGlyZSA9IEROU19fMzJCSVQoYXB0ciArIDMgKiA0KTsKKyAgc29hLT5taW50dGwgPSBETlNfXzMyQklUKGFwdHIgKyA0ICogNCk7CisKKyAgYXJlc19mcmVlKHFuYW1lKTsKKyAgYXJlc19mcmVlKHJyX25hbWUpOworCisgICpzb2Ffb3V0ID0gc29hOworCisgIHJldHVybiBBUkVTX1NVQ0NFU1M7CisKK2ZhaWxlZDoKKyAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKworZmFpbGVkX3N0YXQ6CisgIGFyZXNfZnJlZV9kYXRhKHNvYSk7CisgIGlmIChxbmFtZSkKKyAgICBhcmVzX2ZyZWUocW5hbWUpOworICBpZiAocnJfbmFtZSkKKyAgICBhcmVzX2ZyZWUocnJfbmFtZSk7CisgIHJldHVybiBzdGF0dXM7Cit9CisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2Vfc3J2X3JlcGx5LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3Nydl9yZXBseS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTYxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3Nydl9yZXBseS4zCkBAIC0wLDAgKzEsODEgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19QQVJTRV9TUlZfUkVQTFkgMyAiNCBBdWd1c3QgMjAwOSIKKy5TSCBOQU1FCithcmVzX3BhcnNlX3Nydl9yZXBseSBcLSBQYXJzZSBhIHJlcGx5IHRvIGEgRE5TIHF1ZXJ5IG9mIHR5cGUgU1JWCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgaW50IGFyZXNfcGFyc2Vfc3J2X3JlcGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIFxmSWFidWZcZlAsIGludCBcZklhbGVuXGZQLAorLkIgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSoqIFxmSXNydl9vdXRcZlApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19wYXJzZV9zcnZfcmVwbHkKK2Z1bmN0aW9uIHBhcnNlcyB0aGUgcmVzcG9uc2UgdG8gYSBxdWVyeSBvZiB0eXBlIFNSViBpbnRvIGEKK2xpbmtlZCBsaXN0IG9mCisuSSBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkgCitUaGUgcGFyYW1ldGVycworLkkgYWJ1ZgorYW5kCisuSSBhbGVuCitnaXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UuICBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiBhbGxvY2F0ZWQKK21lbW9yeSBhbmQgYSBwb2ludGVyIHRvIGl0IHN0b3JlZCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5CisuSVIgc3J2X291dCAuCitJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmVzdWx0aW5nCisuSVIgc3J2X291dAorc3RydWN0dXJlIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCB1c2luZyB0aGUgZnVuY3Rpb24KKy5CIGFyZXNfZnJlZV9kYXRhCisuUFAKK1RoZSBzdHJ1Y3R1cmUgCisuSSBhcmVzX3Nydl9yZXBseQorY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHM6Cisuc3AKKy5pbiArNG4KKy5uZgorc3RydWN0IGFyZXNfc3J2X3JlcGx5IHsKKyAgICBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkgICpuZXh0OworICAgIHVuc2lnbmVkIHNob3J0IHdlaWdodDsKKyAgICB1bnNpZ25lZCBzaG9ydCBwcmlvcml0eTsKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OworICAgIGNoYXIgKmhvc3Q7Cit9OworLmZpCisuaW4KKy5QUAorLlNIIFJFVFVSTiBWQUxVRVMKKy5CIGFyZXNfcGFyc2Vfc3J2X3JlcGx5CitjYW4gcmV0dXJuIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxNQorLkIgQVJFU19TVUNDRVNTCitUaGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuCisuVFAgMTUKKy5CIEFSRVNfRUJBRFJFU1AKK1RoZSByZXNwb25zZSB3YXMgbWFsZm9ybWF0dGVkLgorLlRQIDE1CisuQiBBUkVTX0VOT0RBVEEKK1RoZSByZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gYW4gYW5zd2VyIHRvIHRoZSBxdWVyeS4KKy5UUCAxNQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlNIIEFWQUlMQUJJTElUWQorVGhpcyBmdW5jdGlvbiB3YXMgZmlyc3QgaW50cm9kdWNlZCBpbiBjLWFyZXMgdmVyc2lvbiAxLjcuMC4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfcXVlcnkgKDMpCisuQlIgYXJlc19mcmVlX2RhdGEgKDMpCisuU0ggQVVUSE9SCitXcml0dGVuIGJ5IEpha3ViIEhyb3playA8amhyb3pla0ByZWRoYXQuY29tPiwgb24gYmVoYWxmIG9mIFJlZCBIYXQsIEluYyBodHRwOi8vd3d3LnJlZGhhdC5jb20KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGFyc2Vfc3J2X3JlcGx5LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3Nydl9yZXBseS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNGZmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3Nydl9yZXBseS5jCkBAIC0wLDAgKzEsMTc5IEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEpha3ViIEhyb3playA8amhyb3pla0ByZWRoYXQuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjICBpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorIyAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNlbHNlCisjICBpbmNsdWRlICJuYW1lc2VyLmgiCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9DT01QQVRfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyX2NvbXBhdC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19kbnMuaCIKKyNpbmNsdWRlICJhcmVzX2RhdGEuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworLyogQUlYIHBvcnRhYmlsaXR5IGNoZWNrICovCisjaWZuZGVmIFRfU1JWCisjICBkZWZpbmUgVF9TUlYgMzMgLyogc2VydmVyIHNlbGVjdGlvbiAqLworI2VuZGlmCisKK2ludAorYXJlc19wYXJzZV9zcnZfcmVwbHkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSAqKnNydl9vdXQpCit7CisgIHVuc2lnbmVkIGludCBxZGNvdW50LCBhbmNvdW50LCBpOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphcHRyLCAqdnB0cjsKKyAgaW50IHN0YXR1cywgcnJfdHlwZSwgcnJfY2xhc3MsIHJyX2xlbjsKKyAgbG9uZyBsZW47CisgIGNoYXIgKmhvc3RuYW1lID0gTlVMTCwgKnJyX25hbWUgPSBOVUxMOworICBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkgKnNydl9oZWFkID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfc3J2X3JlcGx5ICpzcnZfbGFzdCA9IE5VTEw7CisgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSAqc3J2X2N1cnI7CisKKyAgLyogU2V0ICpzcnZfb3V0IHRvIE5VTEwgZm9yIGFsbCBmYWlsdXJlIGNhc2VzLiAqLworICAqc3J2X291dCA9IE5VTEw7CisKKyAgLyogR2l2ZSB1cCBpZiBhYnVmIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBhIGhlYWRlci4gKi8KKyAgaWYgKGFsZW4gPCBIRklYRURTWikKKyAgICByZXR1cm4gQVJFU19FQkFEUkVTUDsKKworICAvKiBGZXRjaCB0aGUgcXVlc3Rpb24gYW5kIGFuc3dlciBjb3VudCBmcm9tIHRoZSBoZWFkZXIuICovCisgIHFkY291bnQgPSBETlNfSEVBREVSX1FEQ09VTlQgKGFidWYpOworICBhbmNvdW50ID0gRE5TX0hFQURFUl9BTkNPVU5UIChhYnVmKTsKKyAgaWYgKHFkY291bnQgIT0gMSkKKyAgICByZXR1cm4gQVJFU19FQkFEUkVTUDsKKyAgaWYgKGFuY291bnQgPT0gMCkKKyAgICByZXR1cm4gQVJFU19FTk9EQVRBOworCisgIC8qIEV4cGFuZCB0aGUgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiwgYW5kIHNraXAgcGFzdCB0aGUgcXVlc3Rpb24uICovCisgIGFwdHIgPSBhYnVmICsgSEZJWEVEU1o7CisgIHN0YXR1cyA9IGFyZXNfZXhwYW5kX25hbWUgKGFwdHIsIGFidWYsIGFsZW4sICZob3N0bmFtZSwgJmxlbik7CisgIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQorICAgIHJldHVybiBzdGF0dXM7CisKKyAgaWYgKGFwdHIgKyBsZW4gKyBRRklYRURTWiA+IGFidWYgKyBhbGVuKQorICAgIHsKKyAgICAgIGFyZXNfZnJlZSAoaG9zdG5hbWUpOworICAgICAgcmV0dXJuIEFSRVNfRUJBRFJFU1A7CisgICAgfQorICBhcHRyICs9IGxlbiArIFFGSVhFRFNaOworCisgIC8qIEV4YW1pbmUgZWFjaCBhbnN3ZXIgcmVzb3VyY2UgcmVjb3JkIChSUikgaW4gdHVybi4gKi8KKyAgZm9yIChpID0gMDsgaSA8IGFuY291bnQ7IGkrKykKKyAgICB7CisgICAgICAvKiBEZWNvZGUgdGhlIFJSIHVwIHRvIHRoZSBkYXRhIGZpZWxkLiAqLworICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZSAoYXB0ciwgYWJ1ZiwgYWxlbiwgJnJyX25hbWUsICZsZW4pOworICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgYXB0ciArPSBsZW47CisgICAgICBpZiAoYXB0ciArIFJSRklYRURTWiA+IGFidWYgKyBhbGVuKQorICAgICAgICB7CisgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgcnJfdHlwZSA9IEROU19SUl9UWVBFIChhcHRyKTsKKyAgICAgIHJyX2NsYXNzID0gRE5TX1JSX0NMQVNTIChhcHRyKTsKKyAgICAgIHJyX2xlbiA9IEROU19SUl9MRU4gKGFwdHIpOworICAgICAgYXB0ciArPSBSUkZJWEVEU1o7CisgICAgICBpZiAoYXB0ciArIHJyX2xlbiA+IGFidWYgKyBhbGVuKQorICAgICAgICB7CisgICAgICAgICAgc3RhdHVzID0gQVJFU19FQkFEUkVTUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBDaGVjayBpZiB3ZSBhcmUgcmVhbGx5IGxvb2tpbmcgYXQgYSBTUlYgcmVjb3JkICovCisgICAgICBpZiAocnJfY2xhc3MgPT0gQ19JTiAmJiBycl90eXBlID09IFRfU1JWKQorICAgICAgICB7CisgICAgICAgICAgLyogcGFyc2UgdGhlIFNSViByZWNvcmQgaXRzZWxmICovCisgICAgICAgICAgaWYgKHJyX2xlbiA8IDYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhpcyBTUlYgYW5zd2VyIGFwcGVuZGluZyBpdCB0byB0aGUgbGlzdCAqLworICAgICAgICAgIHNydl9jdXJyID0gYXJlc19tYWxsb2NfZGF0YShBUkVTX0RBVEFUWVBFX1NSVl9SRVBMWSk7CisgICAgICAgICAgaWYgKCFzcnZfY3VycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdHVzID0gQVJFU19FTk9NRU07CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChzcnZfbGFzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3J2X2xhc3QtPm5leHQgPSBzcnZfY3VycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNydl9oZWFkID0gc3J2X2N1cnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgc3J2X2xhc3QgPSBzcnZfY3VycjsKKworICAgICAgICAgIHZwdHIgPSBhcHRyOworICAgICAgICAgIHNydl9jdXJyLT5wcmlvcml0eSA9IEROU19fMTZCSVQodnB0cik7CisgICAgICAgICAgdnB0ciArPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAgICAgIHNydl9jdXJyLT53ZWlnaHQgPSBETlNfXzE2QklUKHZwdHIpOworICAgICAgICAgIHZwdHIgKz0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgICAgICBzcnZfY3Vyci0+cG9ydCA9IEROU19fMTZCSVQodnB0cik7CisgICAgICAgICAgdnB0ciArPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOworCisgICAgICAgICAgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZSAodnB0ciwgYWJ1ZiwgYWxlbiwgJnNydl9jdXJyLT5ob3N0LCAmbGVuKTsKKyAgICAgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIERvbid0IGxvc2UgbWVtb3J5IGluIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgYXJlc19mcmVlIChycl9uYW1lKTsKKyAgICAgIHJyX25hbWUgPSBOVUxMOworCisgICAgICAvKiBNb3ZlIG9uIHRvIHRoZSBuZXh0IHJlY29yZCAqLworICAgICAgYXB0ciArPSBycl9sZW47CisgICAgfQorCisgIGlmIChob3N0bmFtZSkKKyAgICBhcmVzX2ZyZWUgKGhvc3RuYW1lKTsKKyAgaWYgKHJyX25hbWUpCisgICAgYXJlc19mcmVlIChycl9uYW1lKTsKKworICAvKiBjbGVhbiB1cCBvbiBlcnJvciAqLworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAoc3J2X2hlYWQpCisgICAgICAgIGFyZXNfZnJlZV9kYXRhIChzcnZfaGVhZCk7CisgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAvKiBldmVyeXRoaW5nIGxvb2tzIGZpbmUsIHJldHVybiB0aGUgZGF0YSAqLworICAqc3J2X291dCA9IHNydl9oZWFkOworCisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3R4dF9yZXBseS4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV90eHRfcmVwbHkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTVkMGVhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV90eHRfcmVwbHkuMwpAQCAtMCwwICsxLDEyMCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX1BBUlNFX1RYVF9SRVBMWSAzICIyNyBPY3RvYmVyIDIwMDkiCisuU0ggTkFNRQorYXJlc19wYXJzZV90eHRfcmVwbHkgXC0gUGFyc2UgYSByZXBseSB0byBhIEROUyBxdWVyeSBvZiB0eXBlIFRYVAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX3BhcnNlX3R4dF9yZXBseShjb25zdCB1bnNpZ25lZCBjaGFyKiBcZklhYnVmXGZQLCBpbnQgXGZJYWxlblxmUCwKKy5CICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSAqKlxmSXR4dF9vdXRcZlApOworLlBQCisuQiBpbnQgYXJlc19wYXJzZV90eHRfcmVwbHlfZXh0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIFxmSWFidWZcZlAsIGludCBcZklhbGVuXGZQLAorLkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJlc190eHRfZXh0ICoqXGZJdHh0X291dFxmUCk7CisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQlIgImFyZXNfcGFyc2VfdHh0X3JlcGx5IiAiICgiICJhcmVzX3BhcnNlX3R4dF9yZXBseV9leHQiICIpIgorZnVuY3Rpb24gcGFyc2VzIHRoZSByZXNwb25zZSB0byBhIHF1ZXJ5IG9mIHR5cGUgVFhUIGludG8gYQorbGlua2VkIGxpc3QgKG9uZSBlbGVtZW50IHBlciBzdWItc3RyaW5nKSBvZgorLklSICJzdHJ1Y3QgYXJlc190eHRfcmVwbHkiICIgKCIgInN0cnVjdCBhcmVzX3R4dF9leHQiICIpIgorVGhlIHBhcmFtZXRlcnMKKy5JIGFidWYKK2FuZAorLkkgYWxlbgorZ2l2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlLiAgVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gYWxsb2NhdGVkCittZW1vcnkgYW5kIGEgcG9pbnRlciB0byBpdCBzdG9yZWQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieQorLklSIHR4dF9vdXQgLgorSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlIHJlc3VsdGluZworLklSIHR4dF9vdXQKK3N0cnVjdHVyZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdXNpbmcgdGhlIGZ1bmN0aW9uCisuQiBhcmVzX2ZyZWVfZGF0YQorLlBQCitUaGUgc3RydWN0dXJlIAorLkkgYXJlc190eHRfcmVwbHkKK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorLnNwCisuaW4gKzRuCisubmYKK3N0cnVjdCBhcmVzX3R4dF9yZXBseSB7CisgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSAgKm5leHQ7CisgIHVuc2lnbmVkIGludCAgbGVuZ3RoOworICB1bnNpZ25lZCBjaGFyICp0eHQ7Cit9OworLmZpCisuaW4KKy5QUAorVGhlIHN0cnVjdHVyZQorLkkgYXJlc190eHRfZXh0Citjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkczoKKy5zcAorLmluICs0bgorLm5mCitzdHJ1Y3QgYXJlc190eHRfZXh0IHsKKyAgc3RydWN0IGFyZXNfdHh0X2V4dCAgKm5leHQ7CisgIHVuc2lnbmVkIGludCAgbGVuZ3RoOworICB1bnNpZ25lZCBjaGFyICp0eHQ7CisgIHVuc2lnbmVkIGNoYXIgcmVjb3JkX3N0YXJ0OworfTsKKy5maQorLmluCisuUFAKK1RoZQorLkkgcmVjb3JkX3N0YXJ0CitmaWVsZCBpbgorLkkgc3RydWN0IGFyZXNfdHh0X2V4dAoraXMgMSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBhIHN0YXJ0IG9mIGEgVFhUIHJlY29yZCwgYW5kIDAgaWYgdGhlIHN0cnVjdHVyZSBpcyBhCitjb250aW51YXRpb24gb2YgYSBwcmV2aW91cyByZWNvcmQuIFRoZSBsaW5rZWQgbGlzdCBvZiB0aGUKKy5JIHN0cnVjdCBhcmVzX3R4dF9leHQKK3dpbGwgaGF2ZSBhdCBsZWFzdCBvbmUgaXRlbSB3aXRoCisuSSByZWNvcmRfc3RhcnQKK2VxdWFsIHRvIDEsIGFuZCBtYXkgaGF2ZSBzb21lIGl0ZW1zIHdpdGgKKy5JIHJlY29yZF9zdGFydAorZXF1YWwgdG8gMCBiZXR3ZWVuIHRoZW0uCisuUFAKK1RoZXNlIHNlcXVlbmNlcyBvZgorLkkgc3RydWN0IGFyZXNfdHh0X2V4dAorKHN0YXJ0aW5nIGZyb20gdGhlIGl0ZW0gd2l0aAorLkkgcmVjb3JkX3N0YXJ0CitlcXVhbCB0byAxLCBhbmQgZW5kaW5nIHJpZ2h0IGJlZm9yZSB0aGUgcmVjb3JkIHN0YXJ0IGl0ZW0pIG1heSBiZSB0cmVhdGVkIGFzCitlaXRoZXIgY29tcG9uZW50cyBvZiBhIHNpbmdsZSBUWFQgcmVjb3JkIG9yIGFzIGEgbXVsdGktcGFydGVkIFRYVCByZWNvcmQsCitkZXBlbmRpbmcgb24gcGFydGljdWxhciB1c2UgY2FzZS4KKy5QUAorLlNIIFJFVFVSTiBWQUxVRVMKKy5CUiAiYXJlc19wYXJzZV90eHRfcmVwbHkiICIgKCIgImFyZXNfcGFyc2VfdHh0X3JlcGx5X2V4dCIgIikiCitjYW4gcmV0dXJuIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxNQorLkIgQVJFU19TVUNDRVNTCitUaGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuCisuVFAgMTUKKy5CIEFSRVNfRUJBRFJFU1AKK1RoZSByZXNwb25zZSB3YXMgbWFsZm9ybWF0dGVkLgorLlRQIDE1CisuQiBBUkVTX0VOT0RBVEEKK1RoZSByZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gYW4gYW5zd2VyIHRvIHRoZSBxdWVyeS4KKy5UUCAxNQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlNIIEFWQUlMQUJJTElUWQorVGhpcyBmdW5jdGlvbiB3YXMgZmlyc3QgaW50cm9kdWNlZCBpbiBjLWFyZXMgdmVyc2lvbiAxLjcuMC4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfcXVlcnkgKDMpCisuQlIgYXJlc19mcmVlX2RhdGEgKDMpCisuU0ggQVVUSE9SCitXcml0dGVuIGJ5IEpha3ViIEhyb3playA8amhyb3pla0ByZWRoYXQuY29tPiwgb24gYmVoYWxmIG9mIFJlZCBIYXQsIEluYyBodHRwOi8vd3d3LnJlZGhhdC5jb20KKy5QUAorQW1lbmRlZCBieSBGZWRvciBJbmR1dG55IDxmZWRvckBpbmR1dG55LmNvbT4sIG9uIGJlaGFsZiBvZiBQYXlQYWwsIEluYyBodHRwczovL3d3dy5wYXlwYWwuY29tCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BhcnNlX3R4dF9yZXBseS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV90eHRfcmVwbHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODU2YjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wYXJzZV90eHRfcmVwbHkuYwpAQCAtMCwwICsxLDIyMCBAQAorCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBKYWt1YiBIcm96ZWsgPGpocm96ZWtAcmVkaGF0LmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfZG5zLmgiCisjaW5jbHVkZSAiYXJlc19kYXRhLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKK3N0YXRpYyBpbnQKK2FyZXNfX3BhcnNlX3R4dF9yZXBseSAoY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBleCwgdm9pZCAqKnR4dF9vdXQpCit7CisgIHNpemVfdCBzdWJzdHJfbGVuOworICB1bnNpZ25lZCBpbnQgcWRjb3VudCwgYW5jb3VudCwgaTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqYXB0cjsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqc3RycHRyOworICBpbnQgc3RhdHVzLCBycl90eXBlLCBycl9jbGFzcywgcnJfbGVuOworICBsb25nIGxlbjsKKyAgY2hhciAqaG9zdG5hbWUgPSBOVUxMLCAqcnJfbmFtZSA9IE5VTEw7CisgIHN0cnVjdCBhcmVzX3R4dF9leHQgKnR4dF9oZWFkID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfdHh0X2V4dCAqdHh0X2xhc3QgPSBOVUxMOworICBzdHJ1Y3QgYXJlc190eHRfZXh0ICp0eHRfY3VycjsKKworICAvKiBTZXQgKnR4dF9vdXQgdG8gTlVMTCBmb3IgYWxsIGZhaWx1cmUgY2FzZXMuICovCisgICp0eHRfb3V0ID0gTlVMTDsKKworICAvKiBHaXZlIHVwIGlmIGFidWYgZG9lc24ndCBoYXZlIHJvb20gZm9yIGEgaGVhZGVyLiAqLworICBpZiAoYWxlbiA8IEhGSVhFRFNaKQorICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworCisgIC8qIEZldGNoIHRoZSBxdWVzdGlvbiBhbmQgYW5zd2VyIGNvdW50IGZyb20gdGhlIGhlYWRlci4gKi8KKyAgcWRjb3VudCA9IEROU19IRUFERVJfUURDT1VOVCAoYWJ1Zik7CisgIGFuY291bnQgPSBETlNfSEVBREVSX0FOQ09VTlQgKGFidWYpOworICBpZiAocWRjb3VudCAhPSAxKQorICAgIHJldHVybiBBUkVTX0VCQURSRVNQOworICBpZiAoYW5jb3VudCA9PSAwKQorICAgIHJldHVybiBBUkVTX0VOT0RBVEE7CisKKyAgLyogRXhwYW5kIHRoZSBuYW1lIGZyb20gdGhlIHF1ZXN0aW9uLCBhbmQgc2tpcCBwYXN0IHRoZSBxdWVzdGlvbi4gKi8KKyAgYXB0ciA9IGFidWYgKyBIRklYRURTWjsKKyAgc3RhdHVzID0gYXJlc19leHBhbmRfbmFtZSAoYXB0ciwgYWJ1ZiwgYWxlbiwgJmhvc3RuYW1lLCAmbGVuKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgcmV0dXJuIHN0YXR1czsKKworICBpZiAoYXB0ciArIGxlbiArIFFGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgeworICAgICAgYXJlc19mcmVlIChob3N0bmFtZSk7CisgICAgICByZXR1cm4gQVJFU19FQkFEUkVTUDsKKyAgICB9CisgIGFwdHIgKz0gbGVuICsgUUZJWEVEU1o7CisKKyAgLyogRXhhbWluZSBlYWNoIGFuc3dlciByZXNvdXJjZSByZWNvcmQgKFJSKSBpbiB0dXJuLiAqLworICBmb3IgKGkgPSAwOyBpIDwgYW5jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIC8qIERlY29kZSB0aGUgUlIgdXAgdG8gdGhlIGRhdGEgZmllbGQuICovCisgICAgICBzdGF0dXMgPSBhcmVzX2V4cGFuZF9uYW1lIChhcHRyLCBhYnVmLCBhbGVuLCAmcnJfbmFtZSwgJmxlbik7CisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBhcHRyICs9IGxlbjsKKyAgICAgIGlmIChhcHRyICsgUlJGSVhFRFNaID4gYWJ1ZiArIGFsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VCQURSRVNQOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBycl90eXBlID0gRE5TX1JSX1RZUEUgKGFwdHIpOworICAgICAgcnJfY2xhc3MgPSBETlNfUlJfQ0xBU1MgKGFwdHIpOworICAgICAgcnJfbGVuID0gRE5TX1JSX0xFTiAoYXB0cik7CisgICAgICBhcHRyICs9IFJSRklYRURTWjsKKyAgICAgIGlmIChhcHRyICsgcnJfbGVuID4gYWJ1ZiArIGFsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VCQURSRVNQOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIENoZWNrIGlmIHdlIGFyZSByZWFsbHkgbG9va2luZyBhdCBhIFRYVCByZWNvcmQgKi8KKyAgICAgIGlmIChycl9jbGFzcyA9PSBDX0lOICYmIHJyX3R5cGUgPT0gVF9UWFQpCisgICAgICAgIHsKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBzdWJzdHJpbmdzIGluIGEgc2luZ2xlIFRYVCByZWNvcmQuIEVhY2gKKyAgICAgICAgICAgKiBzdWJzdHJpbmcgbWF5IGJlIHVwIHRvIDI1NSBjaGFyYWN0ZXJzIGluIGxlbmd0aCwgd2l0aCBhCisgICAgICAgICAgICogImxlbmd0aCBieXRlIiBpbmRpY2F0aW5nIHRoZSBzaXplIG9mIHRoZSBzdWJzdHJpbmcgcGF5bG9hZC4KKyAgICAgICAgICAgKiBSREFUQSBjb250YWlucyBib3RoIHRoZSBsZW5ndGgtYnl0ZXMgYW5kIHBheWxvYWRzIG9mIGFsbAorICAgICAgICAgICAqIHN1YnN0cmluZ3MgY29udGFpbmVkIHRoZXJlaW4uCisgICAgICAgICAgICovCisKKyAgICAgICAgICBzdHJwdHIgPSBhcHRyOworICAgICAgICAgIHdoaWxlIChzdHJwdHIgPCAoYXB0ciArIHJyX2xlbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN1YnN0cl9sZW4gPSAodW5zaWduZWQgY2hhcikqc3RycHRyOworICAgICAgICAgICAgICBpZiAoc3RycHRyICsgc3Vic3RyX2xlbiArIDEgPiBhcHRyICsgcnJfbGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRUJBRFJFU1A7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgLyogQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhpcyBUWFQgYW5zd2VyIGFwcGVuZGluZyBpdCB0byB0aGUgbGlzdCAqLworICAgICAgICAgICAgICB0eHRfY3VyciA9IGFyZXNfbWFsbG9jX2RhdGEoZXggPyBBUkVTX0RBVEFUWVBFX1RYVF9FWFQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkVTX0RBVEFUWVBFX1RYVF9SRVBMWSk7CisgICAgICAgICAgICAgIGlmICghdHh0X2N1cnIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RhdHVzID0gQVJFU19FTk9NRU07CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh0eHRfbGFzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB0eHRfbGFzdC0+bmV4dCA9IHR4dF9jdXJyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHR4dF9oZWFkID0gdHh0X2N1cnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB0eHRfbGFzdCA9IHR4dF9jdXJyOworCisgICAgICAgICAgICAgIGlmIChleCkKKyAgICAgICAgICAgICAgICB0eHRfY3Vyci0+cmVjb3JkX3N0YXJ0ID0gKHN0cnB0ciA9PSBhcHRyKTsKKyAgICAgICAgICAgICAgdHh0X2N1cnItPmxlbmd0aCA9IHN1YnN0cl9sZW47CisgICAgICAgICAgICAgIHR4dF9jdXJyLT50eHQgPSBhcmVzX21hbGxvYyAoc3Vic3RyX2xlbiArIDEvKiBJbmNsdWRpbmcgbnVsbCBieXRlICovKTsKKyAgICAgICAgICAgICAgaWYgKHR4dF9jdXJyLT50eHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VOT01FTTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICArK3N0cnB0cjsKKyAgICAgICAgICAgICAgbWVtY3B5ICgoY2hhciAqKSB0eHRfY3Vyci0+dHh0LCBzdHJwdHIsIHN1YnN0cl9sZW4pOworCisgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBOVUxMLXRlcm1pbmF0ZSAqLworICAgICAgICAgICAgICB0eHRfY3Vyci0+dHh0W3N1YnN0cl9sZW5dID0gMDsKKworICAgICAgICAgICAgICBzdHJwdHIgKz0gc3Vic3RyX2xlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBQcm9wYWdhdGUgYW55IGZhaWx1cmVzICovCisgICAgICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIERvbid0IGxvc2UgbWVtb3J5IGluIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgYXJlc19mcmVlIChycl9uYW1lKTsKKyAgICAgIHJyX25hbWUgPSBOVUxMOworCisgICAgICAvKiBNb3ZlIG9uIHRvIHRoZSBuZXh0IHJlY29yZCAqLworICAgICAgYXB0ciArPSBycl9sZW47CisgICAgfQorCisgIGlmIChob3N0bmFtZSkKKyAgICBhcmVzX2ZyZWUgKGhvc3RuYW1lKTsKKyAgaWYgKHJyX25hbWUpCisgICAgYXJlc19mcmVlIChycl9uYW1lKTsKKworICAvKiBjbGVhbiB1cCBvbiBlcnJvciAqLworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAodHh0X2hlYWQpCisgICAgICAgIGFyZXNfZnJlZV9kYXRhICh0eHRfaGVhZCk7CisgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAvKiBldmVyeXRoaW5nIGxvb2tzIGZpbmUsIHJldHVybiB0aGUgZGF0YSAqLworICAqdHh0X291dCA9IHR4dF9oZWFkOworCisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CisKK2ludAorYXJlc19wYXJzZV90eHRfcmVwbHkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSAqKnR4dF9vdXQpCit7CisgIHJldHVybiBhcmVzX19wYXJzZV90eHRfcmVwbHkoYWJ1ZiwgYWxlbiwgMCwgKHZvaWQgKiopIHR4dF9vdXQpOworfQorCisKK2ludAorYXJlc19wYXJzZV90eHRfcmVwbHlfZXh0IChjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyZXNfdHh0X2V4dCAqKnR4dF9vdXQpCit7CisgIHJldHVybiBhcmVzX19wYXJzZV90eHRfcmVwbHkoYWJ1ZiwgYWxlbiwgMSwgKHZvaWQgKiopIHR4dF9vdXQpOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wbGF0Zm9ybS5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDA2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3BsYXRmb3JtLmMKQEAgLTAsMCArMSwxMTAzNSBAQAorCisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAxMSBieSBEYW5pZWwgU3RlbmJlcmcgZXQgYWwKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJhcmVzX25vd2Fybi5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoTVNET1MpCisKKyNkZWZpbmUgVl9QTEFURk9STV9XSU4zMnMgICAgICAgICAwCisjZGVmaW5lIFZfUExBVEZPUk1fV0lOMzJfV0lORE9XUyAgMQorI2RlZmluZSBWX1BMQVRGT1JNX1dJTjMyX05UICAgICAgIDIKKyNkZWZpbmUgVl9QTEFURk9STV9XSU4zMl9DRSAgICAgICAzCisKK3dpbl9wbGF0Zm9ybSBhcmVzX19nZXRwbGF0Zm9ybSh2b2lkKQoreworICBPU1ZFUlNJT05JTkZPRVggT3N2RXg7CisKKyAgbWVtc2V0KCZPc3ZFeCwgMCwgc2l6ZW9mKE9zdkV4KSk7CisgIE9zdkV4LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GT0VYKTsKKyAgaWYgKCFHZXRWZXJzaW9uRXgoKHZvaWQgKikmT3N2RXgpKQorICAgIHsKKyAgICAgIG1lbXNldCgmT3N2RXgsIDAsIHNpemVvZihPc3ZFeCkpOworICAgICAgT3N2RXguZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKKyAgICAgIGlmICghR2V0VmVyc2lvbkV4KCh2b2lkICopJk9zdkV4KSkKKyAgICAgICAgcmV0dXJuIFdJTl9VTktOT1dOOworICAgIH0KKworICBzd2l0Y2goT3N2RXguZHdQbGF0Zm9ybUlkKQorICAgIHsKKyAgICAgIGNhc2UgVl9QTEFURk9STV9XSU4zMnM6CisgICAgICAgIHJldHVybiBXSU5fM1g7CisKKyAgICAgIGNhc2UgVl9QTEFURk9STV9XSU4zMl9XSU5ET1dTOgorICAgICAgICByZXR1cm4gV0lOXzlYOworCisgICAgICBjYXNlIFZfUExBVEZPUk1fV0lOMzJfTlQ6CisgICAgICAgIHJldHVybiBXSU5fTlQ7CisKKyAgICAgIGNhc2UgVl9QTEFURk9STV9XSU4zMl9DRToKKyAgICAgICAgcmV0dXJuIFdJTl9DRTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFdJTl9VTktOT1dOOworICAgIH0KK30KKworI2VuZGlmIC8qIFdJTjMyICYmICEgTVNET1MgKi8KKworI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKKworLyogSUFOQSBXZWxsIEtub3duIFBvcnRzIGFyZSBpbiByYW5nZSAwLTEwMjMgKi8KKyNkZWZpbmUgVVNFX0lBTkFfV0VMTF9LTk9XTl9QT1JUUyAxCisKKy8qIElBTkEgUmVnaXN0ZXJlZCBQb3J0cyBhcmUgaW4gcmFuZ2UgMTAyNC00OTE1MSAqLworI2RlZmluZSBVU0VfSUFOQV9SRUdJU1RFUkVEX1BPUlRTIDEKKworc3RydWN0IHB2dF9zZXJ2ZW50IHsKKyAgY2hhciAgICAgICAgICAgKnNfbmFtZTsKKyAgY2hhciAgICAgICAgICAqKnNfYWxpYXNlczsKKyAgdW5zaWduZWQgc2hvcnQgIHNfcG9ydDsKKyAgY2hhciAgICAgICAgICAgKnNfcHJvdG87Cit9OworCisvKgorICogUmVmOiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3BvcnQtbnVtYmVycworICovCisKK3N0YXRpYyBzdHJ1Y3QgcHZ0X3NlcnZlbnQgSUFOQXBvcnRzW10gPSB7CisjaWZkZWYgVVNFX0lBTkFfV0VMTF9LTk9XTl9QT1JUUworeyJ0Y3BtdXgiLCAgICAgICAgICAgICB7TlVMTH0sIDEsICJ0Y3AifSwKK3sidGNwbXV4IiwgICAgICAgICAgICAge05VTEx9LCAxLCAidWRwIn0sCit7ImNvbXByZXNzbmV0IiwgICAgICAgIHtOVUxMfSwgMiwgInRjcCJ9LAoreyJjb21wcmVzc25ldCIsICAgICAgICB7TlVMTH0sIDIsICJ1ZHAifSwKK3siY29tcHJlc3NuZXQiLCAgICAgICAge05VTEx9LCAzLCAidGNwIn0sCit7ImNvbXByZXNzbmV0IiwgICAgICAgIHtOVUxMfSwgMywgInVkcCJ9LAoreyJyamUiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUsICJ0Y3AifSwKK3sicmplIiwgICAgICAgICAgICAgICAge05VTEx9LCA1LCAidWRwIn0sCit7ImVjaG8iLCAgICAgICAgICAgICAgIHtOVUxMfSwgNywgInRjcCJ9LAoreyJlY2hvIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcsICJ1ZHAifSwKK3siZGlzY2FyZCIsICAgICAgICAgICAge05VTEx9LCA5LCAidGNwIn0sCit7ImRpc2NhcmQiLCAgICAgICAgICAgIHtOVUxMfSwgOSwgInVkcCJ9LAoreyJkaXNjYXJkIiwgICAgICAgICAgICB7TlVMTH0sIDksICJzY3RwIn0sCit7ImRpc2NhcmQiLCAgICAgICAgICAgIHtOVUxMfSwgOSwgImRjY3AifSwKK3sic3lzdGF0IiwgICAgICAgICAgICAge05VTEx9LCAxMSwgInRjcCJ9LAoreyJzeXN0YXQiLCAgICAgICAgICAgICB7TlVMTH0sIDExLCAidWRwIn0sCit7ImRheXRpbWUiLCAgICAgICAgICAgIHtOVUxMfSwgMTMsICJ0Y3AifSwKK3siZGF5dGltZSIsICAgICAgICAgICAge05VTEx9LCAxMywgInVkcCJ9LAoreyJxb3RkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE3LCAidGNwIn0sCit7InFvdGQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTcsICJ1ZHAifSwKK3sibXNwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxOCwgInRjcCJ9LAoreyJtc3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE4LCAidWRwIn0sCit7ImNoYXJnZW4iLCAgICAgICAgICAgIHtOVUxMfSwgMTksICJ0Y3AifSwKK3siY2hhcmdlbiIsICAgICAgICAgICAge05VTEx9LCAxOSwgInVkcCJ9LAoreyJmdHAtZGF0YSIsICAgICAgICAgICB7TlVMTH0sIDIwLCAidGNwIn0sCit7ImZ0cC1kYXRhIiwgICAgICAgICAgIHtOVUxMfSwgMjAsICJ1ZHAifSwKK3siZnRwLWRhdGEiLCAgICAgICAgICAge05VTEx9LCAyMCwgInNjdHAifSwKK3siZnRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMSwgInRjcCJ9LAoreyJmdHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIxLCAidWRwIn0sCit7ImZ0cCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjEsICJzY3RwIn0sCit7InNzaCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjIsICJ0Y3AifSwKK3sic3NoIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMiwgInVkcCJ9LAoreyJzc2giLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIyLCAic2N0cCJ9LAoreyJ0ZWxuZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDIzLCAidGNwIn0sCit7InRlbG5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMjMsICJ1ZHAifSwKK3sic210cCIsICAgICAgICAgICAgICAge05VTEx9LCAyNSwgInRjcCJ9LAoreyJzbXRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI1LCAidWRwIn0sCit7Im5zdy1mZSIsICAgICAgICAgICAgIHtOVUxMfSwgMjcsICJ0Y3AifSwKK3sibnN3LWZlIiwgICAgICAgICAgICAge05VTEx9LCAyNywgInVkcCJ9LAoreyJtc2ctaWNwIiwgICAgICAgICAgICB7TlVMTH0sIDI5LCAidGNwIn0sCit7Im1zZy1pY3AiLCAgICAgICAgICAgIHtOVUxMfSwgMjksICJ1ZHAifSwKK3sibXNnLWF1dGgiLCAgICAgICAgICAge05VTEx9LCAzMSwgInRjcCJ9LAoreyJtc2ctYXV0aCIsICAgICAgICAgICB7TlVMTH0sIDMxLCAidWRwIn0sCit7ImRzcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzMsICJ0Y3AifSwKK3siZHNwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzMywgInVkcCJ9LAoreyJ0aW1lIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM3LCAidGNwIn0sCit7InRpbWUiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzcsICJ1ZHAifSwKK3sicmFwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzOCwgInRjcCJ9LAoreyJyYXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM4LCAidWRwIn0sCit7InJscCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzksICJ0Y3AifSwKK3sicmxwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzOSwgInVkcCJ9LAoreyJncmFwaGljcyIsICAgICAgICAgICB7TlVMTH0sIDQxLCAidGNwIn0sCit7ImdyYXBoaWNzIiwgICAgICAgICAgIHtOVUxMfSwgNDEsICJ1ZHAifSwKK3sibmFtZSIsICAgICAgICAgICAgICAge05VTEx9LCA0MiwgInRjcCJ9LAoreyJuYW1lIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQyLCAidWRwIn0sCit7Im5hbWVzZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgNDIsICJ0Y3AifSwKK3sibmFtZXNlcnZlciIsICAgICAgICAge05VTEx9LCA0MiwgInVkcCJ9LAoreyJuaWNuYW1lIiwgICAgICAgICAgICB7TlVMTH0sIDQzLCAidGNwIn0sCit7Im5pY25hbWUiLCAgICAgICAgICAgIHtOVUxMfSwgNDMsICJ1ZHAifSwKK3sibXBtLWZsYWdzIiwgICAgICAgICAge05VTEx9LCA0NCwgInRjcCJ9LAoreyJtcG0tZmxhZ3MiLCAgICAgICAgICB7TlVMTH0sIDQ0LCAidWRwIn0sCit7Im1wbSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDUsICJ0Y3AifSwKK3sibXBtIiwgICAgICAgICAgICAgICAge05VTEx9LCA0NSwgInVkcCJ9LAoreyJtcG0tc25kIiwgICAgICAgICAgICB7TlVMTH0sIDQ2LCAidGNwIn0sCit7Im1wbS1zbmQiLCAgICAgICAgICAgIHtOVUxMfSwgNDYsICJ1ZHAifSwKK3sibmktZnRwIiwgICAgICAgICAgICAge05VTEx9LCA0NywgInRjcCJ9LAoreyJuaS1mdHAiLCAgICAgICAgICAgICB7TlVMTH0sIDQ3LCAidWRwIn0sCit7ImF1ZGl0ZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDgsICJ0Y3AifSwKK3siYXVkaXRkIiwgICAgICAgICAgICAge05VTEx9LCA0OCwgInVkcCJ9LAoreyJ0YWNhY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDQ5LCAidGNwIn0sCit7InRhY2FjcyIsICAgICAgICAgICAgIHtOVUxMfSwgNDksICJ1ZHAifSwKK3sicmUtbWFpbC1jayIsICAgICAgICAge05VTEx9LCA1MCwgInRjcCJ9LAoreyJyZS1tYWlsLWNrIiwgICAgICAgICB7TlVMTH0sIDUwLCAidWRwIn0sCit7ImxhLW1haW50IiwgICAgICAgICAgIHtOVUxMfSwgNTEsICJ0Y3AifSwKK3sibGEtbWFpbnQiLCAgICAgICAgICAge05VTEx9LCA1MSwgInVkcCJ9LAoreyJ4bnMtdGltZSIsICAgICAgICAgICB7TlVMTH0sIDUyLCAidGNwIn0sCit7Inhucy10aW1lIiwgICAgICAgICAgIHtOVUxMfSwgNTIsICJ1ZHAifSwKK3siZG9tYWluIiwgICAgICAgICAgICAge05VTEx9LCA1MywgInRjcCJ9LAoreyJkb21haW4iLCAgICAgICAgICAgICB7TlVMTH0sIDUzLCAidWRwIn0sCit7Inhucy1jaCIsICAgICAgICAgICAgIHtOVUxMfSwgNTQsICJ0Y3AifSwKK3sieG5zLWNoIiwgICAgICAgICAgICAge05VTEx9LCA1NCwgInVkcCJ9LAoreyJpc2ktZ2wiLCAgICAgICAgICAgICB7TlVMTH0sIDU1LCAidGNwIn0sCit7ImlzaS1nbCIsICAgICAgICAgICAgIHtOVUxMfSwgNTUsICJ1ZHAifSwKK3sieG5zLWF1dGgiLCAgICAgICAgICAge05VTEx9LCA1NiwgInRjcCJ9LAoreyJ4bnMtYXV0aCIsICAgICAgICAgICB7TlVMTH0sIDU2LCAidWRwIn0sCit7Inhucy1tYWlsIiwgICAgICAgICAgIHtOVUxMfSwgNTgsICJ0Y3AifSwKK3sieG5zLW1haWwiLCAgICAgICAgICAge05VTEx9LCA1OCwgInVkcCJ9LAoreyJuaS1tYWlsIiwgICAgICAgICAgICB7TlVMTH0sIDYxLCAidGNwIn0sCit7Im5pLW1haWwiLCAgICAgICAgICAgIHtOVUxMfSwgNjEsICJ1ZHAifSwKK3siYWNhcyIsICAgICAgICAgICAgICAge05VTEx9LCA2MiwgInRjcCJ9LAoreyJhY2FzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYyLCAidWRwIn0sCit7Indob2lzKysiLCAgICAgICAgICAgIHtOVUxMfSwgNjMsICJ0Y3AifSwKK3sid2hvaXMrKyIsICAgICAgICAgICAge05VTEx9LCA2MywgInVkcCJ9LAoreyJjb3ZpYSIsICAgICAgICAgICAgICB7TlVMTH0sIDY0LCAidGNwIn0sCit7ImNvdmlhIiwgICAgICAgICAgICAgIHtOVUxMfSwgNjQsICJ1ZHAifSwKK3sidGFjYWNzLWRzIiwgICAgICAgICAge05VTEx9LCA2NSwgInRjcCJ9LAoreyJ0YWNhY3MtZHMiLCAgICAgICAgICB7TlVMTH0sIDY1LCAidWRwIn0sCit7InNxbCpuZXQiLCAgICAgICAgICAgIHtOVUxMfSwgNjYsICJ0Y3AifSwKK3sic3FsKm5ldCIsICAgICAgICAgICAge05VTEx9LCA2NiwgInVkcCJ9LAoreyJib290cHMiLCAgICAgICAgICAgICB7TlVMTH0sIDY3LCAidGNwIn0sCit7ImJvb3RwcyIsICAgICAgICAgICAgIHtOVUxMfSwgNjcsICJ1ZHAifSwKK3siYm9vdHBjIiwgICAgICAgICAgICAge05VTEx9LCA2OCwgInRjcCJ9LAoreyJib290cGMiLCAgICAgICAgICAgICB7TlVMTH0sIDY4LCAidWRwIn0sCit7InRmdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjksICJ0Y3AifSwKK3sidGZ0cCIsICAgICAgICAgICAgICAge05VTEx9LCA2OSwgInVkcCJ9LAoreyJnb3BoZXIiLCAgICAgICAgICAgICB7TlVMTH0sIDcwLCAidGNwIn0sCit7ImdvcGhlciIsICAgICAgICAgICAgIHtOVUxMfSwgNzAsICJ1ZHAifSwKK3sibmV0cmpzLTEiLCAgICAgICAgICAge05VTEx9LCA3MSwgInRjcCJ9LAoreyJuZXRyanMtMSIsICAgICAgICAgICB7TlVMTH0sIDcxLCAidWRwIn0sCit7Im5ldHJqcy0yIiwgICAgICAgICAgIHtOVUxMfSwgNzIsICJ0Y3AifSwKK3sibmV0cmpzLTIiLCAgICAgICAgICAge05VTEx9LCA3MiwgInVkcCJ9LAoreyJuZXRyanMtMyIsICAgICAgICAgICB7TlVMTH0sIDczLCAidGNwIn0sCit7Im5ldHJqcy0zIiwgICAgICAgICAgIHtOVUxMfSwgNzMsICJ1ZHAifSwKK3sibmV0cmpzLTQiLCAgICAgICAgICAge05VTEx9LCA3NCwgInRjcCJ9LAoreyJuZXRyanMtNCIsICAgICAgICAgICB7TlVMTH0sIDc0LCAidWRwIn0sCit7ImRlb3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzYsICJ0Y3AifSwKK3siZGVvcyIsICAgICAgICAgICAgICAge05VTEx9LCA3NiwgInVkcCJ9LAoreyJ2ZXR0Y3AiLCAgICAgICAgICAgICB7TlVMTH0sIDc4LCAidGNwIn0sCit7InZldHRjcCIsICAgICAgICAgICAgIHtOVUxMfSwgNzgsICJ1ZHAifSwKK3siZmluZ2VyIiwgICAgICAgICAgICAge05VTEx9LCA3OSwgInRjcCJ9LAoreyJmaW5nZXIiLCAgICAgICAgICAgICB7TlVMTH0sIDc5LCAidWRwIn0sCit7Imh0dHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODAsICJ0Y3AifSwKK3siaHR0cCIsICAgICAgICAgICAgICAge05VTEx9LCA4MCwgInVkcCJ9LAoreyJ3d3ciLCAgICAgICAgICAgICAgICB7TlVMTH0sIDgwLCAidGNwIn0sCit7Ind3dyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgODAsICJ1ZHAifSwKK3sid3d3LWh0dHAiLCAgICAgICAgICAge05VTEx9LCA4MCwgInRjcCJ9LAoreyJ3d3ctaHR0cCIsICAgICAgICAgICB7TlVMTH0sIDgwLCAidWRwIn0sCit7Imh0dHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODAsICJzY3RwIn0sCit7InhmZXIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODIsICJ0Y3AifSwKK3sieGZlciIsICAgICAgICAgICAgICAge05VTEx9LCA4MiwgInVkcCJ9LAoreyJtaXQtbWwtZGV2IiwgICAgICAgICB7TlVMTH0sIDgzLCAidGNwIn0sCit7Im1pdC1tbC1kZXYiLCAgICAgICAgIHtOVUxMfSwgODMsICJ1ZHAifSwKK3siY3RmIiwgICAgICAgICAgICAgICAge05VTEx9LCA4NCwgInRjcCJ9LAoreyJjdGYiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDg0LCAidWRwIn0sCit7Im1pdC1tbC1kZXYiLCAgICAgICAgIHtOVUxMfSwgODUsICJ0Y3AifSwKK3sibWl0LW1sLWRldiIsICAgICAgICAge05VTEx9LCA4NSwgInVkcCJ9LAoreyJtZmNvYm9sIiwgICAgICAgICAgICB7TlVMTH0sIDg2LCAidGNwIn0sCit7Im1mY29ib2wiLCAgICAgICAgICAgIHtOVUxMfSwgODYsICJ1ZHAifSwKK3sia2VyYmVyb3MiLCAgICAgICAgICAge05VTEx9LCA4OCwgInRjcCJ9LAoreyJrZXJiZXJvcyIsICAgICAgICAgICB7TlVMTH0sIDg4LCAidWRwIn0sCit7InN1LW1pdC10ZyIsICAgICAgICAgIHtOVUxMfSwgODksICJ0Y3AifSwKK3sic3UtbWl0LXRnIiwgICAgICAgICAge05VTEx9LCA4OSwgInVkcCJ9LAoreyJkbnNpeCIsICAgICAgICAgICAgICB7TlVMTH0sIDkwLCAidGNwIn0sCit7ImRuc2l4IiwgICAgICAgICAgICAgIHtOVUxMfSwgOTAsICJ1ZHAifSwKK3sibWl0LWRvdiIsICAgICAgICAgICAge05VTEx9LCA5MSwgInRjcCJ9LAoreyJtaXQtZG92IiwgICAgICAgICAgICB7TlVMTH0sIDkxLCAidWRwIn0sCit7Im5wcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgOTIsICJ0Y3AifSwKK3sibnBwIiwgICAgICAgICAgICAgICAge05VTEx9LCA5MiwgInVkcCJ9LAoreyJkY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDkzLCAidGNwIn0sCit7ImRjcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgOTMsICJ1ZHAifSwKK3sib2JqY2FsbCIsICAgICAgICAgICAge05VTEx9LCA5NCwgInRjcCJ9LAoreyJvYmpjYWxsIiwgICAgICAgICAgICB7TlVMTH0sIDk0LCAidWRwIn0sCit7InN1cGR1cCIsICAgICAgICAgICAgIHtOVUxMfSwgOTUsICJ0Y3AifSwKK3sic3VwZHVwIiwgICAgICAgICAgICAge05VTEx9LCA5NSwgInVkcCJ9LAoreyJkaXhpZSIsICAgICAgICAgICAgICB7TlVMTH0sIDk2LCAidGNwIn0sCit7ImRpeGllIiwgICAgICAgICAgICAgIHtOVUxMfSwgOTYsICJ1ZHAifSwKK3sic3dpZnQtcnZmIiwgICAgICAgICAge05VTEx9LCA5NywgInRjcCJ9LAoreyJzd2lmdC1ydmYiLCAgICAgICAgICB7TlVMTH0sIDk3LCAidWRwIn0sCit7InRhY25ld3MiLCAgICAgICAgICAgIHtOVUxMfSwgOTgsICJ0Y3AifSwKK3sidGFjbmV3cyIsICAgICAgICAgICAge05VTEx9LCA5OCwgInVkcCJ9LAoreyJtZXRhZ3JhbSIsICAgICAgICAgICB7TlVMTH0sIDk5LCAidGNwIn0sCit7Im1ldGFncmFtIiwgICAgICAgICAgIHtOVUxMfSwgOTksICJ1ZHAifSwKK3sibmV3YWNjdCIsICAgICAgICAgICAge05VTEx9LCAxMDAsICJ0Y3AifSwKK3siaG9zdG5hbWUiLCAgICAgICAgICAge05VTEx9LCAxMDEsICJ0Y3AifSwKK3siaG9zdG5hbWUiLCAgICAgICAgICAge05VTEx9LCAxMDEsICJ1ZHAifSwKK3siaXNvLXRzYXAiLCAgICAgICAgICAge05VTEx9LCAxMDIsICJ0Y3AifSwKK3siaXNvLXRzYXAiLCAgICAgICAgICAge05VTEx9LCAxMDIsICJ1ZHAifSwKK3siZ3BwaXRucCIsICAgICAgICAgICAge05VTEx9LCAxMDMsICJ0Y3AifSwKK3siZ3BwaXRucCIsICAgICAgICAgICAge05VTEx9LCAxMDMsICJ1ZHAifSwKK3siYWNyLW5lbWEiLCAgICAgICAgICAge05VTEx9LCAxMDQsICJ0Y3AifSwKK3siYWNyLW5lbWEiLCAgICAgICAgICAge05VTEx9LCAxMDQsICJ1ZHAifSwKK3siY3NvIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDUsICJ0Y3AifSwKK3siY3NvIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDUsICJ1ZHAifSwKK3siY3NuZXQtbnMiLCAgICAgICAgICAge05VTEx9LCAxMDUsICJ0Y3AifSwKK3siY3NuZXQtbnMiLCAgICAgICAgICAge05VTEx9LCAxMDUsICJ1ZHAifSwKK3siM2NvbS10c211eCIsICAgICAgICAge05VTEx9LCAxMDYsICJ0Y3AifSwKK3siM2NvbS10c211eCIsICAgICAgICAge05VTEx9LCAxMDYsICJ1ZHAifSwKK3sicnRlbG5ldCIsICAgICAgICAgICAge05VTEx9LCAxMDcsICJ0Y3AifSwKK3sicnRlbG5ldCIsICAgICAgICAgICAge05VTEx9LCAxMDcsICJ1ZHAifSwKK3sic25hZ2FzIiwgICAgICAgICAgICAge05VTEx9LCAxMDgsICJ0Y3AifSwKK3sic25hZ2FzIiwgICAgICAgICAgICAge05VTEx9LCAxMDgsICJ1ZHAifSwKK3sicG9wMiIsICAgICAgICAgICAgICAge05VTEx9LCAxMDksICJ0Y3AifSwKK3sicG9wMiIsICAgICAgICAgICAgICAge05VTEx9LCAxMDksICJ1ZHAifSwKK3sicG9wMyIsICAgICAgICAgICAgICAge05VTEx9LCAxMTAsICJ0Y3AifSwKK3sicG9wMyIsICAgICAgICAgICAgICAge05VTEx9LCAxMTAsICJ1ZHAifSwKK3sic3VucnBjIiwgICAgICAgICAgICAge05VTEx9LCAxMTEsICJ0Y3AifSwKK3sic3VucnBjIiwgICAgICAgICAgICAge05VTEx9LCAxMTEsICJ1ZHAifSwKK3sibWNpZGFzIiwgICAgICAgICAgICAge05VTEx9LCAxMTIsICJ0Y3AifSwKK3sibWNpZGFzIiwgICAgICAgICAgICAge05VTEx9LCAxMTIsICJ1ZHAifSwKK3siaWRlbnQiLCAgICAgICAgICAgICAge05VTEx9LCAxMTMsICJ0Y3AifSwKK3siYXV0aCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTMsICJ0Y3AifSwKK3siYXV0aCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTMsICJ1ZHAifSwKK3sic2Z0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTUsICJ0Y3AifSwKK3sic2Z0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTUsICJ1ZHAifSwKK3siYW5zYW5vdGlmeSIsICAgICAgICAge05VTEx9LCAxMTYsICJ0Y3AifSwKK3siYW5zYW5vdGlmeSIsICAgICAgICAge05VTEx9LCAxMTYsICJ1ZHAifSwKK3sidXVjcC1wYXRoIiwgICAgICAgICAge05VTEx9LCAxMTcsICJ0Y3AifSwKK3sidXVjcC1wYXRoIiwgICAgICAgICAge05VTEx9LCAxMTcsICJ1ZHAifSwKK3sic3Fsc2VydiIsICAgICAgICAgICAge05VTEx9LCAxMTgsICJ0Y3AifSwKK3sic3Fsc2VydiIsICAgICAgICAgICAge05VTEx9LCAxMTgsICJ1ZHAifSwKK3sibm50cCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTksICJ0Y3AifSwKK3sibm50cCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTksICJ1ZHAifSwKK3siY2ZkcHRrdCIsICAgICAgICAgICAge05VTEx9LCAxMjAsICJ0Y3AifSwKK3siY2ZkcHRrdCIsICAgICAgICAgICAge05VTEx9LCAxMjAsICJ1ZHAifSwKK3siZXJwYyIsICAgICAgICAgICAgICAge05VTEx9LCAxMjEsICJ0Y3AifSwKK3siZXJwYyIsICAgICAgICAgICAgICAge05VTEx9LCAxMjEsICJ1ZHAifSwKK3sic21ha3luZXQiLCAgICAgICAgICAge05VTEx9LCAxMjIsICJ0Y3AifSwKK3sic21ha3luZXQiLCAgICAgICAgICAge05VTEx9LCAxMjIsICJ1ZHAifSwKK3sibnRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMjMsICJ0Y3AifSwKK3sibnRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMjMsICJ1ZHAifSwKK3siYW5zYXRyYWRlciIsICAgICAgICAge05VTEx9LCAxMjQsICJ0Y3AifSwKK3siYW5zYXRyYWRlciIsICAgICAgICAge05VTEx9LCAxMjQsICJ1ZHAifSwKK3sibG9jdXMtbWFwIiwgICAgICAgICAge05VTEx9LCAxMjUsICJ0Y3AifSwKK3sibG9jdXMtbWFwIiwgICAgICAgICAge05VTEx9LCAxMjUsICJ1ZHAifSwKK3sibnhlZGl0IiwgICAgICAgICAgICAge05VTEx9LCAxMjYsICJ0Y3AifSwKK3sibnhlZGl0IiwgICAgICAgICAgICAge05VTEx9LCAxMjYsICJ1ZHAifSwKK3sibG9jdXMtY29uIiwgICAgICAgICAge05VTEx9LCAxMjcsICJ0Y3AifSwKK3sibG9jdXMtY29uIiwgICAgICAgICAge05VTEx9LCAxMjcsICJ1ZHAifSwKK3siZ3NzLXhsaWNlbiIsICAgICAgICAge05VTEx9LCAxMjgsICJ0Y3AifSwKK3siZ3NzLXhsaWNlbiIsICAgICAgICAge05VTEx9LCAxMjgsICJ1ZHAifSwKK3sicHdkZ2VuIiwgICAgICAgICAgICAge05VTEx9LCAxMjksICJ0Y3AifSwKK3sicHdkZ2VuIiwgICAgICAgICAgICAge05VTEx9LCAxMjksICJ1ZHAifSwKK3siY2lzY28tZm5hIiwgICAgICAgICAge05VTEx9LCAxMzAsICJ0Y3AifSwKK3siY2lzY28tZm5hIiwgICAgICAgICAge05VTEx9LCAxMzAsICJ1ZHAifSwKK3siY2lzY28tdG5hIiwgICAgICAgICAge05VTEx9LCAxMzEsICJ0Y3AifSwKK3siY2lzY28tdG5hIiwgICAgICAgICAge05VTEx9LCAxMzEsICJ1ZHAifSwKK3siY2lzY28tc3lzIiwgICAgICAgICAge05VTEx9LCAxMzIsICJ0Y3AifSwKK3siY2lzY28tc3lzIiwgICAgICAgICAge05VTEx9LCAxMzIsICJ1ZHAifSwKK3sic3RhdHNydiIsICAgICAgICAgICAge05VTEx9LCAxMzMsICJ0Y3AifSwKK3sic3RhdHNydiIsICAgICAgICAgICAge05VTEx9LCAxMzMsICJ1ZHAifSwKK3siaW5ncmVzLW5ldCIsICAgICAgICAge05VTEx9LCAxMzQsICJ0Y3AifSwKK3siaW5ncmVzLW5ldCIsICAgICAgICAge05VTEx9LCAxMzQsICJ1ZHAifSwKK3siZXBtYXAiLCAgICAgICAgICAgICAge05VTEx9LCAxMzUsICJ0Y3AifSwKK3siZXBtYXAiLCAgICAgICAgICAgICAge05VTEx9LCAxMzUsICJ1ZHAifSwKK3sicHJvZmlsZSIsICAgICAgICAgICAge05VTEx9LCAxMzYsICJ0Y3AifSwKK3sicHJvZmlsZSIsICAgICAgICAgICAge05VTEx9LCAxMzYsICJ1ZHAifSwKK3sibmV0Ymlvcy1ucyIsICAgICAgICAge05VTEx9LCAxMzcsICJ0Y3AifSwKK3sibmV0Ymlvcy1ucyIsICAgICAgICAge05VTEx9LCAxMzcsICJ1ZHAifSwKK3sibmV0Ymlvcy1kZ20iLCAgICAgICAge05VTEx9LCAxMzgsICJ0Y3AifSwKK3sibmV0Ymlvcy1kZ20iLCAgICAgICAge05VTEx9LCAxMzgsICJ1ZHAifSwKK3sibmV0Ymlvcy1zc24iLCAgICAgICAge05VTEx9LCAxMzksICJ0Y3AifSwKK3sibmV0Ymlvcy1zc24iLCAgICAgICAge05VTEx9LCAxMzksICJ1ZHAifSwKK3siZW1maXMtZGF0YSIsICAgICAgICAge05VTEx9LCAxNDAsICJ0Y3AifSwKK3siZW1maXMtZGF0YSIsICAgICAgICAge05VTEx9LCAxNDAsICJ1ZHAifSwKK3siZW1maXMtY250bCIsICAgICAgICAge05VTEx9LCAxNDEsICJ0Y3AifSwKK3siZW1maXMtY250bCIsICAgICAgICAge05VTEx9LCAxNDEsICJ1ZHAifSwKK3siYmwtaWRtIiwgICAgICAgICAgICAge05VTEx9LCAxNDIsICJ0Y3AifSwKK3siYmwtaWRtIiwgICAgICAgICAgICAge05VTEx9LCAxNDIsICJ1ZHAifSwKK3siaW1hcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNDMsICJ0Y3AifSwKK3siaW1hcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNDMsICJ1ZHAifSwKK3sidW1hIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNDQsICJ0Y3AifSwKK3sidW1hIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNDQsICJ1ZHAifSwKK3sidWFhYyIsICAgICAgICAgICAgICAge05VTEx9LCAxNDUsICJ0Y3AifSwKK3sidWFhYyIsICAgICAgICAgICAgICAge05VTEx9LCAxNDUsICJ1ZHAifSwKK3siaXNvLXRwMCIsICAgICAgICAgICAge05VTEx9LCAxNDYsICJ0Y3AifSwKK3siaXNvLXRwMCIsICAgICAgICAgICAge05VTEx9LCAxNDYsICJ1ZHAifSwKK3siaXNvLWlwIiwgICAgICAgICAgICAge05VTEx9LCAxNDcsICJ0Y3AifSwKK3siaXNvLWlwIiwgICAgICAgICAgICAge05VTEx9LCAxNDcsICJ1ZHAifSwKK3siamFyZ29uIiwgICAgICAgICAgICAge05VTEx9LCAxNDgsICJ0Y3AifSwKK3siamFyZ29uIiwgICAgICAgICAgICAge05VTEx9LCAxNDgsICJ1ZHAifSwKK3siYWVkLTUxMiIsICAgICAgICAgICAge05VTEx9LCAxNDksICJ0Y3AifSwKK3siYWVkLTUxMiIsICAgICAgICAgICAge05VTEx9LCAxNDksICJ1ZHAifSwKK3sic3FsLW5ldCIsICAgICAgICAgICAge05VTEx9LCAxNTAsICJ0Y3AifSwKK3sic3FsLW5ldCIsICAgICAgICAgICAge05VTEx9LCAxNTAsICJ1ZHAifSwKK3siaGVtcyIsICAgICAgICAgICAgICAge05VTEx9LCAxNTEsICJ0Y3AifSwKK3siaGVtcyIsICAgICAgICAgICAgICAge05VTEx9LCAxNTEsICJ1ZHAifSwKK3siYmZ0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxNTIsICJ0Y3AifSwKK3siYmZ0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxNTIsICJ1ZHAifSwKK3sic2dtcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNTMsICJ0Y3AifSwKK3sic2dtcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNTMsICJ1ZHAifSwKK3sibmV0c2MtcHJvZCIsICAgICAgICAge05VTEx9LCAxNTQsICJ0Y3AifSwKK3sibmV0c2MtcHJvZCIsICAgICAgICAge05VTEx9LCAxNTQsICJ1ZHAifSwKK3sibmV0c2MtZGV2IiwgICAgICAgICAge05VTEx9LCAxNTUsICJ0Y3AifSwKK3sibmV0c2MtZGV2IiwgICAgICAgICAge05VTEx9LCAxNTUsICJ1ZHAifSwKK3sic3Fsc3J2IiwgICAgICAgICAgICAge05VTEx9LCAxNTYsICJ0Y3AifSwKK3sic3Fsc3J2IiwgICAgICAgICAgICAge05VTEx9LCAxNTYsICJ1ZHAifSwKK3sia25ldC1jbXAiLCAgICAgICAgICAge05VTEx9LCAxNTcsICJ0Y3AifSwKK3sia25ldC1jbXAiLCAgICAgICAgICAge05VTEx9LCAxNTcsICJ1ZHAifSwKK3sicGNtYWlsLXNydiIsICAgICAgICAge05VTEx9LCAxNTgsICJ0Y3AifSwKK3sicGNtYWlsLXNydiIsICAgICAgICAge05VTEx9LCAxNTgsICJ1ZHAifSwKK3sibnNzLXJvdXRpbmciLCAgICAgICAge05VTEx9LCAxNTksICJ0Y3AifSwKK3sibnNzLXJvdXRpbmciLCAgICAgICAge05VTEx9LCAxNTksICJ1ZHAifSwKK3sic2dtcC10cmFwcyIsICAgICAgICAge05VTEx9LCAxNjAsICJ0Y3AifSwKK3sic2dtcC10cmFwcyIsICAgICAgICAge05VTEx9LCAxNjAsICJ1ZHAifSwKK3sic25tcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjEsICJ0Y3AifSwKK3sic25tcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjEsICJ1ZHAifSwKK3sic25tcHRyYXAiLCAgICAgICAgICAge05VTEx9LCAxNjIsICJ0Y3AifSwKK3sic25tcHRyYXAiLCAgICAgICAgICAge05VTEx9LCAxNjIsICJ1ZHAifSwKK3siY21pcC1tYW4iLCAgICAgICAgICAge05VTEx9LCAxNjMsICJ0Y3AifSwKK3siY21pcC1tYW4iLCAgICAgICAgICAge05VTEx9LCAxNjMsICJ1ZHAifSwKK3siY21pcC1hZ2VudCIsICAgICAgICAge05VTEx9LCAxNjQsICJ0Y3AifSwKK3siY21pcC1hZ2VudCIsICAgICAgICAge05VTEx9LCAxNjQsICJ1ZHAifSwKK3sieG5zLWNvdXJpZXIiLCAgICAgICAge05VTEx9LCAxNjUsICJ0Y3AifSwKK3sieG5zLWNvdXJpZXIiLCAgICAgICAge05VTEx9LCAxNjUsICJ1ZHAifSwKK3sicy1uZXQiLCAgICAgICAgICAgICAge05VTEx9LCAxNjYsICJ0Y3AifSwKK3sicy1uZXQiLCAgICAgICAgICAgICAge05VTEx9LCAxNjYsICJ1ZHAifSwKK3sibmFtcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjcsICJ0Y3AifSwKK3sibmFtcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjcsICJ1ZHAifSwKK3sicnN2ZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjgsICJ0Y3AifSwKK3sicnN2ZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjgsICJ1ZHAifSwKK3sic2VuZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjksICJ0Y3AifSwKK3sic2VuZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjksICJ1ZHAifSwKK3sicHJpbnQtc3J2IiwgICAgICAgICAge05VTEx9LCAxNzAsICJ0Y3AifSwKK3sicHJpbnQtc3J2IiwgICAgICAgICAge05VTEx9LCAxNzAsICJ1ZHAifSwKK3sibXVsdGlwbGV4IiwgICAgICAgICAge05VTEx9LCAxNzEsICJ0Y3AifSwKK3sibXVsdGlwbGV4IiwgICAgICAgICAge05VTEx9LCAxNzEsICJ1ZHAifSwKK3siY2wvMSIsICAgICAgICAgICAgICAge05VTEx9LCAxNzIsICJ0Y3AifSwKK3siY2wvMSIsICAgICAgICAgICAgICAge05VTEx9LCAxNzIsICJ1ZHAifSwKK3sieHlwbGV4LW11eCIsICAgICAgICAge05VTEx9LCAxNzMsICJ0Y3AifSwKK3sieHlwbGV4LW11eCIsICAgICAgICAge05VTEx9LCAxNzMsICJ1ZHAifSwKK3sibWFpbHEiLCAgICAgICAgICAgICAge05VTEx9LCAxNzQsICJ0Y3AifSwKK3sibWFpbHEiLCAgICAgICAgICAgICAge05VTEx9LCAxNzQsICJ1ZHAifSwKK3sidm1uZXQiLCAgICAgICAgICAgICAge05VTEx9LCAxNzUsICJ0Y3AifSwKK3sidm1uZXQiLCAgICAgICAgICAgICAge05VTEx9LCAxNzUsICJ1ZHAifSwKK3siZ2VucmFkLW11eCIsICAgICAgICAge05VTEx9LCAxNzYsICJ0Y3AifSwKK3siZ2VucmFkLW11eCIsICAgICAgICAge05VTEx9LCAxNzYsICJ1ZHAifSwKK3sieGRtY3AiLCAgICAgICAgICAgICAge05VTEx9LCAxNzcsICJ0Y3AifSwKK3sieGRtY3AiLCAgICAgICAgICAgICAge05VTEx9LCAxNzcsICJ1ZHAifSwKK3sibmV4dHN0ZXAiLCAgICAgICAgICAge05VTEx9LCAxNzgsICJ0Y3AifSwKK3sibmV4dHN0ZXAiLCAgICAgICAgICAge05VTEx9LCAxNzgsICJ1ZHAifSwKK3siYmdwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNzksICJ0Y3AifSwKK3siYmdwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNzksICJ1ZHAifSwKK3siYmdwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNzksICJzY3RwIn0sCit7InJpcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTgwLCAidGNwIn0sCit7InJpcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTgwLCAidWRwIn0sCit7InVuaWZ5IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTgxLCAidGNwIn0sCit7InVuaWZ5IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTgxLCAidWRwIn0sCit7ImF1ZGl0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTgyLCAidGNwIn0sCit7ImF1ZGl0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTgyLCAidWRwIn0sCit7Im9jYmluZGVyIiwgICAgICAgICAgIHtOVUxMfSwgMTgzLCAidGNwIn0sCit7Im9jYmluZGVyIiwgICAgICAgICAgIHtOVUxMfSwgMTgzLCAidWRwIn0sCit7Im9jc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMTg0LCAidGNwIn0sCit7Im9jc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMTg0LCAidWRwIn0sCit7InJlbW90ZS1raXMiLCAgICAgICAgIHtOVUxMfSwgMTg1LCAidGNwIn0sCit7InJlbW90ZS1raXMiLCAgICAgICAgIHtOVUxMfSwgMTg1LCAidWRwIn0sCit7ImtpcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTg2LCAidGNwIn0sCit7ImtpcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTg2LCAidWRwIn0sCit7ImFjaSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTg3LCAidGNwIn0sCit7ImFjaSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTg3LCAidWRwIn0sCit7Im11bXBzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTg4LCAidGNwIn0sCit7Im11bXBzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTg4LCAidWRwIn0sCit7InFmdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTg5LCAidGNwIn0sCit7InFmdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTg5LCAidWRwIn0sCit7ImdhY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTkwLCAidGNwIn0sCit7ImdhY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTkwLCAidWRwIn0sCit7InByb3NwZXJvIiwgICAgICAgICAgIHtOVUxMfSwgMTkxLCAidGNwIn0sCit7InByb3NwZXJvIiwgICAgICAgICAgIHtOVUxMfSwgMTkxLCAidWRwIn0sCit7Im9zdS1ubXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTkyLCAidGNwIn0sCit7Im9zdS1ubXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTkyLCAidWRwIn0sCit7InNybXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTkzLCAidGNwIn0sCit7InNybXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTkzLCAidWRwIn0sCit7ImlyYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTk0LCAidGNwIn0sCit7ImlyYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTk0LCAidWRwIn0sCit7ImRuNi1ubG0tYXVkIiwgICAgICAgIHtOVUxMfSwgMTk1LCAidGNwIn0sCit7ImRuNi1ubG0tYXVkIiwgICAgICAgIHtOVUxMfSwgMTk1LCAidWRwIn0sCit7ImRuNi1zbW0tcmVkIiwgICAgICAgIHtOVUxMfSwgMTk2LCAidGNwIn0sCit7ImRuNi1zbW0tcmVkIiwgICAgICAgIHtOVUxMfSwgMTk2LCAidWRwIn0sCit7ImRscyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTk3LCAidGNwIn0sCit7ImRscyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTk3LCAidWRwIn0sCit7ImRscy1tb24iLCAgICAgICAgICAgIHtOVUxMfSwgMTk4LCAidGNwIn0sCit7ImRscy1tb24iLCAgICAgICAgICAgIHtOVUxMfSwgMTk4LCAidWRwIn0sCit7InNtdXgiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTk5LCAidGNwIn0sCit7InNtdXgiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTk5LCAidWRwIn0sCit7InNyYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjAwLCAidGNwIn0sCit7InNyYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjAwLCAidWRwIn0sCit7ImF0LXJ0bXAiLCAgICAgICAgICAgIHtOVUxMfSwgMjAxLCAidGNwIn0sCit7ImF0LXJ0bXAiLCAgICAgICAgICAgIHtOVUxMfSwgMjAxLCAidWRwIn0sCit7ImF0LW5icCIsICAgICAgICAgICAgIHtOVUxMfSwgMjAyLCAidGNwIn0sCit7ImF0LW5icCIsICAgICAgICAgICAgIHtOVUxMfSwgMjAyLCAidWRwIn0sCit7ImF0LTMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjAzLCAidGNwIn0sCit7ImF0LTMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjAzLCAidWRwIn0sCit7ImF0LWVjaG8iLCAgICAgICAgICAgIHtOVUxMfSwgMjA0LCAidGNwIn0sCit7ImF0LWVjaG8iLCAgICAgICAgICAgIHtOVUxMfSwgMjA0LCAidWRwIn0sCit7ImF0LTUiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA1LCAidGNwIn0sCit7ImF0LTUiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA1LCAidWRwIn0sCit7ImF0LXppcyIsICAgICAgICAgICAgIHtOVUxMfSwgMjA2LCAidGNwIn0sCit7ImF0LXppcyIsICAgICAgICAgICAgIHtOVUxMfSwgMjA2LCAidWRwIn0sCit7ImF0LTciLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA3LCAidGNwIn0sCit7ImF0LTciLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA3LCAidWRwIn0sCit7ImF0LTgiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA4LCAidGNwIn0sCit7ImF0LTgiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA4LCAidWRwIn0sCit7InFtdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA5LCAidGNwIn0sCit7InFtdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA5LCAidWRwIn0sCit7InozOS41MCIsICAgICAgICAgICAgIHtOVUxMfSwgMjEwLCAidGNwIn0sCit7InozOS41MCIsICAgICAgICAgICAgIHtOVUxMfSwgMjEwLCAidWRwIn0sCit7IjkxNGMvZyIsICAgICAgICAgICAgIHtOVUxMfSwgMjExLCAidGNwIn0sCit7IjkxNGMvZyIsICAgICAgICAgICAgIHtOVUxMfSwgMjExLCAidWRwIn0sCit7ImFuZXQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjEyLCAidGNwIn0sCit7ImFuZXQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjEyLCAidWRwIn0sCit7ImlweCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjEzLCAidGNwIn0sCit7ImlweCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjEzLCAidWRwIn0sCit7InZtcHdzY3MiLCAgICAgICAgICAgIHtOVUxMfSwgMjE0LCAidGNwIn0sCit7InZtcHdzY3MiLCAgICAgICAgICAgIHtOVUxMfSwgMjE0LCAidWRwIn0sCit7InNvZnRwYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjE1LCAidGNwIn0sCit7InNvZnRwYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjE1LCAidWRwIn0sCit7IkNBSWxpYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjE2LCAidGNwIn0sCit7IkNBSWxpYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjE2LCAidWRwIn0sCit7ImRiYXNlIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE3LCAidGNwIn0sCit7ImRiYXNlIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE3LCAidWRwIn0sCit7Im1wcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjE4LCAidGNwIn0sCit7Im1wcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjE4LCAidWRwIn0sCit7InVhcnBzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE5LCAidGNwIn0sCit7InVhcnBzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE5LCAidWRwIn0sCit7ImltYXAzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjIwLCAidGNwIn0sCit7ImltYXAzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjIwLCAidWRwIn0sCit7ImZsbi1zcHgiLCAgICAgICAgICAgIHtOVUxMfSwgMjIxLCAidGNwIn0sCit7ImZsbi1zcHgiLCAgICAgICAgICAgIHtOVUxMfSwgMjIxLCAidWRwIn0sCit7InJzaC1zcHgiLCAgICAgICAgICAgIHtOVUxMfSwgMjIyLCAidGNwIn0sCit7InJzaC1zcHgiLCAgICAgICAgICAgIHtOVUxMfSwgMjIyLCAidWRwIn0sCit7ImNkYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjIzLCAidGNwIn0sCit7ImNkYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjIzLCAidWRwIn0sCit7Im1hc3FkaWFsZXIiLCAgICAgICAgIHtOVUxMfSwgMjI0LCAidGNwIn0sCit7Im1hc3FkaWFsZXIiLCAgICAgICAgIHtOVUxMfSwgMjI0LCAidWRwIn0sCit7ImRpcmVjdCIsICAgICAgICAgICAgIHtOVUxMfSwgMjQyLCAidGNwIn0sCit7ImRpcmVjdCIsICAgICAgICAgICAgIHtOVUxMfSwgMjQyLCAidWRwIn0sCit7InN1ci1tZWFzIiwgICAgICAgICAgIHtOVUxMfSwgMjQzLCAidGNwIn0sCit7InN1ci1tZWFzIiwgICAgICAgICAgIHtOVUxMfSwgMjQzLCAidWRwIn0sCit7ImluYnVzaW5lc3MiLCAgICAgICAgIHtOVUxMfSwgMjQ0LCAidGNwIn0sCit7ImluYnVzaW5lc3MiLCAgICAgICAgIHtOVUxMfSwgMjQ0LCAidWRwIn0sCit7ImxpbmsiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ1LCAidGNwIn0sCit7ImxpbmsiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ1LCAidWRwIn0sCit7ImRzcDMyNzAiLCAgICAgICAgICAgIHtOVUxMfSwgMjQ2LCAidGNwIn0sCit7ImRzcDMyNzAiLCAgICAgICAgICAgIHtOVUxMfSwgMjQ2LCAidWRwIn0sCit7InN1Ym50YmNzdF90ZnRwIiwgICAgIHtOVUxMfSwgMjQ3LCAidGNwIn0sCit7InN1Ym50YmNzdF90ZnRwIiwgICAgIHtOVUxMfSwgMjQ3LCAidWRwIn0sCit7ImJoZmhzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjQ4LCAidGNwIn0sCit7ImJoZmhzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjQ4LCAidWRwIn0sCit7InJhcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU2LCAidGNwIn0sCit7InJhcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU2LCAidWRwIn0sCit7InNldCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU3LCAidGNwIn0sCit7InNldCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU3LCAidWRwIn0sCit7ImVzcm8tZ2VuIiwgICAgICAgICAgIHtOVUxMfSwgMjU5LCAidGNwIn0sCit7ImVzcm8tZ2VuIiwgICAgICAgICAgIHtOVUxMfSwgMjU5LCAidWRwIn0sCit7Im9wZW5wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMjYwLCAidGNwIn0sCit7Im9wZW5wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMjYwLCAidWRwIn0sCit7Im5zaWlvcHMiLCAgICAgICAgICAgIHtOVUxMfSwgMjYxLCAidGNwIn0sCit7Im5zaWlvcHMiLCAgICAgICAgICAgIHtOVUxMfSwgMjYxLCAidWRwIn0sCit7ImFyY2lzZG1zIiwgICAgICAgICAgIHtOVUxMfSwgMjYyLCAidGNwIn0sCit7ImFyY2lzZG1zIiwgICAgICAgICAgIHtOVUxMfSwgMjYyLCAidWRwIn0sCit7ImhkYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjYzLCAidGNwIn0sCit7ImhkYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjYzLCAidWRwIn0sCit7ImJnbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjY0LCAidGNwIn0sCit7ImJnbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjY0LCAidWRwIn0sCit7IngtYm9uZS1jdGwiLCAgICAgICAgIHtOVUxMfSwgMjY1LCAidGNwIn0sCit7IngtYm9uZS1jdGwiLCAgICAgICAgIHtOVUxMfSwgMjY1LCAidWRwIn0sCit7InNzdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjY2LCAidGNwIn0sCit7InNzdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjY2LCAidWRwIn0sCit7InRkLXNlcnZpY2UiLCAgICAgICAgIHtOVUxMfSwgMjY3LCAidGNwIn0sCit7InRkLXNlcnZpY2UiLCAgICAgICAgIHtOVUxMfSwgMjY3LCAidWRwIn0sCit7InRkLXJlcGxpY2EiLCAgICAgICAgIHtOVUxMfSwgMjY4LCAidGNwIn0sCit7InRkLXJlcGxpY2EiLCAgICAgICAgIHtOVUxMfSwgMjY4LCAidWRwIn0sCit7Im1hbmV0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMjY5LCAidGNwIn0sCit7Im1hbmV0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMjY5LCAidWRwIn0sCit7Imdpc3QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjcwLCAidWRwIn0sCit7Imh0dHAtbWdtdCIsICAgICAgICAgIHtOVUxMfSwgMjgwLCAidGNwIn0sCit7Imh0dHAtbWdtdCIsICAgICAgICAgIHtOVUxMfSwgMjgwLCAidWRwIn0sCit7InBlcnNvbmFsLWxpbmsiLCAgICAgIHtOVUxMfSwgMjgxLCAidGNwIn0sCit7InBlcnNvbmFsLWxpbmsiLCAgICAgIHtOVUxMfSwgMjgxLCAidWRwIn0sCit7ImNhYmxlcG9ydC1heCIsICAgICAgIHtOVUxMfSwgMjgyLCAidGNwIn0sCit7ImNhYmxlcG9ydC1heCIsICAgICAgIHtOVUxMfSwgMjgyLCAidWRwIn0sCit7InJlc2NhcCIsICAgICAgICAgICAgIHtOVUxMfSwgMjgzLCAidGNwIn0sCit7InJlc2NhcCIsICAgICAgICAgICAgIHtOVUxMfSwgMjgzLCAidWRwIn0sCit7ImNvcmVyamQiLCAgICAgICAgICAgIHtOVUxMfSwgMjg0LCAidGNwIn0sCit7ImNvcmVyamQiLCAgICAgICAgICAgIHtOVUxMfSwgMjg0LCAidWRwIn0sCit7ImZ4cCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjg2LCAidGNwIn0sCit7ImZ4cCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjg2LCAidWRwIn0sCit7ImstYmxvY2siLCAgICAgICAgICAgIHtOVUxMfSwgMjg3LCAidGNwIn0sCit7ImstYmxvY2siLCAgICAgICAgICAgIHtOVUxMfSwgMjg3LCAidWRwIn0sCit7Im5vdmFzdG9yYmFrY3VwIiwgICAgIHtOVUxMfSwgMzA4LCAidGNwIn0sCit7Im5vdmFzdG9yYmFrY3VwIiwgICAgIHtOVUxMfSwgMzA4LCAidWRwIn0sCit7ImVudHJ1c3R0aW1lIiwgICAgICAgIHtOVUxMfSwgMzA5LCAidGNwIn0sCit7ImVudHJ1c3R0aW1lIiwgICAgICAgIHtOVUxMfSwgMzA5LCAidWRwIn0sCit7ImJobWRzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzEwLCAidGNwIn0sCit7ImJobWRzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzEwLCAidWRwIn0sCit7ImFzaXAtd2ViYWRtaW4iLCAgICAgIHtOVUxMfSwgMzExLCAidGNwIn0sCit7ImFzaXAtd2ViYWRtaW4iLCAgICAgIHtOVUxMfSwgMzExLCAidWRwIn0sCit7InZzbG1wIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzEyLCAidGNwIn0sCit7InZzbG1wIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzEyLCAidWRwIn0sCit7Im1hZ2VudGEtbG9naWMiLCAgICAgIHtOVUxMfSwgMzEzLCAidGNwIn0sCit7Im1hZ2VudGEtbG9naWMiLCAgICAgIHtOVUxMfSwgMzEzLCAidWRwIn0sCit7Im9wYWxpcy1yb2JvdCIsICAgICAgIHtOVUxMfSwgMzE0LCAidGNwIn0sCit7Im9wYWxpcy1yb2JvdCIsICAgICAgIHtOVUxMfSwgMzE0LCAidWRwIn0sCit7ImRwc2kiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzE1LCAidGNwIn0sCit7ImRwc2kiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzE1LCAidWRwIn0sCit7ImRlY2F1dGgiLCAgICAgICAgICAgIHtOVUxMfSwgMzE2LCAidGNwIn0sCit7ImRlY2F1dGgiLCAgICAgICAgICAgIHtOVUxMfSwgMzE2LCAidWRwIn0sCit7Inphbm5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMzE3LCAidGNwIn0sCit7Inphbm5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMzE3LCAidWRwIn0sCit7InBraXgtdGltZXN0YW1wIiwgICAgIHtOVUxMfSwgMzE4LCAidGNwIn0sCit7InBraXgtdGltZXN0YW1wIiwgICAgIHtOVUxMfSwgMzE4LCAidWRwIn0sCit7InB0cC1ldmVudCIsICAgICAgICAgIHtOVUxMfSwgMzE5LCAidGNwIn0sCit7InB0cC1ldmVudCIsICAgICAgICAgIHtOVUxMfSwgMzE5LCAidWRwIn0sCit7InB0cC1nZW5lcmFsIiwgICAgICAgIHtOVUxMfSwgMzIwLCAidGNwIn0sCit7InB0cC1nZW5lcmFsIiwgICAgICAgIHtOVUxMfSwgMzIwLCAidWRwIn0sCit7InBpcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzIxLCAidGNwIn0sCit7InBpcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzIxLCAidWRwIn0sCit7InJ0c3BzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzIyLCAidGNwIn0sCit7InJ0c3BzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzIyLCAidWRwIn0sCit7InRleGFyIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzMzLCAidGNwIn0sCit7InRleGFyIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzMzLCAidWRwIn0sCit7InBkYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ0LCAidGNwIn0sCit7InBkYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ0LCAidWRwIn0sCit7InBhd3NlcnYiLCAgICAgICAgICAgIHtOVUxMfSwgMzQ1LCAidGNwIn0sCit7InBhd3NlcnYiLCAgICAgICAgICAgIHtOVUxMfSwgMzQ1LCAidWRwIn0sCit7InpzZXJ2IiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQ2LCAidGNwIn0sCit7InpzZXJ2IiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQ2LCAidWRwIn0sCit7ImZhdHNlcnYiLCAgICAgICAgICAgIHtOVUxMfSwgMzQ3LCAidGNwIn0sCit7ImZhdHNlcnYiLCAgICAgICAgICAgIHtOVUxMfSwgMzQ3LCAidWRwIn0sCit7ImNzaS1zZ3dwIiwgICAgICAgICAgIHtOVUxMfSwgMzQ4LCAidGNwIn0sCit7ImNzaS1zZ3dwIiwgICAgICAgICAgIHtOVUxMfSwgMzQ4LCAidWRwIn0sCit7Im1mdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ5LCAidGNwIn0sCit7Im1mdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ5LCAidWRwIn0sCit7Im1hdGlwLXR5cGUtYSIsICAgICAgIHtOVUxMfSwgMzUwLCAidGNwIn0sCit7Im1hdGlwLXR5cGUtYSIsICAgICAgIHtOVUxMfSwgMzUwLCAidWRwIn0sCit7Im1hdGlwLXR5cGUtYiIsICAgICAgIHtOVUxMfSwgMzUxLCAidGNwIn0sCit7Im1hdGlwLXR5cGUtYiIsICAgICAgIHtOVUxMfSwgMzUxLCAidWRwIn0sCit7ImJob2V0dHkiLCAgICAgICAgICAgIHtOVUxMfSwgMzUxLCAidGNwIn0sCit7ImJob2V0dHkiLCAgICAgICAgICAgIHtOVUxMfSwgMzUxLCAidWRwIn0sCit7ImR0YWctc3RlLXNiIiwgICAgICAgIHtOVUxMfSwgMzUyLCAidGNwIn0sCit7ImR0YWctc3RlLXNiIiwgICAgICAgIHtOVUxMfSwgMzUyLCAidWRwIn0sCit7ImJob2VkYXA0IiwgICAgICAgICAgIHtOVUxMfSwgMzUyLCAidGNwIn0sCit7ImJob2VkYXA0IiwgICAgICAgICAgIHtOVUxMfSwgMzUyLCAidWRwIn0sCit7Im5kc2F1dGgiLCAgICAgICAgICAgIHtOVUxMfSwgMzUzLCAidGNwIn0sCit7Im5kc2F1dGgiLCAgICAgICAgICAgIHtOVUxMfSwgMzUzLCAidWRwIn0sCit7ImJoNjExIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzU0LCAidGNwIn0sCit7ImJoNjExIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzU0LCAidWRwIn0sCit7ImRhdGV4LWFzbiIsICAgICAgICAgIHtOVUxMfSwgMzU1LCAidGNwIn0sCit7ImRhdGV4LWFzbiIsICAgICAgICAgIHtOVUxMfSwgMzU1LCAidWRwIn0sCit7ImNsb2FudG8tbmV0LTEiLCAgICAgIHtOVUxMfSwgMzU2LCAidGNwIn0sCit7ImNsb2FudG8tbmV0LTEiLCAgICAgIHtOVUxMfSwgMzU2LCAidWRwIn0sCit7ImJoZXZlbnQiLCAgICAgICAgICAgIHtOVUxMfSwgMzU3LCAidGNwIn0sCit7ImJoZXZlbnQiLCAgICAgICAgICAgIHtOVUxMfSwgMzU3LCAidWRwIn0sCit7InNocmlua3dyYXAiLCAgICAgICAgIHtOVUxMfSwgMzU4LCAidGNwIn0sCit7InNocmlua3dyYXAiLCAgICAgICAgIHtOVUxMfSwgMzU4LCAidWRwIn0sCit7Im5zcm1wIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzU5LCAidGNwIn0sCit7Im5zcm1wIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzU5LCAidWRwIn0sCit7InNjb2kyb2RpYWxvZyIsICAgICAgIHtOVUxMfSwgMzYwLCAidGNwIn0sCit7InNjb2kyb2RpYWxvZyIsICAgICAgIHtOVUxMfSwgMzYwLCAidWRwIn0sCit7InNlbWFudGl4IiwgICAgICAgICAgIHtOVUxMfSwgMzYxLCAidGNwIn0sCit7InNlbWFudGl4IiwgICAgICAgICAgIHtOVUxMfSwgMzYxLCAidWRwIn0sCit7InNyc3NlbmQiLCAgICAgICAgICAgIHtOVUxMfSwgMzYyLCAidGNwIn0sCit7InNyc3NlbmQiLCAgICAgICAgICAgIHtOVUxMfSwgMzYyLCAidWRwIn0sCit7InJzdnBfdHVubmVsIiwgICAgICAgIHtOVUxMfSwgMzYzLCAidGNwIn0sCit7InJzdnBfdHVubmVsIiwgICAgICAgIHtOVUxMfSwgMzYzLCAidWRwIn0sCit7ImF1cm9yYS1jbWdyIiwgICAgICAgIHtOVUxMfSwgMzY0LCAidGNwIn0sCit7ImF1cm9yYS1jbWdyIiwgICAgICAgIHtOVUxMfSwgMzY0LCAidWRwIn0sCit7ImR0ayIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzY1LCAidGNwIn0sCit7ImR0ayIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzY1LCAidWRwIn0sCit7Im9kbXIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzY2LCAidGNwIn0sCit7Im9kbXIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzY2LCAidWRwIn0sCit7Im1vcnRnYWdld2FyZSIsICAgICAgIHtOVUxMfSwgMzY3LCAidGNwIn0sCit7Im1vcnRnYWdld2FyZSIsICAgICAgIHtOVUxMfSwgMzY3LCAidWRwIn0sCit7InFiaWtnZHAiLCAgICAgICAgICAgIHtOVUxMfSwgMzY4LCAidGNwIn0sCit7InFiaWtnZHAiLCAgICAgICAgICAgIHtOVUxMfSwgMzY4LCAidWRwIn0sCit7InJwYzJwb3J0bWFwIiwgICAgICAgIHtOVUxMfSwgMzY5LCAidGNwIn0sCit7InJwYzJwb3J0bWFwIiwgICAgICAgIHtOVUxMfSwgMzY5LCAidWRwIn0sCit7ImNvZGFhdXRoMiIsICAgICAgICAgIHtOVUxMfSwgMzcwLCAidGNwIn0sCit7ImNvZGFhdXRoMiIsICAgICAgICAgIHtOVUxMfSwgMzcwLCAidWRwIn0sCit7ImNsZWFyY2FzZSIsICAgICAgICAgIHtOVUxMfSwgMzcxLCAidGNwIn0sCit7ImNsZWFyY2FzZSIsICAgICAgICAgIHtOVUxMfSwgMzcxLCAidWRwIn0sCit7InVsaXN0cHJvYyIsICAgICAgICAgIHtOVUxMfSwgMzcyLCAidGNwIn0sCit7InVsaXN0cHJvYyIsICAgICAgICAgIHtOVUxMfSwgMzcyLCAidWRwIn0sCit7ImxlZ2VudC0xIiwgICAgICAgICAgIHtOVUxMfSwgMzczLCAidGNwIn0sCit7ImxlZ2VudC0xIiwgICAgICAgICAgIHtOVUxMfSwgMzczLCAidWRwIn0sCit7ImxlZ2VudC0yIiwgICAgICAgICAgIHtOVUxMfSwgMzc0LCAidGNwIn0sCit7ImxlZ2VudC0yIiwgICAgICAgICAgIHtOVUxMfSwgMzc0LCAidWRwIn0sCit7Imhhc3NsZSIsICAgICAgICAgICAgIHtOVUxMfSwgMzc1LCAidGNwIn0sCit7Imhhc3NsZSIsICAgICAgICAgICAgIHtOVUxMfSwgMzc1LCAidWRwIn0sCit7Im5pcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzc2LCAidGNwIn0sCit7Im5pcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzc2LCAidWRwIn0sCit7InRuRVRPUyIsICAgICAgICAgICAgIHtOVUxMfSwgMzc3LCAidGNwIn0sCit7InRuRVRPUyIsICAgICAgICAgICAgIHtOVUxMfSwgMzc3LCAidWRwIn0sCit7ImRzRVRPUyIsICAgICAgICAgICAgIHtOVUxMfSwgMzc4LCAidGNwIn0sCit7ImRzRVRPUyIsICAgICAgICAgICAgIHtOVUxMfSwgMzc4LCAidWRwIn0sCit7ImlzOTljIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzc5LCAidGNwIn0sCit7ImlzOTljIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzc5LCAidWRwIn0sCit7ImlzOTlzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzgwLCAidGNwIn0sCit7ImlzOTlzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzgwLCAidWRwIn0sCit7ImhwLWNvbGxlY3RvciIsICAgICAgIHtOVUxMfSwgMzgxLCAidGNwIn0sCit7ImhwLWNvbGxlY3RvciIsICAgICAgIHtOVUxMfSwgMzgxLCAidWRwIn0sCit7ImhwLW1hbmFnZWQtbm9kZSIsICAgIHtOVUxMfSwgMzgyLCAidGNwIn0sCit7ImhwLW1hbmFnZWQtbm9kZSIsICAgIHtOVUxMfSwgMzgyLCAidWRwIn0sCit7ImhwLWFsYXJtLW1nciIsICAgICAgIHtOVUxMfSwgMzgzLCAidGNwIn0sCit7ImhwLWFsYXJtLW1nciIsICAgICAgIHtOVUxMfSwgMzgzLCAidWRwIn0sCit7ImFybnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg0LCAidGNwIn0sCit7ImFybnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg0LCAidWRwIn0sCit7ImlibS1hcHAiLCAgICAgICAgICAgIHtOVUxMfSwgMzg1LCAidGNwIn0sCit7ImlibS1hcHAiLCAgICAgICAgICAgIHtOVUxMfSwgMzg1LCAidWRwIn0sCit7ImFzYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzg2LCAidGNwIn0sCit7ImFzYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzg2LCAidWRwIn0sCit7ImF1cnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg3LCAidGNwIn0sCit7ImF1cnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg3LCAidWRwIn0sCit7InVuaWRhdGEtbGRtIiwgICAgICAgIHtOVUxMfSwgMzg4LCAidGNwIn0sCit7InVuaWRhdGEtbGRtIiwgICAgICAgIHtOVUxMfSwgMzg4LCAidWRwIn0sCit7ImxkYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg5LCAidGNwIn0sCit7ImxkYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg5LCAidWRwIn0sCit7InVpcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzkwLCAidGNwIn0sCit7InVpcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzkwLCAidWRwIn0sCit7InN5bm90aWNzLXJlbGF5IiwgICAgIHtOVUxMfSwgMzkxLCAidGNwIn0sCit7InN5bm90aWNzLXJlbGF5IiwgICAgIHtOVUxMfSwgMzkxLCAidWRwIn0sCit7InN5bm90aWNzLWJyb2tlciIsICAgIHtOVUxMfSwgMzkyLCAidGNwIn0sCit7InN5bm90aWNzLWJyb2tlciIsICAgIHtOVUxMfSwgMzkyLCAidWRwIn0sCit7Im1ldGE1IiwgICAgICAgICAgICAgIHtOVUxMfSwgMzkzLCAidGNwIn0sCit7Im1ldGE1IiwgICAgICAgICAgICAgIHtOVUxMfSwgMzkzLCAidWRwIn0sCit7ImVtYmwtbmR0IiwgICAgICAgICAgIHtOVUxMfSwgMzk0LCAidGNwIn0sCit7ImVtYmwtbmR0IiwgICAgICAgICAgIHtOVUxMfSwgMzk0LCAidWRwIn0sCit7Im5ldGNwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzk1LCAidGNwIn0sCit7Im5ldGNwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzk1LCAidWRwIn0sCit7Im5ldHdhcmUtaXAiLCAgICAgICAgIHtOVUxMfSwgMzk2LCAidGNwIn0sCit7Im5ldHdhcmUtaXAiLCAgICAgICAgIHtOVUxMfSwgMzk2LCAidWRwIn0sCit7Im1wdG4iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzk3LCAidGNwIn0sCit7Im1wdG4iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzk3LCAidWRwIn0sCit7ImtyeXB0b2xhbiIsICAgICAgICAgIHtOVUxMfSwgMzk4LCAidGNwIn0sCit7ImtyeXB0b2xhbiIsICAgICAgICAgIHtOVUxMfSwgMzk4LCAidWRwIn0sCit7Imlzby10c2FwLWMyIiwgICAgICAgIHtOVUxMfSwgMzk5LCAidGNwIn0sCit7Imlzby10c2FwLWMyIiwgICAgICAgIHtOVUxMfSwgMzk5LCAidWRwIn0sCit7Im9zYi1zZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDAwLCAidGNwIn0sCit7Im9zYi1zZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDAwLCAidWRwIn0sCit7InVwcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDAxLCAidGNwIn0sCit7InVwcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDAxLCAidWRwIn0sCit7ImdlbmllIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDAyLCAidGNwIn0sCit7ImdlbmllIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDAyLCAidWRwIn0sCit7ImRlY2FwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDAzLCAidGNwIn0sCit7ImRlY2FwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDAzLCAidWRwIn0sCit7Im5jZWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA0LCAidGNwIn0sCit7Im5jZWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA0LCAidWRwIn0sCit7Im5jbGQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA1LCAidGNwIn0sCit7Im5jbGQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA1LCAidWRwIn0sCit7Imltc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA2LCAidGNwIn0sCit7Imltc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA2LCAidWRwIn0sCit7InRpbWJ1a3R1IiwgICAgICAgICAgIHtOVUxMfSwgNDA3LCAidGNwIn0sCit7InRpbWJ1a3R1IiwgICAgICAgICAgIHtOVUxMfSwgNDA3LCAidWRwIn0sCit7InBybS1zbSIsICAgICAgICAgICAgIHtOVUxMfSwgNDA4LCAidGNwIn0sCit7InBybS1zbSIsICAgICAgICAgICAgIHtOVUxMfSwgNDA4LCAidWRwIn0sCit7InBybS1ubSIsICAgICAgICAgICAgIHtOVUxMfSwgNDA5LCAidGNwIn0sCit7InBybS1ubSIsICAgICAgICAgICAgIHtOVUxMfSwgNDA5LCAidWRwIn0sCit7ImRlY2xhZGVidWciLCAgICAgICAgIHtOVUxMfSwgNDEwLCAidGNwIn0sCit7ImRlY2xhZGVidWciLCAgICAgICAgIHtOVUxMfSwgNDEwLCAidWRwIn0sCit7InJtdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDExLCAidGNwIn0sCit7InJtdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDExLCAidWRwIn0sCit7InN5bm9wdGljcy10cmFwIiwgICAgIHtOVUxMfSwgNDEyLCAidGNwIn0sCit7InN5bm9wdGljcy10cmFwIiwgICAgIHtOVUxMfSwgNDEyLCAidWRwIn0sCit7InNtc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDEzLCAidGNwIn0sCit7InNtc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDEzLCAidWRwIn0sCit7ImluZm9zZWVrIiwgICAgICAgICAgIHtOVUxMfSwgNDE0LCAidGNwIn0sCit7ImluZm9zZWVrIiwgICAgICAgICAgIHtOVUxMfSwgNDE0LCAidWRwIn0sCit7ImJuZXQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDE1LCAidGNwIn0sCit7ImJuZXQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDE1LCAidWRwIn0sCit7InNpbHZlcnBsYXR0ZXIiLCAgICAgIHtOVUxMfSwgNDE2LCAidGNwIn0sCit7InNpbHZlcnBsYXR0ZXIiLCAgICAgIHtOVUxMfSwgNDE2LCAidWRwIn0sCit7Im9ubXV4IiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE3LCAidGNwIn0sCit7Im9ubXV4IiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE3LCAidWRwIn0sCit7Imh5cGVyLWciLCAgICAgICAgICAgIHtOVUxMfSwgNDE4LCAidGNwIn0sCit7Imh5cGVyLWciLCAgICAgICAgICAgIHtOVUxMfSwgNDE4LCAidWRwIn0sCit7ImFyaWVsMSIsICAgICAgICAgICAgIHtOVUxMfSwgNDE5LCAidGNwIn0sCit7ImFyaWVsMSIsICAgICAgICAgICAgIHtOVUxMfSwgNDE5LCAidWRwIn0sCit7InNtcHRlIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDIwLCAidGNwIn0sCit7InNtcHRlIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDIwLCAidWRwIn0sCit7ImFyaWVsMiIsICAgICAgICAgICAgIHtOVUxMfSwgNDIxLCAidGNwIn0sCit7ImFyaWVsMiIsICAgICAgICAgICAgIHtOVUxMfSwgNDIxLCAidWRwIn0sCit7ImFyaWVsMyIsICAgICAgICAgICAgIHtOVUxMfSwgNDIyLCAidGNwIn0sCit7ImFyaWVsMyIsICAgICAgICAgICAgIHtOVUxMfSwgNDIyLCAidWRwIn0sCit7Im9wYy1qb2Itc3RhcnQiLCAgICAgIHtOVUxMfSwgNDIzLCAidGNwIn0sCit7Im9wYy1qb2Itc3RhcnQiLCAgICAgIHtOVUxMfSwgNDIzLCAidWRwIn0sCit7Im9wYy1qb2ItdHJhY2siLCAgICAgIHtOVUxMfSwgNDI0LCAidGNwIn0sCit7Im9wYy1qb2ItdHJhY2siLCAgICAgIHtOVUxMfSwgNDI0LCAidWRwIn0sCit7ImljYWQtZWwiLCAgICAgICAgICAgIHtOVUxMfSwgNDI1LCAidGNwIn0sCit7ImljYWQtZWwiLCAgICAgICAgICAgIHtOVUxMfSwgNDI1LCAidWRwIn0sCit7InNtYXJ0c2RwIiwgICAgICAgICAgIHtOVUxMfSwgNDI2LCAidGNwIn0sCit7InNtYXJ0c2RwIiwgICAgICAgICAgIHtOVUxMfSwgNDI2LCAidWRwIn0sCit7InN2cmxvYyIsICAgICAgICAgICAgIHtOVUxMfSwgNDI3LCAidGNwIn0sCit7InN2cmxvYyIsICAgICAgICAgICAgIHtOVUxMfSwgNDI3LCAidWRwIn0sCit7Im9jc19jbXUiLCAgICAgICAgICAgIHtOVUxMfSwgNDI4LCAidGNwIn0sCit7Im9jc19jbXUiLCAgICAgICAgICAgIHtOVUxMfSwgNDI4LCAidWRwIn0sCit7Im9jc19hbXUiLCAgICAgICAgICAgIHtOVUxMfSwgNDI5LCAidGNwIn0sCit7Im9jc19hbXUiLCAgICAgICAgICAgIHtOVUxMfSwgNDI5LCAidWRwIn0sCit7InV0bXBzZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDMwLCAidGNwIn0sCit7InV0bXBzZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDMwLCAidWRwIn0sCit7InV0bXBjZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDMxLCAidGNwIn0sCit7InV0bXBjZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDMxLCAidWRwIn0sCit7Imlhc2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDMyLCAidGNwIn0sCit7Imlhc2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDMyLCAidWRwIn0sCit7Im5uc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDMzLCAidGNwIn0sCit7Im5uc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDMzLCAidWRwIn0sCit7Im1vYmlsZWlwLWFnZW50IiwgICAgIHtOVUxMfSwgNDM0LCAidGNwIn0sCit7Im1vYmlsZWlwLWFnZW50IiwgICAgIHtOVUxMfSwgNDM0LCAidWRwIn0sCit7Im1vYmlsaXAtbW4iLCAgICAgICAgIHtOVUxMfSwgNDM1LCAidGNwIn0sCit7Im1vYmlsaXAtbW4iLCAgICAgICAgIHtOVUxMfSwgNDM1LCAidWRwIn0sCit7ImRuYS1jbWwiLCAgICAgICAgICAgIHtOVUxMfSwgNDM2LCAidGNwIn0sCit7ImRuYS1jbWwiLCAgICAgICAgICAgIHtOVUxMfSwgNDM2LCAidWRwIn0sCit7ImNvbXNjbSIsICAgICAgICAgICAgIHtOVUxMfSwgNDM3LCAidGNwIn0sCit7ImNvbXNjbSIsICAgICAgICAgICAgIHtOVUxMfSwgNDM3LCAidWRwIn0sCit7ImRzZmd3IiwgICAgICAgICAgICAgIHtOVUxMfSwgNDM4LCAidGNwIn0sCit7ImRzZmd3IiwgICAgICAgICAgICAgIHtOVUxMfSwgNDM4LCAidWRwIn0sCit7ImRhc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDM5LCAidGNwIn0sCit7ImRhc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDM5LCAidWRwIn0sCit7InNnY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDQwLCAidGNwIn0sCit7InNnY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDQwLCAidWRwIn0sCit7ImRlY3Ztcy1zeXNtZ3QiLCAgICAgIHtOVUxMfSwgNDQxLCAidGNwIn0sCit7ImRlY3Ztcy1zeXNtZ3QiLCAgICAgIHtOVUxMfSwgNDQxLCAidWRwIn0sCit7ImN2Y19ob3N0ZCIsICAgICAgICAgIHtOVUxMfSwgNDQyLCAidGNwIn0sCit7ImN2Y19ob3N0ZCIsICAgICAgICAgIHtOVUxMfSwgNDQyLCAidWRwIn0sCit7Imh0dHBzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDQzLCAidGNwIn0sCit7Imh0dHBzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDQzLCAidWRwIn0sCit7Imh0dHBzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDQzLCAic2N0cCJ9LAoreyJzbnBwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ0NCwgInRjcCJ9LAoreyJzbnBwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ0NCwgInVkcCJ9LAoreyJtaWNyb3NvZnQtZHMiLCAgICAgICB7TlVMTH0sIDQ0NSwgInRjcCJ9LAoreyJtaWNyb3NvZnQtZHMiLCAgICAgICB7TlVMTH0sIDQ0NSwgInVkcCJ9LAoreyJkZG0tcmRiIiwgICAgICAgICAgICB7TlVMTH0sIDQ0NiwgInRjcCJ9LAoreyJkZG0tcmRiIiwgICAgICAgICAgICB7TlVMTH0sIDQ0NiwgInVkcCJ9LAoreyJkZG0tZGZtIiwgICAgICAgICAgICB7TlVMTH0sIDQ0NywgInRjcCJ9LAoreyJkZG0tZGZtIiwgICAgICAgICAgICB7TlVMTH0sIDQ0NywgInVkcCJ9LAoreyJkZG0tc3NsIiwgICAgICAgICAgICB7TlVMTH0sIDQ0OCwgInRjcCJ9LAoreyJkZG0tc3NsIiwgICAgICAgICAgICB7TlVMTH0sIDQ0OCwgInVkcCJ9LAoreyJhcy1zZXJ2ZXJtYXAiLCAgICAgICB7TlVMTH0sIDQ0OSwgInRjcCJ9LAoreyJhcy1zZXJ2ZXJtYXAiLCAgICAgICB7TlVMTH0sIDQ0OSwgInVkcCJ9LAoreyJ0c2VydmVyIiwgICAgICAgICAgICB7TlVMTH0sIDQ1MCwgInRjcCJ9LAoreyJ0c2VydmVyIiwgICAgICAgICAgICB7TlVMTH0sIDQ1MCwgInVkcCJ9LAoreyJzZnMtc21wLW5ldCIsICAgICAgICB7TlVMTH0sIDQ1MSwgInRjcCJ9LAoreyJzZnMtc21wLW5ldCIsICAgICAgICB7TlVMTH0sIDQ1MSwgInVkcCJ9LAoreyJzZnMtY29uZmlnIiwgICAgICAgICB7TlVMTH0sIDQ1MiwgInRjcCJ9LAoreyJzZnMtY29uZmlnIiwgICAgICAgICB7TlVMTH0sIDQ1MiwgInVkcCJ9LAoreyJjcmVhdGl2ZXNlcnZlciIsICAgICB7TlVMTH0sIDQ1MywgInRjcCJ9LAoreyJjcmVhdGl2ZXNlcnZlciIsICAgICB7TlVMTH0sIDQ1MywgInVkcCJ9LAoreyJjb250ZW50c2VydmVyIiwgICAgICB7TlVMTH0sIDQ1NCwgInRjcCJ9LAoreyJjb250ZW50c2VydmVyIiwgICAgICB7TlVMTH0sIDQ1NCwgInVkcCJ9LAoreyJjcmVhdGl2ZXBhcnRuciIsICAgICB7TlVMTH0sIDQ1NSwgInRjcCJ9LAoreyJjcmVhdGl2ZXBhcnRuciIsICAgICB7TlVMTH0sIDQ1NSwgInVkcCJ9LAoreyJtYWNvbi10Y3AiLCAgICAgICAgICB7TlVMTH0sIDQ1NiwgInRjcCJ9LAoreyJtYWNvbi11ZHAiLCAgICAgICAgICB7TlVMTH0sIDQ1NiwgInVkcCJ9LAoreyJzY29oZWxwIiwgICAgICAgICAgICB7TlVMTH0sIDQ1NywgInRjcCJ9LAoreyJzY29oZWxwIiwgICAgICAgICAgICB7TlVMTH0sIDQ1NywgInVkcCJ9LAoreyJhcHBsZXF0YyIsICAgICAgICAgICB7TlVMTH0sIDQ1OCwgInRjcCJ9LAoreyJhcHBsZXF0YyIsICAgICAgICAgICB7TlVMTH0sIDQ1OCwgInVkcCJ9LAoreyJhbXByLXJjbWQiLCAgICAgICAgICB7TlVMTH0sIDQ1OSwgInRjcCJ9LAoreyJhbXByLXJjbWQiLCAgICAgICAgICB7TlVMTH0sIDQ1OSwgInVkcCJ9LAoreyJza3JvbmsiLCAgICAgICAgICAgICB7TlVMTH0sIDQ2MCwgInRjcCJ9LAoreyJza3JvbmsiLCAgICAgICAgICAgICB7TlVMTH0sIDQ2MCwgInVkcCJ9LAoreyJkYXRhc3VyZnNydiIsICAgICAgICB7TlVMTH0sIDQ2MSwgInRjcCJ9LAoreyJkYXRhc3VyZnNydiIsICAgICAgICB7TlVMTH0sIDQ2MSwgInVkcCJ9LAoreyJkYXRhc3VyZnNydnNlYyIsICAgICB7TlVMTH0sIDQ2MiwgInRjcCJ9LAoreyJkYXRhc3VyZnNydnNlYyIsICAgICB7TlVMTH0sIDQ2MiwgInVkcCJ9LAoreyJhbHBlcyIsICAgICAgICAgICAgICB7TlVMTH0sIDQ2MywgInRjcCJ9LAoreyJhbHBlcyIsICAgICAgICAgICAgICB7TlVMTH0sIDQ2MywgInVkcCJ9LAoreyJrcGFzc3dkIiwgICAgICAgICAgICB7TlVMTH0sIDQ2NCwgInRjcCJ9LAoreyJrcGFzc3dkIiwgICAgICAgICAgICB7TlVMTH0sIDQ2NCwgInVkcCJ9LAoreyJ1cmQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ2NSwgInRjcCJ9LAoreyJpZ21wdjNsaXRlIiwgICAgICAgICB7TlVMTH0sIDQ2NSwgInVkcCJ9LAoreyJkaWdpdGFsLXZyYyIsICAgICAgICB7TlVMTH0sIDQ2NiwgInRjcCJ9LAoreyJkaWdpdGFsLXZyYyIsICAgICAgICB7TlVMTH0sIDQ2NiwgInVkcCJ9LAoreyJteWxleC1tYXBkIiwgICAgICAgICB7TlVMTH0sIDQ2NywgInRjcCJ9LAoreyJteWxleC1tYXBkIiwgICAgICAgICB7TlVMTH0sIDQ2NywgInVkcCJ9LAoreyJwaG90dXJpcyIsICAgICAgICAgICB7TlVMTH0sIDQ2OCwgInRjcCJ9LAoreyJwaG90dXJpcyIsICAgICAgICAgICB7TlVMTH0sIDQ2OCwgInVkcCJ9LAoreyJyY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ2OSwgInRjcCJ9LAoreyJyY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ2OSwgInVkcCJ9LAoreyJzY3gtcHJveHkiLCAgICAgICAgICB7TlVMTH0sIDQ3MCwgInRjcCJ9LAoreyJzY3gtcHJveHkiLCAgICAgICAgICB7TlVMTH0sIDQ3MCwgInVkcCJ9LAoreyJtb25kZXgiLCAgICAgICAgICAgICB7TlVMTH0sIDQ3MSwgInRjcCJ9LAoreyJtb25kZXgiLCAgICAgICAgICAgICB7TlVMTH0sIDQ3MSwgInVkcCJ9LAoreyJsamstbG9naW4iLCAgICAgICAgICB7TlVMTH0sIDQ3MiwgInRjcCJ9LAoreyJsamstbG9naW4iLCAgICAgICAgICB7TlVMTH0sIDQ3MiwgInVkcCJ9LAoreyJoeWJyaWQtcG9wIiwgICAgICAgICB7TlVMTH0sIDQ3MywgInRjcCJ9LAoreyJoeWJyaWQtcG9wIiwgICAgICAgICB7TlVMTH0sIDQ3MywgInVkcCJ9LAoreyJ0bi10bC13MSIsICAgICAgICAgICB7TlVMTH0sIDQ3NCwgInRjcCJ9LAoreyJ0bi10bC13MiIsICAgICAgICAgICB7TlVMTH0sIDQ3NCwgInVkcCJ9LAoreyJ0Y3BuZXRoYXNwc3J2IiwgICAgICB7TlVMTH0sIDQ3NSwgInRjcCJ9LAoreyJ0Y3BuZXRoYXNwc3J2IiwgICAgICB7TlVMTH0sIDQ3NSwgInVkcCJ9LAoreyJ0bi10bC1mZDEiLCAgICAgICAgICB7TlVMTH0sIDQ3NiwgInRjcCJ9LAoreyJ0bi10bC1mZDEiLCAgICAgICAgICB7TlVMTH0sIDQ3NiwgInVkcCJ9LAoreyJzczducyIsICAgICAgICAgICAgICB7TlVMTH0sIDQ3NywgInRjcCJ9LAoreyJzczducyIsICAgICAgICAgICAgICB7TlVMTH0sIDQ3NywgInVkcCJ9LAoreyJzcHNjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ3OCwgInRjcCJ9LAoreyJzcHNjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ3OCwgInVkcCJ9LAoreyJpYWZzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDQ3OSwgInRjcCJ9LAoreyJpYWZzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDQ3OSwgInVkcCJ9LAoreyJpYWZkYmFzZSIsICAgICAgICAgICB7TlVMTH0sIDQ4MCwgInRjcCJ9LAoreyJpYWZkYmFzZSIsICAgICAgICAgICB7TlVMTH0sIDQ4MCwgInVkcCJ9LAoreyJwaCIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDQ4MSwgInRjcCJ9LAoreyJwaCIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDQ4MSwgInVkcCJ9LAoreyJiZ3MtbnNpIiwgICAgICAgICAgICB7TlVMTH0sIDQ4MiwgInRjcCJ9LAoreyJiZ3MtbnNpIiwgICAgICAgICAgICB7TlVMTH0sIDQ4MiwgInVkcCJ9LAoreyJ1bHBuZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDQ4MywgInRjcCJ9LAoreyJ1bHBuZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDQ4MywgInVkcCJ9LAoreyJpbnRlZ3JhLXNtZSIsICAgICAgICB7TlVMTH0sIDQ4NCwgInRjcCJ9LAoreyJpbnRlZ3JhLXNtZSIsICAgICAgICB7TlVMTH0sIDQ4NCwgInVkcCJ9LAoreyJwb3dlcmJ1cnN0IiwgICAgICAgICB7TlVMTH0sIDQ4NSwgInRjcCJ9LAoreyJwb3dlcmJ1cnN0IiwgICAgICAgICB7TlVMTH0sIDQ4NSwgInVkcCJ9LAoreyJhdmlhbiIsICAgICAgICAgICAgICB7TlVMTH0sIDQ4NiwgInRjcCJ9LAoreyJhdmlhbiIsICAgICAgICAgICAgICB7TlVMTH0sIDQ4NiwgInVkcCJ9LAoreyJzYWZ0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ4NywgInRjcCJ9LAoreyJzYWZ0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ4NywgInVkcCJ9LAoreyJnc3MtaHR0cCIsICAgICAgICAgICB7TlVMTH0sIDQ4OCwgInRjcCJ9LAoreyJnc3MtaHR0cCIsICAgICAgICAgICB7TlVMTH0sIDQ4OCwgInVkcCJ9LAoreyJuZXN0LXByb3RvY29sIiwgICAgICB7TlVMTH0sIDQ4OSwgInRjcCJ9LAoreyJuZXN0LXByb3RvY29sIiwgICAgICB7TlVMTH0sIDQ4OSwgInVkcCJ9LAoreyJtaWNvbS1wZnMiLCAgICAgICAgICB7TlVMTH0sIDQ5MCwgInRjcCJ9LAoreyJtaWNvbS1wZnMiLCAgICAgICAgICB7TlVMTH0sIDQ5MCwgInVkcCJ9LAoreyJnby1sb2dpbiIsICAgICAgICAgICB7TlVMTH0sIDQ5MSwgInRjcCJ9LAoreyJnby1sb2dpbiIsICAgICAgICAgICB7TlVMTH0sIDQ5MSwgInVkcCJ9LAoreyJ0aWNmLTEiLCAgICAgICAgICAgICB7TlVMTH0sIDQ5MiwgInRjcCJ9LAoreyJ0aWNmLTEiLCAgICAgICAgICAgICB7TlVMTH0sIDQ5MiwgInVkcCJ9LAoreyJ0aWNmLTIiLCAgICAgICAgICAgICB7TlVMTH0sIDQ5MywgInRjcCJ9LAoreyJ0aWNmLTIiLCAgICAgICAgICAgICB7TlVMTH0sIDQ5MywgInVkcCJ9LAoreyJwb3YtcmF5IiwgICAgICAgICAgICB7TlVMTH0sIDQ5NCwgInRjcCJ9LAoreyJwb3YtcmF5IiwgICAgICAgICAgICB7TlVMTH0sIDQ5NCwgInVkcCJ9LAoreyJpbnRlY291cmllciIsICAgICAgICB7TlVMTH0sIDQ5NSwgInRjcCJ9LAoreyJpbnRlY291cmllciIsICAgICAgICB7TlVMTH0sIDQ5NSwgInVkcCJ9LAoreyJwaW0tcnAtZGlzYyIsICAgICAgICB7TlVMTH0sIDQ5NiwgInRjcCJ9LAoreyJwaW0tcnAtZGlzYyIsICAgICAgICB7TlVMTH0sIDQ5NiwgInVkcCJ9LAoreyJkYW50eiIsICAgICAgICAgICAgICB7TlVMTH0sIDQ5NywgInRjcCJ9LAoreyJkYW50eiIsICAgICAgICAgICAgICB7TlVMTH0sIDQ5NywgInVkcCJ9LAoreyJzaWFtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ5OCwgInRjcCJ9LAoreyJzaWFtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ5OCwgInVkcCJ9LAoreyJpc28taWxsIiwgICAgICAgICAgICB7TlVMTH0sIDQ5OSwgInRjcCJ9LAoreyJpc28taWxsIiwgICAgICAgICAgICB7TlVMTH0sIDQ5OSwgInVkcCJ9LAoreyJpc2FrbXAiLCAgICAgICAgICAgICB7TlVMTH0sIDUwMCwgInRjcCJ9LAoreyJpc2FrbXAiLCAgICAgICAgICAgICB7TlVMTH0sIDUwMCwgInVkcCJ9LAoreyJzdG1mIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwMSwgInRjcCJ9LAoreyJzdG1mIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwMSwgInVkcCJ9LAoreyJhc2EtYXBwbC1wcm90byIsICAgICB7TlVMTH0sIDUwMiwgInRjcCJ9LAoreyJhc2EtYXBwbC1wcm90byIsICAgICB7TlVMTH0sIDUwMiwgInVkcCJ9LAoreyJpbnRyaW5zYSIsICAgICAgICAgICB7TlVMTH0sIDUwMywgInRjcCJ9LAoreyJpbnRyaW5zYSIsICAgICAgICAgICB7TlVMTH0sIDUwMywgInVkcCJ9LAoreyJjaXRhZGVsIiwgICAgICAgICAgICB7TlVMTH0sIDUwNCwgInRjcCJ9LAoreyJjaXRhZGVsIiwgICAgICAgICAgICB7TlVMTH0sIDUwNCwgInVkcCJ9LAoreyJtYWlsYm94LWxtIiwgICAgICAgICB7TlVMTH0sIDUwNSwgInRjcCJ9LAoreyJtYWlsYm94LWxtIiwgICAgICAgICB7TlVMTH0sIDUwNSwgInVkcCJ9LAoreyJvaGltc3J2IiwgICAgICAgICAgICB7TlVMTH0sIDUwNiwgInRjcCJ9LAoreyJvaGltc3J2IiwgICAgICAgICAgICB7TlVMTH0sIDUwNiwgInVkcCJ9LAoreyJjcnMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUwNywgInRjcCJ9LAoreyJjcnMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUwNywgInVkcCJ9LAoreyJ4dnR0cCIsICAgICAgICAgICAgICB7TlVMTH0sIDUwOCwgInRjcCJ9LAoreyJ4dnR0cCIsICAgICAgICAgICAgICB7TlVMTH0sIDUwOCwgInVkcCJ9LAoreyJzbmFyZSIsICAgICAgICAgICAgICB7TlVMTH0sIDUwOSwgInRjcCJ9LAoreyJzbmFyZSIsICAgICAgICAgICAgICB7TlVMTH0sIDUwOSwgInVkcCJ9LAoreyJmY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUxMCwgInRjcCJ9LAoreyJmY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUxMCwgInVkcCJ9LAoreyJwYXNzZ28iLCAgICAgICAgICAgICB7TlVMTH0sIDUxMSwgInRjcCJ9LAoreyJwYXNzZ28iLCAgICAgICAgICAgICB7TlVMTH0sIDUxMSwgInVkcCJ9LAoreyJleGVjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUxMiwgInRjcCJ9LAoreyJjb21zYXQiLCAgICAgICAgICAgICB7TlVMTH0sIDUxMiwgInVkcCJ9LAoreyJiaWZmIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUxMiwgInVkcCJ9LAoreyJsb2dpbiIsICAgICAgICAgICAgICB7TlVMTH0sIDUxMywgInRjcCJ9LAoreyJ3aG8iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUxMywgInVkcCJ9LAoreyJzaGVsbCIsICAgICAgICAgICAgICB7TlVMTH0sIDUxNCwgInRjcCJ9LAoreyJzeXNsb2ciLCAgICAgICAgICAgICB7TlVMTH0sIDUxNCwgInVkcCJ9LAoreyJwcmludGVyIiwgICAgICAgICAgICB7TlVMTH0sIDUxNSwgInRjcCJ9LAoreyJwcmludGVyIiwgICAgICAgICAgICB7TlVMTH0sIDUxNSwgInVkcCJ9LAoreyJ2aWRlb3RleCIsICAgICAgICAgICB7TlVMTH0sIDUxNiwgInRjcCJ9LAoreyJ2aWRlb3RleCIsICAgICAgICAgICB7TlVMTH0sIDUxNiwgInVkcCJ9LAoreyJ0YWxrIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUxNywgInRjcCJ9LAoreyJ0YWxrIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUxNywgInVkcCJ9LAoreyJudGFsayIsICAgICAgICAgICAgICB7TlVMTH0sIDUxOCwgInRjcCJ9LAoreyJudGFsayIsICAgICAgICAgICAgICB7TlVMTH0sIDUxOCwgInVkcCJ9LAoreyJ1dGltZSIsICAgICAgICAgICAgICB7TlVMTH0sIDUxOSwgInRjcCJ9LAoreyJ1dGltZSIsICAgICAgICAgICAgICB7TlVMTH0sIDUxOSwgInVkcCJ9LAoreyJlZnMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyMCwgInRjcCJ9LAoreyJyb3V0ZXIiLCAgICAgICAgICAgICB7TlVMTH0sIDUyMCwgInVkcCJ9LAoreyJyaXBuZyIsICAgICAgICAgICAgICB7TlVMTH0sIDUyMSwgInRjcCJ9LAoreyJyaXBuZyIsICAgICAgICAgICAgICB7TlVMTH0sIDUyMSwgInVkcCJ9LAoreyJ1bHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyMiwgInRjcCJ9LAoreyJ1bHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyMiwgInVkcCJ9LAoreyJpYm0tZGIyIiwgICAgICAgICAgICB7TlVMTH0sIDUyMywgInRjcCJ9LAoreyJpYm0tZGIyIiwgICAgICAgICAgICB7TlVMTH0sIDUyMywgInVkcCJ9LAoreyJuY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyNCwgInRjcCJ9LAoreyJuY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyNCwgInVkcCJ9LAoreyJ0aW1lZCIsICAgICAgICAgICAgICB7TlVMTH0sIDUyNSwgInRjcCJ9LAoreyJ0aW1lZCIsICAgICAgICAgICAgICB7TlVMTH0sIDUyNSwgInVkcCJ9LAoreyJ0ZW1wbyIsICAgICAgICAgICAgICB7TlVMTH0sIDUyNiwgInRjcCJ9LAoreyJ0ZW1wbyIsICAgICAgICAgICAgICB7TlVMTH0sIDUyNiwgInVkcCJ9LAoreyJzdHgiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyNywgInRjcCJ9LAoreyJzdHgiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyNywgInVkcCJ9LAoreyJjdXN0aXgiLCAgICAgICAgICAgICB7TlVMTH0sIDUyOCwgInRjcCJ9LAoreyJjdXN0aXgiLCAgICAgICAgICAgICB7TlVMTH0sIDUyOCwgInVkcCJ9LAoreyJpcmMtc2VydiIsICAgICAgICAgICB7TlVMTH0sIDUyOSwgInRjcCJ9LAoreyJpcmMtc2VydiIsICAgICAgICAgICB7TlVMTH0sIDUyOSwgInVkcCJ9LAoreyJjb3VyaWVyIiwgICAgICAgICAgICB7TlVMTH0sIDUzMCwgInRjcCJ9LAoreyJjb3VyaWVyIiwgICAgICAgICAgICB7TlVMTH0sIDUzMCwgInVkcCJ9LAoreyJjb25mZXJlbmNlIiwgICAgICAgICB7TlVMTH0sIDUzMSwgInRjcCJ9LAoreyJjb25mZXJlbmNlIiwgICAgICAgICB7TlVMTH0sIDUzMSwgInVkcCJ9LAoreyJuZXRuZXdzIiwgICAgICAgICAgICB7TlVMTH0sIDUzMiwgInRjcCJ9LAoreyJuZXRuZXdzIiwgICAgICAgICAgICB7TlVMTH0sIDUzMiwgInVkcCJ9LAoreyJuZXR3YWxsIiwgICAgICAgICAgICB7TlVMTH0sIDUzMywgInRjcCJ9LAoreyJuZXR3YWxsIiwgICAgICAgICAgICB7TlVMTH0sIDUzMywgInVkcCJ9LAoreyJ3aW5kcmVhbSIsICAgICAgICAgICB7TlVMTH0sIDUzNCwgInRjcCJ9LAoreyJ3aW5kcmVhbSIsICAgICAgICAgICB7TlVMTH0sIDUzNCwgInVkcCJ9LAoreyJpaW9wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUzNSwgInRjcCJ9LAoreyJpaW9wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUzNSwgInVkcCJ9LAoreyJvcGFsaXMtcmR2IiwgICAgICAgICB7TlVMTH0sIDUzNiwgInRjcCJ9LAoreyJvcGFsaXMtcmR2IiwgICAgICAgICB7TlVMTH0sIDUzNiwgInVkcCJ9LAoreyJubXNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUzNywgInRjcCJ9LAoreyJubXNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUzNywgInVkcCJ9LAoreyJnZG9tYXAiLCAgICAgICAgICAgICB7TlVMTH0sIDUzOCwgInRjcCJ9LAoreyJnZG9tYXAiLCAgICAgICAgICAgICB7TlVMTH0sIDUzOCwgInVkcCJ9LAoreyJhcGVydHVzLWxkcCIsICAgICAgICB7TlVMTH0sIDUzOSwgInRjcCJ9LAoreyJhcGVydHVzLWxkcCIsICAgICAgICB7TlVMTH0sIDUzOSwgInVkcCJ9LAoreyJ1dWNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU0MCwgInRjcCJ9LAoreyJ1dWNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU0MCwgInVkcCJ9LAoreyJ1dWNwLXJsb2dpbiIsICAgICAgICB7TlVMTH0sIDU0MSwgInRjcCJ9LAoreyJ1dWNwLXJsb2dpbiIsICAgICAgICB7TlVMTH0sIDU0MSwgInVkcCJ9LAoreyJjb21tZXJjZSIsICAgICAgICAgICB7TlVMTH0sIDU0MiwgInRjcCJ9LAoreyJjb21tZXJjZSIsICAgICAgICAgICB7TlVMTH0sIDU0MiwgInVkcCJ9LAoreyJrbG9naW4iLCAgICAgICAgICAgICB7TlVMTH0sIDU0MywgInRjcCJ9LAoreyJrbG9naW4iLCAgICAgICAgICAgICB7TlVMTH0sIDU0MywgInVkcCJ9LAoreyJrc2hlbGwiLCAgICAgICAgICAgICB7TlVMTH0sIDU0NCwgInRjcCJ9LAoreyJrc2hlbGwiLCAgICAgICAgICAgICB7TlVMTH0sIDU0NCwgInVkcCJ9LAoreyJhcHBsZXF0Y3NydnIiLCAgICAgICB7TlVMTH0sIDU0NSwgInRjcCJ9LAoreyJhcHBsZXF0Y3NydnIiLCAgICAgICB7TlVMTH0sIDU0NSwgInVkcCJ9LAoreyJkaGNwdjYtY2xpZW50IiwgICAgICB7TlVMTH0sIDU0NiwgInRjcCJ9LAoreyJkaGNwdjYtY2xpZW50IiwgICAgICB7TlVMTH0sIDU0NiwgInVkcCJ9LAoreyJkaGNwdjYtc2VydmVyIiwgICAgICB7TlVMTH0sIDU0NywgInRjcCJ9LAoreyJkaGNwdjYtc2VydmVyIiwgICAgICB7TlVMTH0sIDU0NywgInVkcCJ9LAoreyJhZnBvdmVydGNwIiwgICAgICAgICB7TlVMTH0sIDU0OCwgInRjcCJ9LAoreyJhZnBvdmVydGNwIiwgICAgICAgICB7TlVMTH0sIDU0OCwgInVkcCJ9LAoreyJpZGZwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU0OSwgInRjcCJ9LAoreyJpZGZwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU0OSwgInVkcCJ9LAoreyJuZXctcndobyIsICAgICAgICAgICB7TlVMTH0sIDU1MCwgInRjcCJ9LAoreyJuZXctcndobyIsICAgICAgICAgICB7TlVMTH0sIDU1MCwgInVkcCJ9LAoreyJjeWJlcmNhc2giLCAgICAgICAgICB7TlVMTH0sIDU1MSwgInRjcCJ9LAoreyJjeWJlcmNhc2giLCAgICAgICAgICB7TlVMTH0sIDU1MSwgInVkcCJ9LAoreyJkZXZzaHItbnRzIiwgICAgICAgICB7TlVMTH0sIDU1MiwgInRjcCJ9LAoreyJkZXZzaHItbnRzIiwgICAgICAgICB7TlVMTH0sIDU1MiwgInVkcCJ9LAoreyJwaXJwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU1MywgInRjcCJ9LAoreyJwaXJwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU1MywgInVkcCJ9LAoreyJydHNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU1NCwgInRjcCJ9LAoreyJydHNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU1NCwgInVkcCJ9LAoreyJkc2YiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU1NSwgInRjcCJ9LAoreyJkc2YiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU1NSwgInVkcCJ9LAoreyJyZW1vdGVmcyIsICAgICAgICAgICB7TlVMTH0sIDU1NiwgInRjcCJ9LAoreyJyZW1vdGVmcyIsICAgICAgICAgICB7TlVMTH0sIDU1NiwgInVkcCJ9LAoreyJvcGVudm1zLXN5c2lwYyIsICAgICB7TlVMTH0sIDU1NywgInRjcCJ9LAoreyJvcGVudm1zLXN5c2lwYyIsICAgICB7TlVMTH0sIDU1NywgInVkcCJ9LAoreyJzZG5za21wIiwgICAgICAgICAgICB7TlVMTH0sIDU1OCwgInRjcCJ9LAoreyJzZG5za21wIiwgICAgICAgICAgICB7TlVMTH0sIDU1OCwgInVkcCJ9LAoreyJ0ZWVkdGFwIiwgICAgICAgICAgICB7TlVMTH0sIDU1OSwgInRjcCJ9LAoreyJ0ZWVkdGFwIiwgICAgICAgICAgICB7TlVMTH0sIDU1OSwgInVkcCJ9LAoreyJybW9uaXRvciIsICAgICAgICAgICB7TlVMTH0sIDU2MCwgInRjcCJ9LAoreyJybW9uaXRvciIsICAgICAgICAgICB7TlVMTH0sIDU2MCwgInVkcCJ9LAoreyJtb25pdG9yIiwgICAgICAgICAgICB7TlVMTH0sIDU2MSwgInRjcCJ9LAoreyJtb25pdG9yIiwgICAgICAgICAgICB7TlVMTH0sIDU2MSwgInVkcCJ9LAoreyJjaHNoZWxsIiwgICAgICAgICAgICB7TlVMTH0sIDU2MiwgInRjcCJ9LAoreyJjaHNoZWxsIiwgICAgICAgICAgICB7TlVMTH0sIDU2MiwgInVkcCJ9LAoreyJubnRwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDU2MywgInRjcCJ9LAoreyJubnRwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDU2MywgInVkcCJ9LAoreyI5cGZzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU2NCwgInRjcCJ9LAoreyI5cGZzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU2NCwgInVkcCJ9LAoreyJ3aG9hbWkiLCAgICAgICAgICAgICB7TlVMTH0sIDU2NSwgInRjcCJ9LAoreyJ3aG9hbWkiLCAgICAgICAgICAgICB7TlVMTH0sIDU2NSwgInVkcCJ9LAoreyJzdHJlZXR0YWxrIiwgICAgICAgICB7TlVMTH0sIDU2NiwgInRjcCJ9LAoreyJzdHJlZXR0YWxrIiwgICAgICAgICB7TlVMTH0sIDU2NiwgInVkcCJ9LAoreyJiYW55YW4tcnBjIiwgICAgICAgICB7TlVMTH0sIDU2NywgInRjcCJ9LAoreyJiYW55YW4tcnBjIiwgICAgICAgICB7TlVMTH0sIDU2NywgInVkcCJ9LAoreyJtcy1zaHV0dGxlIiwgICAgICAgICB7TlVMTH0sIDU2OCwgInRjcCJ9LAoreyJtcy1zaHV0dGxlIiwgICAgICAgICB7TlVMTH0sIDU2OCwgInVkcCJ9LAoreyJtcy1yb21lIiwgICAgICAgICAgICB7TlVMTH0sIDU2OSwgInRjcCJ9LAoreyJtcy1yb21lIiwgICAgICAgICAgICB7TlVMTH0sIDU2OSwgInVkcCJ9LAoreyJtZXRlciIsICAgICAgICAgICAgICB7TlVMTH0sIDU3MCwgInRjcCJ9LAoreyJtZXRlciIsICAgICAgICAgICAgICB7TlVMTH0sIDU3MCwgInVkcCJ9LAoreyJtZXRlciIsICAgICAgICAgICAgICB7TlVMTH0sIDU3MSwgInRjcCJ9LAoreyJtZXRlciIsICAgICAgICAgICAgICB7TlVMTH0sIDU3MSwgInVkcCJ9LAoreyJzb25hciIsICAgICAgICAgICAgICB7TlVMTH0sIDU3MiwgInRjcCJ9LAoreyJzb25hciIsICAgICAgICAgICAgICB7TlVMTH0sIDU3MiwgInVkcCJ9LAoreyJiYW55YW4tdmlwIiwgICAgICAgICB7TlVMTH0sIDU3MywgInRjcCJ9LAoreyJiYW55YW4tdmlwIiwgICAgICAgICB7TlVMTH0sIDU3MywgInVkcCJ9LAoreyJmdHAtYWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDU3NCwgInRjcCJ9LAoreyJmdHAtYWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDU3NCwgInVkcCJ9LAoreyJ2ZW1taSIsICAgICAgICAgICAgICB7TlVMTH0sIDU3NSwgInRjcCJ9LAoreyJ2ZW1taSIsICAgICAgICAgICAgICB7TlVMTH0sIDU3NSwgInVkcCJ9LAoreyJpcGNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3NiwgInRjcCJ9LAoreyJpcGNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3NiwgInVkcCJ9LAoreyJ2bmFzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3NywgInRjcCJ9LAoreyJ2bmFzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3NywgInVkcCJ9LAoreyJpcGRkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3OCwgInRjcCJ9LAoreyJpcGRkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3OCwgInVkcCJ9LAoreyJkZWNic3J2IiwgICAgICAgICAgICB7TlVMTH0sIDU3OSwgInRjcCJ9LAoreyJkZWNic3J2IiwgICAgICAgICAgICB7TlVMTH0sIDU3OSwgInVkcCJ9LAoreyJzbnRwLWhlYXJ0YmVhdCIsICAgICB7TlVMTH0sIDU4MCwgInRjcCJ9LAoreyJzbnRwLWhlYXJ0YmVhdCIsICAgICB7TlVMTH0sIDU4MCwgInVkcCJ9LAoreyJiZHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU4MSwgInRjcCJ9LAoreyJiZHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU4MSwgInVkcCJ9LAoreyJzY2Mtc2VjdXJpdHkiLCAgICAgICB7TlVMTH0sIDU4MiwgInRjcCJ9LAoreyJzY2Mtc2VjdXJpdHkiLCAgICAgICB7TlVMTH0sIDU4MiwgInVkcCJ9LAoreyJwaGlsaXBzLXZjIiwgICAgICAgICB7TlVMTH0sIDU4MywgInRjcCJ9LAoreyJwaGlsaXBzLXZjIiwgICAgICAgICB7TlVMTH0sIDU4MywgInVkcCJ9LAoreyJrZXlzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDU4NCwgInRjcCJ9LAoreyJrZXlzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDU4NCwgInVkcCJ9LAoreyJwYXNzd29yZC1jaGciLCAgICAgICB7TlVMTH0sIDU4NiwgInRjcCJ9LAoreyJwYXNzd29yZC1jaGciLCAgICAgICB7TlVMTH0sIDU4NiwgInVkcCJ9LAoreyJzdWJtaXNzaW9uIiwgICAgICAgICB7TlVMTH0sIDU4NywgInRjcCJ9LAoreyJzdWJtaXNzaW9uIiwgICAgICAgICB7TlVMTH0sIDU4NywgInVkcCJ9LAoreyJjYWwiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU4OCwgInRjcCJ9LAoreyJjYWwiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU4OCwgInVkcCJ9LAoreyJleWVsaW5rIiwgICAgICAgICAgICB7TlVMTH0sIDU4OSwgInRjcCJ9LAoreyJleWVsaW5rIiwgICAgICAgICAgICB7TlVMTH0sIDU4OSwgInVkcCJ9LAoreyJ0bnMtY21sIiwgICAgICAgICAgICB7TlVMTH0sIDU5MCwgInRjcCJ9LAoreyJ0bnMtY21sIiwgICAgICAgICAgICB7TlVMTH0sIDU5MCwgInVkcCJ9LAoreyJodHRwLWFsdCIsICAgICAgICAgICB7TlVMTH0sIDU5MSwgInRjcCJ9LAoreyJodHRwLWFsdCIsICAgICAgICAgICB7TlVMTH0sIDU5MSwgInVkcCJ9LAoreyJldWRvcmEtc2V0IiwgICAgICAgICB7TlVMTH0sIDU5MiwgInRjcCJ9LAoreyJldWRvcmEtc2V0IiwgICAgICAgICB7TlVMTH0sIDU5MiwgInVkcCJ9LAoreyJodHRwLXJwYy1lcG1hcCIsICAgICB7TlVMTH0sIDU5MywgInRjcCJ9LAoreyJodHRwLXJwYy1lcG1hcCIsICAgICB7TlVMTH0sIDU5MywgInVkcCJ9LAoreyJ0cGlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU5NCwgInRjcCJ9LAoreyJ0cGlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU5NCwgInVkcCJ9LAoreyJjYWItcHJvdG9jb2wiLCAgICAgICB7TlVMTH0sIDU5NSwgInRjcCJ9LAoreyJjYWItcHJvdG9jb2wiLCAgICAgICB7TlVMTH0sIDU5NSwgInVkcCJ9LAoreyJzbXNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU5NiwgInRjcCJ9LAoreyJzbXNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU5NiwgInVkcCJ9LAoreyJwdGNuYW1lc2VydmljZSIsICAgICB7TlVMTH0sIDU5NywgInRjcCJ9LAoreyJwdGNuYW1lc2VydmljZSIsICAgICB7TlVMTH0sIDU5NywgInVkcCJ9LAoreyJzY28td2Vic3J2cm1nMyIsICAgICB7TlVMTH0sIDU5OCwgInRjcCJ9LAoreyJzY28td2Vic3J2cm1nMyIsICAgICB7TlVMTH0sIDU5OCwgInVkcCJ9LAoreyJhY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU5OSwgInRjcCJ9LAoreyJhY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU5OSwgInVkcCJ9LAoreyJpcGNzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDYwMCwgInRjcCJ9LAoreyJpcGNzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDYwMCwgInVkcCJ9LAoreyJzeXNsb2ctY29ubiIsICAgICAgICB7TlVMTH0sIDYwMSwgInRjcCJ9LAoreyJzeXNsb2ctY29ubiIsICAgICAgICB7TlVMTH0sIDYwMSwgInVkcCJ9LAoreyJ4bWxycGMtYmVlcCIsICAgICAgICB7TlVMTH0sIDYwMiwgInRjcCJ9LAoreyJ4bWxycGMtYmVlcCIsICAgICAgICB7TlVMTH0sIDYwMiwgInVkcCJ9LAoreyJpZHhwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYwMywgInRjcCJ9LAoreyJpZHhwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYwMywgInVkcCJ9LAoreyJ0dW5uZWwiLCAgICAgICAgICAgICB7TlVMTH0sIDYwNCwgInRjcCJ9LAoreyJ0dW5uZWwiLCAgICAgICAgICAgICB7TlVMTH0sIDYwNCwgInVkcCJ9LAoreyJzb2FwLWJlZXAiLCAgICAgICAgICB7TlVMTH0sIDYwNSwgInRjcCJ9LAoreyJzb2FwLWJlZXAiLCAgICAgICAgICB7TlVMTH0sIDYwNSwgInVkcCJ9LAoreyJ1cm0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYwNiwgInRjcCJ9LAoreyJ1cm0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYwNiwgInVkcCJ9LAoreyJucXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYwNywgInRjcCJ9LAoreyJucXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYwNywgInVkcCJ9LAoreyJzaWZ0LXVmdCIsICAgICAgICAgICB7TlVMTH0sIDYwOCwgInRjcCJ9LAoreyJzaWZ0LXVmdCIsICAgICAgICAgICB7TlVMTH0sIDYwOCwgInVkcCJ9LAoreyJucG1wLXRyYXAiLCAgICAgICAgICB7TlVMTH0sIDYwOSwgInRjcCJ9LAoreyJucG1wLXRyYXAiLCAgICAgICAgICB7TlVMTH0sIDYwOSwgInVkcCJ9LAoreyJucG1wLWxvY2FsIiwgICAgICAgICB7TlVMTH0sIDYxMCwgInRjcCJ9LAoreyJucG1wLWxvY2FsIiwgICAgICAgICB7TlVMTH0sIDYxMCwgInVkcCJ9LAoreyJucG1wLWd1aSIsICAgICAgICAgICB7TlVMTH0sIDYxMSwgInRjcCJ9LAoreyJucG1wLWd1aSIsICAgICAgICAgICB7TlVMTH0sIDYxMSwgInVkcCJ9LAoreyJobW1wLWluZCIsICAgICAgICAgICB7TlVMTH0sIDYxMiwgInRjcCJ9LAoreyJobW1wLWluZCIsICAgICAgICAgICB7TlVMTH0sIDYxMiwgInVkcCJ9LAoreyJobW1wLW9wIiwgICAgICAgICAgICB7TlVMTH0sIDYxMywgInRjcCJ9LAoreyJobW1wLW9wIiwgICAgICAgICAgICB7TlVMTH0sIDYxMywgInVkcCJ9LAoreyJzc2hlbGwiLCAgICAgICAgICAgICB7TlVMTH0sIDYxNCwgInRjcCJ9LAoreyJzc2hlbGwiLCAgICAgICAgICAgICB7TlVMTH0sIDYxNCwgInVkcCJ9LAoreyJzY28taW5ldG1nciIsICAgICAgICB7TlVMTH0sIDYxNSwgInRjcCJ9LAoreyJzY28taW5ldG1nciIsICAgICAgICB7TlVMTH0sIDYxNSwgInVkcCJ9LAoreyJzY28tc3lzbWdyIiwgICAgICAgICB7TlVMTH0sIDYxNiwgInRjcCJ9LAoreyJzY28tc3lzbWdyIiwgICAgICAgICB7TlVMTH0sIDYxNiwgInVkcCJ9LAoreyJzY28tZHRtZ3IiLCAgICAgICAgICB7TlVMTH0sIDYxNywgInRjcCJ9LAoreyJzY28tZHRtZ3IiLCAgICAgICAgICB7TlVMTH0sIDYxNywgInVkcCJ9LAoreyJkZWktaWNkYSIsICAgICAgICAgICB7TlVMTH0sIDYxOCwgInRjcCJ9LAoreyJkZWktaWNkYSIsICAgICAgICAgICB7TlVMTH0sIDYxOCwgInVkcCJ9LAoreyJjb21wYXEtZXZtIiwgICAgICAgICB7TlVMTH0sIDYxOSwgInRjcCJ9LAoreyJjb21wYXEtZXZtIiwgICAgICAgICB7TlVMTH0sIDYxOSwgInVkcCJ9LAoreyJzY28td2Vic3J2cm1nciIsICAgICB7TlVMTH0sIDYyMCwgInRjcCJ9LAoreyJzY28td2Vic3J2cm1nciIsICAgICB7TlVMTH0sIDYyMCwgInVkcCJ9LAoreyJlc2NwLWlwIiwgICAgICAgICAgICB7TlVMTH0sIDYyMSwgInRjcCJ9LAoreyJlc2NwLWlwIiwgICAgICAgICAgICB7TlVMTH0sIDYyMSwgInVkcCJ9LAoreyJjb2xsYWJvcmF0b3IiLCAgICAgICB7TlVMTH0sIDYyMiwgInRjcCJ9LAoreyJjb2xsYWJvcmF0b3IiLCAgICAgICB7TlVMTH0sIDYyMiwgInVkcCJ9LAoreyJvb2Itd3MtaHR0cCIsICAgICAgICB7TlVMTH0sIDYyMywgInRjcCJ9LAoreyJhc2Ytcm1jcCIsICAgICAgICAgICB7TlVMTH0sIDYyMywgInVkcCJ9LAoreyJjcnlwdG9hZG1pbiIsICAgICAgICB7TlVMTH0sIDYyNCwgInRjcCJ9LAoreyJjcnlwdG9hZG1pbiIsICAgICAgICB7TlVMTH0sIDYyNCwgInVkcCJ9LAoreyJkZWNfZGxtIiwgICAgICAgICAgICB7TlVMTH0sIDYyNSwgInRjcCJ9LAoreyJkZWNfZGxtIiwgICAgICAgICAgICB7TlVMTH0sIDYyNSwgInVkcCJ9LAoreyJhc2lhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYyNiwgInRjcCJ9LAoreyJhc2lhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYyNiwgInVkcCJ9LAoreyJwYXNzZ28tdGl2b2xpIiwgICAgICB7TlVMTH0sIDYyNywgInRjcCJ9LAoreyJwYXNzZ28tdGl2b2xpIiwgICAgICB7TlVMTH0sIDYyNywgInVkcCJ9LAoreyJxbXFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYyOCwgInRjcCJ9LAoreyJxbXFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYyOCwgInVkcCJ9LAoreyIzY29tLWFtcDMiLCAgICAgICAgICB7TlVMTH0sIDYyOSwgInRjcCJ9LAoreyIzY29tLWFtcDMiLCAgICAgICAgICB7TlVMTH0sIDYyOSwgInVkcCJ9LAoreyJyZGEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYzMCwgInRjcCJ9LAoreyJyZGEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYzMCwgInVkcCJ9LAoreyJpcHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYzMSwgInRjcCJ9LAoreyJpcHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYzMSwgInVkcCJ9LAoreyJibXBwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYzMiwgInRjcCJ9LAoreyJibXBwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYzMiwgInVkcCJ9LAoreyJzZXJ2c3RhdCIsICAgICAgICAgICB7TlVMTH0sIDYzMywgInRjcCJ9LAoreyJzZXJ2c3RhdCIsICAgICAgICAgICB7TlVMTH0sIDYzMywgInVkcCJ9LAoreyJnaW5hZCIsICAgICAgICAgICAgICB7TlVMTH0sIDYzNCwgInRjcCJ9LAoreyJnaW5hZCIsICAgICAgICAgICAgICB7TlVMTH0sIDYzNCwgInVkcCJ9LAoreyJybHpkYmFzZSIsICAgICAgICAgICB7TlVMTH0sIDYzNSwgInRjcCJ9LAoreyJybHpkYmFzZSIsICAgICAgICAgICB7TlVMTH0sIDYzNSwgInVkcCJ9LAoreyJsZGFwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDYzNiwgInRjcCJ9LAoreyJsZGFwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDYzNiwgInVkcCJ9LAoreyJsYW5zZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDYzNywgInRjcCJ9LAoreyJsYW5zZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDYzNywgInVkcCJ9LAoreyJtY25zLXNlYyIsICAgICAgICAgICB7TlVMTH0sIDYzOCwgInRjcCJ9LAoreyJtY25zLXNlYyIsICAgICAgICAgICB7TlVMTH0sIDYzOCwgInVkcCJ9LAoreyJtc2RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYzOSwgInRjcCJ9LAoreyJtc2RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYzOSwgInVkcCJ9LAoreyJlbnRydXN0LXNwcyIsICAgICAgICB7TlVMTH0sIDY0MCwgInRjcCJ9LAoreyJlbnRydXN0LXNwcyIsICAgICAgICB7TlVMTH0sIDY0MCwgInVkcCJ9LAoreyJyZXBjbWQiLCAgICAgICAgICAgICB7TlVMTH0sIDY0MSwgInRjcCJ9LAoreyJyZXBjbWQiLCAgICAgICAgICAgICB7TlVMTH0sIDY0MSwgInVkcCJ9LAoreyJlc3JvLWVtc2RwIiwgICAgICAgICB7TlVMTH0sIDY0MiwgInRjcCJ9LAoreyJlc3JvLWVtc2RwIiwgICAgICAgICB7TlVMTH0sIDY0MiwgInVkcCJ9LAoreyJzYW5pdHkiLCAgICAgICAgICAgICB7TlVMTH0sIDY0MywgInRjcCJ9LAoreyJzYW5pdHkiLCAgICAgICAgICAgICB7TlVMTH0sIDY0MywgInVkcCJ9LAoreyJkd3IiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY0NCwgInRjcCJ9LAoreyJkd3IiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY0NCwgInVkcCJ9LAoreyJwc3NjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY0NSwgInRjcCJ9LAoreyJwc3NjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY0NSwgInVkcCJ9LAoreyJsZHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY0NiwgInRjcCJ9LAoreyJsZHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY0NiwgInVkcCJ9LAoreyJkaGNwLWZhaWxvdmVyIiwgICAgICB7TlVMTH0sIDY0NywgInRjcCJ9LAoreyJkaGNwLWZhaWxvdmVyIiwgICAgICB7TlVMTH0sIDY0NywgInVkcCJ9LAoreyJycnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY0OCwgInRjcCJ9LAoreyJycnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY0OCwgInVkcCJ9LAoreyJjYWR2aWV3LTNkIiwgICAgICAgICB7TlVMTH0sIDY0OSwgInRjcCJ9LAoreyJjYWR2aWV3LTNkIiwgICAgICAgICB7TlVMTH0sIDY0OSwgInVkcCJ9LAoreyJvYmV4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1MCwgInRjcCJ9LAoreyJvYmV4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1MCwgInVkcCJ9LAoreyJpZWVlLW1tcyIsICAgICAgICAgICB7TlVMTH0sIDY1MSwgInRjcCJ9LAoreyJpZWVlLW1tcyIsICAgICAgICAgICB7TlVMTH0sIDY1MSwgInVkcCJ9LAoreyJoZWxsby1wb3J0IiwgICAgICAgICB7TlVMTH0sIDY1MiwgInRjcCJ9LAoreyJoZWxsby1wb3J0IiwgICAgICAgICB7TlVMTH0sIDY1MiwgInVkcCJ9LAoreyJyZXBzY21kIiwgICAgICAgICAgICB7TlVMTH0sIDY1MywgInRjcCJ9LAoreyJyZXBzY21kIiwgICAgICAgICAgICB7TlVMTH0sIDY1MywgInVkcCJ9LAoreyJhb2R2IiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1NCwgInRjcCJ9LAoreyJhb2R2IiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1NCwgInVkcCJ9LAoreyJ0aW5jIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1NSwgInRjcCJ9LAoreyJ0aW5jIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1NSwgInVkcCJ9LAoreyJzcG1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1NiwgInRjcCJ9LAoreyJzcG1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1NiwgInVkcCJ9LAoreyJybWMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY1NywgInRjcCJ9LAoreyJybWMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY1NywgInVkcCJ9LAoreyJ0ZW5mb2xkIiwgICAgICAgICAgICB7TlVMTH0sIDY1OCwgInRjcCJ9LAoreyJ0ZW5mb2xkIiwgICAgICAgICAgICB7TlVMTH0sIDY1OCwgInVkcCJ9LAoreyJtYWMtc3J2ci1hZG1pbiIsICAgICB7TlVMTH0sIDY2MCwgInRjcCJ9LAoreyJtYWMtc3J2ci1hZG1pbiIsICAgICB7TlVMTH0sIDY2MCwgInVkcCJ9LAoreyJoYXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY2MSwgInRjcCJ9LAoreyJoYXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY2MSwgInVkcCJ9LAoreyJwZnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY2MiwgInRjcCJ9LAoreyJwZnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY2MiwgInVkcCJ9LAoreyJwdXJlbm9pc2UiLCAgICAgICAgICB7TlVMTH0sIDY2MywgInRjcCJ9LAoreyJwdXJlbm9pc2UiLCAgICAgICAgICB7TlVMTH0sIDY2MywgInVkcCJ9LAoreyJvb2Itd3MtaHR0cHMiLCAgICAgICB7TlVMTH0sIDY2NCwgInRjcCJ9LAoreyJhc2Ytc2VjdXJlLXJtY3AiLCAgICB7TlVMTH0sIDY2NCwgInVkcCJ9LAoreyJzdW4tZHIiLCAgICAgICAgICAgICB7TlVMTH0sIDY2NSwgInRjcCJ9LAoreyJzdW4tZHIiLCAgICAgICAgICAgICB7TlVMTH0sIDY2NSwgInVkcCJ9LAoreyJtZHFzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY2NiwgInRjcCJ9LAoreyJtZHFzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY2NiwgInVkcCJ9LAoreyJkb29tIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY2NiwgInRjcCJ9LAoreyJkb29tIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY2NiwgInVkcCJ9LAoreyJkaXNjbG9zZSIsICAgICAgICAgICB7TlVMTH0sIDY2NywgInRjcCJ9LAoreyJkaXNjbG9zZSIsICAgICAgICAgICB7TlVMTH0sIDY2NywgInVkcCJ9LAoreyJtZWNvbW0iLCAgICAgICAgICAgICB7TlVMTH0sIDY2OCwgInRjcCJ9LAoreyJtZWNvbW0iLCAgICAgICAgICAgICB7TlVMTH0sIDY2OCwgInVkcCJ9LAoreyJtZXJlZ2lzdGVyIiwgICAgICAgICB7TlVMTH0sIDY2OSwgInRjcCJ9LAoreyJtZXJlZ2lzdGVyIiwgICAgICAgICB7TlVMTH0sIDY2OSwgInVkcCJ9LAoreyJ2YWNkc20tc3dzIiwgICAgICAgICB7TlVMTH0sIDY3MCwgInRjcCJ9LAoreyJ2YWNkc20tc3dzIiwgICAgICAgICB7TlVMTH0sIDY3MCwgInVkcCJ9LAoreyJ2YWNkc20tYXBwIiwgICAgICAgICB7TlVMTH0sIDY3MSwgInRjcCJ9LAoreyJ2YWNkc20tYXBwIiwgICAgICAgICB7TlVMTH0sIDY3MSwgInVkcCJ9LAoreyJ2cHBzLXF1YSIsICAgICAgICAgICB7TlVMTH0sIDY3MiwgInRjcCJ9LAoreyJ2cHBzLXF1YSIsICAgICAgICAgICB7TlVMTH0sIDY3MiwgInVkcCJ9LAoreyJjaW1wbGV4IiwgICAgICAgICAgICB7TlVMTH0sIDY3MywgInRjcCJ9LAoreyJjaW1wbGV4IiwgICAgICAgICAgICB7TlVMTH0sIDY3MywgInVkcCJ9LAoreyJhY2FwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY3NCwgInRjcCJ9LAoreyJhY2FwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY3NCwgInVkcCJ9LAoreyJkY3RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY3NSwgInRjcCJ9LAoreyJkY3RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY3NSwgInVkcCJ9LAoreyJ2cHBzLXZpYSIsICAgICAgICAgICB7TlVMTH0sIDY3NiwgInRjcCJ9LAoreyJ2cHBzLXZpYSIsICAgICAgICAgICB7TlVMTH0sIDY3NiwgInVkcCJ9LAoreyJ2cHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY3NywgInRjcCJ9LAoreyJ2cHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY3NywgInVkcCJ9LAoreyJnZ2YtbmNwIiwgICAgICAgICAgICB7TlVMTH0sIDY3OCwgInRjcCJ9LAoreyJnZ2YtbmNwIiwgICAgICAgICAgICB7TlVMTH0sIDY3OCwgInVkcCJ9LAoreyJtcm0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY3OSwgInRjcCJ9LAoreyJtcm0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY3OSwgInVkcCJ9LAoreyJlbnRydXN0LWFhYXMiLCAgICAgICB7TlVMTH0sIDY4MCwgInRjcCJ9LAoreyJlbnRydXN0LWFhYXMiLCAgICAgICB7TlVMTH0sIDY4MCwgInVkcCJ9LAoreyJlbnRydXN0LWFhbXMiLCAgICAgICB7TlVMTH0sIDY4MSwgInRjcCJ9LAoreyJlbnRydXN0LWFhbXMiLCAgICAgICB7TlVMTH0sIDY4MSwgInVkcCJ9LAoreyJ4ZnIiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY4MiwgInRjcCJ9LAoreyJ4ZnIiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY4MiwgInVkcCJ9LAoreyJjb3JiYS1paW9wIiwgICAgICAgICB7TlVMTH0sIDY4MywgInRjcCJ9LAoreyJjb3JiYS1paW9wIiwgICAgICAgICB7TlVMTH0sIDY4MywgInVkcCJ9LAoreyJjb3JiYS1paW9wLXNzbCIsICAgICB7TlVMTH0sIDY4NCwgInRjcCJ9LAoreyJjb3JiYS1paW9wLXNzbCIsICAgICB7TlVMTH0sIDY4NCwgInVkcCJ9LAoreyJtZGMtcG9ydG1hcHBlciIsICAgICB7TlVMTH0sIDY4NSwgInRjcCJ9LAoreyJtZGMtcG9ydG1hcHBlciIsICAgICB7TlVMTH0sIDY4NSwgInVkcCJ9LAoreyJoY3Atd2lzbWFyIiwgICAgICAgICB7TlVMTH0sIDY4NiwgInRjcCJ9LAoreyJoY3Atd2lzbWFyIiwgICAgICAgICB7TlVMTH0sIDY4NiwgInVkcCJ9LAoreyJhc2lwcmVnaXN0cnkiLCAgICAgICB7TlVMTH0sIDY4NywgInRjcCJ9LAoreyJhc2lwcmVnaXN0cnkiLCAgICAgICB7TlVMTH0sIDY4NywgInVkcCJ9LAoreyJyZWFsbS1ydXNkIiwgICAgICAgICB7TlVMTH0sIDY4OCwgInRjcCJ9LAoreyJyZWFsbS1ydXNkIiwgICAgICAgICB7TlVMTH0sIDY4OCwgInVkcCJ9LAoreyJubWFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY4OSwgInRjcCJ9LAoreyJubWFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY4OSwgInVkcCJ9LAoreyJ2YXRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY5MCwgInRjcCJ9LAoreyJ2YXRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY5MCwgInVkcCJ9LAoreyJtc2V4Y2gtcm91dGluZyIsICAgICB7TlVMTH0sIDY5MSwgInRjcCJ9LAoreyJtc2V4Y2gtcm91dGluZyIsICAgICB7TlVMTH0sIDY5MSwgInVkcCJ9LAoreyJoeXBlcndhdmUtaXNwIiwgICAgICB7TlVMTH0sIDY5MiwgInRjcCJ9LAoreyJoeXBlcndhdmUtaXNwIiwgICAgICB7TlVMTH0sIDY5MiwgInVkcCJ9LAoreyJjb25uZW5kcCIsICAgICAgICAgICB7TlVMTH0sIDY5MywgInRjcCJ9LAoreyJjb25uZW5kcCIsICAgICAgICAgICB7TlVMTH0sIDY5MywgInVkcCJ9LAoreyJoYS1jbHVzdGVyIiwgICAgICAgICB7TlVMTH0sIDY5NCwgInRjcCJ9LAoreyJoYS1jbHVzdGVyIiwgICAgICAgICB7TlVMTH0sIDY5NCwgInVkcCJ9LAoreyJpZWVlLW1tcy1zc2wiLCAgICAgICB7TlVMTH0sIDY5NSwgInRjcCJ9LAoreyJpZWVlLW1tcy1zc2wiLCAgICAgICB7TlVMTH0sIDY5NSwgInVkcCJ9LAoreyJydXNoZCIsICAgICAgICAgICAgICB7TlVMTH0sIDY5NiwgInRjcCJ9LAoreyJydXNoZCIsICAgICAgICAgICAgICB7TlVMTH0sIDY5NiwgInVkcCJ9LAoreyJ1dWlkZ2VuIiwgICAgICAgICAgICB7TlVMTH0sIDY5NywgInRjcCJ9LAoreyJ1dWlkZ2VuIiwgICAgICAgICAgICB7TlVMTH0sIDY5NywgInVkcCJ9LAoreyJvbHNyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY5OCwgInRjcCJ9LAoreyJvbHNyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY5OCwgInVkcCJ9LAoreyJhY2Nlc3NuZXR3b3JrIiwgICAgICB7TlVMTH0sIDY5OSwgInRjcCJ9LAoreyJhY2Nlc3NuZXR3b3JrIiwgICAgICB7TlVMTH0sIDY5OSwgInVkcCJ9LAoreyJlcHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDcwMCwgInRjcCJ9LAoreyJlcHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDcwMCwgInVkcCJ9LAoreyJsbXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDcwMSwgInRjcCJ9LAoreyJsbXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDcwMSwgInVkcCJ9LAoreyJpcmlzLWJlZXAiLCAgICAgICAgICB7TlVMTH0sIDcwMiwgInRjcCJ9LAoreyJpcmlzLWJlZXAiLCAgICAgICAgICB7TlVMTH0sIDcwMiwgInVkcCJ9LAoreyJlbGNzZCIsICAgICAgICAgICAgICB7TlVMTH0sIDcwNCwgInRjcCJ9LAoreyJlbGNzZCIsICAgICAgICAgICAgICB7TlVMTH0sIDcwNCwgInVkcCJ9LAoreyJhZ2VudHgiLCAgICAgICAgICAgICB7TlVMTH0sIDcwNSwgInRjcCJ9LAoreyJhZ2VudHgiLCAgICAgICAgICAgICB7TlVMTH0sIDcwNSwgInVkcCJ9LAoreyJzaWxjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcwNiwgInRjcCJ9LAoreyJzaWxjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcwNiwgInVkcCJ9LAoreyJib3JsYW5kLWRzaiIsICAgICAgICB7TlVMTH0sIDcwNywgInRjcCJ9LAoreyJib3JsYW5kLWRzaiIsICAgICAgICB7TlVMTH0sIDcwNywgInVkcCJ9LAoreyJlbnRydXN0LWttc2giLCAgICAgICB7TlVMTH0sIDcwOSwgInRjcCJ9LAoreyJlbnRydXN0LWttc2giLCAgICAgICB7TlVMTH0sIDcwOSwgInVkcCJ9LAoreyJlbnRydXN0LWFzaCIsICAgICAgICB7TlVMTH0sIDcxMCwgInRjcCJ9LAoreyJlbnRydXN0LWFzaCIsICAgICAgICB7TlVMTH0sIDcxMCwgInVkcCJ9LAoreyJjaXNjby10ZHAiLCAgICAgICAgICB7TlVMTH0sIDcxMSwgInRjcCJ9LAoreyJjaXNjby10ZHAiLCAgICAgICAgICB7TlVMTH0sIDcxMSwgInVkcCJ9LAoreyJ0YnJwZiIsICAgICAgICAgICAgICB7TlVMTH0sIDcxMiwgInRjcCJ9LAoreyJ0YnJwZiIsICAgICAgICAgICAgICB7TlVMTH0sIDcxMiwgInVkcCJ9LAoreyJpcmlzLXhwYyIsICAgICAgICAgICB7TlVMTH0sIDcxMywgInRjcCJ9LAoreyJpcmlzLXhwYyIsICAgICAgICAgICB7TlVMTH0sIDcxMywgInVkcCJ9LAoreyJpcmlzLXhwY3MiLCAgICAgICAgICB7TlVMTH0sIDcxNCwgInRjcCJ9LAoreyJpcmlzLXhwY3MiLCAgICAgICAgICB7TlVMTH0sIDcxNCwgInVkcCJ9LAoreyJpcmlzLWx3eiIsICAgICAgICAgICB7TlVMTH0sIDcxNSwgInRjcCJ9LAoreyJpcmlzLWx3eiIsICAgICAgICAgICB7TlVMTH0sIDcxNSwgInVkcCJ9LAoreyJwYW5hIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcxNiwgInVkcCJ9LAoreyJuZXR2aWV3ZG0xIiwgICAgICAgICB7TlVMTH0sIDcyOSwgInRjcCJ9LAoreyJuZXR2aWV3ZG0xIiwgICAgICAgICB7TlVMTH0sIDcyOSwgInVkcCJ9LAoreyJuZXR2aWV3ZG0yIiwgICAgICAgICB7TlVMTH0sIDczMCwgInRjcCJ9LAoreyJuZXR2aWV3ZG0yIiwgICAgICAgICB7TlVMTH0sIDczMCwgInVkcCJ9LAoreyJuZXR2aWV3ZG0zIiwgICAgICAgICB7TlVMTH0sIDczMSwgInRjcCJ9LAoreyJuZXR2aWV3ZG0zIiwgICAgICAgICB7TlVMTH0sIDczMSwgInVkcCJ9LAoreyJuZXRndyIsICAgICAgICAgICAgICB7TlVMTH0sIDc0MSwgInRjcCJ9LAoreyJuZXRndyIsICAgICAgICAgICAgICB7TlVMTH0sIDc0MSwgInVkcCJ9LAoreyJuZXRyY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDc0MiwgInRjcCJ9LAoreyJuZXRyY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDc0MiwgInVkcCJ9LAoreyJmbGV4bG0iLCAgICAgICAgICAgICB7TlVMTH0sIDc0NCwgInRjcCJ9LAoreyJmbGV4bG0iLCAgICAgICAgICAgICB7TlVMTH0sIDc0NCwgInVkcCJ9LAoreyJmdWppdHN1LWRldiIsICAgICAgICB7TlVMTH0sIDc0NywgInRjcCJ9LAoreyJmdWppdHN1LWRldiIsICAgICAgICB7TlVMTH0sIDc0NywgInVkcCJ9LAoreyJyaXMtY20iLCAgICAgICAgICAgICB7TlVMTH0sIDc0OCwgInRjcCJ9LAoreyJyaXMtY20iLCAgICAgICAgICAgICB7TlVMTH0sIDc0OCwgInVkcCJ9LAoreyJrZXJiZXJvcy1hZG0iLCAgICAgICB7TlVMTH0sIDc0OSwgInRjcCJ9LAoreyJrZXJiZXJvcy1hZG0iLCAgICAgICB7TlVMTH0sIDc0OSwgInVkcCJ9LAoreyJyZmlsZSIsICAgICAgICAgICAgICB7TlVMTH0sIDc1MCwgInRjcCJ9LAoreyJsb2FkYXYiLCAgICAgICAgICAgICB7TlVMTH0sIDc1MCwgInVkcCJ9LAoreyJrZXJiZXJvcy1pdiIsICAgICAgICB7TlVMTH0sIDc1MCwgInVkcCJ9LAoreyJwdW1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc1MSwgInRjcCJ9LAoreyJwdW1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc1MSwgInVkcCJ9LAoreyJxcmgiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc1MiwgInRjcCJ9LAoreyJxcmgiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc1MiwgInVkcCJ9LAoreyJycmgiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc1MywgInRjcCJ9LAoreyJycmgiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc1MywgInVkcCJ9LAoreyJ0ZWxsIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc1NCwgInRjcCJ9LAoreyJ0ZWxsIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc1NCwgInVkcCJ9LAoreyJubG9naW4iLCAgICAgICAgICAgICB7TlVMTH0sIDc1OCwgInRjcCJ9LAoreyJubG9naW4iLCAgICAgICAgICAgICB7TlVMTH0sIDc1OCwgInVkcCJ9LAoreyJjb24iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc1OSwgInRjcCJ9LAoreyJjb24iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc1OSwgInVkcCJ9LAoreyJucyIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDc2MCwgInRjcCJ9LAoreyJucyIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDc2MCwgInVkcCJ9LAoreyJyeGUiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc2MSwgInRjcCJ9LAoreyJyeGUiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc2MSwgInVkcCJ9LAoreyJxdW90YWQiLCAgICAgICAgICAgICB7TlVMTH0sIDc2MiwgInRjcCJ9LAoreyJxdW90YWQiLCAgICAgICAgICAgICB7TlVMTH0sIDc2MiwgInVkcCJ9LAoreyJjeWNsZXNlcnYiLCAgICAgICAgICB7TlVMTH0sIDc2MywgInRjcCJ9LAoreyJjeWNsZXNlcnYiLCAgICAgICAgICB7TlVMTH0sIDc2MywgInVkcCJ9LAoreyJvbXNlcnYiLCAgICAgICAgICAgICB7TlVMTH0sIDc2NCwgInRjcCJ9LAoreyJvbXNlcnYiLCAgICAgICAgICAgICB7TlVMTH0sIDc2NCwgInVkcCJ9LAoreyJ3ZWJzdGVyIiwgICAgICAgICAgICB7TlVMTH0sIDc2NSwgInRjcCJ9LAoreyJ3ZWJzdGVyIiwgICAgICAgICAgICB7TlVMTH0sIDc2NSwgInVkcCJ9LAoreyJwaG9uZWJvb2siLCAgICAgICAgICB7TlVMTH0sIDc2NywgInRjcCJ9LAoreyJwaG9uZWJvb2siLCAgICAgICAgICB7TlVMTH0sIDc2NywgInVkcCJ9LAoreyJ2aWQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc2OSwgInRjcCJ9LAoreyJ2aWQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc2OSwgInVkcCJ9LAoreyJjYWRsb2NrIiwgICAgICAgICAgICB7TlVMTH0sIDc3MCwgInRjcCJ9LAoreyJjYWRsb2NrIiwgICAgICAgICAgICB7TlVMTH0sIDc3MCwgInVkcCJ9LAoreyJydGlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc3MSwgInRjcCJ9LAoreyJydGlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc3MSwgInVkcCJ9LAoreyJjeWNsZXNlcnYyIiwgICAgICAgICB7TlVMTH0sIDc3MiwgInRjcCJ9LAoreyJjeWNsZXNlcnYyIiwgICAgICAgICB7TlVMTH0sIDc3MiwgInVkcCJ9LAoreyJzdWJtaXQiLCAgICAgICAgICAgICB7TlVMTH0sIDc3MywgInRjcCJ9LAoreyJub3RpZnkiLCAgICAgICAgICAgICB7TlVMTH0sIDc3MywgInVkcCJ9LAoreyJycGFzc3dkIiwgICAgICAgICAgICB7TlVMTH0sIDc3NCwgInRjcCJ9LAoreyJhY21haW50X2RiZCIsICAgICAgICB7TlVMTH0sIDc3NCwgInVkcCJ9LAoreyJlbnRvbWIiLCAgICAgICAgICAgICB7TlVMTH0sIDc3NSwgInRjcCJ9LAoreyJhY21haW50X3RyYW5zZCIsICAgICB7TlVMTH0sIDc3NSwgInVkcCJ9LAoreyJ3cGFnZXMiLCAgICAgICAgICAgICB7TlVMTH0sIDc3NiwgInRjcCJ9LAoreyJ3cGFnZXMiLCAgICAgICAgICAgICB7TlVMTH0sIDc3NiwgInVkcCJ9LAoreyJtdWx0aWxpbmctaHR0cCIsICAgICB7TlVMTH0sIDc3NywgInRjcCJ9LAoreyJtdWx0aWxpbmctaHR0cCIsICAgICB7TlVMTH0sIDc3NywgInVkcCJ9LAoreyJ3cGdzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc4MCwgInRjcCJ9LAoreyJ3cGdzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc4MCwgInVkcCJ9LAoreyJtZGJzX2RhZW1vbiIsICAgICAgICB7TlVMTH0sIDgwMCwgInRjcCJ9LAoreyJtZGJzX2RhZW1vbiIsICAgICAgICB7TlVMTH0sIDgwMCwgInVkcCJ9LAoreyJkZXZpY2UiLCAgICAgICAgICAgICB7TlVMTH0sIDgwMSwgInRjcCJ9LAoreyJkZXZpY2UiLCAgICAgICAgICAgICB7TlVMTH0sIDgwMSwgInVkcCJ9LAoreyJmY3AtdWRwIiwgICAgICAgICAgICB7TlVMTH0sIDgxMCwgInRjcCJ9LAoreyJmY3AtdWRwIiwgICAgICAgICAgICB7TlVMTH0sIDgxMCwgInVkcCJ9LAoreyJpdG0tbWNlbGwtcyIsICAgICAgICB7TlVMTH0sIDgyOCwgInRjcCJ9LAoreyJpdG0tbWNlbGwtcyIsICAgICAgICB7TlVMTH0sIDgyOCwgInVkcCJ9LAoreyJwa2l4LTMtY2EtcmEiLCAgICAgICB7TlVMTH0sIDgyOSwgInRjcCJ9LAoreyJwa2l4LTMtY2EtcmEiLCAgICAgICB7TlVMTH0sIDgyOSwgInVkcCJ9LAoreyJuZXRjb25mLXNzaCIsICAgICAgICB7TlVMTH0sIDgzMCwgInRjcCJ9LAoreyJuZXRjb25mLXNzaCIsICAgICAgICB7TlVMTH0sIDgzMCwgInVkcCJ9LAoreyJuZXRjb25mLWJlZXAiLCAgICAgICB7TlVMTH0sIDgzMSwgInRjcCJ9LAoreyJuZXRjb25mLWJlZXAiLCAgICAgICB7TlVMTH0sIDgzMSwgInVkcCJ9LAoreyJuZXRjb25mc29hcGh0dHAiLCAgICB7TlVMTH0sIDgzMiwgInRjcCJ9LAoreyJuZXRjb25mc29hcGh0dHAiLCAgICB7TlVMTH0sIDgzMiwgInVkcCJ9LAoreyJuZXRjb25mc29hcGJlZXAiLCAgICB7TlVMTH0sIDgzMywgInRjcCJ9LAoreyJuZXRjb25mc29hcGJlZXAiLCAgICB7TlVMTH0sIDgzMywgInVkcCJ9LAoreyJkaGNwLWZhaWxvdmVyMiIsICAgICB7TlVMTH0sIDg0NywgInRjcCJ9LAoreyJkaGNwLWZhaWxvdmVyMiIsICAgICB7TlVMTH0sIDg0NywgInVkcCJ9LAoreyJnZG9pIiwgICAgICAgICAgICAgICB7TlVMTH0sIDg0OCwgInRjcCJ9LAoreyJnZG9pIiwgICAgICAgICAgICAgICB7TlVMTH0sIDg0OCwgInVkcCJ9LAoreyJpc2NzaSIsICAgICAgICAgICAgICB7TlVMTH0sIDg2MCwgInRjcCJ9LAoreyJpc2NzaSIsICAgICAgICAgICAgICB7TlVMTH0sIDg2MCwgInVkcCJ9LAoreyJvd2FtcC1jb250cm9sIiwgICAgICB7TlVMTH0sIDg2MSwgInRjcCJ9LAoreyJvd2FtcC1jb250cm9sIiwgICAgICB7TlVMTH0sIDg2MSwgInVkcCJ9LAoreyJ0d2FtcC1jb250cm9sIiwgICAgICB7TlVMTH0sIDg2MiwgInRjcCJ9LAoreyJ0d2FtcC1jb250cm9sIiwgICAgICB7TlVMTH0sIDg2MiwgInVkcCJ9LAoreyJyc3luYyIsICAgICAgICAgICAgICB7TlVMTH0sIDg3MywgInRjcCJ9LAoreyJyc3luYyIsICAgICAgICAgICAgICB7TlVMTH0sIDg3MywgInVkcCJ9LAoreyJpY2xjbmV0LWxvY2F0ZSIsICAgICB7TlVMTH0sIDg4NiwgInRjcCJ9LAoreyJpY2xjbmV0LWxvY2F0ZSIsICAgICB7TlVMTH0sIDg4NiwgInVkcCJ9LAoreyJpY2xjbmV0X3N2aW5mbyIsICAgICB7TlVMTH0sIDg4NywgInRjcCJ9LAoreyJpY2xjbmV0X3N2aW5mbyIsICAgICB7TlVMTH0sIDg4NywgInVkcCJ9LAoreyJhY2Nlc3NidWlsZGVyIiwgICAgICB7TlVMTH0sIDg4OCwgInRjcCJ9LAoreyJhY2Nlc3NidWlsZGVyIiwgICAgICB7TlVMTH0sIDg4OCwgInVkcCJ9LAoreyJjZGRicCIsICAgICAgICAgICAgICB7TlVMTH0sIDg4OCwgInRjcCJ9LAoreyJvbWdpbml0aWFscmVmcyIsICAgICB7TlVMTH0sIDkwMCwgInRjcCJ9LAoreyJvbWdpbml0aWFscmVmcyIsICAgICB7TlVMTH0sIDkwMCwgInVkcCJ9LAoreyJzbXBuYW1lcmVzIiwgICAgICAgICB7TlVMTH0sIDkwMSwgInRjcCJ9LAoreyJzbXBuYW1lcmVzIiwgICAgICAgICB7TlVMTH0sIDkwMSwgInVkcCJ9LAoreyJpZGVhZmFybS1kb29yIiwgICAgICB7TlVMTH0sIDkwMiwgInRjcCJ9LAoreyJpZGVhZmFybS1kb29yIiwgICAgICB7TlVMTH0sIDkwMiwgInVkcCJ9LAoreyJpZGVhZmFybS1wYW5pYyIsICAgICB7TlVMTH0sIDkwMywgInRjcCJ9LAoreyJpZGVhZmFybS1wYW5pYyIsICAgICB7TlVMTH0sIDkwMywgInVkcCJ9LAoreyJraW5rIiwgICAgICAgICAgICAgICB7TlVMTH0sIDkxMCwgInRjcCJ9LAoreyJraW5rIiwgICAgICAgICAgICAgICB7TlVMTH0sIDkxMCwgInVkcCJ9LAoreyJ4YWN0LWJhY2t1cCIsICAgICAgICB7TlVMTH0sIDkxMSwgInRjcCJ9LAoreyJ4YWN0LWJhY2t1cCIsICAgICAgICB7TlVMTH0sIDkxMSwgInVkcCJ9LAoreyJhcGV4LW1lc2giLCAgICAgICAgICB7TlVMTH0sIDkxMiwgInRjcCJ9LAoreyJhcGV4LW1lc2giLCAgICAgICAgICB7TlVMTH0sIDkxMiwgInVkcCJ9LAoreyJhcGV4LWVkZ2UiLCAgICAgICAgICB7TlVMTH0sIDkxMywgInRjcCJ9LAoreyJhcGV4LWVkZ2UiLCAgICAgICAgICB7TlVMTH0sIDkxMywgInVkcCJ9LAoreyJmdHBzLWRhdGEiLCAgICAgICAgICB7TlVMTH0sIDk4OSwgInRjcCJ9LAoreyJmdHBzLWRhdGEiLCAgICAgICAgICB7TlVMTH0sIDk4OSwgInVkcCJ9LAoreyJmdHBzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDk5MCwgInRjcCJ9LAoreyJmdHBzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDk5MCwgInVkcCJ9LAoreyJuYXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDk5MSwgInRjcCJ9LAoreyJuYXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDk5MSwgInVkcCJ9LAoreyJ0ZWxuZXRzIiwgICAgICAgICAgICB7TlVMTH0sIDk5MiwgInRjcCJ9LAoreyJ0ZWxuZXRzIiwgICAgICAgICAgICB7TlVMTH0sIDk5MiwgInVkcCJ9LAoreyJpbWFwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDk5MywgInRjcCJ9LAoreyJpbWFwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDk5MywgInVkcCJ9LAoreyJpcmNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDk5NCwgInRjcCJ9LAoreyJpcmNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDk5NCwgInVkcCJ9LAoreyJwb3AzcyIsICAgICAgICAgICAgICB7TlVMTH0sIDk5NSwgInRjcCJ9LAoreyJwb3AzcyIsICAgICAgICAgICAgICB7TlVMTH0sIDk5NSwgInVkcCJ9LAoreyJ2c2luZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDk5NiwgInRjcCJ9LAoreyJ2c2luZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDk5NiwgInVkcCJ9LAoreyJtYWl0cmQiLCAgICAgICAgICAgICB7TlVMTH0sIDk5NywgInRjcCJ9LAoreyJtYWl0cmQiLCAgICAgICAgICAgICB7TlVMTH0sIDk5NywgInVkcCJ9LAoreyJidXNib3kiLCAgICAgICAgICAgICB7TlVMTH0sIDk5OCwgInRjcCJ9LAoreyJwdXBhcnAiLCAgICAgICAgICAgICB7TlVMTH0sIDk5OCwgInVkcCJ9LAoreyJnYXJjb24iLCAgICAgICAgICAgICB7TlVMTH0sIDk5OSwgInRjcCJ9LAoreyJhcHBsaXgiLCAgICAgICAgICAgICB7TlVMTH0sIDk5OSwgInVkcCJ9LAoreyJwdXByb3V0ZXIiLCAgICAgICAgICB7TlVMTH0sIDk5OSwgInRjcCJ9LAoreyJwdXByb3V0ZXIiLCAgICAgICAgICB7TlVMTH0sIDk5OSwgInVkcCJ9LAoreyJjYWRsb2NrMiIsICAgICAgICAgICB7TlVMTH0sIDEwMDAsICJ0Y3AifSwKK3siY2FkbG9jazIiLCAgICAgICAgICAge05VTEx9LCAxMDAwLCAidWRwIn0sCit7InN1cmYiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTAxMCwgInRjcCJ9LAoreyJzdXJmIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMTAsICJ1ZHAifSwKK3siZXhwMSIsICAgICAgICAgICAgICAge05VTEx9LCAxMDIxLCAidGNwIn0sCit7ImV4cDEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTAyMSwgInVkcCJ9LAoreyJleHAyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMjIsICJ0Y3AifSwKK3siZXhwMiIsICAgICAgICAgICAgICAge05VTEx9LCAxMDIyLCAidWRwIn0sCisjZW5kaWYgLyogVVNFX0lBTkFfV0VMTF9LTk9XTl9QT1JUUyAqLworI2lmZGVmIFVTRV9JQU5BX1JFR0lTVEVSRURfUE9SVFMKK3siYmxhY2tqYWNrIiwgICAgICAgICAge05VTEx9LCAxMDI1LCAidGNwIn0sCit7ImJsYWNramFjayIsICAgICAgICAgIHtOVUxMfSwgMTAyNSwgInVkcCJ9LAoreyJjYXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwMjYsICJ0Y3AifSwKK3siY2FwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDI2LCAidWRwIn0sCit7InNvbGlkLW11eCIsICAgICAgICAgIHtOVUxMfSwgMTAyOSwgInRjcCJ9LAoreyJzb2xpZC1tdXgiLCAgICAgICAgICB7TlVMTH0sIDEwMjksICJ1ZHAifSwKK3siaWFkMSIsICAgICAgICAgICAgICAge05VTEx9LCAxMDMwLCAidGNwIn0sCit7ImlhZDEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTAzMCwgInVkcCJ9LAoreyJpYWQyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMzEsICJ0Y3AifSwKK3siaWFkMiIsICAgICAgICAgICAgICAge05VTEx9LCAxMDMxLCAidWRwIn0sCit7ImlhZDMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTAzMiwgInRjcCJ9LAoreyJpYWQzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMzIsICJ1ZHAifSwKK3sibmV0aW5mby1sb2NhbCIsICAgICAge05VTEx9LCAxMDMzLCAidGNwIn0sCit7Im5ldGluZm8tbG9jYWwiLCAgICAgIHtOVUxMfSwgMTAzMywgInVkcCJ9LAoreyJhY3RpdmVzeW5jIiwgICAgICAgICB7TlVMTH0sIDEwMzQsICJ0Y3AifSwKK3siYWN0aXZlc3luYyIsICAgICAgICAge05VTEx9LCAxMDM0LCAidWRwIn0sCit7Im14eHJsb2dpbiIsICAgICAgICAgIHtOVUxMfSwgMTAzNSwgInRjcCJ9LAoreyJteHhybG9naW4iLCAgICAgICAgICB7TlVMTH0sIDEwMzUsICJ1ZHAifSwKK3sibnNzdHAiLCAgICAgICAgICAgICAge05VTEx9LCAxMDM2LCAidGNwIn0sCit7Im5zc3RwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTAzNiwgInVkcCJ9LAoreyJhbXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwMzcsICJ0Y3AifSwKK3siYW1zIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDM3LCAidWRwIn0sCit7Im10cXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTAzOCwgInRjcCJ9LAoreyJtdHFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMzgsICJ1ZHAifSwKK3sic2JsIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDM5LCAidGNwIn0sCit7InNibCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTAzOSwgInVkcCJ9LAoreyJuZXRhcngiLCAgICAgICAgICAgICB7TlVMTH0sIDEwNDAsICJ0Y3AifSwKK3sibmV0YXJ4IiwgICAgICAgICAgICAge05VTEx9LCAxMDQwLCAidWRwIn0sCit7ImRhbmYtYWsyIiwgICAgICAgICAgIHtOVUxMfSwgMTA0MSwgInRjcCJ9LAoreyJkYW5mLWFrMiIsICAgICAgICAgICB7TlVMTH0sIDEwNDEsICJ1ZHAifSwKK3siYWZyb2ciLCAgICAgICAgICAgICAge05VTEx9LCAxMDQyLCAidGNwIn0sCit7ImFmcm9nIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTA0MiwgInVkcCJ9LAoreyJib2luYy1jbGllbnQiLCAgICAgICB7TlVMTH0sIDEwNDMsICJ0Y3AifSwKK3siYm9pbmMtY2xpZW50IiwgICAgICAge05VTEx9LCAxMDQzLCAidWRwIn0sCit7ImRjdXRpbGl0eSIsICAgICAgICAgIHtOVUxMfSwgMTA0NCwgInRjcCJ9LAoreyJkY3V0aWxpdHkiLCAgICAgICAgICB7TlVMTH0sIDEwNDQsICJ1ZHAifSwKK3siZnBpdHAiLCAgICAgICAgICAgICAge05VTEx9LCAxMDQ1LCAidGNwIn0sCit7ImZwaXRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTA0NSwgInVkcCJ9LAoreyJ3ZnJlbW90ZXJ0bSIsICAgICAgICB7TlVMTH0sIDEwNDYsICJ0Y3AifSwKK3sid2ZyZW1vdGVydG0iLCAgICAgICAge05VTEx9LCAxMDQ2LCAidWRwIn0sCit7Im5lb2QxIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTA0NywgInRjcCJ9LAoreyJuZW9kMSIsICAgICAgICAgICAgICB7TlVMTH0sIDEwNDcsICJ1ZHAifSwKK3sibmVvZDIiLCAgICAgICAgICAgICAge05VTEx9LCAxMDQ4LCAidGNwIn0sCit7Im5lb2QyIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTA0OCwgInVkcCJ9LAoreyJ0ZC1wb3N0bWFuIiwgICAgICAgICB7TlVMTH0sIDEwNDksICJ0Y3AifSwKK3sidGQtcG9zdG1hbiIsICAgICAgICAge05VTEx9LCAxMDQ5LCAidWRwIn0sCit7ImNtYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTA1MCwgInRjcCJ9LAoreyJjbWEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwNTAsICJ1ZHAifSwKK3sib3B0aW1hLXZuZXQiLCAgICAgICAge05VTEx9LCAxMDUxLCAidGNwIn0sCit7Im9wdGltYS12bmV0IiwgICAgICAgIHtOVUxMfSwgMTA1MSwgInVkcCJ9LAoreyJkZHQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwNTIsICJ0Y3AifSwKK3siZGR0IiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDUyLCAidWRwIn0sCit7InJlbW90ZS1hcyIsICAgICAgICAgIHtOVUxMfSwgMTA1MywgInRjcCJ9LAoreyJyZW1vdGUtYXMiLCAgICAgICAgICB7TlVMTH0sIDEwNTMsICJ1ZHAifSwKK3siYnJ2cmVhZCIsICAgICAgICAgICAge05VTEx9LCAxMDU0LCAidGNwIn0sCit7ImJydnJlYWQiLCAgICAgICAgICAgIHtOVUxMfSwgMTA1NCwgInVkcCJ9LAoreyJhbnN5c2xtZCIsICAgICAgICAgICB7TlVMTH0sIDEwNTUsICJ0Y3AifSwKK3siYW5zeXNsbWQiLCAgICAgICAgICAge05VTEx9LCAxMDU1LCAidWRwIn0sCit7InZmbyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTA1NiwgInRjcCJ9LAoreyJ2Zm8iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwNTYsICJ1ZHAifSwKK3sic3RhcnRyb24iLCAgICAgICAgICAge05VTEx9LCAxMDU3LCAidGNwIn0sCit7InN0YXJ0cm9uIiwgICAgICAgICAgIHtOVUxMfSwgMTA1NywgInVkcCJ9LAoreyJuaW0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwNTgsICJ0Y3AifSwKK3sibmltIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDU4LCAidWRwIn0sCit7Im5pbXJlZyIsICAgICAgICAgICAgIHtOVUxMfSwgMTA1OSwgInRjcCJ9LAoreyJuaW1yZWciLCAgICAgICAgICAgICB7TlVMTH0sIDEwNTksICJ1ZHAifSwKK3sicG9sZXN0YXIiLCAgICAgICAgICAge05VTEx9LCAxMDYwLCAidGNwIn0sCit7InBvbGVzdGFyIiwgICAgICAgICAgIHtOVUxMfSwgMTA2MCwgInVkcCJ9LAoreyJraW9zayIsICAgICAgICAgICAgICB7TlVMTH0sIDEwNjEsICJ0Y3AifSwKK3sia2lvc2siLCAgICAgICAgICAgICAge05VTEx9LCAxMDYxLCAidWRwIn0sCit7InZlcmFjaXR5IiwgICAgICAgICAgIHtOVUxMfSwgMTA2MiwgInRjcCJ9LAoreyJ2ZXJhY2l0eSIsICAgICAgICAgICB7TlVMTH0sIDEwNjIsICJ1ZHAifSwKK3sia3lvY2VyYW5ldGRldiIsICAgICAge05VTEx9LCAxMDYzLCAidGNwIn0sCit7Imt5b2NlcmFuZXRkZXYiLCAgICAgIHtOVUxMfSwgMTA2MywgInVkcCJ9LAoreyJqc3RlbCIsICAgICAgICAgICAgICB7TlVMTH0sIDEwNjQsICJ0Y3AifSwKK3sianN0ZWwiLCAgICAgICAgICAgICAge05VTEx9LCAxMDY0LCAidWRwIn0sCit7InN5c2NvbWxhbiIsICAgICAgICAgIHtOVUxMfSwgMTA2NSwgInRjcCJ9LAoreyJzeXNjb21sYW4iLCAgICAgICAgICB7TlVMTH0sIDEwNjUsICJ1ZHAifSwKK3siZnBvLWZucyIsICAgICAgICAgICAge05VTEx9LCAxMDY2LCAidGNwIn0sCit7ImZwby1mbnMiLCAgICAgICAgICAgIHtOVUxMfSwgMTA2NiwgInVkcCJ9LAoreyJpbnN0bF9ib290cyIsICAgICAgICB7TlVMTH0sIDEwNjcsICJ0Y3AifSwKK3siaW5zdGxfYm9vdHMiLCAgICAgICAge05VTEx9LCAxMDY3LCAidWRwIn0sCit7Imluc3RsX2Jvb3RjIiwgICAgICAgIHtOVUxMfSwgMTA2OCwgInRjcCJ9LAoreyJpbnN0bF9ib290YyIsICAgICAgICB7TlVMTH0sIDEwNjgsICJ1ZHAifSwKK3siY29nbmV4LWluc2lnaHQiLCAgICAge05VTEx9LCAxMDY5LCAidGNwIn0sCit7ImNvZ25leC1pbnNpZ2h0IiwgICAgIHtOVUxMfSwgMTA2OSwgInVkcCJ9LAoreyJnbXJ1cGRhdGVzZXJ2IiwgICAgICB7TlVMTH0sIDEwNzAsICJ0Y3AifSwKK3siZ21ydXBkYXRlc2VydiIsICAgICAge05VTEx9LCAxMDcwLCAidWRwIn0sCit7ImJzcXVhcmUtdm9pcCIsICAgICAgIHtOVUxMfSwgMTA3MSwgInRjcCJ9LAoreyJic3F1YXJlLXZvaXAiLCAgICAgICB7TlVMTH0sIDEwNzEsICJ1ZHAifSwKK3siY2FyZGF4IiwgICAgICAgICAgICAge05VTEx9LCAxMDcyLCAidGNwIn0sCit7ImNhcmRheCIsICAgICAgICAgICAgIHtOVUxMfSwgMTA3MiwgInVkcCJ9LAoreyJicmlkZ2Vjb250cm9sIiwgICAgICB7TlVMTH0sIDEwNzMsICJ0Y3AifSwKK3siYnJpZGdlY29udHJvbCIsICAgICAge05VTEx9LCAxMDczLCAidWRwIn0sCit7Indhcm1zcG90TWdtdCIsICAgICAgIHtOVUxMfSwgMTA3NCwgInRjcCJ9LAoreyJ3YXJtc3BvdE1nbXQiLCAgICAgICB7TlVMTH0sIDEwNzQsICJ1ZHAifSwKK3sicmRybXNoYyIsICAgICAgICAgICAge05VTEx9LCAxMDc1LCAidGNwIn0sCit7InJkcm1zaGMiLCAgICAgICAgICAgIHtOVUxMfSwgMTA3NSwgInVkcCJ9LAoreyJkYWItc3RpLWMiLCAgICAgICAgICB7TlVMTH0sIDEwNzYsICJ0Y3AifSwKK3siZGFiLXN0aS1jIiwgICAgICAgICAge05VTEx9LCAxMDc2LCAidWRwIn0sCit7ImltZ2FtZXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTA3NywgInRjcCJ9LAoreyJpbWdhbWVzIiwgICAgICAgICAgICB7TlVMTH0sIDEwNzcsICJ1ZHAifSwKK3siYXZvY2VudC1wcm94eSIsICAgICAge05VTEx9LCAxMDc4LCAidGNwIn0sCit7ImF2b2NlbnQtcHJveHkiLCAgICAgIHtOVUxMfSwgMTA3OCwgInVkcCJ9LAoreyJhc3Byb3ZhdGFsayIsICAgICAgICB7TlVMTH0sIDEwNzksICJ0Y3AifSwKK3siYXNwcm92YXRhbGsiLCAgICAgICAge05VTEx9LCAxMDc5LCAidWRwIn0sCit7InNvY2tzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTA4MCwgInRjcCJ9LAoreyJzb2NrcyIsICAgICAgICAgICAgICB7TlVMTH0sIDEwODAsICJ1ZHAifSwKK3sicHZ1bml3aWVuIiwgICAgICAgICAge05VTEx9LCAxMDgxLCAidGNwIn0sCit7InB2dW5pd2llbiIsICAgICAgICAgIHtOVUxMfSwgMTA4MSwgInVkcCJ9LAoreyJhbXQtZXNkLXByb3QiLCAgICAgICB7TlVMTH0sIDEwODIsICJ0Y3AifSwKK3siYW10LWVzZC1wcm90IiwgICAgICAge05VTEx9LCAxMDgyLCAidWRwIn0sCit7ImFuc29mdC1sbS0xIiwgICAgICAgIHtOVUxMfSwgMTA4MywgInRjcCJ9LAoreyJhbnNvZnQtbG0tMSIsICAgICAgICB7TlVMTH0sIDEwODMsICJ1ZHAifSwKK3siYW5zb2Z0LWxtLTIiLCAgICAgICAge05VTEx9LCAxMDg0LCAidGNwIn0sCit7ImFuc29mdC1sbS0yIiwgICAgICAgIHtOVUxMfSwgMTA4NCwgInVkcCJ9LAoreyJ3ZWJvYmplY3RzIiwgICAgICAgICB7TlVMTH0sIDEwODUsICJ0Y3AifSwKK3sid2Vib2JqZWN0cyIsICAgICAgICAge05VTEx9LCAxMDg1LCAidWRwIn0sCit7ImNwbHNjcmFtYmxlci1sZyIsICAgIHtOVUxMfSwgMTA4NiwgInRjcCJ9LAoreyJjcGxzY3JhbWJsZXItbGciLCAgICB7TlVMTH0sIDEwODYsICJ1ZHAifSwKK3siY3Bsc2NyYW1ibGVyLWluIiwgICAge05VTEx9LCAxMDg3LCAidGNwIn0sCit7ImNwbHNjcmFtYmxlci1pbiIsICAgIHtOVUxMfSwgMTA4NywgInVkcCJ9LAoreyJjcGxzY3JhbWJsZXItYWwiLCAgICB7TlVMTH0sIDEwODgsICJ0Y3AifSwKK3siY3Bsc2NyYW1ibGVyLWFsIiwgICAge05VTEx9LCAxMDg4LCAidWRwIn0sCit7ImZmLWFubnVuYyIsICAgICAgICAgIHtOVUxMfSwgMTA4OSwgInRjcCJ9LAoreyJmZi1hbm51bmMiLCAgICAgICAgICB7TlVMTH0sIDEwODksICJ1ZHAifSwKK3siZmYtZm1zIiwgICAgICAgICAgICAge05VTEx9LCAxMDkwLCAidGNwIn0sCit7ImZmLWZtcyIsICAgICAgICAgICAgIHtOVUxMfSwgMTA5MCwgInVkcCJ9LAoreyJmZi1zbSIsICAgICAgICAgICAgICB7TlVMTH0sIDEwOTEsICJ0Y3AifSwKK3siZmYtc20iLCAgICAgICAgICAgICAge05VTEx9LCAxMDkxLCAidWRwIn0sCit7Im9icnBkIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTA5MiwgInRjcCJ9LAoreyJvYnJwZCIsICAgICAgICAgICAgICB7TlVMTH0sIDEwOTIsICJ1ZHAifSwKK3sicHJvb2ZkIiwgICAgICAgICAgICAge05VTEx9LCAxMDkzLCAidGNwIn0sCit7InByb29mZCIsICAgICAgICAgICAgIHtOVUxMfSwgMTA5MywgInVkcCJ9LAoreyJyb290ZCIsICAgICAgICAgICAgICB7TlVMTH0sIDEwOTQsICJ0Y3AifSwKK3sicm9vdGQiLCAgICAgICAgICAgICAge05VTEx9LCAxMDk0LCAidWRwIn0sCit7Im5pY2VsaW5rIiwgICAgICAgICAgIHtOVUxMfSwgMTA5NSwgInRjcCJ9LAoreyJuaWNlbGluayIsICAgICAgICAgICB7TlVMTH0sIDEwOTUsICJ1ZHAifSwKK3siY25ycHJvdG9jb2wiLCAgICAgICAge05VTEx9LCAxMDk2LCAidGNwIn0sCit7ImNucnByb3RvY29sIiwgICAgICAgIHtOVUxMfSwgMTA5NiwgInVkcCJ9LAoreyJzdW5jbHVzdGVybWdyIiwgICAgICB7TlVMTH0sIDEwOTcsICJ0Y3AifSwKK3sic3VuY2x1c3Rlcm1nciIsICAgICAge05VTEx9LCAxMDk3LCAidWRwIn0sCit7InJtaWFjdGl2YXRpb24iLCAgICAgIHtOVUxMfSwgMTA5OCwgInRjcCJ9LAoreyJybWlhY3RpdmF0aW9uIiwgICAgICB7TlVMTH0sIDEwOTgsICJ1ZHAifSwKK3sicm1pcmVnaXN0cnkiLCAgICAgICAge05VTEx9LCAxMDk5LCAidGNwIn0sCit7InJtaXJlZ2lzdHJ5IiwgICAgICAgIHtOVUxMfSwgMTA5OSwgInVkcCJ9LAoreyJtY3RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDExMDAsICJ0Y3AifSwKK3sibWN0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTAwLCAidWRwIn0sCit7InB0Mi1kaXNjb3ZlciIsICAgICAgIHtOVUxMfSwgMTEwMSwgInRjcCJ9LAoreyJwdDItZGlzY292ZXIiLCAgICAgICB7TlVMTH0sIDExMDEsICJ1ZHAifSwKK3siYWRvYmVzZXJ2ZXItMSIsICAgICAge05VTEx9LCAxMTAyLCAidGNwIn0sCit7ImFkb2Jlc2VydmVyLTEiLCAgICAgIHtOVUxMfSwgMTEwMiwgInVkcCJ9LAoreyJhZG9iZXNlcnZlci0yIiwgICAgICB7TlVMTH0sIDExMDMsICJ0Y3AifSwKK3siYWRvYmVzZXJ2ZXItMiIsICAgICAge05VTEx9LCAxMTAzLCAidWRwIn0sCit7InhybCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTEwNCwgInRjcCJ9LAoreyJ4cmwiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDExMDQsICJ1ZHAifSwKK3siZnRyYW5oYyIsICAgICAgICAgICAge05VTEx9LCAxMTA1LCAidGNwIn0sCit7ImZ0cmFuaGMiLCAgICAgICAgICAgIHtOVUxMfSwgMTEwNSwgInVkcCJ9LAoreyJpc29pcHNpZ3BvcnQtMSIsICAgICB7TlVMTH0sIDExMDYsICJ0Y3AifSwKK3siaXNvaXBzaWdwb3J0LTEiLCAgICAge05VTEx9LCAxMTA2LCAidWRwIn0sCit7Imlzb2lwc2lncG9ydC0yIiwgICAgIHtOVUxMfSwgMTEwNywgInRjcCJ9LAoreyJpc29pcHNpZ3BvcnQtMiIsICAgICB7TlVMTH0sIDExMDcsICJ1ZHAifSwKK3sicmF0aW8tYWRwIiwgICAgICAgICAge05VTEx9LCAxMTA4LCAidGNwIn0sCit7InJhdGlvLWFkcCIsICAgICAgICAgIHtOVUxMfSwgMTEwOCwgInVkcCJ9LAoreyJ3ZWJhZG1zdGFydCIsICAgICAgICB7TlVMTH0sIDExMTAsICJ0Y3AifSwKK3sibmZzZC1rZWVwYWxpdmUiLCAgICAge05VTEx9LCAxMTEwLCAidWRwIn0sCit7Imxtc29jaWFsc2VydmVyIiwgICAgIHtOVUxMfSwgMTExMSwgInRjcCJ9LAoreyJsbXNvY2lhbHNlcnZlciIsICAgICB7TlVMTH0sIDExMTEsICJ1ZHAifSwKK3siaWNwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMTEyLCAidGNwIn0sCit7ImljcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTExMiwgInVkcCJ9LAoreyJsdHAtZGVlcHNwYWNlIiwgICAgICB7TlVMTH0sIDExMTMsICJ0Y3AifSwKK3sibHRwLWRlZXBzcGFjZSIsICAgICAge05VTEx9LCAxMTEzLCAidWRwIn0sCit7Im1pbmktc3FsIiwgICAgICAgICAgIHtOVUxMfSwgMTExNCwgInRjcCJ9LAoreyJtaW5pLXNxbCIsICAgICAgICAgICB7TlVMTH0sIDExMTQsICJ1ZHAifSwKK3siYXJkdXMtdHJucyIsICAgICAgICAge05VTEx9LCAxMTE1LCAidGNwIn0sCit7ImFyZHVzLXRybnMiLCAgICAgICAgIHtOVUxMfSwgMTExNSwgInVkcCJ9LAoreyJhcmR1cy1jbnRsIiwgICAgICAgICB7TlVMTH0sIDExMTYsICJ0Y3AifSwKK3siYXJkdXMtY250bCIsICAgICAgICAge05VTEx9LCAxMTE2LCAidWRwIn0sCit7ImFyZHVzLW10cm5zIiwgICAgICAgIHtOVUxMfSwgMTExNywgInRjcCJ9LAoreyJhcmR1cy1tdHJucyIsICAgICAgICB7TlVMTH0sIDExMTcsICJ1ZHAifSwKK3sic2FjcmVkIiwgICAgICAgICAgICAge05VTEx9LCAxMTE4LCAidGNwIn0sCit7InNhY3JlZCIsICAgICAgICAgICAgIHtOVUxMfSwgMTExOCwgInVkcCJ9LAoreyJibmV0Z2FtZSIsICAgICAgICAgICB7TlVMTH0sIDExMTksICJ0Y3AifSwKK3siYm5ldGdhbWUiLCAgICAgICAgICAge05VTEx9LCAxMTE5LCAidWRwIn0sCit7ImJuZXRmaWxlIiwgICAgICAgICAgIHtOVUxMfSwgMTEyMCwgInRjcCJ9LAoreyJibmV0ZmlsZSIsICAgICAgICAgICB7TlVMTH0sIDExMjAsICJ1ZHAifSwKK3sicm1wcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTIxLCAidGNwIn0sCit7InJtcHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTEyMSwgInVkcCJ9LAoreyJhdmFpbGFudC1tZ3IiLCAgICAgICB7TlVMTH0sIDExMjIsICJ0Y3AifSwKK3siYXZhaWxhbnQtbWdyIiwgICAgICAge05VTEx9LCAxMTIyLCAidWRwIn0sCit7Im11cnJheSIsICAgICAgICAgICAgIHtOVUxMfSwgMTEyMywgInRjcCJ9LAoreyJtdXJyYXkiLCAgICAgICAgICAgICB7TlVMTH0sIDExMjMsICJ1ZHAifSwKK3siaHB2bW1jb250cm9sIiwgICAgICAge05VTEx9LCAxMTI0LCAidGNwIn0sCit7Imhwdm1tY29udHJvbCIsICAgICAgIHtOVUxMfSwgMTEyNCwgInVkcCJ9LAoreyJocHZtbWFnZW50IiwgICAgICAgICB7TlVMTH0sIDExMjUsICJ0Y3AifSwKK3siaHB2bW1hZ2VudCIsICAgICAgICAge05VTEx9LCAxMTI1LCAidWRwIn0sCit7Imhwdm1tZGF0YSIsICAgICAgICAgIHtOVUxMfSwgMTEyNiwgInRjcCJ9LAoreyJocHZtbWRhdGEiLCAgICAgICAgICB7TlVMTH0sIDExMjYsICJ1ZHAifSwKK3sia3dkYi1jb21tbiIsICAgICAgICAge05VTEx9LCAxMTI3LCAidGNwIn0sCit7Imt3ZGItY29tbW4iLCAgICAgICAgIHtOVUxMfSwgMTEyNywgInVkcCJ9LAoreyJzYXBob3N0Y3RybCIsICAgICAgICB7TlVMTH0sIDExMjgsICJ0Y3AifSwKK3sic2FwaG9zdGN0cmwiLCAgICAgICAge05VTEx9LCAxMTI4LCAidWRwIn0sCit7InNhcGhvc3RjdHJscyIsICAgICAgIHtOVUxMfSwgMTEyOSwgInRjcCJ9LAoreyJzYXBob3N0Y3RybHMiLCAgICAgICB7TlVMTH0sIDExMjksICJ1ZHAifSwKK3siY2FzcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTMwLCAidGNwIn0sCit7ImNhc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTEzMCwgInVkcCJ9LAoreyJjYXNwc3NsIiwgICAgICAgICAgICB7TlVMTH0sIDExMzEsICJ0Y3AifSwKK3siY2FzcHNzbCIsICAgICAgICAgICAge05VTEx9LCAxMTMxLCAidWRwIn0sCit7Imt2bS12aWEtaXAiLCAgICAgICAgIHtOVUxMfSwgMTEzMiwgInRjcCJ9LAoreyJrdm0tdmlhLWlwIiwgICAgICAgICB7TlVMTH0sIDExMzIsICJ1ZHAifSwKK3siZGZuIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMTMzLCAidGNwIn0sCit7ImRmbiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTEzMywgInVkcCJ9LAoreyJhcGx4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDExMzQsICJ0Y3AifSwKK3siYXBseCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTM0LCAidWRwIn0sCit7Im9tbml2aXNpb24iLCAgICAgICAgIHtOVUxMfSwgMTEzNSwgInRjcCJ9LAoreyJvbW5pdmlzaW9uIiwgICAgICAgICB7TlVMTH0sIDExMzUsICJ1ZHAifSwKK3siaGhiLWdhdGV3YXkiLCAgICAgICAge05VTEx9LCAxMTM2LCAidGNwIn0sCit7ImhoYi1nYXRld2F5IiwgICAgICAgIHtOVUxMfSwgMTEzNiwgInVkcCJ9LAoreyJ0cmltIiwgICAgICAgICAgICAgICB7TlVMTH0sIDExMzcsICJ0Y3AifSwKK3sidHJpbSIsICAgICAgICAgICAgICAge05VTEx9LCAxMTM3LCAidWRwIn0sCit7ImVuY3J5cHRlZF9hZG1pbiIsICAgIHtOVUxMfSwgMTEzOCwgInRjcCJ9LAoreyJlbmNyeXB0ZWRfYWRtaW4iLCAgICB7TlVMTH0sIDExMzgsICJ1ZHAifSwKK3siZXZtIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMTM5LCAidGNwIn0sCit7ImV2bSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTEzOSwgInVkcCJ9LAoreyJhdXRvbm9jIiwgICAgICAgICAgICB7TlVMTH0sIDExNDAsICJ0Y3AifSwKK3siYXV0b25vYyIsICAgICAgICAgICAge05VTEx9LCAxMTQwLCAidWRwIn0sCit7Im14b21zcyIsICAgICAgICAgICAgIHtOVUxMfSwgMTE0MSwgInRjcCJ9LAoreyJteG9tc3MiLCAgICAgICAgICAgICB7TlVMTH0sIDExNDEsICJ1ZHAifSwKK3siZWR0b29scyIsICAgICAgICAgICAge05VTEx9LCAxMTQyLCAidGNwIn0sCit7ImVkdG9vbHMiLCAgICAgICAgICAgIHtOVUxMfSwgMTE0MiwgInVkcCJ9LAoreyJpbXl4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDExNDMsICJ0Y3AifSwKK3siaW15eCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTQzLCAidWRwIn0sCit7ImZ1c2NyaXB0IiwgICAgICAgICAgIHtOVUxMfSwgMTE0NCwgInRjcCJ9LAoreyJmdXNjcmlwdCIsICAgICAgICAgICB7TlVMTH0sIDExNDQsICJ1ZHAifSwKK3sieDktaWN1ZSIsICAgICAgICAgICAge05VTEx9LCAxMTQ1LCAidGNwIn0sCit7Ing5LWljdWUiLCAgICAgICAgICAgIHtOVUxMfSwgMTE0NSwgInVkcCJ9LAoreyJhdWRpdC10cmFuc2ZlciIsICAgICB7TlVMTH0sIDExNDYsICJ0Y3AifSwKK3siYXVkaXQtdHJhbnNmZXIiLCAgICAge05VTEx9LCAxMTQ2LCAidWRwIn0sCit7ImNhcGlvdmVybGFuIiwgICAgICAgIHtOVUxMfSwgMTE0NywgInRjcCJ9LAoreyJjYXBpb3ZlcmxhbiIsICAgICAgICB7TlVMTH0sIDExNDcsICJ1ZHAifSwKK3siZWxmaXEtcmVwbCIsICAgICAgICAge05VTEx9LCAxMTQ4LCAidGNwIn0sCit7ImVsZmlxLXJlcGwiLCAgICAgICAgIHtOVUxMfSwgMTE0OCwgInVkcCJ9LAoreyJidnRzb25hciIsICAgICAgICAgICB7TlVMTH0sIDExNDksICJ0Y3AifSwKK3siYnZ0c29uYXIiLCAgICAgICAgICAge05VTEx9LCAxMTQ5LCAidWRwIn0sCit7ImJsYXplIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTE1MCwgInRjcCJ9LAoreyJibGF6ZSIsICAgICAgICAgICAgICB7TlVMTH0sIDExNTAsICJ1ZHAifSwKK3sidW5pemVuc3VzIiwgICAgICAgICAge05VTEx9LCAxMTUxLCAidGNwIn0sCit7InVuaXplbnN1cyIsICAgICAgICAgIHtOVUxMfSwgMTE1MSwgInVkcCJ9LAoreyJ3aW5wb3BsYW5tZXNzIiwgICAgICB7TlVMTH0sIDExNTIsICJ0Y3AifSwKK3sid2lucG9wbGFubWVzcyIsICAgICAge05VTEx9LCAxMTUyLCAidWRwIn0sCit7ImMxMjIyLWFjc2UiLCAgICAgICAgIHtOVUxMfSwgMTE1MywgInRjcCJ9LAoreyJjMTIyMi1hY3NlIiwgICAgICAgICB7TlVMTH0sIDExNTMsICJ1ZHAifSwKK3sicmVzYWNvbW11bml0eSIsICAgICAge05VTEx9LCAxMTU0LCAidGNwIn0sCit7InJlc2Fjb21tdW5pdHkiLCAgICAgIHtOVUxMfSwgMTE1NCwgInVkcCJ9LAoreyJuZmEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDExNTUsICJ0Y3AifSwKK3sibmZhIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMTU1LCAidWRwIn0sCit7Imlhc2NvbnRyb2wtb21zIiwgICAgIHtOVUxMfSwgMTE1NiwgInRjcCJ9LAoreyJpYXNjb250cm9sLW9tcyIsICAgICB7TlVMTH0sIDExNTYsICJ1ZHAifSwKK3siaWFzY29udHJvbCIsICAgICAgICAge05VTEx9LCAxMTU3LCAidGNwIn0sCit7Imlhc2NvbnRyb2wiLCAgICAgICAgIHtOVUxMfSwgMTE1NywgInVkcCJ9LAoreyJkYmNvbnRyb2wtb21zIiwgICAgICB7TlVMTH0sIDExNTgsICJ0Y3AifSwKK3siZGJjb250cm9sLW9tcyIsICAgICAge05VTEx9LCAxMTU4LCAidWRwIn0sCit7Im9yYWNsZS1vbXMiLCAgICAgICAgIHtOVUxMfSwgMTE1OSwgInRjcCJ9LAoreyJvcmFjbGUtb21zIiwgICAgICAgICB7TlVMTH0sIDExNTksICJ1ZHAifSwKK3sib2xzdiIsICAgICAgICAgICAgICAge05VTEx9LCAxMTYwLCAidGNwIn0sCit7Im9sc3YiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTE2MCwgInVkcCJ9LAoreyJoZWFsdGgtcG9sbGluZyIsICAgICB7TlVMTH0sIDExNjEsICJ0Y3AifSwKK3siaGVhbHRoLXBvbGxpbmciLCAgICAge05VTEx9LCAxMTYxLCAidWRwIn0sCit7ImhlYWx0aC10cmFwIiwgICAgICAgIHtOVUxMfSwgMTE2MiwgInRjcCJ9LAoreyJoZWFsdGgtdHJhcCIsICAgICAgICB7TlVMTH0sIDExNjIsICJ1ZHAifSwKK3sic2RkcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTYzLCAidGNwIn0sCit7InNkZHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTE2MywgInVkcCJ9LAoreyJxc20tcHJveHkiLCAgICAgICAgICB7TlVMTH0sIDExNjQsICJ0Y3AifSwKK3sicXNtLXByb3h5IiwgICAgICAgICAge05VTEx9LCAxMTY0LCAidWRwIn0sCit7InFzbS1ndWkiLCAgICAgICAgICAgIHtOVUxMfSwgMTE2NSwgInRjcCJ9LAoreyJxc20tZ3VpIiwgICAgICAgICAgICB7TlVMTH0sIDExNjUsICJ1ZHAifSwKK3sicXNtLXJlbW90ZSIsICAgICAgICAge05VTEx9LCAxMTY2LCAidGNwIn0sCit7InFzbS1yZW1vdGUiLCAgICAgICAgIHtOVUxMfSwgMTE2NiwgInVkcCJ9LAoreyJjaXNjby1pcHNsYSIsICAgICAgICB7TlVMTH0sIDExNjcsICJ0Y3AifSwKK3siY2lzY28taXBzbGEiLCAgICAgICAge05VTEx9LCAxMTY3LCAidWRwIn0sCit7ImNpc2NvLWlwc2xhIiwgICAgICAgIHtOVUxMfSwgMTE2NywgInNjdHAifSwKK3sidmNoYXQiLCAgICAgICAgICAgICAge05VTEx9LCAxMTY4LCAidGNwIn0sCit7InZjaGF0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTE2OCwgInVkcCJ9LAoreyJ0cmlwd2lyZSIsICAgICAgICAgICB7TlVMTH0sIDExNjksICJ0Y3AifSwKK3sidHJpcHdpcmUiLCAgICAgICAgICAge05VTEx9LCAxMTY5LCAidWRwIn0sCit7ImF0Yy1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTE3MCwgInRjcCJ9LAoreyJhdGMtbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDExNzAsICJ1ZHAifSwKK3siYXRjLWFwcHNlcnZlciIsICAgICAge05VTEx9LCAxMTcxLCAidGNwIn0sCit7ImF0Yy1hcHBzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMTE3MSwgInVkcCJ9LAoreyJkbmFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDExNzIsICJ0Y3AifSwKK3siZG5hcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTcyLCAidWRwIn0sCit7ImQtY2luZW1hLXJycCIsICAgICAgIHtOVUxMfSwgMTE3MywgInRjcCJ9LAoreyJkLWNpbmVtYS1ycnAiLCAgICAgICB7TlVMTH0sIDExNzMsICJ1ZHAifSwKK3siZm5ldC1yZW1vdGUtdWkiLCAgICAge05VTEx9LCAxMTc0LCAidGNwIn0sCit7ImZuZXQtcmVtb3RlLXVpIiwgICAgIHtOVUxMfSwgMTE3NCwgInVkcCJ9LAoreyJkb3NzaWVyIiwgICAgICAgICAgICB7TlVMTH0sIDExNzUsICJ0Y3AifSwKK3siZG9zc2llciIsICAgICAgICAgICAge05VTEx9LCAxMTc1LCAidWRwIn0sCit7ImluZGlnby1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMTE3NiwgInRjcCJ9LAoreyJpbmRpZ28tc2VydmVyIiwgICAgICB7TlVMTH0sIDExNzYsICJ1ZHAifSwKK3siZGttZXNzZW5nZXIiLCAgICAgICAge05VTEx9LCAxMTc3LCAidGNwIn0sCit7ImRrbWVzc2VuZ2VyIiwgICAgICAgIHtOVUxMfSwgMTE3NywgInVkcCJ9LAoreyJzZ2ktc3Rvcm1hbiIsICAgICAgICB7TlVMTH0sIDExNzgsICJ0Y3AifSwKK3sic2dpLXN0b3JtYW4iLCAgICAgICAge05VTEx9LCAxMTc4LCAidWRwIn0sCit7ImIybiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTE3OSwgInRjcCJ9LAoreyJiMm4iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDExNzksICJ1ZHAifSwKK3sibWMtY2xpZW50IiwgICAgICAgICAge05VTEx9LCAxMTgwLCAidGNwIn0sCit7Im1jLWNsaWVudCIsICAgICAgICAgIHtOVUxMfSwgMTE4MCwgInVkcCJ9LAoreyIzY29tbmV0bWFuIiwgICAgICAgICB7TlVMTH0sIDExODEsICJ0Y3AifSwKK3siM2NvbW5ldG1hbiIsICAgICAgICAge05VTEx9LCAxMTgxLCAidWRwIn0sCit7ImFjY2VsZW5ldCIsICAgICAgICAgIHtOVUxMfSwgMTE4MiwgInRjcCJ9LAoreyJhY2NlbGVuZXQtZGF0YSIsICAgICB7TlVMTH0sIDExODIsICJ1ZHAifSwKK3sibGxzdXJmdXAtaHR0cCIsICAgICAge05VTEx9LCAxMTgzLCAidGNwIn0sCit7Imxsc3VyZnVwLWh0dHAiLCAgICAgIHtOVUxMfSwgMTE4MywgInVkcCJ9LAoreyJsbHN1cmZ1cC1odHRwcyIsICAgICB7TlVMTH0sIDExODQsICJ0Y3AifSwKK3sibGxzdXJmdXAtaHR0cHMiLCAgICAge05VTEx9LCAxMTg0LCAidWRwIn0sCit7ImNhdGNocG9sZSIsICAgICAgICAgIHtOVUxMfSwgMTE4NSwgInRjcCJ9LAoreyJjYXRjaHBvbGUiLCAgICAgICAgICB7TlVMTH0sIDExODUsICJ1ZHAifSwKK3sibXlzcWwtY2x1c3RlciIsICAgICAge05VTEx9LCAxMTg2LCAidGNwIn0sCit7Im15c3FsLWNsdXN0ZXIiLCAgICAgIHtOVUxMfSwgMTE4NiwgInVkcCJ9LAoreyJhbGlhcyIsICAgICAgICAgICAgICB7TlVMTH0sIDExODcsICJ0Y3AifSwKK3siYWxpYXMiLCAgICAgICAgICAgICAge05VTEx9LCAxMTg3LCAidWRwIn0sCit7ImhwLXdlYmFkbWluIiwgICAgICAgIHtOVUxMfSwgMTE4OCwgInRjcCJ9LAoreyJocC13ZWJhZG1pbiIsICAgICAgICB7TlVMTH0sIDExODgsICJ1ZHAifSwKK3sidW5ldCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTg5LCAidGNwIn0sCit7InVuZXQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTE4OSwgInVkcCJ9LAoreyJjb21tbGlueC1hdmwiLCAgICAgICB7TlVMTH0sIDExOTAsICJ0Y3AifSwKK3siY29tbWxpbngtYXZsIiwgICAgICAge05VTEx9LCAxMTkwLCAidWRwIn0sCit7ImdwZnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTE5MSwgInRjcCJ9LAoreyJncGZzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDExOTEsICJ1ZHAifSwKK3siY2FpZHMtc2Vuc29yIiwgICAgICAge05VTEx9LCAxMTkyLCAidGNwIn0sCit7ImNhaWRzLXNlbnNvciIsICAgICAgIHtOVUxMfSwgMTE5MiwgInVkcCJ9LAoreyJmaXZlYWNyb3NzIiwgICAgICAgICB7TlVMTH0sIDExOTMsICJ0Y3AifSwKK3siZml2ZWFjcm9zcyIsICAgICAgICAge05VTEx9LCAxMTkzLCAidWRwIn0sCit7Im9wZW52cG4iLCAgICAgICAgICAgIHtOVUxMfSwgMTE5NCwgInRjcCJ9LAoreyJvcGVudnBuIiwgICAgICAgICAgICB7TlVMTH0sIDExOTQsICJ1ZHAifSwKK3sicnNmLTEiLCAgICAgICAgICAgICAge05VTEx9LCAxMTk1LCAidGNwIn0sCit7InJzZi0xIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTE5NSwgInVkcCJ9LAoreyJuZXRtYWdpYyIsICAgICAgICAgICB7TlVMTH0sIDExOTYsICJ0Y3AifSwKK3sibmV0bWFnaWMiLCAgICAgICAgICAge05VTEx9LCAxMTk2LCAidWRwIn0sCit7ImNhcnJpdXMtcnNoZWxsIiwgICAgIHtOVUxMfSwgMTE5NywgInRjcCJ9LAoreyJjYXJyaXVzLXJzaGVsbCIsICAgICB7TlVMTH0sIDExOTcsICJ1ZHAifSwKK3siY2Fqby1kaXNjb3ZlcnkiLCAgICAge05VTEx9LCAxMTk4LCAidGNwIn0sCit7ImNham8tZGlzY292ZXJ5IiwgICAgIHtOVUxMfSwgMTE5OCwgInVkcCJ9LAoreyJkbWlkaSIsICAgICAgICAgICAgICB7TlVMTH0sIDExOTksICJ0Y3AifSwKK3siZG1pZGkiLCAgICAgICAgICAgICAge05VTEx9LCAxMTk5LCAidWRwIn0sCit7InNjb2wiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTIwMCwgInRjcCJ9LAoreyJzY29sIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEyMDAsICJ1ZHAifSwKK3sibnVjbGV1cy1zYW5kIiwgICAgICAge05VTEx9LCAxMjAxLCAidGNwIn0sCit7Im51Y2xldXMtc2FuZCIsICAgICAgIHtOVUxMfSwgMTIwMSwgInVkcCJ9LAoreyJjYWljY2lwYyIsICAgICAgICAgICB7TlVMTH0sIDEyMDIsICJ0Y3AifSwKK3siY2FpY2NpcGMiLCAgICAgICAgICAge05VTEx9LCAxMjAyLCAidWRwIn0sCit7InNzc2xpYy1tZ3IiLCAgICAgICAgIHtOVUxMfSwgMTIwMywgInRjcCJ9LAoreyJzc3NsaWMtbWdyIiwgICAgICAgICB7TlVMTH0sIDEyMDMsICJ1ZHAifSwKK3sic3NzbG9nLW1nciIsICAgICAgICAge05VTEx9LCAxMjA0LCAidGNwIn0sCit7InNzc2xvZy1tZ3IiLCAgICAgICAgIHtOVUxMfSwgMTIwNCwgInVkcCJ9LAoreyJhY2NvcmQtbWdjIiwgICAgICAgICB7TlVMTH0sIDEyMDUsICJ0Y3AifSwKK3siYWNjb3JkLW1nYyIsICAgICAgICAge05VTEx9LCAxMjA1LCAidWRwIn0sCit7ImFudGhvbnktZGF0YSIsICAgICAgIHtOVUxMfSwgMTIwNiwgInRjcCJ9LAoreyJhbnRob255LWRhdGEiLCAgICAgICB7TlVMTH0sIDEyMDYsICJ1ZHAifSwKK3sibWV0YXNhZ2UiLCAgICAgICAgICAge05VTEx9LCAxMjA3LCAidGNwIn0sCit7Im1ldGFzYWdlIiwgICAgICAgICAgIHtOVUxMfSwgMTIwNywgInVkcCJ9LAoreyJzZWFndWxsLWFpcyIsICAgICAgICB7TlVMTH0sIDEyMDgsICJ0Y3AifSwKK3sic2VhZ3VsbC1haXMiLCAgICAgICAge05VTEx9LCAxMjA4LCAidWRwIn0sCit7ImlwY2QzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTIwOSwgInRjcCJ9LAoreyJpcGNkMyIsICAgICAgICAgICAgICB7TlVMTH0sIDEyMDksICJ1ZHAifSwKK3siZW9zcyIsICAgICAgICAgICAgICAge05VTEx9LCAxMjEwLCAidGNwIn0sCit7ImVvc3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTIxMCwgInVkcCJ9LAoreyJncm9vdmUtZHBwIiwgICAgICAgICB7TlVMTH0sIDEyMTEsICJ0Y3AifSwKK3siZ3Jvb3ZlLWRwcCIsICAgICAgICAge05VTEx9LCAxMjExLCAidWRwIn0sCit7Imx1cGEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTIxMiwgInRjcCJ9LAoreyJsdXBhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEyMTIsICJ1ZHAifSwKK3sibXBjLWxpZmVuZXQiLCAgICAgICAge05VTEx9LCAxMjEzLCAidGNwIn0sCit7Im1wYy1saWZlbmV0IiwgICAgICAgIHtOVUxMfSwgMTIxMywgInVkcCJ9LAoreyJrYXphYSIsICAgICAgICAgICAgICB7TlVMTH0sIDEyMTQsICJ0Y3AifSwKK3sia2F6YWEiLCAgICAgICAgICAgICAge05VTEx9LCAxMjE0LCAidWRwIn0sCit7InNjYW5zdGF0LTEiLCAgICAgICAgIHtOVUxMfSwgMTIxNSwgInRjcCJ9LAoreyJzY2Fuc3RhdC0xIiwgICAgICAgICB7TlVMTH0sIDEyMTUsICJ1ZHAifSwKK3siZXRlYmFjNSIsICAgICAgICAgICAge05VTEx9LCAxMjE2LCAidGNwIn0sCit7ImV0ZWJhYzUiLCAgICAgICAgICAgIHtOVUxMfSwgMTIxNiwgInVkcCJ9LAoreyJocHNzLW5kYXBpIiwgICAgICAgICB7TlVMTH0sIDEyMTcsICJ0Y3AifSwKK3siaHBzcy1uZGFwaSIsICAgICAgICAge05VTEx9LCAxMjE3LCAidWRwIn0sCit7ImFlcm9mbGlnaHQtYWRzIiwgICAgIHtOVUxMfSwgMTIxOCwgInRjcCJ9LAoreyJhZXJvZmxpZ2h0LWFkcyIsICAgICB7TlVMTH0sIDEyMTgsICJ1ZHAifSwKK3siYWVyb2ZsaWdodC1yZXQiLCAgICAge05VTEx9LCAxMjE5LCAidGNwIn0sCit7ImFlcm9mbGlnaHQtcmV0IiwgICAgIHtOVUxMfSwgMTIxOSwgInVkcCJ9LAoreyJxdC1zZXJ2ZXJhZG1pbiIsICAgICB7TlVMTH0sIDEyMjAsICJ0Y3AifSwKK3sicXQtc2VydmVyYWRtaW4iLCAgICAge05VTEx9LCAxMjIwLCAidWRwIn0sCit7InN3ZWV0d2FyZS1hcHBzIiwgICAgIHtOVUxMfSwgMTIyMSwgInRjcCJ9LAoreyJzd2VldHdhcmUtYXBwcyIsICAgICB7TlVMTH0sIDEyMjEsICJ1ZHAifSwKK3sibmVydiIsICAgICAgICAgICAgICAge05VTEx9LCAxMjIyLCAidGNwIn0sCit7Im5lcnYiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTIyMiwgInVkcCJ9LAoreyJ0Z3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEyMjMsICJ0Y3AifSwKK3sidGdwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMjIzLCAidWRwIn0sCit7InZwbnoiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTIyNCwgInRjcCJ9LAoreyJ2cG56IiwgICAgICAgICAgICAgICB7TlVMTH0sIDEyMjQsICJ1ZHAifSwKK3sic2xpbmt5c2VhcmNoIiwgICAgICAge05VTEx9LCAxMjI1LCAidGNwIn0sCit7InNsaW5reXNlYXJjaCIsICAgICAgIHtOVUxMfSwgMTIyNSwgInVkcCJ9LAoreyJzdGd4ZndzIiwgICAgICAgICAgICB7TlVMTH0sIDEyMjYsICJ0Y3AifSwKK3sic3RneGZ3cyIsICAgICAgICAgICAge05VTEx9LCAxMjI2LCAidWRwIn0sCit7ImRuczJnbyIsICAgICAgICAgICAgIHtOVUxMfSwgMTIyNywgInRjcCJ9LAoreyJkbnMyZ28iLCAgICAgICAgICAgICB7TlVMTH0sIDEyMjcsICJ1ZHAifSwKK3siZmxvcmVuY2UiLCAgICAgICAgICAge05VTEx9LCAxMjI4LCAidGNwIn0sCit7ImZsb3JlbmNlIiwgICAgICAgICAgIHtOVUxMfSwgMTIyOCwgInVkcCJ9LAoreyJ6ZW50ZWQiLCAgICAgICAgICAgICB7TlVMTH0sIDEyMjksICJ0Y3AifSwKK3siemVudGVkIiwgICAgICAgICAgICAge05VTEx9LCAxMjI5LCAidWRwIn0sCit7InBlcmlzY29wZSIsICAgICAgICAgIHtOVUxMfSwgMTIzMCwgInRjcCJ9LAoreyJwZXJpc2NvcGUiLCAgICAgICAgICB7TlVMTH0sIDEyMzAsICJ1ZHAifSwKK3sibWVuYW5kbWljZS1scG0iLCAgICAge05VTEx9LCAxMjMxLCAidGNwIn0sCit7Im1lbmFuZG1pY2UtbHBtIiwgICAgIHtOVUxMfSwgMTIzMSwgInVkcCJ9LAoreyJ1bml2LWFwcHNlcnZlciIsICAgICB7TlVMTH0sIDEyMzMsICJ0Y3AifSwKK3sidW5pdi1hcHBzZXJ2ZXIiLCAgICAge05VTEx9LCAxMjMzLCAidWRwIn0sCit7InNlYXJjaC1hZ2VudCIsICAgICAgIHtOVUxMfSwgMTIzNCwgInRjcCJ9LAoreyJzZWFyY2gtYWdlbnQiLCAgICAgICB7TlVMTH0sIDEyMzQsICJ1ZHAifSwKK3sibW9zYWljc3lzc3ZjMSIsICAgICAge05VTEx9LCAxMjM1LCAidGNwIn0sCit7Im1vc2FpY3N5c3N2YzEiLCAgICAgIHtOVUxMfSwgMTIzNSwgInVkcCJ9LAoreyJidmNvbnRyb2wiLCAgICAgICAgICB7TlVMTH0sIDEyMzYsICJ0Y3AifSwKK3siYnZjb250cm9sIiwgICAgICAgICAge05VTEx9LCAxMjM2LCAidWRwIn0sCit7InRzZG9zMzkwIiwgICAgICAgICAgIHtOVUxMfSwgMTIzNywgInRjcCJ9LAoreyJ0c2RvczM5MCIsICAgICAgICAgICB7TlVMTH0sIDEyMzcsICJ1ZHAifSwKK3siaGFjbC1xcyIsICAgICAgICAgICAge05VTEx9LCAxMjM4LCAidGNwIn0sCit7ImhhY2wtcXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTIzOCwgInVkcCJ9LAoreyJubXNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEyMzksICJ0Y3AifSwKK3sibm1zZCIsICAgICAgICAgICAgICAge05VTEx9LCAxMjM5LCAidWRwIn0sCit7Imluc3RhbnRpYSIsICAgICAgICAgIHtOVUxMfSwgMTI0MCwgInRjcCJ9LAoreyJpbnN0YW50aWEiLCAgICAgICAgICB7TlVMTH0sIDEyNDAsICJ1ZHAifSwKK3sibmVzc3VzIiwgICAgICAgICAgICAge05VTEx9LCAxMjQxLCAidGNwIn0sCit7Im5lc3N1cyIsICAgICAgICAgICAgIHtOVUxMfSwgMTI0MSwgInVkcCJ9LAoreyJubWFzb3ZlcmlwIiwgICAgICAgICB7TlVMTH0sIDEyNDIsICJ0Y3AifSwKK3sibm1hc292ZXJpcCIsICAgICAgICAge05VTEx9LCAxMjQyLCAidWRwIn0sCit7InNlcmlhbGdhdGV3YXkiLCAgICAgIHtOVUxMfSwgMTI0MywgInRjcCJ9LAoreyJzZXJpYWxnYXRld2F5IiwgICAgICB7TlVMTH0sIDEyNDMsICJ1ZHAifSwKK3siaXNiY29uZmVyZW5jZTEiLCAgICAge05VTEx9LCAxMjQ0LCAidGNwIn0sCit7ImlzYmNvbmZlcmVuY2UxIiwgICAgIHtOVUxMfSwgMTI0NCwgInVkcCJ9LAoreyJpc2Jjb25mZXJlbmNlMiIsICAgICB7TlVMTH0sIDEyNDUsICJ0Y3AifSwKK3siaXNiY29uZmVyZW5jZTIiLCAgICAge05VTEx9LCAxMjQ1LCAidWRwIn0sCit7InBheXJvdXRlciIsICAgICAgICAgIHtOVUxMfSwgMTI0NiwgInRjcCJ9LAoreyJwYXlyb3V0ZXIiLCAgICAgICAgICB7TlVMTH0sIDEyNDYsICJ1ZHAifSwKK3sidmlzaW9ucHlyYW1pZCIsICAgICAge05VTEx9LCAxMjQ3LCAidGNwIn0sCit7InZpc2lvbnB5cmFtaWQiLCAgICAgIHtOVUxMfSwgMTI0NywgInVkcCJ9LAoreyJoZXJtZXMiLCAgICAgICAgICAgICB7TlVMTH0sIDEyNDgsICJ0Y3AifSwKK3siaGVybWVzIiwgICAgICAgICAgICAge05VTEx9LCAxMjQ4LCAidWRwIn0sCit7Im1lc2F2aXN0YWNvIiwgICAgICAgIHtOVUxMfSwgMTI0OSwgInRjcCJ9LAoreyJtZXNhdmlzdGFjbyIsICAgICAgICB7TlVMTH0sIDEyNDksICJ1ZHAifSwKK3sic3dsZHktc2lhcyIsICAgICAgICAge05VTEx9LCAxMjUwLCAidGNwIn0sCit7InN3bGR5LXNpYXMiLCAgICAgICAgIHtOVUxMfSwgMTI1MCwgInVkcCJ9LAoreyJzZXJ2ZXJncmFwaCIsICAgICAgICB7TlVMTH0sIDEyNTEsICJ0Y3AifSwKK3sic2VydmVyZ3JhcGgiLCAgICAgICAge05VTEx9LCAxMjUxLCAidWRwIn0sCit7ImJzcG5lLXBjYyIsICAgICAgICAgIHtOVUxMfSwgMTI1MiwgInRjcCJ9LAoreyJic3BuZS1wY2MiLCAgICAgICAgICB7TlVMTH0sIDEyNTIsICJ1ZHAifSwKK3sicTU1LXBjYyIsICAgICAgICAgICAge05VTEx9LCAxMjUzLCAidGNwIn0sCit7InE1NS1wY2MiLCAgICAgICAgICAgIHtOVUxMfSwgMTI1MywgInVkcCJ9LAoreyJkZS1ub2MiLCAgICAgICAgICAgICB7TlVMTH0sIDEyNTQsICJ0Y3AifSwKK3siZGUtbm9jIiwgICAgICAgICAgICAge05VTEx9LCAxMjU0LCAidWRwIn0sCit7ImRlLWNhY2hlLXF1ZXJ5IiwgICAgIHtOVUxMfSwgMTI1NSwgInRjcCJ9LAoreyJkZS1jYWNoZS1xdWVyeSIsICAgICB7TlVMTH0sIDEyNTUsICJ1ZHAifSwKK3siZGUtc2VydmVyIiwgICAgICAgICAge05VTEx9LCAxMjU2LCAidGNwIn0sCit7ImRlLXNlcnZlciIsICAgICAgICAgIHtOVUxMfSwgMTI1NiwgInVkcCJ9LAoreyJzaG9ja3dhdmUyIiwgICAgICAgICB7TlVMTH0sIDEyNTcsICJ0Y3AifSwKK3sic2hvY2t3YXZlMiIsICAgICAgICAge05VTEx9LCAxMjU3LCAidWRwIn0sCit7Im9wZW5ubCIsICAgICAgICAgICAgIHtOVUxMfSwgMTI1OCwgInRjcCJ9LAoreyJvcGVubmwiLCAgICAgICAgICAgICB7TlVMTH0sIDEyNTgsICJ1ZHAifSwKK3sib3Blbm5sLXZvaWNlIiwgICAgICAge05VTEx9LCAxMjU5LCAidGNwIn0sCit7Im9wZW5ubC12b2ljZSIsICAgICAgIHtOVUxMfSwgMTI1OSwgInVkcCJ9LAoreyJpYm0tc3NkIiwgICAgICAgICAgICB7TlVMTH0sIDEyNjAsICJ0Y3AifSwKK3siaWJtLXNzZCIsICAgICAgICAgICAge05VTEx9LCAxMjYwLCAidWRwIn0sCit7Im1wc2hyc3YiLCAgICAgICAgICAgIHtOVUxMfSwgMTI2MSwgInRjcCJ9LAoreyJtcHNocnN2IiwgICAgICAgICAgICB7TlVMTH0sIDEyNjEsICJ1ZHAifSwKK3sicW50cy1vcmIiLCAgICAgICAgICAge05VTEx9LCAxMjYyLCAidGNwIn0sCit7InFudHMtb3JiIiwgICAgICAgICAgIHtOVUxMfSwgMTI2MiwgInVkcCJ9LAoreyJka2EiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEyNjMsICJ0Y3AifSwKK3siZGthIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMjYzLCAidWRwIn0sCit7InByYXQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTI2NCwgInRjcCJ9LAoreyJwcmF0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDEyNjQsICJ1ZHAifSwKK3siZHNzaWFwaSIsICAgICAgICAgICAge05VTEx9LCAxMjY1LCAidGNwIn0sCit7ImRzc2lhcGkiLCAgICAgICAgICAgIHtOVUxMfSwgMTI2NSwgInVkcCJ9LAoreyJkZWxscHdyYXBwa3MiLCAgICAgICB7TlVMTH0sIDEyNjYsICJ0Y3AifSwKK3siZGVsbHB3cmFwcGtzIiwgICAgICAge05VTEx9LCAxMjY2LCAidWRwIn0sCit7ImVwYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTI2NywgInRjcCJ9LAoreyJlcGMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEyNjcsICJ1ZHAifSwKK3sicHJvcGVsLW1zZ3N5cyIsICAgICAge05VTEx9LCAxMjY4LCAidGNwIn0sCit7InByb3BlbC1tc2dzeXMiLCAgICAgIHtOVUxMfSwgMTI2OCwgInVkcCJ9LAoreyJ3YXRpbGFwcCIsICAgICAgICAgICB7TlVMTH0sIDEyNjksICJ0Y3AifSwKK3sid2F0aWxhcHAiLCAgICAgICAgICAge05VTEx9LCAxMjY5LCAidWRwIn0sCit7Im9wc21nciIsICAgICAgICAgICAgIHtOVUxMfSwgMTI3MCwgInRjcCJ9LAoreyJvcHNtZ3IiLCAgICAgICAgICAgICB7TlVMTH0sIDEyNzAsICJ1ZHAifSwKK3siZXhjdyIsICAgICAgICAgICAgICAge05VTEx9LCAxMjcxLCAidGNwIn0sCit7ImV4Y3ciLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTI3MSwgInVkcCJ9LAoreyJjc3BtbG9ja21nciIsICAgICAgICB7TlVMTH0sIDEyNzIsICJ0Y3AifSwKK3siY3NwbWxvY2ttZ3IiLCAgICAgICAge05VTEx9LCAxMjcyLCAidWRwIn0sCit7ImVtYy1nYXRld2F5IiwgICAgICAgIHtOVUxMfSwgMTI3MywgInRjcCJ9LAoreyJlbWMtZ2F0ZXdheSIsICAgICAgICB7TlVMTH0sIDEyNzMsICJ1ZHAifSwKK3sidDFkaXN0cHJvYyIsICAgICAgICAge05VTEx9LCAxMjc0LCAidGNwIn0sCit7InQxZGlzdHByb2MiLCAgICAgICAgIHtOVUxMfSwgMTI3NCwgInVkcCJ9LAoreyJpdmNvbGxlY3RvciIsICAgICAgICB7TlVMTH0sIDEyNzUsICJ0Y3AifSwKK3siaXZjb2xsZWN0b3IiLCAgICAgICAge05VTEx9LCAxMjc1LCAidWRwIn0sCit7Iml2bWFuYWdlciIsICAgICAgICAgIHtOVUxMfSwgMTI3NiwgInRjcCJ9LAoreyJpdm1hbmFnZXIiLCAgICAgICAgICB7TlVMTH0sIDEyNzYsICJ1ZHAifSwKK3sibWl2YS1tcXMiLCAgICAgICAgICAge05VTEx9LCAxMjc3LCAidGNwIn0sCit7Im1pdmEtbXFzIiwgICAgICAgICAgIHtOVUxMfSwgMTI3NywgInVkcCJ9LAoreyJkZWxsd2ViYWRtaW4tMSIsICAgICB7TlVMTH0sIDEyNzgsICJ0Y3AifSwKK3siZGVsbHdlYmFkbWluLTEiLCAgICAge05VTEx9LCAxMjc4LCAidWRwIn0sCit7ImRlbGx3ZWJhZG1pbi0yIiwgICAgIHtOVUxMfSwgMTI3OSwgInRjcCJ9LAoreyJkZWxsd2ViYWRtaW4tMiIsICAgICB7TlVMTH0sIDEyNzksICJ1ZHAifSwKK3sicGljdHJvZ3JhcGh5IiwgICAgICAge05VTEx9LCAxMjgwLCAidGNwIn0sCit7InBpY3Ryb2dyYXBoeSIsICAgICAgIHtOVUxMfSwgMTI4MCwgInVkcCJ9LAoreyJoZWFsdGhkIiwgICAgICAgICAgICB7TlVMTH0sIDEyODEsICJ0Y3AifSwKK3siaGVhbHRoZCIsICAgICAgICAgICAge05VTEx9LCAxMjgxLCAidWRwIn0sCit7ImVtcGVyaW9uIiwgICAgICAgICAgIHtOVUxMfSwgMTI4MiwgInRjcCJ9LAoreyJlbXBlcmlvbiIsICAgICAgICAgICB7TlVMTH0sIDEyODIsICJ1ZHAifSwKK3sicHJvZHVjdGluZm8iLCAgICAgICAge05VTEx9LCAxMjgzLCAidGNwIn0sCit7InByb2R1Y3RpbmZvIiwgICAgICAgIHtOVUxMfSwgMTI4MywgInVkcCJ9LAoreyJpZWUtcWZ4IiwgICAgICAgICAgICB7TlVMTH0sIDEyODQsICJ0Y3AifSwKK3siaWVlLXFmeCIsICAgICAgICAgICAge05VTEx9LCAxMjg0LCAidWRwIn0sCit7Im5lb2lmYWNlIiwgICAgICAgICAgIHtOVUxMfSwgMTI4NSwgInRjcCJ9LAoreyJuZW9pZmFjZSIsICAgICAgICAgICB7TlVMTH0sIDEyODUsICJ1ZHAifSwKK3sibmV0dWl0aXZlIiwgICAgICAgICAge05VTEx9LCAxMjg2LCAidGNwIn0sCit7Im5ldHVpdGl2ZSIsICAgICAgICAgIHtOVUxMfSwgMTI4NiwgInVkcCJ9LAoreyJyb3V0ZW1hdGNoIiwgICAgICAgICB7TlVMTH0sIDEyODcsICJ0Y3AifSwKK3sicm91dGVtYXRjaCIsICAgICAgICAge05VTEx9LCAxMjg3LCAidWRwIn0sCit7Im5hdmJ1ZGR5IiwgICAgICAgICAgIHtOVUxMfSwgMTI4OCwgInRjcCJ9LAoreyJuYXZidWRkeSIsICAgICAgICAgICB7TlVMTH0sIDEyODgsICJ1ZHAifSwKK3siandhbGtzZXJ2ZXIiLCAgICAgICAge05VTEx9LCAxMjg5LCAidGNwIn0sCit7Imp3YWxrc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMTI4OSwgInVkcCJ9LAoreyJ3aW5qYXNlcnZlciIsICAgICAgICB7TlVMTH0sIDEyOTAsICJ0Y3AifSwKK3sid2luamFzZXJ2ZXIiLCAgICAgICAge05VTEx9LCAxMjkwLCAidWRwIn0sCit7InNlYWd1bGxsbXMiLCAgICAgICAgIHtOVUxMfSwgMTI5MSwgInRjcCJ9LAoreyJzZWFndWxsbG1zIiwgICAgICAgICB7TlVMTH0sIDEyOTEsICJ1ZHAifSwKK3siZHNkbiIsICAgICAgICAgICAgICAge05VTEx9LCAxMjkyLCAidGNwIn0sCit7ImRzZG4iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTI5MiwgInVkcCJ9LAoreyJwa3Qta3JiLWlwc2VjIiwgICAgICB7TlVMTH0sIDEyOTMsICJ0Y3AifSwKK3sicGt0LWtyYi1pcHNlYyIsICAgICAge05VTEx9LCAxMjkzLCAidWRwIn0sCit7ImNtbWRyaXZlciIsICAgICAgICAgIHtOVUxMfSwgMTI5NCwgInRjcCJ9LAoreyJjbW1kcml2ZXIiLCAgICAgICAgICB7TlVMTH0sIDEyOTQsICJ1ZHAifSwKK3siZWh0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxMjk1LCAidGNwIn0sCit7ImVodHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTI5NSwgInVkcCJ9LAoreyJkcHJveHkiLCAgICAgICAgICAgICB7TlVMTH0sIDEyOTYsICJ0Y3AifSwKK3siZHByb3h5IiwgICAgICAgICAgICAge05VTEx9LCAxMjk2LCAidWRwIn0sCit7InNkcHJveHkiLCAgICAgICAgICAgIHtOVUxMfSwgMTI5NywgInRjcCJ9LAoreyJzZHByb3h5IiwgICAgICAgICAgICB7TlVMTH0sIDEyOTcsICJ1ZHAifSwKK3sibHBjcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMjk4LCAidGNwIn0sCit7ImxwY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTI5OCwgInVkcCJ9LAoreyJocC1zY2kiLCAgICAgICAgICAgICB7TlVMTH0sIDEyOTksICJ0Y3AifSwKK3siaHAtc2NpIiwgICAgICAgICAgICAge05VTEx9LCAxMjk5LCAidWRwIn0sCit7ImgzMjNob3N0Y2FsbHNjIiwgICAgIHtOVUxMfSwgMTMwMCwgInRjcCJ9LAoreyJoMzIzaG9zdGNhbGxzYyIsICAgICB7TlVMTH0sIDEzMDAsICJ1ZHAifSwKK3siY2kzLXNvZnR3YXJlLTEiLCAgICAge05VTEx9LCAxMzAxLCAidGNwIn0sCit7ImNpMy1zb2Z0d2FyZS0xIiwgICAgIHtOVUxMfSwgMTMwMSwgInVkcCJ9LAoreyJjaTMtc29mdHdhcmUtMiIsICAgICB7TlVMTH0sIDEzMDIsICJ0Y3AifSwKK3siY2kzLXNvZnR3YXJlLTIiLCAgICAge05VTEx9LCAxMzAyLCAidWRwIn0sCit7InNmdHNydiIsICAgICAgICAgICAgIHtOVUxMfSwgMTMwMywgInRjcCJ9LAoreyJzZnRzcnYiLCAgICAgICAgICAgICB7TlVMTH0sIDEzMDMsICJ1ZHAifSwKK3siYm9vbWVyYW5nIiwgICAgICAgICAge05VTEx9LCAxMzA0LCAidGNwIn0sCit7ImJvb21lcmFuZyIsICAgICAgICAgIHtOVUxMfSwgMTMwNCwgInVkcCJ9LAoreyJwZS1taWtlIiwgICAgICAgICAgICB7TlVMTH0sIDEzMDUsICJ0Y3AifSwKK3sicGUtbWlrZSIsICAgICAgICAgICAge05VTEx9LCAxMzA1LCAidWRwIn0sCit7InJlLWNvbm4tcHJvdG8iLCAgICAgIHtOVUxMfSwgMTMwNiwgInRjcCJ9LAoreyJyZS1jb25uLXByb3RvIiwgICAgICB7TlVMTH0sIDEzMDYsICJ1ZHAifSwKK3sicGFjbWFuZCIsICAgICAgICAgICAge05VTEx9LCAxMzA3LCAidGNwIn0sCit7InBhY21hbmQiLCAgICAgICAgICAgIHtOVUxMfSwgMTMwNywgInVkcCJ9LAoreyJvZHNpIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzMDgsICJ0Y3AifSwKK3sib2RzaSIsICAgICAgICAgICAgICAge05VTEx9LCAxMzA4LCAidWRwIn0sCit7Imp0YWctc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMTMwOSwgInRjcCJ9LAoreyJqdGFnLXNlcnZlciIsICAgICAgICB7TlVMTH0sIDEzMDksICJ1ZHAifSwKK3siaHVza3kiLCAgICAgICAgICAgICAge05VTEx9LCAxMzEwLCAidGNwIn0sCit7Imh1c2t5IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTMxMCwgInVkcCJ9LAoreyJyeG1vbiIsICAgICAgICAgICAgICB7TlVMTH0sIDEzMTEsICJ0Y3AifSwKK3sicnhtb24iLCAgICAgICAgICAgICAge05VTEx9LCAxMzExLCAidWRwIn0sCit7InN0aS1lbnZpc2lvbiIsICAgICAgIHtOVUxMfSwgMTMxMiwgInRjcCJ9LAoreyJzdGktZW52aXNpb24iLCAgICAgICB7TlVMTH0sIDEzMTIsICJ1ZHAifSwKK3siYm1jX3BhdHJvbGRiIiwgICAgICAge05VTEx9LCAxMzEzLCAidGNwIn0sCit7ImJtY19wYXRyb2xkYiIsICAgICAgIHtOVUxMfSwgMTMxMywgInVkcCJ9LAoreyJwZHBzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzMTQsICJ0Y3AifSwKK3sicGRwcyIsICAgICAgICAgICAgICAge05VTEx9LCAxMzE0LCAidWRwIn0sCit7ImVscyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTMxNSwgInRjcCJ9LAoreyJlbHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEzMTUsICJ1ZHAifSwKK3siZXhiaXQtZXNjcCIsICAgICAgICAge05VTEx9LCAxMzE2LCAidGNwIn0sCit7ImV4Yml0LWVzY3AiLCAgICAgICAgIHtOVUxMfSwgMTMxNiwgInVkcCJ9LAoreyJ2cnRzLWlwY3NlcnZlciIsICAgICB7TlVMTH0sIDEzMTcsICJ0Y3AifSwKK3sidnJ0cy1pcGNzZXJ2ZXIiLCAgICAge05VTEx9LCAxMzE3LCAidWRwIn0sCit7ImtyYjVnYXRla2VlcGVyIiwgICAgIHtOVUxMfSwgMTMxOCwgInRjcCJ9LAoreyJrcmI1Z2F0ZWtlZXBlciIsICAgICB7TlVMTH0sIDEzMTgsICJ1ZHAifSwKK3siYW14LWljc3AiLCAgICAgICAgICAge05VTEx9LCAxMzE5LCAidGNwIn0sCit7ImFteC1pY3NwIiwgICAgICAgICAgIHtOVUxMfSwgMTMxOSwgInVkcCJ9LAoreyJhbXgtYXhibmV0IiwgICAgICAgICB7TlVMTH0sIDEzMjAsICJ0Y3AifSwKK3siYW14LWF4Ym5ldCIsICAgICAgICAge05VTEx9LCAxMzIwLCAidWRwIn0sCit7InBpcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTMyMSwgInRjcCJ9LAoreyJwaXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEzMjEsICJ1ZHAifSwKK3sibm92YXRpb24iLCAgICAgICAgICAge05VTEx9LCAxMzIyLCAidGNwIn0sCit7Im5vdmF0aW9uIiwgICAgICAgICAgIHtOVUxMfSwgMTMyMiwgInVkcCJ9LAoreyJicmNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzMjMsICJ0Y3AifSwKK3siYnJjZCIsICAgICAgICAgICAgICAge05VTEx9LCAxMzIzLCAidWRwIn0sCit7ImRlbHRhLW1jcCIsICAgICAgICAgIHtOVUxMfSwgMTMyNCwgInRjcCJ9LAoreyJkZWx0YS1tY3AiLCAgICAgICAgICB7TlVMTH0sIDEzMjQsICJ1ZHAifSwKK3siZHgtaW5zdHJ1bWVudCIsICAgICAge05VTEx9LCAxMzI1LCAidGNwIn0sCit7ImR4LWluc3RydW1lbnQiLCAgICAgIHtOVUxMfSwgMTMyNSwgInVkcCJ9LAoreyJ3aW1zaWMiLCAgICAgICAgICAgICB7TlVMTH0sIDEzMjYsICJ0Y3AifSwKK3sid2ltc2ljIiwgICAgICAgICAgICAge05VTEx9LCAxMzI2LCAidWRwIn0sCit7InVsdHJleCIsICAgICAgICAgICAgIHtOVUxMfSwgMTMyNywgInRjcCJ9LAoreyJ1bHRyZXgiLCAgICAgICAgICAgICB7TlVMTH0sIDEzMjcsICJ1ZHAifSwKK3siZXdhbGwiLCAgICAgICAgICAgICAge05VTEx9LCAxMzI4LCAidGNwIn0sCit7ImV3YWxsIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTMyOCwgInVkcCJ9LAoreyJuZXRkYi1leHBvcnQiLCAgICAgICB7TlVMTH0sIDEzMjksICJ0Y3AifSwKK3sibmV0ZGItZXhwb3J0IiwgICAgICAge05VTEx9LCAxMzI5LCAidWRwIn0sCit7InN0cmVldHBlcmZlY3QiLCAgICAgIHtOVUxMfSwgMTMzMCwgInRjcCJ9LAoreyJzdHJlZXRwZXJmZWN0IiwgICAgICB7TlVMTH0sIDEzMzAsICJ1ZHAifSwKK3siaW50ZXJzYW4iLCAgICAgICAgICAge05VTEx9LCAxMzMxLCAidGNwIn0sCit7ImludGVyc2FuIiwgICAgICAgICAgIHtOVUxMfSwgMTMzMSwgInVkcCJ9LAoreyJwY2lhLXJ4cC1iIiwgICAgICAgICB7TlVMTH0sIDEzMzIsICJ0Y3AifSwKK3sicGNpYS1yeHAtYiIsICAgICAgICAge05VTEx9LCAxMzMyLCAidWRwIn0sCit7InBhc3N3cmQtcG9saWN5IiwgICAgIHtOVUxMfSwgMTMzMywgInRjcCJ9LAoreyJwYXNzd3JkLXBvbGljeSIsICAgICB7TlVMTH0sIDEzMzMsICJ1ZHAifSwKK3sid3JpdGVzcnYiLCAgICAgICAgICAge05VTEx9LCAxMzM0LCAidGNwIn0sCit7IndyaXRlc3J2IiwgICAgICAgICAgIHtOVUxMfSwgMTMzNCwgInVkcCJ9LAoreyJkaWdpdGFsLW5vdGFyeSIsICAgICB7TlVMTH0sIDEzMzUsICJ0Y3AifSwKK3siZGlnaXRhbC1ub3RhcnkiLCAgICAge05VTEx9LCAxMzM1LCAidWRwIn0sCit7ImlzY2hhdCIsICAgICAgICAgICAgIHtOVUxMfSwgMTMzNiwgInRjcCJ9LAoreyJpc2NoYXQiLCAgICAgICAgICAgICB7TlVMTH0sIDEzMzYsICJ1ZHAifSwKK3sibWVuYW5kbWljZS1kbnMiLCAgICAge05VTEx9LCAxMzM3LCAidGNwIn0sCit7Im1lbmFuZG1pY2UtZG5zIiwgICAgIHtOVUxMfSwgMTMzNywgInVkcCJ9LAoreyJ3bWMtbG9nLXN2YyIsICAgICAgICB7TlVMTH0sIDEzMzgsICJ0Y3AifSwKK3sid21jLWxvZy1zdmMiLCAgICAgICAge05VTEx9LCAxMzM4LCAidWRwIn0sCit7ImtqdHNpdGVzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMTMzOSwgInRjcCJ9LAoreyJranRzaXRlc2VydmVyIiwgICAgICB7TlVMTH0sIDEzMzksICJ1ZHAifSwKK3sibmFhcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMzQwLCAidGNwIn0sCit7Im5hYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTM0MCwgInVkcCJ9LAoreyJxdWJlcyIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNDEsICJ0Y3AifSwKK3sicXViZXMiLCAgICAgICAgICAgICAge05VTEx9LCAxMzQxLCAidWRwIn0sCit7ImVzYnJva2VyIiwgICAgICAgICAgIHtOVUxMfSwgMTM0MiwgInRjcCJ9LAoreyJlc2Jyb2tlciIsICAgICAgICAgICB7TlVMTH0sIDEzNDIsICJ1ZHAifSwKK3sicmUxMDEiLCAgICAgICAgICAgICAge05VTEx9LCAxMzQzLCAidGNwIn0sCit7InJlMTAxIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM0MywgInVkcCJ9LAoreyJpY2FwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzNDQsICJ0Y3AifSwKK3siaWNhcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMzQ0LCAidWRwIn0sCit7InZwanAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTM0NSwgInRjcCJ9LAoreyJ2cGpwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzNDUsICJ1ZHAifSwKK3siYWx0YS1hbmEtbG0iLCAgICAgICAge05VTEx9LCAxMzQ2LCAidGNwIn0sCit7ImFsdGEtYW5hLWxtIiwgICAgICAgIHtOVUxMfSwgMTM0NiwgInVkcCJ9LAoreyJiYm4tbW1jIiwgICAgICAgICAgICB7TlVMTH0sIDEzNDcsICJ0Y3AifSwKK3siYmJuLW1tYyIsICAgICAgICAgICAge05VTEx9LCAxMzQ3LCAidWRwIn0sCit7ImJibi1tbXgiLCAgICAgICAgICAgIHtOVUxMfSwgMTM0OCwgInRjcCJ9LAoreyJiYm4tbW14IiwgICAgICAgICAgICB7TlVMTH0sIDEzNDgsICJ1ZHAifSwKK3sic2Jvb2siLCAgICAgICAgICAgICAge05VTEx9LCAxMzQ5LCAidGNwIn0sCit7InNib29rIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM0OSwgInVkcCJ9LAoreyJlZGl0YmVuY2giLCAgICAgICAgICB7TlVMTH0sIDEzNTAsICJ0Y3AifSwKK3siZWRpdGJlbmNoIiwgICAgICAgICAge05VTEx9LCAxMzUwLCAidWRwIn0sCit7ImVxdWF0aW9uYnVpbGRlciIsICAgIHtOVUxMfSwgMTM1MSwgInRjcCJ9LAoreyJlcXVhdGlvbmJ1aWxkZXIiLCAgICB7TlVMTH0sIDEzNTEsICJ1ZHAifSwKK3sibG90dXNub3RlIiwgICAgICAgICAge05VTEx9LCAxMzUyLCAidGNwIn0sCit7ImxvdHVzbm90ZSIsICAgICAgICAgIHtOVUxMfSwgMTM1MiwgInVkcCJ9LAoreyJyZWxpZWYiLCAgICAgICAgICAgICB7TlVMTH0sIDEzNTMsICJ0Y3AifSwKK3sicmVsaWVmIiwgICAgICAgICAgICAge05VTEx9LCAxMzUzLCAidWRwIn0sCit7IlhTSVAtbmV0d29yayIsICAgICAgIHtOVUxMfSwgMTM1NCwgInRjcCJ9LAoreyJYU0lQLW5ldHdvcmsiLCAgICAgICB7TlVMTH0sIDEzNTQsICJ1ZHAifSwKK3siaW50dWl0aXZlLWVkZ2UiLCAgICAge05VTEx9LCAxMzU1LCAidGNwIn0sCit7ImludHVpdGl2ZS1lZGdlIiwgICAgIHtOVUxMfSwgMTM1NSwgInVkcCJ9LAoreyJjdWlsbGFtYXJ0aW4iLCAgICAgICB7TlVMTH0sIDEzNTYsICJ0Y3AifSwKK3siY3VpbGxhbWFydGluIiwgICAgICAge05VTEx9LCAxMzU2LCAidWRwIn0sCit7InBlZ2JvYXJkIiwgICAgICAgICAgIHtOVUxMfSwgMTM1NywgInRjcCJ9LAoreyJwZWdib2FyZCIsICAgICAgICAgICB7TlVMTH0sIDEzNTcsICJ1ZHAifSwKK3siY29ubmxjbGkiLCAgICAgICAgICAge05VTEx9LCAxMzU4LCAidGNwIn0sCit7ImNvbm5sY2xpIiwgICAgICAgICAgIHtOVUxMfSwgMTM1OCwgInVkcCJ9LAoreyJmdHNydiIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNTksICJ0Y3AifSwKK3siZnRzcnYiLCAgICAgICAgICAgICAge05VTEx9LCAxMzU5LCAidWRwIn0sCit7Im1pbWVyIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM2MCwgInRjcCJ9LAoreyJtaW1lciIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNjAsICJ1ZHAifSwKK3sibGlueCIsICAgICAgICAgICAgICAge05VTEx9LCAxMzYxLCAidGNwIn0sCit7ImxpbngiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTM2MSwgInVkcCJ9LAoreyJ0aW1lZmxpZXMiLCAgICAgICAgICB7TlVMTH0sIDEzNjIsICJ0Y3AifSwKK3sidGltZWZsaWVzIiwgICAgICAgICAge05VTEx9LCAxMzYyLCAidWRwIn0sCit7Im5kbS1yZXF1ZXN0ZXIiLCAgICAgIHtOVUxMfSwgMTM2MywgInRjcCJ9LAoreyJuZG0tcmVxdWVzdGVyIiwgICAgICB7TlVMTH0sIDEzNjMsICJ1ZHAifSwKK3sibmRtLXNlcnZlciIsICAgICAgICAge05VTEx9LCAxMzY0LCAidGNwIn0sCit7Im5kbS1zZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMTM2NCwgInVkcCJ9LAoreyJhZGFwdC1zbmEiLCAgICAgICAgICB7TlVMTH0sIDEzNjUsICJ0Y3AifSwKK3siYWRhcHQtc25hIiwgICAgICAgICAge05VTEx9LCAxMzY1LCAidWRwIn0sCit7Im5ldHdhcmUtY3NwIiwgICAgICAgIHtOVUxMfSwgMTM2NiwgInRjcCJ9LAoreyJuZXR3YXJlLWNzcCIsICAgICAgICB7TlVMTH0sIDEzNjYsICJ1ZHAifSwKK3siZGNzIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMzY3LCAidGNwIn0sCit7ImRjcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTM2NywgInVkcCJ9LAoreyJzY3JlZW5jYXN0IiwgICAgICAgICB7TlVMTH0sIDEzNjgsICJ0Y3AifSwKK3sic2NyZWVuY2FzdCIsICAgICAgICAge05VTEx9LCAxMzY4LCAidWRwIn0sCit7Imd2LXVzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM2OSwgInRjcCJ9LAoreyJndi11cyIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNjksICJ1ZHAifSwKK3sidXMtZ3YiLCAgICAgICAgICAgICAge05VTEx9LCAxMzcwLCAidGNwIn0sCit7InVzLWd2IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM3MCwgInVkcCJ9LAoreyJmYy1jbGkiLCAgICAgICAgICAgICB7TlVMTH0sIDEzNzEsICJ0Y3AifSwKK3siZmMtY2xpIiwgICAgICAgICAgICAge05VTEx9LCAxMzcxLCAidWRwIn0sCit7ImZjLXNlciIsICAgICAgICAgICAgIHtOVUxMfSwgMTM3MiwgInRjcCJ9LAoreyJmYy1zZXIiLCAgICAgICAgICAgICB7TlVMTH0sIDEzNzIsICJ1ZHAifSwKK3siY2hyb21hZ3JhZngiLCAgICAgICAge05VTEx9LCAxMzczLCAidGNwIn0sCit7ImNocm9tYWdyYWZ4IiwgICAgICAgIHtOVUxMfSwgMTM3MywgInVkcCJ9LAoreyJtb2xseSIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNzQsICJ0Y3AifSwKK3sibW9sbHkiLCAgICAgICAgICAgICAge05VTEx9LCAxMzc0LCAidWRwIn0sCit7ImJ5dGV4IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM3NSwgInRjcCJ9LAoreyJieXRleCIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNzUsICJ1ZHAifSwKK3siaWJtLXBwcyIsICAgICAgICAgICAge05VTEx9LCAxMzc2LCAidGNwIn0sCit7ImlibS1wcHMiLCAgICAgICAgICAgIHtOVUxMfSwgMTM3NiwgInVkcCJ9LAoreyJjaWNobGlkIiwgICAgICAgICAgICB7TlVMTH0sIDEzNzcsICJ0Y3AifSwKK3siY2ljaGxpZCIsICAgICAgICAgICAge05VTEx9LCAxMzc3LCAidWRwIn0sCit7ImVsYW4iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTM3OCwgInRjcCJ9LAoreyJlbGFuIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzNzgsICJ1ZHAifSwKK3siZGJyZXBvcnRlciIsICAgICAgICAge05VTEx9LCAxMzc5LCAidGNwIn0sCit7ImRicmVwb3J0ZXIiLCAgICAgICAgIHtOVUxMfSwgMTM3OSwgInVkcCJ9LAoreyJ0ZWxlc2lzLWxpY21hbiIsICAgICB7TlVMTH0sIDEzODAsICJ0Y3AifSwKK3sidGVsZXNpcy1saWNtYW4iLCAgICAge05VTEx9LCAxMzgwLCAidWRwIn0sCit7ImFwcGxlLWxpY21hbiIsICAgICAgIHtOVUxMfSwgMTM4MSwgInRjcCJ9LAoreyJhcHBsZS1saWNtYW4iLCAgICAgICB7TlVMTH0sIDEzODEsICJ1ZHAifSwKK3sidWR0X29zIiwgICAgICAgICAgICAge05VTEx9LCAxMzgyLCAidGNwIn0sCit7InVkdF9vcyIsICAgICAgICAgICAgIHtOVUxMfSwgMTM4MiwgInVkcCJ9LAoreyJnd2hhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzODMsICJ0Y3AifSwKK3siZ3doYSIsICAgICAgICAgICAgICAge05VTEx9LCAxMzgzLCAidWRwIn0sCit7Im9zLWxpY21hbiIsICAgICAgICAgIHtOVUxMfSwgMTM4NCwgInRjcCJ9LAoreyJvcy1saWNtYW4iLCAgICAgICAgICB7TlVMTH0sIDEzODQsICJ1ZHAifSwKK3siYXRleF9lbG1kIiwgICAgICAgICAge05VTEx9LCAxMzg1LCAidGNwIn0sCit7ImF0ZXhfZWxtZCIsICAgICAgICAgIHtOVUxMfSwgMTM4NSwgInVkcCJ9LAoreyJjaGVja3N1bSIsICAgICAgICAgICB7TlVMTH0sIDEzODYsICJ0Y3AifSwKK3siY2hlY2tzdW0iLCAgICAgICAgICAge05VTEx9LCAxMzg2LCAidWRwIn0sCit7ImNhZHNpLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMTM4NywgInRjcCJ9LAoreyJjYWRzaS1sbSIsICAgICAgICAgICB7TlVMTH0sIDEzODcsICJ1ZHAifSwKK3sib2JqZWN0aXZlLWRiYyIsICAgICAge05VTEx9LCAxMzg4LCAidGNwIn0sCit7Im9iamVjdGl2ZS1kYmMiLCAgICAgIHtOVUxMfSwgMTM4OCwgInVkcCJ9LAoreyJpY2xwdi1kbSIsICAgICAgICAgICB7TlVMTH0sIDEzODksICJ0Y3AifSwKK3siaWNscHYtZG0iLCAgICAgICAgICAge05VTEx9LCAxMzg5LCAidWRwIn0sCit7ImljbHB2LXNjIiwgICAgICAgICAgIHtOVUxMfSwgMTM5MCwgInRjcCJ9LAoreyJpY2xwdi1zYyIsICAgICAgICAgICB7TlVMTH0sIDEzOTAsICJ1ZHAifSwKK3siaWNscHYtc2FzIiwgICAgICAgICAge05VTEx9LCAxMzkxLCAidGNwIn0sCit7ImljbHB2LXNhcyIsICAgICAgICAgIHtOVUxMfSwgMTM5MSwgInVkcCJ9LAoreyJpY2xwdi1wbSIsICAgICAgICAgICB7TlVMTH0sIDEzOTIsICJ0Y3AifSwKK3siaWNscHYtcG0iLCAgICAgICAgICAge05VTEx9LCAxMzkyLCAidWRwIn0sCit7ImljbHB2LW5scyIsICAgICAgICAgIHtOVUxMfSwgMTM5MywgInRjcCJ9LAoreyJpY2xwdi1ubHMiLCAgICAgICAgICB7TlVMTH0sIDEzOTMsICJ1ZHAifSwKK3siaWNscHYtbmxjIiwgICAgICAgICAge05VTEx9LCAxMzk0LCAidGNwIn0sCit7ImljbHB2LW5sYyIsICAgICAgICAgIHtOVUxMfSwgMTM5NCwgInVkcCJ9LAoreyJpY2xwdi13c20iLCAgICAgICAgICB7TlVMTH0sIDEzOTUsICJ0Y3AifSwKK3siaWNscHYtd3NtIiwgICAgICAgICAge05VTEx9LCAxMzk1LCAidWRwIn0sCit7ImR2bC1hY3RpdmVtYWlsIiwgICAgIHtOVUxMfSwgMTM5NiwgInRjcCJ9LAoreyJkdmwtYWN0aXZlbWFpbCIsICAgICB7TlVMTH0sIDEzOTYsICJ1ZHAifSwKK3siYXVkaW8tYWN0aXZtYWlsIiwgICAge05VTEx9LCAxMzk3LCAidGNwIn0sCit7ImF1ZGlvLWFjdGl2bWFpbCIsICAgIHtOVUxMfSwgMTM5NywgInVkcCJ9LAoreyJ2aWRlby1hY3Rpdm1haWwiLCAgICB7TlVMTH0sIDEzOTgsICJ0Y3AifSwKK3sidmlkZW8tYWN0aXZtYWlsIiwgICAge05VTEx9LCAxMzk4LCAidWRwIn0sCit7ImNhZGtleS1saWNtYW4iLCAgICAgIHtOVUxMfSwgMTM5OSwgInRjcCJ9LAoreyJjYWRrZXktbGljbWFuIiwgICAgICB7TlVMTH0sIDEzOTksICJ1ZHAifSwKK3siY2Fka2V5LXRhYmxldCIsICAgICAge05VTEx9LCAxNDAwLCAidGNwIn0sCit7ImNhZGtleS10YWJsZXQiLCAgICAgIHtOVUxMfSwgMTQwMCwgInVkcCJ9LAoreyJnb2xkbGVhZi1saWNtYW4iLCAgICB7TlVMTH0sIDE0MDEsICJ0Y3AifSwKK3siZ29sZGxlYWYtbGljbWFuIiwgICAge05VTEx9LCAxNDAxLCAidWRwIn0sCit7InBybS1zbS1ucCIsICAgICAgICAgIHtOVUxMfSwgMTQwMiwgInRjcCJ9LAoreyJwcm0tc20tbnAiLCAgICAgICAgICB7TlVMTH0sIDE0MDIsICJ1ZHAifSwKK3sicHJtLW5tLW5wIiwgICAgICAgICAge05VTEx9LCAxNDAzLCAidGNwIn0sCit7InBybS1ubS1ucCIsICAgICAgICAgIHtOVUxMfSwgMTQwMywgInVkcCJ9LAoreyJpZ2ktbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE0MDQsICJ0Y3AifSwKK3siaWdpLWxtIiwgICAgICAgICAgICAge05VTEx9LCAxNDA0LCAidWRwIn0sCit7ImlibS1yZXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTQwNSwgInRjcCJ9LAoreyJpYm0tcmVzIiwgICAgICAgICAgICB7TlVMTH0sIDE0MDUsICJ1ZHAifSwKK3sibmV0bGFicy1sbSIsICAgICAgICAge05VTEx9LCAxNDA2LCAidGNwIn0sCit7Im5ldGxhYnMtbG0iLCAgICAgICAgIHtOVUxMfSwgMTQwNiwgInVkcCJ9LAoreyJkYnNhLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE0MDcsICJ0Y3AifSwKK3siZGJzYS1sbSIsICAgICAgICAgICAge05VTEx9LCAxNDA3LCAidWRwIn0sCit7InNvcGhpYS1sbSIsICAgICAgICAgIHtOVUxMfSwgMTQwOCwgInRjcCJ9LAoreyJzb3BoaWEtbG0iLCAgICAgICAgICB7TlVMTH0sIDE0MDgsICJ1ZHAifSwKK3siaGVyZS1sbSIsICAgICAgICAgICAge05VTEx9LCAxNDA5LCAidGNwIn0sCit7ImhlcmUtbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTQwOSwgInVkcCJ9LAoreyJoaXEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0MTAsICJ0Y3AifSwKK3siaGlxIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNDEwLCAidWRwIn0sCit7ImFmIiwgICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQxMSwgInRjcCJ9LAoreyJhZiIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDE0MTEsICJ1ZHAifSwKK3siaW5ub3N5cyIsICAgICAgICAgICAge05VTEx9LCAxNDEyLCAidGNwIn0sCit7Imlubm9zeXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTQxMiwgInVkcCJ9LAoreyJpbm5vc3lzLWFjbCIsICAgICAgICB7TlVMTH0sIDE0MTMsICJ0Y3AifSwKK3siaW5ub3N5cy1hY2wiLCAgICAgICAge05VTEx9LCAxNDEzLCAidWRwIn0sCit7ImlibS1tcXNlcmllcyIsICAgICAgIHtOVUxMfSwgMTQxNCwgInRjcCJ9LAoreyJpYm0tbXFzZXJpZXMiLCAgICAgICB7TlVMTH0sIDE0MTQsICJ1ZHAifSwKK3siZGJzdGFyIiwgICAgICAgICAgICAge05VTEx9LCAxNDE1LCAidGNwIn0sCit7ImRic3RhciIsICAgICAgICAgICAgIHtOVUxMfSwgMTQxNSwgInVkcCJ9LAoreyJub3ZlbGwtbHU2LjIiLCAgICAgICB7TlVMTH0sIDE0MTYsICJ0Y3AifSwKK3sibm92ZWxsLWx1Ni4yIiwgICAgICAge05VTEx9LCAxNDE2LCAidWRwIn0sCit7InRpbWJ1a3R1LXNydjEiLCAgICAgIHtOVUxMfSwgMTQxNywgInRjcCJ9LAoreyJ0aW1idWt0dS1zcnYxIiwgICAgICB7TlVMTH0sIDE0MTcsICJ1ZHAifSwKK3sidGltYnVrdHUtc3J2MiIsICAgICAge05VTEx9LCAxNDE4LCAidGNwIn0sCit7InRpbWJ1a3R1LXNydjIiLCAgICAgIHtOVUxMfSwgMTQxOCwgInVkcCJ9LAoreyJ0aW1idWt0dS1zcnYzIiwgICAgICB7TlVMTH0sIDE0MTksICJ0Y3AifSwKK3sidGltYnVrdHUtc3J2MyIsICAgICAge05VTEx9LCAxNDE5LCAidWRwIn0sCit7InRpbWJ1a3R1LXNydjQiLCAgICAgIHtOVUxMfSwgMTQyMCwgInRjcCJ9LAoreyJ0aW1idWt0dS1zcnY0IiwgICAgICB7TlVMTH0sIDE0MjAsICJ1ZHAifSwKK3siZ2FuZGFsZi1sbSIsICAgICAgICAge05VTEx9LCAxNDIxLCAidGNwIn0sCit7ImdhbmRhbGYtbG0iLCAgICAgICAgIHtOVUxMfSwgMTQyMSwgInVkcCJ9LAoreyJhdXRvZGVzay1sbSIsICAgICAgICB7TlVMTH0sIDE0MjIsICJ0Y3AifSwKK3siYXV0b2Rlc2stbG0iLCAgICAgICAge05VTEx9LCAxNDIyLCAidWRwIn0sCit7ImVzc2Jhc2UiLCAgICAgICAgICAgIHtOVUxMfSwgMTQyMywgInRjcCJ9LAoreyJlc3NiYXNlIiwgICAgICAgICAgICB7TlVMTH0sIDE0MjMsICJ1ZHAifSwKK3siaHlicmlkIiwgICAgICAgICAgICAge05VTEx9LCAxNDI0LCAidGNwIn0sCit7Imh5YnJpZCIsICAgICAgICAgICAgIHtOVUxMfSwgMTQyNCwgInVkcCJ9LAoreyJ6aW9uLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE0MjUsICJ0Y3AifSwKK3siemlvbi1sbSIsICAgICAgICAgICAge05VTEx9LCAxNDI1LCAidWRwIn0sCit7InNhaXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTQyNiwgInRjcCJ9LAoreyJzYWlzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE0MjYsICJ1ZHAifSwKK3sibWxvYWRkIiwgICAgICAgICAgICAge05VTEx9LCAxNDI3LCAidGNwIn0sCit7Im1sb2FkZCIsICAgICAgICAgICAgIHtOVUxMfSwgMTQyNywgInVkcCJ9LAoreyJpbmZvcm1hdGlrLWxtIiwgICAgICB7TlVMTH0sIDE0MjgsICJ0Y3AifSwKK3siaW5mb3JtYXRpay1sbSIsICAgICAge05VTEx9LCAxNDI4LCAidWRwIn0sCit7Im5tcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQyOSwgInRjcCJ9LAoreyJubXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0MjksICJ1ZHAifSwKK3sidHBkdSIsICAgICAgICAgICAgICAge05VTEx9LCAxNDMwLCAidGNwIn0sCit7InRwZHUiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTQzMCwgInVkcCJ9LAoreyJyZ3RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE0MzEsICJ0Y3AifSwKK3sicmd0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxNDMxLCAidWRwIn0sCit7ImJsdWViZXJyeS1sbSIsICAgICAgIHtOVUxMfSwgMTQzMiwgInRjcCJ9LAoreyJibHVlYmVycnktbG0iLCAgICAgICB7TlVMTH0sIDE0MzIsICJ1ZHAifSwKK3sibXMtc3FsLXMiLCAgICAgICAgICAge05VTEx9LCAxNDMzLCAidGNwIn0sCit7Im1zLXNxbC1zIiwgICAgICAgICAgIHtOVUxMfSwgMTQzMywgInVkcCJ9LAoreyJtcy1zcWwtbSIsICAgICAgICAgICB7TlVMTH0sIDE0MzQsICJ0Y3AifSwKK3sibXMtc3FsLW0iLCAgICAgICAgICAge05VTEx9LCAxNDM0LCAidWRwIn0sCit7ImlibS1jaWNzIiwgICAgICAgICAgIHtOVUxMfSwgMTQzNSwgInRjcCJ9LAoreyJpYm0tY2ljcyIsICAgICAgICAgICB7TlVMTH0sIDE0MzUsICJ1ZHAifSwKK3sic2Fpc20iLCAgICAgICAgICAgICAge05VTEx9LCAxNDM2LCAidGNwIn0sCit7InNhaXNtIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTQzNiwgInVkcCJ9LAoreyJ0YWJ1bGEiLCAgICAgICAgICAgICB7TlVMTH0sIDE0MzcsICJ0Y3AifSwKK3sidGFidWxhIiwgICAgICAgICAgICAge05VTEx9LCAxNDM3LCAidWRwIn0sCit7ImVpY29uLXNlcnZlciIsICAgICAgIHtOVUxMfSwgMTQzOCwgInRjcCJ9LAoreyJlaWNvbi1zZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDE0MzgsICJ1ZHAifSwKK3siZWljb24teDI1IiwgICAgICAgICAge05VTEx9LCAxNDM5LCAidGNwIn0sCit7ImVpY29uLXgyNSIsICAgICAgICAgIHtOVUxMfSwgMTQzOSwgInVkcCJ9LAoreyJlaWNvbi1zbHAiLCAgICAgICAgICB7TlVMTH0sIDE0NDAsICJ0Y3AifSwKK3siZWljb24tc2xwIiwgICAgICAgICAge05VTEx9LCAxNDQwLCAidWRwIn0sCit7ImNhZGlzLTEiLCAgICAgICAgICAgIHtOVUxMfSwgMTQ0MSwgInRjcCJ9LAoreyJjYWRpcy0xIiwgICAgICAgICAgICB7TlVMTH0sIDE0NDEsICJ1ZHAifSwKK3siY2FkaXMtMiIsICAgICAgICAgICAge05VTEx9LCAxNDQyLCAidGNwIn0sCit7ImNhZGlzLTIiLCAgICAgICAgICAgIHtOVUxMfSwgMTQ0MiwgInVkcCJ9LAoreyJpZXMtbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE0NDMsICJ0Y3AifSwKK3siaWVzLWxtIiwgICAgICAgICAgICAge05VTEx9LCAxNDQzLCAidWRwIn0sCit7Im1hcmNhbS1sbSIsICAgICAgICAgIHtOVUxMfSwgMTQ0NCwgInRjcCJ9LAoreyJtYXJjYW0tbG0iLCAgICAgICAgICB7TlVMTH0sIDE0NDQsICJ1ZHAifSwKK3sicHJveGltYS1sbSIsICAgICAgICAge05VTEx9LCAxNDQ1LCAidGNwIn0sCit7InByb3hpbWEtbG0iLCAgICAgICAgIHtOVUxMfSwgMTQ0NSwgInVkcCJ9LAoreyJvcmEtbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE0NDYsICJ0Y3AifSwKK3sib3JhLWxtIiwgICAgICAgICAgICAge05VTEx9LCAxNDQ2LCAidWRwIn0sCit7ImFwcmktbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTQ0NywgInRjcCJ9LAoreyJhcHJpLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE0NDcsICJ1ZHAifSwKK3sib2MtbG0iLCAgICAgICAgICAgICAge05VTEx9LCAxNDQ4LCAidGNwIn0sCit7Im9jLWxtIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTQ0OCwgInVkcCJ9LAoreyJwZXBvcnQiLCAgICAgICAgICAgICB7TlVMTH0sIDE0NDksICJ0Y3AifSwKK3sicGVwb3J0IiwgICAgICAgICAgICAge05VTEx9LCAxNDQ5LCAidWRwIn0sCit7ImR3ZiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ1MCwgInRjcCJ9LAoreyJkd2YiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0NTAsICJ1ZHAifSwKK3siaW5mb21hbiIsICAgICAgICAgICAge05VTEx9LCAxNDUxLCAidGNwIn0sCit7ImluZm9tYW4iLCAgICAgICAgICAgIHtOVUxMfSwgMTQ1MSwgInVkcCJ9LAoreyJndGVnc2MtbG0iLCAgICAgICAgICB7TlVMTH0sIDE0NTIsICJ0Y3AifSwKK3siZ3RlZ3NjLWxtIiwgICAgICAgICAge05VTEx9LCAxNDUyLCAidWRwIn0sCit7ImdlbmllLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMTQ1MywgInRjcCJ9LAoreyJnZW5pZS1sbSIsICAgICAgICAgICB7TlVMTH0sIDE0NTMsICJ1ZHAifSwKK3siaW50ZXJoZGxfZWxtZCIsICAgICAge05VTEx9LCAxNDU0LCAidGNwIn0sCit7ImludGVyaGRsX2VsbWQiLCAgICAgIHtOVUxMfSwgMTQ1NCwgInVkcCJ9LAoreyJlc2wtbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE0NTUsICJ0Y3AifSwKK3siZXNsLWxtIiwgICAgICAgICAgICAge05VTEx9LCAxNDU1LCAidWRwIn0sCit7ImRjYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ1NiwgInRjcCJ9LAoreyJkY2EiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0NTYsICJ1ZHAifSwKK3sidmFsaXN5cy1sbSIsICAgICAgICAge05VTEx9LCAxNDU3LCAidGNwIn0sCit7InZhbGlzeXMtbG0iLCAgICAgICAgIHtOVUxMfSwgMTQ1NywgInVkcCJ9LAoreyJucmNhYnEtbG0iLCAgICAgICAgICB7TlVMTH0sIDE0NTgsICJ0Y3AifSwKK3sibnJjYWJxLWxtIiwgICAgICAgICAge05VTEx9LCAxNDU4LCAidWRwIn0sCit7InByb3NoYXJlMSIsICAgICAgICAgIHtOVUxMfSwgMTQ1OSwgInRjcCJ9LAoreyJwcm9zaGFyZTEiLCAgICAgICAgICB7TlVMTH0sIDE0NTksICJ1ZHAifSwKK3sicHJvc2hhcmUyIiwgICAgICAgICAge05VTEx9LCAxNDYwLCAidGNwIn0sCit7InByb3NoYXJlMiIsICAgICAgICAgIHtOVUxMfSwgMTQ2MCwgInVkcCJ9LAoreyJpYm1fd3JsZXNzX2xhbiIsICAgICB7TlVMTH0sIDE0NjEsICJ0Y3AifSwKK3siaWJtX3dybGVzc19sYW4iLCAgICAge05VTEx9LCAxNDYxLCAidWRwIn0sCit7IndvcmxkLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMTQ2MiwgInRjcCJ9LAoreyJ3b3JsZC1sbSIsICAgICAgICAgICB7TlVMTH0sIDE0NjIsICJ1ZHAifSwKK3sibnVjbGV1cyIsICAgICAgICAgICAge05VTEx9LCAxNDYzLCAidGNwIn0sCit7Im51Y2xldXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTQ2MywgInVkcCJ9LAoreyJtc2xfbG1kIiwgICAgICAgICAgICB7TlVMTH0sIDE0NjQsICJ0Y3AifSwKK3sibXNsX2xtZCIsICAgICAgICAgICAge05VTEx9LCAxNDY0LCAidWRwIn0sCit7InBpcGVzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTQ2NSwgInRjcCJ9LAoreyJwaXBlcyIsICAgICAgICAgICAgICB7TlVMTH0sIDE0NjUsICJ1ZHAifSwKK3sib2NlYW5zb2Z0LWxtIiwgICAgICAge05VTEx9LCAxNDY2LCAidGNwIn0sCit7Im9jZWFuc29mdC1sbSIsICAgICAgIHtOVUxMfSwgMTQ2NiwgInVkcCJ9LAoreyJjc2RtYmFzZSIsICAgICAgICAgICB7TlVMTH0sIDE0NjcsICJ0Y3AifSwKK3siY3NkbWJhc2UiLCAgICAgICAgICAge05VTEx9LCAxNDY3LCAidWRwIn0sCit7ImNzZG0iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ2OCwgInRjcCJ9LAoreyJjc2RtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE0NjgsICJ1ZHAifSwKK3siYWFsLWxtIiwgICAgICAgICAgICAge05VTEx9LCAxNDY5LCAidGNwIn0sCit7ImFhbC1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTQ2OSwgInVkcCJ9LAoreyJ1YWlhY3QiLCAgICAgICAgICAgICB7TlVMTH0sIDE0NzAsICJ0Y3AifSwKK3sidWFpYWN0IiwgICAgICAgICAgICAge05VTEx9LCAxNDcwLCAidWRwIn0sCit7ImNzZG1iYXNlIiwgICAgICAgICAgIHtOVUxMfSwgMTQ3MSwgInRjcCJ9LAoreyJjc2RtYmFzZSIsICAgICAgICAgICB7TlVMTH0sIDE0NzEsICJ1ZHAifSwKK3siY3NkbSIsICAgICAgICAgICAgICAge05VTEx9LCAxNDcyLCAidGNwIn0sCit7ImNzZG0iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ3MiwgInVkcCJ9LAoreyJvcGVubWF0aCIsICAgICAgICAgICB7TlVMTH0sIDE0NzMsICJ0Y3AifSwKK3sib3Blbm1hdGgiLCAgICAgICAgICAge05VTEx9LCAxNDczLCAidWRwIn0sCit7InRlbGVmaW5kZXIiLCAgICAgICAgIHtOVUxMfSwgMTQ3NCwgInRjcCJ9LAoreyJ0ZWxlZmluZGVyIiwgICAgICAgICB7TlVMTH0sIDE0NzQsICJ1ZHAifSwKK3sidGFsaWdlbnQtbG0iLCAgICAgICAge05VTEx9LCAxNDc1LCAidGNwIn0sCit7InRhbGlnZW50LWxtIiwgICAgICAgIHtOVUxMfSwgMTQ3NSwgInVkcCJ9LAoreyJjbHZtLWNmZyIsICAgICAgICAgICB7TlVMTH0sIDE0NzYsICJ0Y3AifSwKK3siY2x2bS1jZmciLCAgICAgICAgICAge05VTEx9LCAxNDc2LCAidWRwIn0sCit7Im1zLXNuYS1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMTQ3NywgInRjcCJ9LAoreyJtcy1zbmEtc2VydmVyIiwgICAgICB7TlVMTH0sIDE0NzcsICJ1ZHAifSwKK3sibXMtc25hLWJhc2UiLCAgICAgICAge05VTEx9LCAxNDc4LCAidGNwIn0sCit7Im1zLXNuYS1iYXNlIiwgICAgICAgIHtOVUxMfSwgMTQ3OCwgInVkcCJ9LAoreyJkYmVyZWdpc3RlciIsICAgICAgICB7TlVMTH0sIDE0NzksICJ0Y3AifSwKK3siZGJlcmVnaXN0ZXIiLCAgICAgICAge05VTEx9LCAxNDc5LCAidWRwIn0sCit7InBhY2VyZm9ydW0iLCAgICAgICAgIHtOVUxMfSwgMTQ4MCwgInRjcCJ9LAoreyJwYWNlcmZvcnVtIiwgICAgICAgICB7TlVMTH0sIDE0ODAsICJ1ZHAifSwKK3siYWlycyIsICAgICAgICAgICAgICAge05VTEx9LCAxNDgxLCAidGNwIn0sCit7ImFpcnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ4MSwgInVkcCJ9LAoreyJtaXRla3N5cy1sbSIsICAgICAgICB7TlVMTH0sIDE0ODIsICJ0Y3AifSwKK3sibWl0ZWtzeXMtbG0iLCAgICAgICAge05VTEx9LCAxNDgyLCAidWRwIn0sCit7ImFmcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ4MywgInRjcCJ9LAoreyJhZnMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0ODMsICJ1ZHAifSwKK3siY29uZmx1ZW50IiwgICAgICAgICAge05VTEx9LCAxNDg0LCAidGNwIn0sCit7ImNvbmZsdWVudCIsICAgICAgICAgIHtOVUxMfSwgMTQ4NCwgInVkcCJ9LAoreyJsYW5zb3VyY2UiLCAgICAgICAgICB7TlVMTH0sIDE0ODUsICJ0Y3AifSwKK3sibGFuc291cmNlIiwgICAgICAgICAge05VTEx9LCAxNDg1LCAidWRwIn0sCit7Im5tc190b3BvX3NlcnYiLCAgICAgIHtOVUxMfSwgMTQ4NiwgInRjcCJ9LAoreyJubXNfdG9wb19zZXJ2IiwgICAgICB7TlVMTH0sIDE0ODYsICJ1ZHAifSwKK3sibG9jYWxpbmZvc3J2ciIsICAgICAge05VTEx9LCAxNDg3LCAidGNwIn0sCit7ImxvY2FsaW5mb3NydnIiLCAgICAgIHtOVUxMfSwgMTQ4NywgInVkcCJ9LAoreyJkb2NzdG9yIiwgICAgICAgICAgICB7TlVMTH0sIDE0ODgsICJ0Y3AifSwKK3siZG9jc3RvciIsICAgICAgICAgICAge05VTEx9LCAxNDg4LCAidWRwIn0sCit7ImRtZG9jYnJva2VyIiwgICAgICAgIHtOVUxMfSwgMTQ4OSwgInRjcCJ9LAoreyJkbWRvY2Jyb2tlciIsICAgICAgICB7TlVMTH0sIDE0ODksICJ1ZHAifSwKK3siaW5zaXR1LWNvbmYiLCAgICAgICAge05VTEx9LCAxNDkwLCAidGNwIn0sCit7Imluc2l0dS1jb25mIiwgICAgICAgIHtOVUxMfSwgMTQ5MCwgInVkcCJ9LAoreyJzdG9uZS1kZXNpZ24tMSIsICAgICB7TlVMTH0sIDE0OTIsICJ0Y3AifSwKK3sic3RvbmUtZGVzaWduLTEiLCAgICAge05VTEx9LCAxNDkyLCAidWRwIn0sCit7Im5ldG1hcF9sbSIsICAgICAgICAgIHtOVUxMfSwgMTQ5MywgInRjcCJ9LAoreyJuZXRtYXBfbG0iLCAgICAgICAgICB7TlVMTH0sIDE0OTMsICJ1ZHAifSwKK3siaWNhIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNDk0LCAidGNwIn0sCit7ImljYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ5NCwgInVkcCJ9LAoreyJjdmMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0OTUsICJ0Y3AifSwKK3siY3ZjIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNDk1LCAidWRwIn0sCit7ImxpYmVydHktbG0iLCAgICAgICAgIHtOVUxMfSwgMTQ5NiwgInRjcCJ9LAoreyJsaWJlcnR5LWxtIiwgICAgICAgICB7TlVMTH0sIDE0OTYsICJ1ZHAifSwKK3sicmZ4LWxtIiwgICAgICAgICAgICAge05VTEx9LCAxNDk3LCAidGNwIn0sCit7InJmeC1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTQ5NywgInVkcCJ9LAoreyJzeWJhc2Utc3FsYW55IiwgICAgICB7TlVMTH0sIDE0OTgsICJ0Y3AifSwKK3sic3liYXNlLXNxbGFueSIsICAgICAge05VTEx9LCAxNDk4LCAidWRwIn0sCit7ImZoYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQ5OSwgInRjcCJ9LAoreyJmaGMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0OTksICJ1ZHAifSwKK3sidmxzaS1sbSIsICAgICAgICAgICAge05VTEx9LCAxNTAwLCAidGNwIn0sCit7InZsc2ktbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTUwMCwgInVkcCJ9LAoreyJzYWlzY20iLCAgICAgICAgICAgICB7TlVMTH0sIDE1MDEsICJ0Y3AifSwKK3sic2Fpc2NtIiwgICAgICAgICAgICAge05VTEx9LCAxNTAxLCAidWRwIn0sCit7InNoaXZhZGlzY292ZXJ5IiwgICAgIHtOVUxMfSwgMTUwMiwgInRjcCJ9LAoreyJzaGl2YWRpc2NvdmVyeSIsICAgICB7TlVMTH0sIDE1MDIsICJ1ZHAifSwKK3siaW10Yy1tY3MiLCAgICAgICAgICAge05VTEx9LCAxNTAzLCAidGNwIn0sCit7ImltdGMtbWNzIiwgICAgICAgICAgIHtOVUxMfSwgMTUwMywgInVkcCJ9LAoreyJldmItZWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE1MDQsICJ0Y3AifSwKK3siZXZiLWVsbSIsICAgICAgICAgICAge05VTEx9LCAxNTA0LCAidWRwIn0sCit7ImZ1bmtwcm94eSIsICAgICAgICAgIHtOVUxMfSwgMTUwNSwgInRjcCJ9LAoreyJmdW5rcHJveHkiLCAgICAgICAgICB7TlVMTH0sIDE1MDUsICJ1ZHAifSwKK3sidXRjZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNTA2LCAidGNwIn0sCit7InV0Y2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTUwNiwgInVkcCJ9LAoreyJzeW1wbGV4IiwgICAgICAgICAgICB7TlVMTH0sIDE1MDcsICJ0Y3AifSwKK3sic3ltcGxleCIsICAgICAgICAgICAge05VTEx9LCAxNTA3LCAidWRwIn0sCit7ImRpYWdtb25kIiwgICAgICAgICAgIHtOVUxMfSwgMTUwOCwgInRjcCJ9LAoreyJkaWFnbW9uZCIsICAgICAgICAgICB7TlVMTH0sIDE1MDgsICJ1ZHAifSwKK3sicm9iY2FkLWxtIiwgICAgICAgICAge05VTEx9LCAxNTA5LCAidGNwIn0sCit7InJvYmNhZC1sbSIsICAgICAgICAgIHtOVUxMfSwgMTUwOSwgInVkcCJ9LAoreyJtdngtbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE1MTAsICJ0Y3AifSwKK3sibXZ4LWxtIiwgICAgICAgICAgICAge05VTEx9LCAxNTEwLCAidWRwIn0sCit7IjNsLWwxIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTUxMSwgInRjcCJ9LAoreyIzbC1sMSIsICAgICAgICAgICAgICB7TlVMTH0sIDE1MTEsICJ1ZHAifSwKK3sid2lucyIsICAgICAgICAgICAgICAge05VTEx9LCAxNTEyLCAidGNwIn0sCit7IndpbnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTUxMiwgInVkcCJ9LAoreyJmdWppdHN1LWR0YyIsICAgICAgICB7TlVMTH0sIDE1MTMsICJ0Y3AifSwKK3siZnVqaXRzdS1kdGMiLCAgICAgICAge05VTEx9LCAxNTEzLCAidWRwIn0sCit7ImZ1aml0c3UtZHRjbnMiLCAgICAgIHtOVUxMfSwgMTUxNCwgInRjcCJ9LAoreyJmdWppdHN1LWR0Y25zIiwgICAgICB7TlVMTH0sIDE1MTQsICJ1ZHAifSwKK3siaWZvci1wcm90b2NvbCIsICAgICAge05VTEx9LCAxNTE1LCAidGNwIn0sCit7Imlmb3ItcHJvdG9jb2wiLCAgICAgIHtOVUxMfSwgMTUxNSwgInVkcCJ9LAoreyJ2cGFkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE1MTYsICJ0Y3AifSwKK3sidnBhZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNTE2LCAidWRwIn0sCit7InZwYWMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTUxNywgInRjcCJ9LAoreyJ2cGFjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE1MTcsICJ1ZHAifSwKK3sidnB2ZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNTE4LCAidGNwIn0sCit7InZwdmQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTUxOCwgInVkcCJ9LAoreyJ2cHZjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE1MTksICJ0Y3AifSwKK3sidnB2YyIsICAgICAgICAgICAgICAge05VTEx9LCAxNTE5LCAidWRwIn0sCit7ImF0bS16aXAtb2ZmaWNlIiwgICAgIHtOVUxMfSwgMTUyMCwgInRjcCJ9LAoreyJhdG0temlwLW9mZmljZSIsICAgICB7TlVMTH0sIDE1MjAsICJ1ZHAifSwKK3sibmN1YmUtbG0iLCAgICAgICAgICAge05VTEx9LCAxNTIxLCAidGNwIn0sCit7Im5jdWJlLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMTUyMSwgInVkcCJ9LAoreyJyaWNhcmRvLWxtIiwgICAgICAgICB7TlVMTH0sIDE1MjIsICJ0Y3AifSwKK3sicmljYXJkby1sbSIsICAgICAgICAge05VTEx9LCAxNTIyLCAidWRwIn0sCit7ImNpY2hpbGQtbG0iLCAgICAgICAgIHtOVUxMfSwgMTUyMywgInRjcCJ9LAoreyJjaWNoaWxkLWxtIiwgICAgICAgICB7TlVMTH0sIDE1MjMsICJ1ZHAifSwKK3siaW5ncmVzbG9jayIsICAgICAgICAge05VTEx9LCAxNTI0LCAidGNwIn0sCit7ImluZ3Jlc2xvY2siLCAgICAgICAgIHtOVUxMfSwgMTUyNCwgInVkcCJ9LAoreyJvcmFzcnYiLCAgICAgICAgICAgICB7TlVMTH0sIDE1MjUsICJ0Y3AifSwKK3sib3Jhc3J2IiwgICAgICAgICAgICAge05VTEx9LCAxNTI1LCAidWRwIn0sCit7InByb3NwZXJvLW5wIiwgICAgICAgIHtOVUxMfSwgMTUyNSwgInRjcCJ9LAoreyJwcm9zcGVyby1ucCIsICAgICAgICB7TlVMTH0sIDE1MjUsICJ1ZHAifSwKK3sicGRhcC1ucCIsICAgICAgICAgICAge05VTEx9LCAxNTI2LCAidGNwIn0sCit7InBkYXAtbnAiLCAgICAgICAgICAgIHtOVUxMfSwgMTUyNiwgInVkcCJ9LAoreyJ0bGlzcnYiLCAgICAgICAgICAgICB7TlVMTH0sIDE1MjcsICJ0Y3AifSwKK3sidGxpc3J2IiwgICAgICAgICAgICAge05VTEx9LCAxNTI3LCAidWRwIn0sCit7ImNvYXV0aG9yIiwgICAgICAgICAgIHtOVUxMfSwgMTUyOSwgInRjcCJ9LAoreyJjb2F1dGhvciIsICAgICAgICAgICB7TlVMTH0sIDE1MjksICJ1ZHAifSwKK3sicmFwLXNlcnZpY2UiLCAgICAgICAge05VTEx9LCAxNTMwLCAidGNwIn0sCit7InJhcC1zZXJ2aWNlIiwgICAgICAgIHtOVUxMfSwgMTUzMCwgInVkcCJ9LAoreyJyYXAtbGlzdGVuIiwgICAgICAgICB7TlVMTH0sIDE1MzEsICJ0Y3AifSwKK3sicmFwLWxpc3RlbiIsICAgICAgICAge05VTEx9LCAxNTMxLCAidWRwIn0sCit7Im1pcm9jb25uZWN0IiwgICAgICAgIHtOVUxMfSwgMTUzMiwgInRjcCJ9LAoreyJtaXJvY29ubmVjdCIsICAgICAgICB7TlVMTH0sIDE1MzIsICJ1ZHAifSwKK3sidmlydHVhbC1wbGFjZXMiLCAgICAge05VTEx9LCAxNTMzLCAidGNwIn0sCit7InZpcnR1YWwtcGxhY2VzIiwgICAgIHtOVUxMfSwgMTUzMywgInVkcCJ9LAoreyJtaWNyb211c2UtbG0iLCAgICAgICB7TlVMTH0sIDE1MzQsICJ0Y3AifSwKK3sibWljcm9tdXNlLWxtIiwgICAgICAge05VTEx9LCAxNTM0LCAidWRwIn0sCit7ImFtcHItaW5mbyIsICAgICAgICAgIHtOVUxMfSwgMTUzNSwgInRjcCJ9LAoreyJhbXByLWluZm8iLCAgICAgICAgICB7TlVMTH0sIDE1MzUsICJ1ZHAifSwKK3siYW1wci1pbnRlciIsICAgICAgICAge05VTEx9LCAxNTM2LCAidGNwIn0sCit7ImFtcHItaW50ZXIiLCAgICAgICAgIHtOVUxMfSwgMTUzNiwgInVkcCJ9LAoreyJzZHNjLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE1MzcsICJ0Y3AifSwKK3sic2RzYy1sbSIsICAgICAgICAgICAge05VTEx9LCAxNTM3LCAidWRwIn0sCit7IjNkcy1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTUzOCwgInRjcCJ9LAoreyIzZHMtbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE1MzgsICJ1ZHAifSwKK3siaW50ZWxsaXN0b3ItbG0iLCAgICAge05VTEx9LCAxNTM5LCAidGNwIn0sCit7ImludGVsbGlzdG9yLWxtIiwgICAgIHtOVUxMfSwgMTUzOSwgInVkcCJ9LAoreyJyZHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE1NDAsICJ0Y3AifSwKK3sicmRzIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNTQwLCAidWRwIn0sCit7InJkczIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTU0MSwgInRjcCJ9LAoreyJyZHMyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE1NDEsICJ1ZHAifSwKK3siZ3JpZGdlbi1lbG1kIiwgICAgICAge05VTEx9LCAxNTQyLCAidGNwIn0sCit7ImdyaWRnZW4tZWxtZCIsICAgICAgIHtOVUxMfSwgMTU0MiwgInVkcCJ9LAoreyJzaW1iYS1jcyIsICAgICAgICAgICB7TlVMTH0sIDE1NDMsICJ0Y3AifSwKK3sic2ltYmEtY3MiLCAgICAgICAgICAge05VTEx9LCAxNTQzLCAidWRwIn0sCit7ImFzcGVjbG1kIiwgICAgICAgICAgIHtOVUxMfSwgMTU0NCwgInRjcCJ9LAoreyJhc3BlY2xtZCIsICAgICAgICAgICB7TlVMTH0sIDE1NDQsICJ1ZHAifSwKK3sidmlzdGl1bS1zaGFyZSIsICAgICAge05VTEx9LCAxNTQ1LCAidGNwIn0sCit7InZpc3RpdW0tc2hhcmUiLCAgICAgIHtOVUxMfSwgMTU0NSwgInVkcCJ9LAoreyJhYmJhY2N1cmF5IiwgICAgICAgICB7TlVMTH0sIDE1NDYsICJ0Y3AifSwKK3siYWJiYWNjdXJheSIsICAgICAgICAge05VTEx9LCAxNTQ2LCAidWRwIn0sCit7ImxhcGxpbmsiLCAgICAgICAgICAgIHtOVUxMfSwgMTU0NywgInRjcCJ9LAoreyJsYXBsaW5rIiwgICAgICAgICAgICB7TlVMTH0sIDE1NDcsICJ1ZHAifSwKK3siYXhvbi1sbSIsICAgICAgICAgICAge05VTEx9LCAxNTQ4LCAidGNwIn0sCit7ImF4b24tbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTU0OCwgInVkcCJ9LAoreyJzaGl2YWhvc2UiLCAgICAgICAgICB7TlVMTH0sIDE1NDksICJ0Y3AifSwKK3sic2hpdmFzb3VuZCIsICAgICAgICAge05VTEx9LCAxNTQ5LCAidWRwIn0sCit7IjNtLWltYWdlLWxtIiwgICAgICAgIHtOVUxMfSwgMTU1MCwgInRjcCJ9LAoreyIzbS1pbWFnZS1sbSIsICAgICAgICB7TlVMTH0sIDE1NTAsICJ1ZHAifSwKK3siaGVjbXRsLWRiIiwgICAgICAgICAge05VTEx9LCAxNTUxLCAidGNwIn0sCit7ImhlY210bC1kYiIsICAgICAgICAgIHtOVUxMfSwgMTU1MSwgInVkcCJ9LAoreyJwY2lhcnJheSIsICAgICAgICAgICB7TlVMTH0sIDE1NTIsICJ0Y3AifSwKK3sicGNpYXJyYXkiLCAgICAgICAgICAge05VTEx9LCAxNTUyLCAidWRwIn0sCit7InNuYS1jcyIsICAgICAgICAgICAgIHtOVUxMfSwgMTU1MywgInRjcCJ9LAoreyJzbmEtY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDE1NTMsICJ1ZHAifSwKK3siY2FjaS1sbSIsICAgICAgICAgICAge05VTEx9LCAxNTU0LCAidGNwIn0sCit7ImNhY2ktbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTU1NCwgInVkcCJ9LAoreyJsaXZlbGFuIiwgICAgICAgICAgICB7TlVMTH0sIDE1NTUsICJ0Y3AifSwKK3sibGl2ZWxhbiIsICAgICAgICAgICAge05VTEx9LCAxNTU1LCAidWRwIn0sCit7InZlcml0YXNfcGJ4IiwgICAgICAgIHtOVUxMfSwgMTU1NiwgInRjcCJ9LAoreyJ2ZXJpdGFzX3BieCIsICAgICAgICB7TlVMTH0sIDE1NTYsICJ1ZHAifSwKK3siYXJib3J0ZXh0LWxtIiwgICAgICAge05VTEx9LCAxNTU3LCAidGNwIn0sCit7ImFyYm9ydGV4dC1sbSIsICAgICAgIHtOVUxMfSwgMTU1NywgInVkcCJ9LAoreyJ4aW5nbXBlZyIsICAgICAgICAgICB7TlVMTH0sIDE1NTgsICJ0Y3AifSwKK3sieGluZ21wZWciLCAgICAgICAgICAge05VTEx9LCAxNTU4LCAidWRwIn0sCit7IndlYjJob3N0IiwgICAgICAgICAgIHtOVUxMfSwgMTU1OSwgInRjcCJ9LAoreyJ3ZWIyaG9zdCIsICAgICAgICAgICB7TlVMTH0sIDE1NTksICJ1ZHAifSwKK3siYXNjaS12YWwiLCAgICAgICAgICAge05VTEx9LCAxNTYwLCAidGNwIn0sCit7ImFzY2ktdmFsIiwgICAgICAgICAgIHtOVUxMfSwgMTU2MCwgInVkcCJ9LAoreyJmYWNpbGl0eXZpZXciLCAgICAgICB7TlVMTH0sIDE1NjEsICJ0Y3AifSwKK3siZmFjaWxpdHl2aWV3IiwgICAgICAge05VTEx9LCAxNTYxLCAidWRwIn0sCit7InBjb25uZWN0bWdyIiwgICAgICAgIHtOVUxMfSwgMTU2MiwgInRjcCJ9LAoreyJwY29ubmVjdG1nciIsICAgICAgICB7TlVMTH0sIDE1NjIsICJ1ZHAifSwKK3siY2FkYWJyYS1sbSIsICAgICAgICAge05VTEx9LCAxNTYzLCAidGNwIn0sCit7ImNhZGFicmEtbG0iLCAgICAgICAgIHtOVUxMfSwgMTU2MywgInVkcCJ9LAoreyJwYXktcGVyLXZpZXciLCAgICAgICB7TlVMTH0sIDE1NjQsICJ0Y3AifSwKK3sicGF5LXBlci12aWV3IiwgICAgICAge05VTEx9LCAxNTY0LCAidWRwIn0sCit7IndpbmRkbGIiLCAgICAgICAgICAgIHtOVUxMfSwgMTU2NSwgInRjcCJ9LAoreyJ3aW5kZGxiIiwgICAgICAgICAgICB7TlVMTH0sIDE1NjUsICJ1ZHAifSwKK3siY29yZWx2aWRlbyIsICAgICAgICAge05VTEx9LCAxNTY2LCAidGNwIn0sCit7ImNvcmVsdmlkZW8iLCAgICAgICAgIHtOVUxMfSwgMTU2NiwgInVkcCJ9LAoreyJqbGljZWxtZCIsICAgICAgICAgICB7TlVMTH0sIDE1NjcsICJ0Y3AifSwKK3siamxpY2VsbWQiLCAgICAgICAgICAge05VTEx9LCAxNTY3LCAidWRwIn0sCit7InRzc3BtYXAiLCAgICAgICAgICAgIHtOVUxMfSwgMTU2OCwgInRjcCJ9LAoreyJ0c3NwbWFwIiwgICAgICAgICAgICB7TlVMTH0sIDE1NjgsICJ1ZHAifSwKK3siZXRzIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNTY5LCAidGNwIn0sCit7ImV0cyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTU2OSwgInVkcCJ9LAoreyJvcmJpeGQiLCAgICAgICAgICAgICB7TlVMTH0sIDE1NzAsICJ0Y3AifSwKK3sib3JiaXhkIiwgICAgICAgICAgICAge05VTEx9LCAxNTcwLCAidWRwIn0sCit7InJkYi1kYnMtZGlzcCIsICAgICAgIHtOVUxMfSwgMTU3MSwgInRjcCJ9LAoreyJyZGItZGJzLWRpc3AiLCAgICAgICB7TlVMTH0sIDE1NzEsICJ1ZHAifSwKK3siY2hpcC1sbSIsICAgICAgICAgICAge05VTEx9LCAxNTcyLCAidGNwIn0sCit7ImNoaXAtbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTU3MiwgInVkcCJ9LAoreyJpdHNjb21tLW5zIiwgICAgICAgICB7TlVMTH0sIDE1NzMsICJ0Y3AifSwKK3siaXRzY29tbS1ucyIsICAgICAgICAge05VTEx9LCAxNTczLCAidWRwIn0sCit7Im12ZWwtbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTU3NCwgInRjcCJ9LAoreyJtdmVsLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE1NzQsICJ1ZHAifSwKK3sib3JhY2xlbmFtZXMiLCAgICAgICAge05VTEx9LCAxNTc1LCAidGNwIn0sCit7Im9yYWNsZW5hbWVzIiwgICAgICAgIHtOVUxMfSwgMTU3NSwgInVkcCJ9LAoreyJtb2xkZmxvdy1sbSIsICAgICAgICB7TlVMTH0sIDE1NzYsICJ0Y3AifSwKK3sibW9sZGZsb3ctbG0iLCAgICAgICAge05VTEx9LCAxNTc2LCAidWRwIn0sCit7Imh5cGVyY3ViZS1sbSIsICAgICAgIHtOVUxMfSwgMTU3NywgInRjcCJ9LAoreyJoeXBlcmN1YmUtbG0iLCAgICAgICB7TlVMTH0sIDE1NzcsICJ1ZHAifSwKK3siamFjb2J1cy1sbSIsICAgICAgICAge05VTEx9LCAxNTc4LCAidGNwIn0sCit7ImphY29idXMtbG0iLCAgICAgICAgIHtOVUxMfSwgMTU3OCwgInVkcCJ9LAoreyJpb2Mtc2VhLWxtIiwgICAgICAgICB7TlVMTH0sIDE1NzksICJ0Y3AifSwKK3siaW9jLXNlYS1sbSIsICAgICAgICAge05VTEx9LCAxNTc5LCAidWRwIn0sCit7InRuLXRsLXIxIiwgICAgICAgICAgIHtOVUxMfSwgMTU4MCwgInRjcCJ9LAoreyJ0bi10bC1yMiIsICAgICAgICAgICB7TlVMTH0sIDE1ODAsICJ1ZHAifSwKK3sibWlsLTIwNDUtNDcwMDEiLCAgICAge05VTEx9LCAxNTgxLCAidGNwIn0sCit7Im1pbC0yMDQ1LTQ3MDAxIiwgICAgIHtOVUxMfSwgMTU4MSwgInVkcCJ9LAoreyJtc2ltcyIsICAgICAgICAgICAgICB7TlVMTH0sIDE1ODIsICJ0Y3AifSwKK3sibXNpbXMiLCAgICAgICAgICAgICAge05VTEx9LCAxNTgyLCAidWRwIn0sCit7InNpbWJhZXhwcmVzcyIsICAgICAgIHtOVUxMfSwgMTU4MywgInRjcCJ9LAoreyJzaW1iYWV4cHJlc3MiLCAgICAgICB7TlVMTH0sIDE1ODMsICJ1ZHAifSwKK3sidG4tdGwtZmQyIiwgICAgICAgICAge05VTEx9LCAxNTg0LCAidGNwIn0sCit7InRuLXRsLWZkMiIsICAgICAgICAgIHtOVUxMfSwgMTU4NCwgInVkcCJ9LAoreyJpbnR2IiwgICAgICAgICAgICAgICB7TlVMTH0sIDE1ODUsICJ0Y3AifSwKK3siaW50diIsICAgICAgICAgICAgICAge05VTEx9LCAxNTg1LCAidWRwIn0sCit7ImlibS1hYnRhY3QiLCAgICAgICAgIHtOVUxMfSwgMTU4NiwgInRjcCJ9LAoreyJpYm0tYWJ0YWN0IiwgICAgICAgICB7TlVMTH0sIDE1ODYsICJ1ZHAifSwKK3sicHJhX2VsbWQiLCAgICAgICAgICAge05VTEx9LCAxNTg3LCAidGNwIn0sCit7InByYV9lbG1kIiwgICAgICAgICAgIHtOVUxMfSwgMTU4NywgInVkcCJ9LAoreyJ0cmlxdWVzdC1sbSIsICAgICAgICB7TlVMTH0sIDE1ODgsICJ0Y3AifSwKK3sidHJpcXVlc3QtbG0iLCAgICAgICAge05VTEx9LCAxNTg4LCAidWRwIn0sCit7InZxcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTU4OSwgInRjcCJ9LAoreyJ2cXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE1ODksICJ1ZHAifSwKK3siZ2VtaW5pLWxtIiwgICAgICAgICAge05VTEx9LCAxNTkwLCAidGNwIn0sCit7ImdlbWluaS1sbSIsICAgICAgICAgIHtOVUxMfSwgMTU5MCwgInVkcCJ9LAoreyJuY3BtLXBtIiwgICAgICAgICAgICB7TlVMTH0sIDE1OTEsICJ0Y3AifSwKK3sibmNwbS1wbSIsICAgICAgICAgICAge05VTEx9LCAxNTkxLCAidWRwIn0sCit7ImNvbW1vbnNwYWNlIiwgICAgICAgIHtOVUxMfSwgMTU5MiwgInRjcCJ9LAoreyJjb21tb25zcGFjZSIsICAgICAgICB7TlVMTH0sIDE1OTIsICJ1ZHAifSwKK3sibWFpbnNvZnQtbG0iLCAgICAgICAge05VTEx9LCAxNTkzLCAidGNwIn0sCit7Im1haW5zb2Z0LWxtIiwgICAgICAgIHtOVUxMfSwgMTU5MywgInVkcCJ9LAoreyJzaXh0cmFrIiwgICAgICAgICAgICB7TlVMTH0sIDE1OTQsICJ0Y3AifSwKK3sic2l4dHJhayIsICAgICAgICAgICAge05VTEx9LCAxNTk0LCAidWRwIn0sCit7InJhZGlvIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTU5NSwgInRjcCJ9LAoreyJyYWRpbyIsICAgICAgICAgICAgICB7TlVMTH0sIDE1OTUsICJ1ZHAifSwKK3sicmFkaW8tc20iLCAgICAgICAgICAge05VTEx9LCAxNTk2LCAidGNwIn0sCit7InJhZGlvLWJjIiwgICAgICAgICAgIHtOVUxMfSwgMTU5NiwgInVkcCJ9LAoreyJvcmJwbHVzLWlpb3AiLCAgICAgICB7TlVMTH0sIDE1OTcsICJ0Y3AifSwKK3sib3JicGx1cy1paW9wIiwgICAgICAge05VTEx9LCAxNTk3LCAidWRwIn0sCit7InBpY2tuZnMiLCAgICAgICAgICAgIHtOVUxMfSwgMTU5OCwgInRjcCJ9LAoreyJwaWNrbmZzIiwgICAgICAgICAgICB7TlVMTH0sIDE1OTgsICJ1ZHAifSwKK3sic2ltYmFzZXJ2aWNlcyIsICAgICAge05VTEx9LCAxNTk5LCAidGNwIn0sCit7InNpbWJhc2VydmljZXMiLCAgICAgIHtOVUxMfSwgMTU5OSwgInVkcCJ9LAoreyJpc3NkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE2MDAsICJ0Y3AifSwKK3siaXNzZCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjAwLCAidWRwIn0sCit7ImFhcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTYwMSwgInRjcCJ9LAoreyJhYXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE2MDEsICJ1ZHAifSwKK3siaW5zcGVjdCIsICAgICAgICAgICAge05VTEx9LCAxNjAyLCAidGNwIn0sCit7Imluc3BlY3QiLCAgICAgICAgICAgIHtOVUxMfSwgMTYwMiwgInVkcCJ9LAoreyJwaWNvZGJjIiwgICAgICAgICAgICB7TlVMTH0sIDE2MDMsICJ0Y3AifSwKK3sicGljb2RiYyIsICAgICAgICAgICAge05VTEx9LCAxNjAzLCAidWRwIn0sCit7ImljYWJyb3dzZXIiLCAgICAgICAgIHtOVUxMfSwgMTYwNCwgInRjcCJ9LAoreyJpY2Ficm93c2VyIiwgICAgICAgICB7TlVMTH0sIDE2MDQsICJ1ZHAifSwKK3sic2xwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNjA1LCAidGNwIn0sCit7InNscCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTYwNSwgInVkcCJ9LAoreyJzbG0tYXBpIiwgICAgICAgICAgICB7TlVMTH0sIDE2MDYsICJ0Y3AifSwKK3sic2xtLWFwaSIsICAgICAgICAgICAge05VTEx9LCAxNjA2LCAidWRwIn0sCit7InN0dCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTYwNywgInRjcCJ9LAoreyJzdHQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE2MDcsICJ1ZHAifSwKK3sic21hcnQtbG0iLCAgICAgICAgICAge05VTEx9LCAxNjA4LCAidGNwIn0sCit7InNtYXJ0LWxtIiwgICAgICAgICAgIHtOVUxMfSwgMTYwOCwgInVkcCJ9LAoreyJpc3lzZy1sbSIsICAgICAgICAgICB7TlVMTH0sIDE2MDksICJ0Y3AifSwKK3siaXN5c2ctbG0iLCAgICAgICAgICAge05VTEx9LCAxNjA5LCAidWRwIn0sCit7InRhdXJ1cy13aCIsICAgICAgICAgIHtOVUxMfSwgMTYxMCwgInRjcCJ9LAoreyJ0YXVydXMtd2giLCAgICAgICAgICB7TlVMTH0sIDE2MTAsICJ1ZHAifSwKK3siaWxsIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNjExLCAidGNwIn0sCit7ImlsbCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTYxMSwgInVkcCJ9LAoreyJuZXRiaWxsLXRyYW5zIiwgICAgICB7TlVMTH0sIDE2MTIsICJ0Y3AifSwKK3sibmV0YmlsbC10cmFucyIsICAgICAge05VTEx9LCAxNjEyLCAidWRwIn0sCit7Im5ldGJpbGwta2V5cmVwIiwgICAgIHtOVUxMfSwgMTYxMywgInRjcCJ9LAoreyJuZXRiaWxsLWtleXJlcCIsICAgICB7TlVMTH0sIDE2MTMsICJ1ZHAifSwKK3sibmV0YmlsbC1jcmVkIiwgICAgICAge05VTEx9LCAxNjE0LCAidGNwIn0sCit7Im5ldGJpbGwtY3JlZCIsICAgICAgIHtOVUxMfSwgMTYxNCwgInVkcCJ9LAoreyJuZXRiaWxsLWF1dGgiLCAgICAgICB7TlVMTH0sIDE2MTUsICJ0Y3AifSwKK3sibmV0YmlsbC1hdXRoIiwgICAgICAge05VTEx9LCAxNjE1LCAidWRwIn0sCit7Im5ldGJpbGwtcHJvZCIsICAgICAgIHtOVUxMfSwgMTYxNiwgInRjcCJ9LAoreyJuZXRiaWxsLXByb2QiLCAgICAgICB7TlVMTH0sIDE2MTYsICJ1ZHAifSwKK3sibmltcm9kLWFnZW50IiwgICAgICAge05VTEx9LCAxNjE3LCAidGNwIn0sCit7Im5pbXJvZC1hZ2VudCIsICAgICAgIHtOVUxMfSwgMTYxNywgInVkcCJ9LAoreyJza3l0ZWxuZXQiLCAgICAgICAgICB7TlVMTH0sIDE2MTgsICJ0Y3AifSwKK3sic2t5dGVsbmV0IiwgICAgICAgICAge05VTEx9LCAxNjE4LCAidWRwIn0sCit7InhzLW9wZW5zdG9yYWdlIiwgICAgIHtOVUxMfSwgMTYxOSwgInRjcCJ9LAoreyJ4cy1vcGVuc3RvcmFnZSIsICAgICB7TlVMTH0sIDE2MTksICJ1ZHAifSwKK3siZmF4cG9ydHdpbnBvcnQiLCAgICAge05VTEx9LCAxNjIwLCAidGNwIn0sCit7ImZheHBvcnR3aW5wb3J0IiwgICAgIHtOVUxMfSwgMTYyMCwgInVkcCJ9LAoreyJzb2Z0ZGF0YXBob25lIiwgICAgICB7TlVMTH0sIDE2MjEsICJ0Y3AifSwKK3sic29mdGRhdGFwaG9uZSIsICAgICAge05VTEx9LCAxNjIxLCAidWRwIn0sCit7Im9udGltZSIsICAgICAgICAgICAgIHtOVUxMfSwgMTYyMiwgInRjcCJ9LAoreyJvbnRpbWUiLCAgICAgICAgICAgICB7TlVMTH0sIDE2MjIsICJ1ZHAifSwKK3siamFsZW9zbmQiLCAgICAgICAgICAge05VTEx9LCAxNjIzLCAidGNwIn0sCit7ImphbGVvc25kIiwgICAgICAgICAgIHtOVUxMfSwgMTYyMywgInVkcCJ9LAoreyJ1ZHAtc3ItcG9ydCIsICAgICAgICB7TlVMTH0sIDE2MjQsICJ0Y3AifSwKK3sidWRwLXNyLXBvcnQiLCAgICAgICAge05VTEx9LCAxNjI0LCAidWRwIn0sCit7InN2cy1vbWFnZW50IiwgICAgICAgIHtOVUxMfSwgMTYyNSwgInRjcCJ9LAoreyJzdnMtb21hZ2VudCIsICAgICAgICB7TlVMTH0sIDE2MjUsICJ1ZHAifSwKK3sic2hvY2t3YXZlIiwgICAgICAgICAge05VTEx9LCAxNjI2LCAidGNwIn0sCit7InNob2Nrd2F2ZSIsICAgICAgICAgIHtOVUxMfSwgMTYyNiwgInVkcCJ9LAoreyJ0MTI4LWdhdGV3YXkiLCAgICAgICB7TlVMTH0sIDE2MjcsICJ0Y3AifSwKK3sidDEyOC1nYXRld2F5IiwgICAgICAge05VTEx9LCAxNjI3LCAidWRwIn0sCit7ImxvbnRhbGstbm9ybSIsICAgICAgIHtOVUxMfSwgMTYyOCwgInRjcCJ9LAoreyJsb250YWxrLW5vcm0iLCAgICAgICB7TlVMTH0sIDE2MjgsICJ1ZHAifSwKK3sibG9udGFsay11cmdudCIsICAgICAge05VTEx9LCAxNjI5LCAidGNwIn0sCit7ImxvbnRhbGstdXJnbnQiLCAgICAgIHtOVUxMfSwgMTYyOSwgInVkcCJ9LAoreyJvcmFjbGVuZXQ4Y21hbiIsICAgICB7TlVMTH0sIDE2MzAsICJ0Y3AifSwKK3sib3JhY2xlbmV0OGNtYW4iLCAgICAge05VTEx9LCAxNjMwLCAidWRwIn0sCit7InZpc2l0dmlldyIsICAgICAgICAgIHtOVUxMfSwgMTYzMSwgInRjcCJ9LAoreyJ2aXNpdHZpZXciLCAgICAgICAgICB7TlVMTH0sIDE2MzEsICJ1ZHAifSwKK3sicGFtbXJhdGMiLCAgICAgICAgICAge05VTEx9LCAxNjMyLCAidGNwIn0sCit7InBhbW1yYXRjIiwgICAgICAgICAgIHtOVUxMfSwgMTYzMiwgInVkcCJ9LAoreyJwYW1tcnBjIiwgICAgICAgICAgICB7TlVMTH0sIDE2MzMsICJ0Y3AifSwKK3sicGFtbXJwYyIsICAgICAgICAgICAge05VTEx9LCAxNjMzLCAidWRwIn0sCit7ImxvYXByb2JlIiwgICAgICAgICAgIHtOVUxMfSwgMTYzNCwgInRjcCJ9LAoreyJsb2Fwcm9iZSIsICAgICAgICAgICB7TlVMTH0sIDE2MzQsICJ1ZHAifSwKK3siZWRiLXNlcnZlcjEiLCAgICAgICAge05VTEx9LCAxNjM1LCAidGNwIn0sCit7ImVkYi1zZXJ2ZXIxIiwgICAgICAgIHtOVUxMfSwgMTYzNSwgInVkcCJ9LAoreyJpc2RjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE2MzYsICJ0Y3AifSwKK3siaXNkYyIsICAgICAgICAgICAgICAge05VTEx9LCAxNjM2LCAidWRwIn0sCit7ImlzbGMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTYzNywgInRjcCJ9LAoreyJpc2xjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE2MzcsICJ1ZHAifSwKK3siaXNtYyIsICAgICAgICAgICAgICAge05VTEx9LCAxNjM4LCAidGNwIn0sCit7ImlzbWMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTYzOCwgInVkcCJ9LAoreyJjZXJ0LWluaXRpYXRvciIsICAgICB7TlVMTH0sIDE2MzksICJ0Y3AifSwKK3siY2VydC1pbml0aWF0b3IiLCAgICAge05VTEx9LCAxNjM5LCAidWRwIn0sCit7ImNlcnQtcmVzcG9uZGVyIiwgICAgIHtOVUxMfSwgMTY0MCwgInRjcCJ9LAoreyJjZXJ0LXJlc3BvbmRlciIsICAgICB7TlVMTH0sIDE2NDAsICJ1ZHAifSwKK3siaW52aXNpb24iLCAgICAgICAgICAge05VTEx9LCAxNjQxLCAidGNwIn0sCit7ImludmlzaW9uIiwgICAgICAgICAgIHtOVUxMfSwgMTY0MSwgInVkcCJ9LAoreyJpc2lzLWFtIiwgICAgICAgICAgICB7TlVMTH0sIDE2NDIsICJ0Y3AifSwKK3siaXNpcy1hbSIsICAgICAgICAgICAge05VTEx9LCAxNjQyLCAidWRwIn0sCit7ImlzaXMtYW1iYyIsICAgICAgICAgIHtOVUxMfSwgMTY0MywgInRjcCJ9LAoreyJpc2lzLWFtYmMiLCAgICAgICAgICB7TlVMTH0sIDE2NDMsICJ1ZHAifSwKK3sic2Fpc2VoIiwgICAgICAgICAgICAge05VTEx9LCAxNjQ0LCAidGNwIn0sCit7InNpZ2h0bGluZSIsICAgICAgICAgIHtOVUxMfSwgMTY0NSwgInRjcCJ9LAoreyJzaWdodGxpbmUiLCAgICAgICAgICB7TlVMTH0sIDE2NDUsICJ1ZHAifSwKK3sic2EtbXNnLXBvcnQiLCAgICAgICAge05VTEx9LCAxNjQ2LCAidGNwIn0sCit7InNhLW1zZy1wb3J0IiwgICAgICAgIHtOVUxMfSwgMTY0NiwgInVkcCJ9LAoreyJyc2FwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE2NDcsICJ0Y3AifSwKK3sicnNhcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjQ3LCAidWRwIn0sCit7ImNvbmN1cnJlbnQtbG0iLCAgICAgIHtOVUxMfSwgMTY0OCwgInRjcCJ9LAoreyJjb25jdXJyZW50LWxtIiwgICAgICB7TlVMTH0sIDE2NDgsICJ1ZHAifSwKK3sia2VybWl0IiwgICAgICAgICAgICAge05VTEx9LCAxNjQ5LCAidGNwIn0sCit7Imtlcm1pdCIsICAgICAgICAgICAgIHtOVUxMfSwgMTY0OSwgInVkcCJ9LAoreyJua2QiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE2NTAsICJ0Y3AifSwKK3sibmtkIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNjUwLCAidWRwIn0sCit7InNoaXZhX2NvbmZzcnZyIiwgICAgIHtOVUxMfSwgMTY1MSwgInRjcCJ9LAoreyJzaGl2YV9jb25mc3J2ciIsICAgICB7TlVMTH0sIDE2NTEsICJ1ZHAifSwKK3sieG5tcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNjUyLCAidGNwIn0sCit7InhubXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTY1MiwgInVkcCJ9LAoreyJhbHBoYXRlY2gtbG0iLCAgICAgICB7TlVMTH0sIDE2NTMsICJ0Y3AifSwKK3siYWxwaGF0ZWNoLWxtIiwgICAgICAge05VTEx9LCAxNjUzLCAidWRwIn0sCit7InN0YXJnYXRlYWxlcnRzIiwgICAgIHtOVUxMfSwgMTY1NCwgInRjcCJ9LAoreyJzdGFyZ2F0ZWFsZXJ0cyIsICAgICB7TlVMTH0sIDE2NTQsICJ1ZHAifSwKK3siZGVjLW1iYWRtaW4iLCAgICAgICAge05VTEx9LCAxNjU1LCAidGNwIn0sCit7ImRlYy1tYmFkbWluIiwgICAgICAgIHtOVUxMfSwgMTY1NSwgInVkcCJ9LAoreyJkZWMtbWJhZG1pbi1oIiwgICAgICB7TlVMTH0sIDE2NTYsICJ0Y3AifSwKK3siZGVjLW1iYWRtaW4taCIsICAgICAge05VTEx9LCAxNjU2LCAidWRwIn0sCit7ImZ1aml0c3UtbW1wZGMiLCAgICAgIHtOVUxMfSwgMTY1NywgInRjcCJ9LAoreyJmdWppdHN1LW1tcGRjIiwgICAgICB7TlVMTH0sIDE2NTcsICJ1ZHAifSwKK3sic2l4bmV0dWRyIiwgICAgICAgICAge05VTEx9LCAxNjU4LCAidGNwIn0sCit7InNpeG5ldHVkciIsICAgICAgICAgIHtOVUxMfSwgMTY1OCwgInVkcCJ9LAoreyJzZy1sbSIsICAgICAgICAgICAgICB7TlVMTH0sIDE2NTksICJ0Y3AifSwKK3sic2ctbG0iLCAgICAgICAgICAgICAge05VTEx9LCAxNjU5LCAidWRwIn0sCit7InNraXAtbWMtZ2lrcmVxIiwgICAgIHtOVUxMfSwgMTY2MCwgInRjcCJ9LAoreyJza2lwLW1jLWdpa3JlcSIsICAgICB7TlVMTH0sIDE2NjAsICJ1ZHAifSwKK3sibmV0dmlldy1haXgtMSIsICAgICAge05VTEx9LCAxNjYxLCAidGNwIn0sCit7Im5ldHZpZXctYWl4LTEiLCAgICAgIHtOVUxMfSwgMTY2MSwgInVkcCJ9LAoreyJuZXR2aWV3LWFpeC0yIiwgICAgICB7TlVMTH0sIDE2NjIsICJ0Y3AifSwKK3sibmV0dmlldy1haXgtMiIsICAgICAge05VTEx9LCAxNjYyLCAidWRwIn0sCit7Im5ldHZpZXctYWl4LTMiLCAgICAgIHtOVUxMfSwgMTY2MywgInRjcCJ9LAoreyJuZXR2aWV3LWFpeC0zIiwgICAgICB7TlVMTH0sIDE2NjMsICJ1ZHAifSwKK3sibmV0dmlldy1haXgtNCIsICAgICAge05VTEx9LCAxNjY0LCAidGNwIn0sCit7Im5ldHZpZXctYWl4LTQiLCAgICAgIHtOVUxMfSwgMTY2NCwgInVkcCJ9LAoreyJuZXR2aWV3LWFpeC01IiwgICAgICB7TlVMTH0sIDE2NjUsICJ0Y3AifSwKK3sibmV0dmlldy1haXgtNSIsICAgICAge05VTEx9LCAxNjY1LCAidWRwIn0sCit7Im5ldHZpZXctYWl4LTYiLCAgICAgIHtOVUxMfSwgMTY2NiwgInRjcCJ9LAoreyJuZXR2aWV3LWFpeC02IiwgICAgICB7TlVMTH0sIDE2NjYsICJ1ZHAifSwKK3sibmV0dmlldy1haXgtNyIsICAgICAge05VTEx9LCAxNjY3LCAidGNwIn0sCit7Im5ldHZpZXctYWl4LTciLCAgICAgIHtOVUxMfSwgMTY2NywgInVkcCJ9LAoreyJuZXR2aWV3LWFpeC04IiwgICAgICB7TlVMTH0sIDE2NjgsICJ0Y3AifSwKK3sibmV0dmlldy1haXgtOCIsICAgICAge05VTEx9LCAxNjY4LCAidWRwIn0sCit7Im5ldHZpZXctYWl4LTkiLCAgICAgIHtOVUxMfSwgMTY2OSwgInRjcCJ9LAoreyJuZXR2aWV3LWFpeC05IiwgICAgICB7TlVMTH0sIDE2NjksICJ1ZHAifSwKK3sibmV0dmlldy1haXgtMTAiLCAgICAge05VTEx9LCAxNjcwLCAidGNwIn0sCit7Im5ldHZpZXctYWl4LTEwIiwgICAgIHtOVUxMfSwgMTY3MCwgInVkcCJ9LAoreyJuZXR2aWV3LWFpeC0xMSIsICAgICB7TlVMTH0sIDE2NzEsICJ0Y3AifSwKK3sibmV0dmlldy1haXgtMTEiLCAgICAge05VTEx9LCAxNjcxLCAidWRwIn0sCit7Im5ldHZpZXctYWl4LTEyIiwgICAgIHtOVUxMfSwgMTY3MiwgInRjcCJ9LAoreyJuZXR2aWV3LWFpeC0xMiIsICAgICB7TlVMTH0sIDE2NzIsICJ1ZHAifSwKK3sicHJvc2hhcmUtbWMtMSIsICAgICAge05VTEx9LCAxNjczLCAidGNwIn0sCit7InByb3NoYXJlLW1jLTEiLCAgICAgIHtOVUxMfSwgMTY3MywgInVkcCJ9LAoreyJwcm9zaGFyZS1tYy0yIiwgICAgICB7TlVMTH0sIDE2NzQsICJ0Y3AifSwKK3sicHJvc2hhcmUtbWMtMiIsICAgICAge05VTEx9LCAxNjc0LCAidWRwIn0sCit7InBkcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTY3NSwgInRjcCJ9LAoreyJwZHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE2NzUsICJ1ZHAifSwKK3sibmV0Y29tbTEiLCAgICAgICAgICAge05VTEx9LCAxNjc2LCAidGNwIn0sCit7Im5ldGNvbW0yIiwgICAgICAgICAgIHtOVUxMfSwgMTY3NiwgInVkcCJ9LAoreyJncm91cHdpc2UiLCAgICAgICAgICB7TlVMTH0sIDE2NzcsICJ0Y3AifSwKK3siZ3JvdXB3aXNlIiwgICAgICAgICAge05VTEx9LCAxNjc3LCAidWRwIn0sCit7InByb2xpbmsiLCAgICAgICAgICAgIHtOVUxMfSwgMTY3OCwgInRjcCJ9LAoreyJwcm9saW5rIiwgICAgICAgICAgICB7TlVMTH0sIDE2NzgsICJ1ZHAifSwKK3siZGFyY29ycC1sbSIsICAgICAgICAge05VTEx9LCAxNjc5LCAidGNwIn0sCit7ImRhcmNvcnAtbG0iLCAgICAgICAgIHtOVUxMfSwgMTY3OSwgInVkcCJ9LAoreyJtaWNyb2NvbS1zYnAiLCAgICAgICB7TlVMTH0sIDE2ODAsICJ0Y3AifSwKK3sibWljcm9jb20tc2JwIiwgICAgICAge05VTEx9LCAxNjgwLCAidWRwIn0sCit7InNkLWVsbWQiLCAgICAgICAgICAgIHtOVUxMfSwgMTY4MSwgInRjcCJ9LAoreyJzZC1lbG1kIiwgICAgICAgICAgICB7TlVMTH0sIDE2ODEsICJ1ZHAifSwKK3sibGFueW9uLWxhbnRlcm4iLCAgICAge05VTEx9LCAxNjgyLCAidGNwIn0sCit7Imxhbnlvbi1sYW50ZXJuIiwgICAgIHtOVUxMfSwgMTY4MiwgInVkcCJ9LAoreyJuY3BtLWhpcCIsICAgICAgICAgICB7TlVMTH0sIDE2ODMsICJ0Y3AifSwKK3sibmNwbS1oaXAiLCAgICAgICAgICAge05VTEx9LCAxNjgzLCAidWRwIn0sCit7InNuYXJlc2VjdXJlIiwgICAgICAgIHtOVUxMfSwgMTY4NCwgInRjcCJ9LAoreyJzbmFyZXNlY3VyZSIsICAgICAgICB7TlVMTH0sIDE2ODQsICJ1ZHAifSwKK3sibjJucmVtb3RlIiwgICAgICAgICAge05VTEx9LCAxNjg1LCAidGNwIn0sCit7Im4ybnJlbW90ZSIsICAgICAgICAgIHtOVUxMfSwgMTY4NSwgInVkcCJ9LAoreyJjdm1vbiIsICAgICAgICAgICAgICB7TlVMTH0sIDE2ODYsICJ0Y3AifSwKK3siY3Ztb24iLCAgICAgICAgICAgICAge05VTEx9LCAxNjg2LCAidWRwIn0sCit7Im5zanRwLWN0cmwiLCAgICAgICAgIHtOVUxMfSwgMTY4NywgInRjcCJ9LAoreyJuc2p0cC1jdHJsIiwgICAgICAgICB7TlVMTH0sIDE2ODcsICJ1ZHAifSwKK3sibnNqdHAtZGF0YSIsICAgICAgICAge05VTEx9LCAxNjg4LCAidGNwIn0sCit7Im5zanRwLWRhdGEiLCAgICAgICAgIHtOVUxMfSwgMTY4OCwgInVkcCJ9LAoreyJmaXJlZm94IiwgICAgICAgICAgICB7TlVMTH0sIDE2ODksICJ0Y3AifSwKK3siZmlyZWZveCIsICAgICAgICAgICAge05VTEx9LCAxNjg5LCAidWRwIn0sCit7Im5nLXVtZHMiLCAgICAgICAgICAgIHtOVUxMfSwgMTY5MCwgInRjcCJ9LAoreyJuZy11bWRzIiwgICAgICAgICAgICB7TlVMTH0sIDE2OTAsICJ1ZHAifSwKK3siZW1waXJlLWVtcHVtYSIsICAgICAge05VTEx9LCAxNjkxLCAidGNwIn0sCit7ImVtcGlyZS1lbXB1bWEiLCAgICAgIHtOVUxMfSwgMTY5MSwgInVkcCJ9LAoreyJzc3RzeXMtbG0iLCAgICAgICAgICB7TlVMTH0sIDE2OTIsICJ0Y3AifSwKK3sic3N0c3lzLWxtIiwgICAgICAgICAge05VTEx9LCAxNjkyLCAidWRwIn0sCit7InJyaXJ0ciIsICAgICAgICAgICAgIHtOVUxMfSwgMTY5MywgInRjcCJ9LAoreyJycmlydHIiLCAgICAgICAgICAgICB7TlVMTH0sIDE2OTMsICJ1ZHAifSwKK3sicnJpbXdtIiwgICAgICAgICAgICAge05VTEx9LCAxNjk0LCAidGNwIn0sCit7InJyaW13bSIsICAgICAgICAgICAgIHtOVUxMfSwgMTY5NCwgInVkcCJ9LAoreyJycmlsd20iLCAgICAgICAgICAgICB7TlVMTH0sIDE2OTUsICJ0Y3AifSwKK3sicnJpbHdtIiwgICAgICAgICAgICAge05VTEx9LCAxNjk1LCAidWRwIn0sCit7InJyaWZtbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTY5NiwgInRjcCJ9LAoreyJycmlmbW0iLCAgICAgICAgICAgICB7TlVMTH0sIDE2OTYsICJ1ZHAifSwKK3sicnJpc2F0IiwgICAgICAgICAgICAge05VTEx9LCAxNjk3LCAidGNwIn0sCit7InJyaXNhdCIsICAgICAgICAgICAgIHtOVUxMfSwgMTY5NywgInVkcCJ9LAoreyJyc3ZwLWVuY2FwLTEiLCAgICAgICB7TlVMTH0sIDE2OTgsICJ0Y3AifSwKK3sicnN2cC1lbmNhcC0xIiwgICAgICAge05VTEx9LCAxNjk4LCAidWRwIn0sCit7InJzdnAtZW5jYXAtMiIsICAgICAgIHtOVUxMfSwgMTY5OSwgInRjcCJ9LAoreyJyc3ZwLWVuY2FwLTIiLCAgICAgICB7TlVMTH0sIDE2OTksICJ1ZHAifSwKK3sibXBzLXJhZnQiLCAgICAgICAgICAge05VTEx9LCAxNzAwLCAidGNwIn0sCit7Im1wcy1yYWZ0IiwgICAgICAgICAgIHtOVUxMfSwgMTcwMCwgInVkcCJ9LAoreyJsMmYiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE3MDEsICJ0Y3AifSwKK3sibDJmIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNzAxLCAidWRwIn0sCit7ImwydHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTcwMSwgInRjcCJ9LAoreyJsMnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE3MDEsICJ1ZHAifSwKK3siZGVza3NoYXJlIiwgICAgICAgICAge05VTEx9LCAxNzAyLCAidGNwIn0sCit7ImRlc2tzaGFyZSIsICAgICAgICAgIHtOVUxMfSwgMTcwMiwgInVkcCJ9LAoreyJoYi1lbmdpbmUiLCAgICAgICAgICB7TlVMTH0sIDE3MDMsICJ0Y3AifSwKK3siaGItZW5naW5lIiwgICAgICAgICAge05VTEx9LCAxNzAzLCAidWRwIn0sCit7ImJjcy1icm9rZXIiLCAgICAgICAgIHtOVUxMfSwgMTcwNCwgInRjcCJ9LAoreyJiY3MtYnJva2VyIiwgICAgICAgICB7TlVMTH0sIDE3MDQsICJ1ZHAifSwKK3sic2xpbmdzaG90IiwgICAgICAgICAge05VTEx9LCAxNzA1LCAidGNwIn0sCit7InNsaW5nc2hvdCIsICAgICAgICAgIHtOVUxMfSwgMTcwNSwgInVkcCJ9LAoreyJqZXRmb3JtIiwgICAgICAgICAgICB7TlVMTH0sIDE3MDYsICJ0Y3AifSwKK3siamV0Zm9ybSIsICAgICAgICAgICAge05VTEx9LCAxNzA2LCAidWRwIn0sCit7InZkbXBsYXkiLCAgICAgICAgICAgIHtOVUxMfSwgMTcwNywgInRjcCJ9LAoreyJ2ZG1wbGF5IiwgICAgICAgICAgICB7TlVMTH0sIDE3MDcsICJ1ZHAifSwKK3siZ2F0LWxtZCIsICAgICAgICAgICAge05VTEx9LCAxNzA4LCAidGNwIn0sCit7ImdhdC1sbWQiLCAgICAgICAgICAgIHtOVUxMfSwgMTcwOCwgInVkcCJ9LAoreyJjZW50cmEiLCAgICAgICAgICAgICB7TlVMTH0sIDE3MDksICJ0Y3AifSwKK3siY2VudHJhIiwgICAgICAgICAgICAge05VTEx9LCAxNzA5LCAidWRwIn0sCit7ImltcGVyYSIsICAgICAgICAgICAgIHtOVUxMfSwgMTcxMCwgInRjcCJ9LAoreyJpbXBlcmEiLCAgICAgICAgICAgICB7TlVMTH0sIDE3MTAsICJ1ZHAifSwKK3sicHB0Y29uZmVyZW5jZSIsICAgICAge05VTEx9LCAxNzExLCAidGNwIn0sCit7InBwdGNvbmZlcmVuY2UiLCAgICAgIHtOVUxMfSwgMTcxMSwgInVkcCJ9LAoreyJyZWdpc3RyYXIiLCAgICAgICAgICB7TlVMTH0sIDE3MTIsICJ0Y3AifSwKK3sicmVnaXN0cmFyIiwgICAgICAgICAge05VTEx9LCAxNzEyLCAidWRwIn0sCit7ImNvbmZlcmVuY2V0YWxrIiwgICAgIHtOVUxMfSwgMTcxMywgInRjcCJ9LAoreyJjb25mZXJlbmNldGFsayIsICAgICB7TlVMTH0sIDE3MTMsICJ1ZHAifSwKK3sic2VzaS1sbSIsICAgICAgICAgICAge05VTEx9LCAxNzE0LCAidGNwIn0sCit7InNlc2ktbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTcxNCwgInVkcCJ9LAoreyJob3VkaW5pLWxtIiwgICAgICAgICB7TlVMTH0sIDE3MTUsICJ0Y3AifSwKK3siaG91ZGluaS1sbSIsICAgICAgICAge05VTEx9LCAxNzE1LCAidWRwIn0sCit7Inhtc2ciLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTcxNiwgInRjcCJ9LAoreyJ4bXNnIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE3MTYsICJ1ZHAifSwKK3siZmotaGRuZXQiLCAgICAgICAgICAge05VTEx9LCAxNzE3LCAidGNwIn0sCit7ImZqLWhkbmV0IiwgICAgICAgICAgIHtOVUxMfSwgMTcxNywgInVkcCJ9LAoreyJoMzIzZ2F0ZWRpc2MiLCAgICAgICB7TlVMTH0sIDE3MTgsICJ0Y3AifSwKK3siaDMyM2dhdGVkaXNjIiwgICAgICAge05VTEx9LCAxNzE4LCAidWRwIn0sCit7ImgzMjNnYXRlc3RhdCIsICAgICAgIHtOVUxMfSwgMTcxOSwgInRjcCJ9LAoreyJoMzIzZ2F0ZXN0YXQiLCAgICAgICB7TlVMTH0sIDE3MTksICJ1ZHAifSwKK3siaDMyM2hvc3RjYWxsIiwgICAgICAge05VTEx9LCAxNzIwLCAidGNwIn0sCit7ImgzMjNob3N0Y2FsbCIsICAgICAgIHtOVUxMfSwgMTcyMCwgInVkcCJ9LAoreyJjYWljY2kiLCAgICAgICAgICAgICB7TlVMTH0sIDE3MjEsICJ0Y3AifSwKK3siY2FpY2NpIiwgICAgICAgICAgICAge05VTEx9LCAxNzIxLCAidWRwIn0sCit7Imhrcy1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTcyMiwgInRjcCJ9LAoreyJoa3MtbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE3MjIsICJ1ZHAifSwKK3sicHB0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxNzIzLCAidGNwIn0sCit7InBwdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTcyMywgInVkcCJ9LAoreyJjc2JwaG9uZW1hc3RlciIsICAgICB7TlVMTH0sIDE3MjQsICJ0Y3AifSwKK3siY3NicGhvbmVtYXN0ZXIiLCAgICAge05VTEx9LCAxNzI0LCAidWRwIn0sCit7ImlkZW4tcmFscCIsICAgICAgICAgIHtOVUxMfSwgMTcyNSwgInRjcCJ9LAoreyJpZGVuLXJhbHAiLCAgICAgICAgICB7TlVMTH0sIDE3MjUsICJ1ZHAifSwKK3siaWJlcmlhZ2FtZXMiLCAgICAgICAge05VTEx9LCAxNzI2LCAidGNwIn0sCit7ImliZXJpYWdhbWVzIiwgICAgICAgIHtOVUxMfSwgMTcyNiwgInVkcCJ9LAoreyJ3aW5kZHgiLCAgICAgICAgICAgICB7TlVMTH0sIDE3MjcsICJ0Y3AifSwKK3sid2luZGR4IiwgICAgICAgICAgICAge05VTEx9LCAxNzI3LCAidWRwIn0sCit7InRlbGluZHVzIiwgICAgICAgICAgIHtOVUxMfSwgMTcyOCwgInRjcCJ9LAoreyJ0ZWxpbmR1cyIsICAgICAgICAgICB7TlVMTH0sIDE3MjgsICJ1ZHAifSwKK3siY2l0eW5sIiwgICAgICAgICAgICAge05VTEx9LCAxNzI5LCAidGNwIn0sCit7ImNpdHlubCIsICAgICAgICAgICAgIHtOVUxMfSwgMTcyOSwgInVkcCJ9LAoreyJyb2tldHoiLCAgICAgICAgICAgICB7TlVMTH0sIDE3MzAsICJ0Y3AifSwKK3sicm9rZXR6IiwgICAgICAgICAgICAge05VTEx9LCAxNzMwLCAidWRwIn0sCit7Im1zaWNjcCIsICAgICAgICAgICAgIHtOVUxMfSwgMTczMSwgInRjcCJ9LAoreyJtc2ljY3AiLCAgICAgICAgICAgICB7TlVMTH0sIDE3MzEsICJ1ZHAifSwKK3sicHJveGltIiwgICAgICAgICAgICAge05VTEx9LCAxNzMyLCAidGNwIn0sCit7InByb3hpbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTczMiwgInVkcCJ9LAoreyJzaWlwYXQiLCAgICAgICAgICAgICB7TlVMTH0sIDE3MzMsICJ0Y3AifSwKK3sic2lpcGF0IiwgICAgICAgICAgICAge05VTEx9LCAxNzMzLCAidWRwIn0sCit7ImNhbWJlcnR4LWxtIiwgICAgICAgIHtOVUxMfSwgMTczNCwgInRjcCJ9LAoreyJjYW1iZXJ0eC1sbSIsICAgICAgICB7TlVMTH0sIDE3MzQsICJ1ZHAifSwKK3sicHJpdmF0ZWNoYXQiLCAgICAgICAge05VTEx9LCAxNzM1LCAidGNwIn0sCit7InByaXZhdGVjaGF0IiwgICAgICAgIHtOVUxMfSwgMTczNSwgInVkcCJ9LAoreyJzdHJlZXQtc3RyZWFtIiwgICAgICB7TlVMTH0sIDE3MzYsICJ0Y3AifSwKK3sic3RyZWV0LXN0cmVhbSIsICAgICAge05VTEx9LCAxNzM2LCAidWRwIn0sCit7InVsdGltYWQiLCAgICAgICAgICAgIHtOVUxMfSwgMTczNywgInRjcCJ9LAoreyJ1bHRpbWFkIiwgICAgICAgICAgICB7TlVMTH0sIDE3MzcsICJ1ZHAifSwKK3siZ2FtZWdlbjEiLCAgICAgICAgICAge05VTEx9LCAxNzM4LCAidGNwIn0sCit7ImdhbWVnZW4xIiwgICAgICAgICAgIHtOVUxMfSwgMTczOCwgInVkcCJ9LAoreyJ3ZWJhY2Nlc3MiLCAgICAgICAgICB7TlVMTH0sIDE3MzksICJ0Y3AifSwKK3sid2ViYWNjZXNzIiwgICAgICAgICAge05VTEx9LCAxNzM5LCAidWRwIn0sCit7ImVuY29yZSIsICAgICAgICAgICAgIHtOVUxMfSwgMTc0MCwgInRjcCJ9LAoreyJlbmNvcmUiLCAgICAgICAgICAgICB7TlVMTH0sIDE3NDAsICJ1ZHAifSwKK3siY2lzY28tbmV0LW1nbXQiLCAgICAge05VTEx9LCAxNzQxLCAidGNwIn0sCit7ImNpc2NvLW5ldC1tZ210IiwgICAgIHtOVUxMfSwgMTc0MSwgInVkcCJ9LAoreyIzQ29tLW5zZCIsICAgICAgICAgICB7TlVMTH0sIDE3NDIsICJ0Y3AifSwKK3siM0NvbS1uc2QiLCAgICAgICAgICAge05VTEx9LCAxNzQyLCAidWRwIn0sCit7ImNpbmVncmZ4LWxtIiwgICAgICAgIHtOVUxMfSwgMTc0MywgInRjcCJ9LAoreyJjaW5lZ3JmeC1sbSIsICAgICAgICB7TlVMTH0sIDE3NDMsICJ1ZHAifSwKK3sibmNwbS1mdCIsICAgICAgICAgICAge05VTEx9LCAxNzQ0LCAidGNwIn0sCit7Im5jcG0tZnQiLCAgICAgICAgICAgIHtOVUxMfSwgMTc0NCwgInVkcCJ9LAoreyJyZW1vdGUtd2luc29jayIsICAgICB7TlVMTH0sIDE3NDUsICJ0Y3AifSwKK3sicmVtb3RlLXdpbnNvY2siLCAgICAge05VTEx9LCAxNzQ1LCAidWRwIn0sCit7ImZ0cmFwaWQtMSIsICAgICAgICAgIHtOVUxMfSwgMTc0NiwgInRjcCJ9LAoreyJmdHJhcGlkLTEiLCAgICAgICAgICB7TlVMTH0sIDE3NDYsICJ1ZHAifSwKK3siZnRyYXBpZC0yIiwgICAgICAgICAge05VTEx9LCAxNzQ3LCAidGNwIn0sCit7ImZ0cmFwaWQtMiIsICAgICAgICAgIHtOVUxMfSwgMTc0NywgInVkcCJ9LAoreyJvcmFjbGUtZW0xIiwgICAgICAgICB7TlVMTH0sIDE3NDgsICJ0Y3AifSwKK3sib3JhY2xlLWVtMSIsICAgICAgICAge05VTEx9LCAxNzQ4LCAidWRwIn0sCit7ImFzcGVuLXNlcnZpY2VzIiwgICAgIHtOVUxMfSwgMTc0OSwgInRjcCJ9LAoreyJhc3Blbi1zZXJ2aWNlcyIsICAgICB7TlVMTH0sIDE3NDksICJ1ZHAifSwKK3sic3NscCIsICAgICAgICAgICAgICAge05VTEx9LCAxNzUwLCAidGNwIn0sCit7InNzbHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTc1MCwgInVkcCJ9LAoreyJzd2lmdG5ldCIsICAgICAgICAgICB7TlVMTH0sIDE3NTEsICJ0Y3AifSwKK3sic3dpZnRuZXQiLCAgICAgICAgICAge05VTEx9LCAxNzUxLCAidWRwIn0sCit7ImxvZnItbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTc1MiwgInRjcCJ9LAoreyJsb2ZyLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE3NTIsICJ1ZHAifSwKK3sib3JhY2xlLWVtMiIsICAgICAgICAge05VTEx9LCAxNzU0LCAidGNwIn0sCit7Im9yYWNsZS1lbTIiLCAgICAgICAgIHtOVUxMfSwgMTc1NCwgInVkcCJ9LAoreyJtcy1zdHJlYW1pbmciLCAgICAgICB7TlVMTH0sIDE3NTUsICJ0Y3AifSwKK3sibXMtc3RyZWFtaW5nIiwgICAgICAge05VTEx9LCAxNzU1LCAidWRwIn0sCit7ImNhcGZhc3QtbG1kIiwgICAgICAgIHtOVUxMfSwgMTc1NiwgInRjcCJ9LAoreyJjYXBmYXN0LWxtZCIsICAgICAgICB7TlVMTH0sIDE3NTYsICJ1ZHAifSwKK3siY25ocnAiLCAgICAgICAgICAgICAge05VTEx9LCAxNzU3LCAidGNwIn0sCit7ImNuaHJwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc1NywgInVkcCJ9LAoreyJ0ZnRwLW1jYXN0IiwgICAgICAgICB7TlVMTH0sIDE3NTgsICJ0Y3AifSwKK3sidGZ0cC1tY2FzdCIsICAgICAgICAge05VTEx9LCAxNzU4LCAidWRwIn0sCit7InNwc3MtbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMTc1OSwgInRjcCJ9LAoreyJzcHNzLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDE3NTksICJ1ZHAifSwKK3sid3d3LWxkYXAtZ3ciLCAgICAgICAge05VTEx9LCAxNzYwLCAidGNwIn0sCit7Ind3dy1sZGFwLWd3IiwgICAgICAgIHtOVUxMfSwgMTc2MCwgInVkcCJ9LAoreyJjZnQtMCIsICAgICAgICAgICAgICB7TlVMTH0sIDE3NjEsICJ0Y3AifSwKK3siY2Z0LTAiLCAgICAgICAgICAgICAge05VTEx9LCAxNzYxLCAidWRwIn0sCit7ImNmdC0xIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc2MiwgInRjcCJ9LAoreyJjZnQtMSIsICAgICAgICAgICAgICB7TlVMTH0sIDE3NjIsICJ1ZHAifSwKK3siY2Z0LTIiLCAgICAgICAgICAgICAge05VTEx9LCAxNzYzLCAidGNwIn0sCit7ImNmdC0yIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc2MywgInVkcCJ9LAoreyJjZnQtMyIsICAgICAgICAgICAgICB7TlVMTH0sIDE3NjQsICJ0Y3AifSwKK3siY2Z0LTMiLCAgICAgICAgICAgICAge05VTEx9LCAxNzY0LCAidWRwIn0sCit7ImNmdC00IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc2NSwgInRjcCJ9LAoreyJjZnQtNCIsICAgICAgICAgICAgICB7TlVMTH0sIDE3NjUsICJ1ZHAifSwKK3siY2Z0LTUiLCAgICAgICAgICAgICAge05VTEx9LCAxNzY2LCAidGNwIn0sCit7ImNmdC01IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc2NiwgInVkcCJ9LAoreyJjZnQtNiIsICAgICAgICAgICAgICB7TlVMTH0sIDE3NjcsICJ0Y3AifSwKK3siY2Z0LTYiLCAgICAgICAgICAgICAge05VTEx9LCAxNzY3LCAidWRwIn0sCit7ImNmdC03IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc2OCwgInRjcCJ9LAoreyJjZnQtNyIsICAgICAgICAgICAgICB7TlVMTH0sIDE3NjgsICJ1ZHAifSwKK3siYm1jLW5ldC1hZG0iLCAgICAgICAge05VTEx9LCAxNzY5LCAidGNwIn0sCit7ImJtYy1uZXQtYWRtIiwgICAgICAgIHtOVUxMfSwgMTc2OSwgInVkcCJ9LAoreyJibWMtbmV0LXN2YyIsICAgICAgICB7TlVMTH0sIDE3NzAsICJ0Y3AifSwKK3siYm1jLW5ldC1zdmMiLCAgICAgICAge05VTEx9LCAxNzcwLCAidWRwIn0sCit7InZhdWx0YmFzZSIsICAgICAgICAgIHtOVUxMfSwgMTc3MSwgInRjcCJ9LAoreyJ2YXVsdGJhc2UiLCAgICAgICAgICB7TlVMTH0sIDE3NzEsICJ1ZHAifSwKK3siZXNzd2ViLWd3IiwgICAgICAgICAge05VTEx9LCAxNzcyLCAidGNwIn0sCit7ImVzc3dlYi1ndyIsICAgICAgICAgIHtOVUxMfSwgMTc3MiwgInVkcCJ9LAoreyJrbXNjb250cm9sIiwgICAgICAgICB7TlVMTH0sIDE3NzMsICJ0Y3AifSwKK3sia21zY29udHJvbCIsICAgICAgICAge05VTEx9LCAxNzczLCAidWRwIn0sCit7Imdsb2JhbC1kdHNlcnYiLCAgICAgIHtOVUxMfSwgMTc3NCwgInRjcCJ9LAoreyJnbG9iYWwtZHRzZXJ2IiwgICAgICB7TlVMTH0sIDE3NzQsICJ1ZHAifSwKK3siZmVtaXMiLCAgICAgICAgICAgICAge05VTEx9LCAxNzc2LCAidGNwIn0sCit7ImZlbWlzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc3NiwgInVkcCJ9LAoreyJwb3dlcmd1YXJkaWFuIiwgICAgICB7TlVMTH0sIDE3NzcsICJ0Y3AifSwKK3sicG93ZXJndWFyZGlhbiIsICAgICAge05VTEx9LCAxNzc3LCAidWRwIn0sCit7InByb2RpZ3ktaW50cm5ldCIsICAgIHtOVUxMfSwgMTc3OCwgInRjcCJ9LAoreyJwcm9kaWd5LWludHJuZXQiLCAgICB7TlVMTH0sIDE3NzgsICJ1ZHAifSwKK3sicGhhcm1hc29mdCIsICAgICAgICAge05VTEx9LCAxNzc5LCAidGNwIn0sCit7InBoYXJtYXNvZnQiLCAgICAgICAgIHtOVUxMfSwgMTc3OSwgInVkcCJ9LAoreyJkcGtleXNlcnYiLCAgICAgICAgICB7TlVMTH0sIDE3ODAsICJ0Y3AifSwKK3siZHBrZXlzZXJ2IiwgICAgICAgICAge05VTEx9LCAxNzgwLCAidWRwIn0sCit7ImFuc3dlcnNvZnQtbG0iLCAgICAgIHtOVUxMfSwgMTc4MSwgInRjcCJ9LAoreyJhbnN3ZXJzb2Z0LWxtIiwgICAgICB7TlVMTH0sIDE3ODEsICJ1ZHAifSwKK3siaHAtaGNpcCIsICAgICAgICAgICAge05VTEx9LCAxNzgyLCAidGNwIn0sCit7ImhwLWhjaXAiLCAgICAgICAgICAgIHtOVUxMfSwgMTc4MiwgInVkcCJ9LAoreyJmaW5sZS1sbSIsICAgICAgICAgICB7TlVMTH0sIDE3ODQsICJ0Y3AifSwKK3siZmlubGUtbG0iLCAgICAgICAgICAge05VTEx9LCAxNzg0LCAidWRwIn0sCit7IndpbmRsbSIsICAgICAgICAgICAgIHtOVUxMfSwgMTc4NSwgInRjcCJ9LAoreyJ3aW5kbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDE3ODUsICJ1ZHAifSwKK3siZnVuay1sb2dnZXIiLCAgICAgICAge05VTEx9LCAxNzg2LCAidGNwIn0sCit7ImZ1bmstbG9nZ2VyIiwgICAgICAgIHtOVUxMfSwgMTc4NiwgInVkcCJ9LAoreyJmdW5rLWxpY2Vuc2UiLCAgICAgICB7TlVMTH0sIDE3ODcsICJ0Y3AifSwKK3siZnVuay1saWNlbnNlIiwgICAgICAge05VTEx9LCAxNzg3LCAidWRwIn0sCit7InBzbW9uZCIsICAgICAgICAgICAgIHtOVUxMfSwgMTc4OCwgInRjcCJ9LAoreyJwc21vbmQiLCAgICAgICAgICAgICB7TlVMTH0sIDE3ODgsICJ1ZHAifSwKK3siaGVsbG8iLCAgICAgICAgICAgICAge05VTEx9LCAxNzg5LCAidGNwIn0sCit7ImhlbGxvIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTc4OSwgInVkcCJ9LAoreyJubXNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE3OTAsICJ0Y3AifSwKK3sibm1zcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNzkwLCAidWRwIn0sCit7ImVhMSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTc5MSwgInRjcCJ9LAoreyJlYTEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE3OTEsICJ1ZHAifSwKK3siaWJtLWR0LTIiLCAgICAgICAgICAge05VTEx9LCAxNzkyLCAidGNwIn0sCit7ImlibS1kdC0yIiwgICAgICAgICAgIHtOVUxMfSwgMTc5MiwgInVkcCJ9LAoreyJyc2Mtcm9ib3QiLCAgICAgICAgICB7TlVMTH0sIDE3OTMsICJ0Y3AifSwKK3sicnNjLXJvYm90IiwgICAgICAgICAge05VTEx9LCAxNzkzLCAidWRwIn0sCit7ImNlcmEtYmNtIiwgICAgICAgICAgIHtOVUxMfSwgMTc5NCwgInRjcCJ9LAoreyJjZXJhLWJjbSIsICAgICAgICAgICB7TlVMTH0sIDE3OTQsICJ1ZHAifSwKK3siZHBpLXByb3h5IiwgICAgICAgICAge05VTEx9LCAxNzk1LCAidGNwIn0sCit7ImRwaS1wcm94eSIsICAgICAgICAgIHtOVUxMfSwgMTc5NSwgInVkcCJ9LAoreyJ2b2NhbHRlYy1hZG1pbiIsICAgICB7TlVMTH0sIDE3OTYsICJ0Y3AifSwKK3sidm9jYWx0ZWMtYWRtaW4iLCAgICAge05VTEx9LCAxNzk2LCAidWRwIn0sCit7InVtYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTc5NywgInRjcCJ9LAoreyJ1bWEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE3OTcsICJ1ZHAifSwKK3siZXRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNzk4LCAidGNwIn0sCit7ImV0cCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTc5OCwgInVkcCJ9LAoreyJuZXRyaXNrIiwgICAgICAgICAgICB7TlVMTH0sIDE3OTksICJ0Y3AifSwKK3sibmV0cmlzayIsICAgICAgICAgICAge05VTEx9LCAxNzk5LCAidWRwIn0sCit7ImFuc3lzLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMTgwMCwgInRjcCJ9LAoreyJhbnN5cy1sbSIsICAgICAgICAgICB7TlVMTH0sIDE4MDAsICJ1ZHAifSwKK3sibXNtcSIsICAgICAgICAgICAgICAge05VTEx9LCAxODAxLCAidGNwIn0sCit7Im1zbXEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTgwMSwgInVkcCJ9LAoreyJjb25jb21wMSIsICAgICAgICAgICB7TlVMTH0sIDE4MDIsICJ0Y3AifSwKK3siY29uY29tcDEiLCAgICAgICAgICAge05VTEx9LCAxODAyLCAidWRwIn0sCit7ImhwLWhjaXAtZ3d5IiwgICAgICAgIHtOVUxMfSwgMTgwMywgInRjcCJ9LAoreyJocC1oY2lwLWd3eSIsICAgICAgICB7TlVMTH0sIDE4MDMsICJ1ZHAifSwKK3siZW5sIiwgICAgICAgICAgICAgICAge05VTEx9LCAxODA0LCAidGNwIn0sCit7ImVubCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTgwNCwgInVkcCJ9LAoreyJlbmwtbmFtZSIsICAgICAgICAgICB7TlVMTH0sIDE4MDUsICJ0Y3AifSwKK3siZW5sLW5hbWUiLCAgICAgICAgICAge05VTEx9LCAxODA1LCAidWRwIn0sCit7Im11c2ljb25saW5lIiwgICAgICAgIHtOVUxMfSwgMTgwNiwgInRjcCJ9LAoreyJtdXNpY29ubGluZSIsICAgICAgICB7TlVMTH0sIDE4MDYsICJ1ZHAifSwKK3siZmhzcCIsICAgICAgICAgICAgICAge05VTEx9LCAxODA3LCAidGNwIn0sCit7ImZoc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTgwNywgInVkcCJ9LAoreyJvcmFjbGUtdnAyIiwgICAgICAgICB7TlVMTH0sIDE4MDgsICJ0Y3AifSwKK3sib3JhY2xlLXZwMiIsICAgICAgICAge05VTEx9LCAxODA4LCAidWRwIn0sCit7Im9yYWNsZS12cDEiLCAgICAgICAgIHtOVUxMfSwgMTgwOSwgInRjcCJ9LAoreyJvcmFjbGUtdnAxIiwgICAgICAgICB7TlVMTH0sIDE4MDksICJ1ZHAifSwKK3siamVyYW5kLWxtIiwgICAgICAgICAge05VTEx9LCAxODEwLCAidGNwIn0sCit7ImplcmFuZC1sbSIsICAgICAgICAgIHtOVUxMfSwgMTgxMCwgInVkcCJ9LAoreyJzY2llbnRpYS1zZGIiLCAgICAgICB7TlVMTH0sIDE4MTEsICJ0Y3AifSwKK3sic2NpZW50aWEtc2RiIiwgICAgICAge05VTEx9LCAxODExLCAidWRwIn0sCit7InJhZGl1cyIsICAgICAgICAgICAgIHtOVUxMfSwgMTgxMiwgInRjcCJ9LAoreyJyYWRpdXMiLCAgICAgICAgICAgICB7TlVMTH0sIDE4MTIsICJ1ZHAifSwKK3sicmFkaXVzLWFjY3QiLCAgICAgICAge05VTEx9LCAxODEzLCAidGNwIn0sCit7InJhZGl1cy1hY2N0IiwgICAgICAgIHtOVUxMfSwgMTgxMywgInVkcCJ9LAoreyJ0ZHAtc3VpdGUiLCAgICAgICAgICB7TlVMTH0sIDE4MTQsICJ0Y3AifSwKK3sidGRwLXN1aXRlIiwgICAgICAgICAge05VTEx9LCAxODE0LCAidWRwIn0sCit7Im1tcGZ0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMTgxNSwgInRjcCJ9LAoreyJtbXBmdCIsICAgICAgICAgICAgICB7TlVMTH0sIDE4MTUsICJ1ZHAifSwKK3siaGFycCIsICAgICAgICAgICAgICAge05VTEx9LCAxODE2LCAidGNwIn0sCit7ImhhcnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTgxNiwgInVkcCJ9LAoreyJya2Itb3NjcyIsICAgICAgICAgICB7TlVMTH0sIDE4MTcsICJ0Y3AifSwKK3sicmtiLW9zY3MiLCAgICAgICAgICAge05VTEx9LCAxODE3LCAidWRwIn0sCit7ImV0ZnRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTgxOCwgInRjcCJ9LAoreyJldGZ0cCIsICAgICAgICAgICAgICB7TlVMTH0sIDE4MTgsICJ1ZHAifSwKK3sicGxhdG8tbG0iLCAgICAgICAgICAge05VTEx9LCAxODE5LCAidGNwIn0sCit7InBsYXRvLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMTgxOSwgInVkcCJ9LAoreyJtY2FnZW50IiwgICAgICAgICAgICB7TlVMTH0sIDE4MjAsICJ0Y3AifSwKK3sibWNhZ2VudCIsICAgICAgICAgICAge05VTEx9LCAxODIwLCAidWRwIn0sCit7ImRvbm55d29ybGQiLCAgICAgICAgIHtOVUxMfSwgMTgyMSwgInRjcCJ9LAoreyJkb25ueXdvcmxkIiwgICAgICAgICB7TlVMTH0sIDE4MjEsICJ1ZHAifSwKK3siZXMtZWxtZCIsICAgICAgICAgICAge05VTEx9LCAxODIyLCAidGNwIn0sCit7ImVzLWVsbWQiLCAgICAgICAgICAgIHtOVUxMfSwgMTgyMiwgInVkcCJ9LAoreyJ1bmlzeXMtbG0iLCAgICAgICAgICB7TlVMTH0sIDE4MjMsICJ0Y3AifSwKK3sidW5pc3lzLWxtIiwgICAgICAgICAge05VTEx9LCAxODIzLCAidWRwIn0sCit7Im1ldHJpY3MtcGFzIiwgICAgICAgIHtOVUxMfSwgMTgyNCwgInRjcCJ9LAoreyJtZXRyaWNzLXBhcyIsICAgICAgICB7TlVMTH0sIDE4MjQsICJ1ZHAifSwKK3siZGlyZWNwYy12aWRlbyIsICAgICAge05VTEx9LCAxODI1LCAidGNwIn0sCit7ImRpcmVjcGMtdmlkZW8iLCAgICAgIHtOVUxMfSwgMTgyNSwgInVkcCJ9LAoreyJhcmR0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDE4MjYsICJ0Y3AifSwKK3siYXJkdCIsICAgICAgICAgICAgICAge05VTEx9LCAxODI2LCAidWRwIn0sCit7ImFzaSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTgyNywgInRjcCJ9LAoreyJhc2kiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE4MjcsICJ1ZHAifSwKK3siaXRtLW1jZWxsLXUiLCAgICAgICAge05VTEx9LCAxODI4LCAidGNwIn0sCit7Iml0bS1tY2VsbC11IiwgICAgICAgIHtOVUxMfSwgMTgyOCwgInVkcCJ9LAoreyJvcHRpa2EtZW1lZGlhIiwgICAgICB7TlVMTH0sIDE4MjksICJ0Y3AifSwKK3sib3B0aWthLWVtZWRpYSIsICAgICAge05VTEx9LCAxODI5LCAidWRwIn0sCit7Im5ldDgtY21hbiIsICAgICAgICAgIHtOVUxMfSwgMTgzMCwgInRjcCJ9LAoreyJuZXQ4LWNtYW4iLCAgICAgICAgICB7TlVMTH0sIDE4MzAsICJ1ZHAifSwKK3sibXlydGxlIiwgICAgICAgICAgICAge05VTEx9LCAxODMxLCAidGNwIn0sCit7Im15cnRsZSIsICAgICAgICAgICAgIHtOVUxMfSwgMTgzMSwgInVkcCJ9LAoreyJ0aHQtdHJlYXN1cmUiLCAgICAgICB7TlVMTH0sIDE4MzIsICJ0Y3AifSwKK3sidGh0LXRyZWFzdXJlIiwgICAgICAge05VTEx9LCAxODMyLCAidWRwIn0sCit7InVkcHJhZGlvIiwgICAgICAgICAgIHtOVUxMfSwgMTgzMywgInRjcCJ9LAoreyJ1ZHByYWRpbyIsICAgICAgICAgICB7TlVMTH0sIDE4MzMsICJ1ZHAifSwKK3siYXJkdXN1bmkiLCAgICAgICAgICAge05VTEx9LCAxODM0LCAidGNwIn0sCit7ImFyZHVzdW5pIiwgICAgICAgICAgIHtOVUxMfSwgMTgzNCwgInVkcCJ9LAoreyJhcmR1c211bCIsICAgICAgICAgICB7TlVMTH0sIDE4MzUsICJ0Y3AifSwKK3siYXJkdXNtdWwiLCAgICAgICAgICAge05VTEx9LCAxODM1LCAidWRwIn0sCit7InN0ZS1zbXNjIiwgICAgICAgICAgIHtOVUxMfSwgMTgzNiwgInRjcCJ9LAoreyJzdGUtc21zYyIsICAgICAgICAgICB7TlVMTH0sIDE4MzYsICJ1ZHAifSwKK3siY3NvZnQxIiwgICAgICAgICAgICAge05VTEx9LCAxODM3LCAidGNwIn0sCit7ImNzb2Z0MSIsICAgICAgICAgICAgIHtOVUxMfSwgMTgzNywgInVkcCJ9LAoreyJ0YWxuZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDE4MzgsICJ0Y3AifSwKK3sidGFsbmV0IiwgICAgICAgICAgICAge05VTEx9LCAxODM4LCAidWRwIn0sCit7Im5ldG9waWEtdm8xIiwgICAgICAgIHtOVUxMfSwgMTgzOSwgInRjcCJ9LAoreyJuZXRvcGlhLXZvMSIsICAgICAgICB7TlVMTH0sIDE4MzksICJ1ZHAifSwKK3sibmV0b3BpYS12bzIiLCAgICAgICAge05VTEx9LCAxODQwLCAidGNwIn0sCit7Im5ldG9waWEtdm8yIiwgICAgICAgIHtOVUxMfSwgMTg0MCwgInVkcCJ9LAoreyJuZXRvcGlhLXZvMyIsICAgICAgICB7TlVMTH0sIDE4NDEsICJ0Y3AifSwKK3sibmV0b3BpYS12bzMiLCAgICAgICAge05VTEx9LCAxODQxLCAidWRwIn0sCit7Im5ldG9waWEtdm80IiwgICAgICAgIHtOVUxMfSwgMTg0MiwgInRjcCJ9LAoreyJuZXRvcGlhLXZvNCIsICAgICAgICB7TlVMTH0sIDE4NDIsICJ1ZHAifSwKK3sibmV0b3BpYS12bzUiLCAgICAgICAge05VTEx9LCAxODQzLCAidGNwIn0sCit7Im5ldG9waWEtdm81IiwgICAgICAgIHtOVUxMfSwgMTg0MywgInVkcCJ9LAoreyJkaXJlY3BjLWRsbCIsICAgICAgICB7TlVMTH0sIDE4NDQsICJ0Y3AifSwKK3siZGlyZWNwYy1kbGwiLCAgICAgICAge05VTEx9LCAxODQ0LCAidWRwIn0sCit7ImFsdGFsaW5rIiwgICAgICAgICAgIHtOVUxMfSwgMTg0NSwgInRjcCJ9LAoreyJhbHRhbGluayIsICAgICAgICAgICB7TlVMTH0sIDE4NDUsICJ1ZHAifSwKK3sidHVuc3RhbGwtcG5jIiwgICAgICAge05VTEx9LCAxODQ2LCAidGNwIn0sCit7InR1bnN0YWxsLXBuYyIsICAgICAgIHtOVUxMfSwgMTg0NiwgInVkcCJ9LAoreyJzbHAtbm90aWZ5IiwgICAgICAgICB7TlVMTH0sIDE4NDcsICJ0Y3AifSwKK3sic2xwLW5vdGlmeSIsICAgICAgICAge05VTEx9LCAxODQ3LCAidWRwIn0sCit7ImZqZG9jZGlzdCIsICAgICAgICAgIHtOVUxMfSwgMTg0OCwgInRjcCJ9LAoreyJmamRvY2Rpc3QiLCAgICAgICAgICB7TlVMTH0sIDE4NDgsICJ1ZHAifSwKK3siYWxwaGEtc21zIiwgICAgICAgICAge05VTEx9LCAxODQ5LCAidGNwIn0sCit7ImFscGhhLXNtcyIsICAgICAgICAgIHtOVUxMfSwgMTg0OSwgInVkcCJ9LAoreyJnc2kiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE4NTAsICJ0Y3AifSwKK3siZ3NpIiwgICAgICAgICAgICAgICAge05VTEx9LCAxODUwLCAidWRwIn0sCit7ImN0Y2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTg1MSwgInRjcCJ9LAoreyJjdGNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE4NTEsICJ1ZHAifSwKK3sidmlydHVhbC10aW1lIiwgICAgICAge05VTEx9LCAxODUyLCAidGNwIn0sCit7InZpcnR1YWwtdGltZSIsICAgICAgIHtOVUxMfSwgMTg1MiwgInVkcCJ9LAoreyJ2aWRzLWF2dHAiLCAgICAgICAgICB7TlVMTH0sIDE4NTMsICJ0Y3AifSwKK3sidmlkcy1hdnRwIiwgICAgICAgICAge05VTEx9LCAxODUzLCAidWRwIn0sCit7ImJ1ZGR5LWRyYXciLCAgICAgICAgIHtOVUxMfSwgMTg1NCwgInRjcCJ9LAoreyJidWRkeS1kcmF3IiwgICAgICAgICB7TlVMTH0sIDE4NTQsICJ1ZHAifSwKK3siZmlvcmFuby1ydHJzdmMiLCAgICAge05VTEx9LCAxODU1LCAidGNwIn0sCit7ImZpb3Jhbm8tcnRyc3ZjIiwgICAgIHtOVUxMfSwgMTg1NSwgInVkcCJ9LAoreyJmaW9yYW5vLW1zZ3N2YyIsICAgICB7TlVMTH0sIDE4NTYsICJ0Y3AifSwKK3siZmlvcmFuby1tc2dzdmMiLCAgICAge05VTEx9LCAxODU2LCAidWRwIn0sCit7ImRhdGFjYXB0b3IiLCAgICAgICAgIHtOVUxMfSwgMTg1NywgInRjcCJ9LAoreyJkYXRhY2FwdG9yIiwgICAgICAgICB7TlVMTH0sIDE4NTcsICJ1ZHAifSwKK3sicHJpdmF0ZWFyayIsICAgICAgICAge05VTEx9LCAxODU4LCAidGNwIn0sCit7InByaXZhdGVhcmsiLCAgICAgICAgIHtOVUxMfSwgMTg1OCwgInVkcCJ9LAoreyJnYW1tYWZldGNoc3ZyIiwgICAgICB7TlVMTH0sIDE4NTksICJ0Y3AifSwKK3siZ2FtbWFmZXRjaHN2ciIsICAgICAge05VTEx9LCAxODU5LCAidWRwIn0sCit7InN1bnNjYWxhci1zdmMiLCAgICAgIHtOVUxMfSwgMTg2MCwgInRjcCJ9LAoreyJzdW5zY2FsYXItc3ZjIiwgICAgICB7TlVMTH0sIDE4NjAsICJ1ZHAifSwKK3sibGVjcm95LXZpY3AiLCAgICAgICAge05VTEx9LCAxODYxLCAidGNwIn0sCit7ImxlY3JveS12aWNwIiwgICAgICAgIHtOVUxMfSwgMTg2MSwgInVkcCJ9LAoreyJteXNxbC1jbS1hZ2VudCIsICAgICB7TlVMTH0sIDE4NjIsICJ0Y3AifSwKK3sibXlzcWwtY20tYWdlbnQiLCAgICAge05VTEx9LCAxODYyLCAidWRwIn0sCit7Im1zbnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTg2MywgInRjcCJ9LAoreyJtc25wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE4NjMsICJ1ZHAifSwKK3sicGFyYWR5bS0zMXBvcnQiLCAgICAge05VTEx9LCAxODY0LCAidGNwIn0sCit7InBhcmFkeW0tMzFwb3J0IiwgICAgIHtOVUxMfSwgMTg2NCwgInVkcCJ9LAoreyJlbnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE4NjUsICJ0Y3AifSwKK3siZW50cCIsICAgICAgICAgICAgICAge05VTEx9LCAxODY1LCAidWRwIn0sCit7InN3cm1pIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTg2NiwgInRjcCJ9LAoreyJzd3JtaSIsICAgICAgICAgICAgICB7TlVMTH0sIDE4NjYsICJ1ZHAifSwKK3sidWRyaXZlIiwgICAgICAgICAgICAge05VTEx9LCAxODY3LCAidGNwIn0sCit7InVkcml2ZSIsICAgICAgICAgICAgIHtOVUxMfSwgMTg2NywgInVkcCJ9LAoreyJ2aXppYmxlYnJvd3NlciIsICAgICB7TlVMTH0sIDE4NjgsICJ0Y3AifSwKK3sidml6aWJsZWJyb3dzZXIiLCAgICAge05VTEx9LCAxODY4LCAidWRwIn0sCit7InRyYW5zYWN0IiwgICAgICAgICAgIHtOVUxMfSwgMTg2OSwgInRjcCJ9LAoreyJ0cmFuc2FjdCIsICAgICAgICAgICB7TlVMTH0sIDE4NjksICJ1ZHAifSwKK3sic3Vuc2NhbGFyLWRucyIsICAgICAge05VTEx9LCAxODcwLCAidGNwIn0sCit7InN1bnNjYWxhci1kbnMiLCAgICAgIHtOVUxMfSwgMTg3MCwgInVkcCJ9LAoreyJjYW5vY2VudHJhbDAiLCAgICAgICB7TlVMTH0sIDE4NzEsICJ0Y3AifSwKK3siY2Fub2NlbnRyYWwwIiwgICAgICAge05VTEx9LCAxODcxLCAidWRwIn0sCit7ImNhbm9jZW50cmFsMSIsICAgICAgIHtOVUxMfSwgMTg3MiwgInRjcCJ9LAoreyJjYW5vY2VudHJhbDEiLCAgICAgICB7TlVMTH0sIDE4NzIsICJ1ZHAifSwKK3siZmptcGpwcyIsICAgICAgICAgICAge05VTEx9LCAxODczLCAidGNwIn0sCit7ImZqbXBqcHMiLCAgICAgICAgICAgIHtOVUxMfSwgMTg3MywgInVkcCJ9LAoreyJmanN3YXBzbnAiLCAgICAgICAgICB7TlVMTH0sIDE4NzQsICJ0Y3AifSwKK3siZmpzd2Fwc25wIiwgICAgICAgICAge05VTEx9LCAxODc0LCAidWRwIn0sCit7Indlc3RlbGwtc3RhdHMiLCAgICAgIHtOVUxMfSwgMTg3NSwgInRjcCJ9LAoreyJ3ZXN0ZWxsLXN0YXRzIiwgICAgICB7TlVMTH0sIDE4NzUsICJ1ZHAifSwKK3siZXdjYXBwc3J2IiwgICAgICAgICAge05VTEx9LCAxODc2LCAidGNwIn0sCit7ImV3Y2FwcHNydiIsICAgICAgICAgIHtOVUxMfSwgMTg3NiwgInVkcCJ9LAoreyJocC13ZWJxb3NkYiIsICAgICAgICB7TlVMTH0sIDE4NzcsICJ0Y3AifSwKK3siaHAtd2VicW9zZGIiLCAgICAgICAge05VTEx9LCAxODc3LCAidWRwIn0sCit7ImRybXNtYyIsICAgICAgICAgICAgIHtOVUxMfSwgMTg3OCwgInRjcCJ9LAoreyJkcm1zbWMiLCAgICAgICAgICAgICB7TlVMTH0sIDE4NzgsICJ1ZHAifSwKK3sibmV0dGdhaW4tbm1zIiwgICAgICAge05VTEx9LCAxODc5LCAidGNwIn0sCit7Im5ldHRnYWluLW5tcyIsICAgICAgIHtOVUxMfSwgMTg3OSwgInVkcCJ9LAoreyJ2c2F0LWNvbnRyb2wiLCAgICAgICB7TlVMTH0sIDE4ODAsICJ0Y3AifSwKK3sidnNhdC1jb250cm9sIiwgICAgICAge05VTEx9LCAxODgwLCAidWRwIn0sCit7ImlibS1tcXNlcmllczIiLCAgICAgIHtOVUxMfSwgMTg4MSwgInRjcCJ9LAoreyJpYm0tbXFzZXJpZXMyIiwgICAgICB7TlVMTH0sIDE4ODEsICJ1ZHAifSwKK3siZWNzcWRtbiIsICAgICAgICAgICAge05VTEx9LCAxODgyLCAidGNwIn0sCit7ImVjc3FkbW4iLCAgICAgICAgICAgIHtOVUxMfSwgMTg4MiwgInVkcCJ9LAoreyJpYm0tbXFpc2RwIiwgICAgICAgICB7TlVMTH0sIDE4ODMsICJ0Y3AifSwKK3siaWJtLW1xaXNkcCIsICAgICAgICAge05VTEx9LCAxODgzLCAidWRwIn0sCit7ImlkbWFwcyIsICAgICAgICAgICAgIHtOVUxMfSwgMTg4NCwgInRjcCJ9LAoreyJpZG1hcHMiLCAgICAgICAgICAgICB7TlVMTH0sIDE4ODQsICJ1ZHAifSwKK3sidnJ0c3RyYXBzZXJ2ZXIiLCAgICAge05VTEx9LCAxODg1LCAidGNwIn0sCit7InZydHN0cmFwc2VydmVyIiwgICAgIHtOVUxMfSwgMTg4NSwgInVkcCJ9LAoreyJsZW9pcCIsICAgICAgICAgICAgICB7TlVMTH0sIDE4ODYsICJ0Y3AifSwKK3sibGVvaXAiLCAgICAgICAgICAgICAge05VTEx9LCAxODg2LCAidWRwIn0sCit7ImZpbGV4LWxwb3J0IiwgICAgICAgIHtOVUxMfSwgMTg4NywgInRjcCJ9LAoreyJmaWxleC1scG9ydCIsICAgICAgICB7TlVMTH0sIDE4ODcsICJ1ZHAifSwKK3sibmNjb25maWciLCAgICAgICAgICAge05VTEx9LCAxODg4LCAidGNwIn0sCit7Im5jY29uZmlnIiwgICAgICAgICAgIHtOVUxMfSwgMTg4OCwgInVkcCJ9LAoreyJ1bmlmeS1hZGFwdGVyIiwgICAgICB7TlVMTH0sIDE4ODksICJ0Y3AifSwKK3sidW5pZnktYWRhcHRlciIsICAgICAge05VTEx9LCAxODg5LCAidWRwIn0sCit7IndpbGtlbmxpc3RlbmVyIiwgICAgIHtOVUxMfSwgMTg5MCwgInRjcCJ9LAoreyJ3aWxrZW5saXN0ZW5lciIsICAgICB7TlVMTH0sIDE4OTAsICJ1ZHAifSwKK3siY2hpbGRrZXktbm90aWYiLCAgICAge05VTEx9LCAxODkxLCAidGNwIn0sCit7ImNoaWxka2V5LW5vdGlmIiwgICAgIHtOVUxMfSwgMTg5MSwgInVkcCJ9LAoreyJjaGlsZGtleS1jdHJsIiwgICAgICB7TlVMTH0sIDE4OTIsICJ0Y3AifSwKK3siY2hpbGRrZXktY3RybCIsICAgICAge05VTEx9LCAxODkyLCAidWRwIn0sCit7ImVsYWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTg5MywgInRjcCJ9LAoreyJlbGFkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE4OTMsICJ1ZHAifSwKK3sibzJzZXJ2ZXItcG9ydCIsICAgICAge05VTEx9LCAxODk0LCAidGNwIn0sCit7Im8yc2VydmVyLXBvcnQiLCAgICAgIHtOVUxMfSwgMTg5NCwgInVkcCJ9LAoreyJiLW5vdmF0aXZlLWxzIiwgICAgICB7TlVMTH0sIDE4OTYsICJ0Y3AifSwKK3siYi1ub3ZhdGl2ZS1scyIsICAgICAge05VTEx9LCAxODk2LCAidWRwIn0sCit7Im1ldGFhZ2VudCIsICAgICAgICAgIHtOVUxMfSwgMTg5NywgInRjcCJ9LAoreyJtZXRhYWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDE4OTcsICJ1ZHAifSwKK3siY3ltdGVjLXBvcnQiLCAgICAgICAge05VTEx9LCAxODk4LCAidGNwIn0sCit7ImN5bXRlYy1wb3J0IiwgICAgICAgIHtOVUxMfSwgMTg5OCwgInVkcCJ9LAoreyJtYzJzdHVkaW9zIiwgICAgICAgICB7TlVMTH0sIDE4OTksICJ0Y3AifSwKK3sibWMyc3R1ZGlvcyIsICAgICAgICAge05VTEx9LCAxODk5LCAidWRwIn0sCit7InNzZHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTkwMCwgInRjcCJ9LAoreyJzc2RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE5MDAsICJ1ZHAifSwKK3siZmppY2wtdGVwLWEiLCAgICAgICAge05VTEx9LCAxOTAxLCAidGNwIn0sCit7ImZqaWNsLXRlcC1hIiwgICAgICAgIHtOVUxMfSwgMTkwMSwgInVkcCJ9LAoreyJmamljbC10ZXAtYiIsICAgICAgICB7TlVMTH0sIDE5MDIsICJ0Y3AifSwKK3siZmppY2wtdGVwLWIiLCAgICAgICAge05VTEx9LCAxOTAyLCAidWRwIn0sCit7ImxpbmtuYW1lIiwgICAgICAgICAgIHtOVUxMfSwgMTkwMywgInRjcCJ9LAoreyJsaW5rbmFtZSIsICAgICAgICAgICB7TlVMTH0sIDE5MDMsICJ1ZHAifSwKK3siZmppY2wtdGVwLWMiLCAgICAgICAge05VTEx9LCAxOTA0LCAidGNwIn0sCit7ImZqaWNsLXRlcC1jIiwgICAgICAgIHtOVUxMfSwgMTkwNCwgInVkcCJ9LAoreyJzdWdwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE5MDUsICJ0Y3AifSwKK3sic3VncCIsICAgICAgICAgICAgICAge05VTEx9LCAxOTA1LCAidWRwIn0sCit7InRwbWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTkwNiwgInRjcCJ9LAoreyJ0cG1kIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE5MDYsICJ1ZHAifSwKK3siaW50cmFzdGFyIiwgICAgICAgICAge05VTEx9LCAxOTA3LCAidGNwIn0sCit7ImludHJhc3RhciIsICAgICAgICAgIHtOVUxMfSwgMTkwNywgInVkcCJ9LAoreyJkYXduIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE5MDgsICJ0Y3AifSwKK3siZGF3biIsICAgICAgICAgICAgICAge05VTEx9LCAxOTA4LCAidWRwIn0sCit7Imdsb2JhbC13bGluayIsICAgICAgIHtOVUxMfSwgMTkwOSwgInRjcCJ9LAoreyJnbG9iYWwtd2xpbmsiLCAgICAgICB7TlVMTH0sIDE5MDksICJ1ZHAifSwKK3sidWx0cmFiYWMiLCAgICAgICAgICAge05VTEx9LCAxOTEwLCAidGNwIn0sCit7InVsdHJhYmFjIiwgICAgICAgICAgIHtOVUxMfSwgMTkxMCwgInVkcCJ9LAoreyJtdHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE5MTEsICJ0Y3AifSwKK3sibXRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxOTExLCAidWRwIn0sCit7InJocC1paWJwIiwgICAgICAgICAgIHtOVUxMfSwgMTkxMiwgInRjcCJ9LAoreyJyaHAtaWlicCIsICAgICAgICAgICB7TlVMTH0sIDE5MTIsICJ1ZHAifSwKK3siYXJtYWRwIiwgICAgICAgICAgICAge05VTEx9LCAxOTEzLCAidGNwIn0sCit7ImFybWFkcCIsICAgICAgICAgICAgIHtOVUxMfSwgMTkxMywgInVkcCJ9LAoreyJlbG0tbW9tZW50dW0iLCAgICAgICB7TlVMTH0sIDE5MTQsICJ0Y3AifSwKK3siZWxtLW1vbWVudHVtIiwgICAgICAge05VTEx9LCAxOTE0LCAidWRwIn0sCit7ImZhY2VsaW5rIiwgICAgICAgICAgIHtOVUxMfSwgMTkxNSwgInRjcCJ9LAoreyJmYWNlbGluayIsICAgICAgICAgICB7TlVMTH0sIDE5MTUsICJ1ZHAifSwKK3sicGVyc29uYSIsICAgICAgICAgICAge05VTEx9LCAxOTE2LCAidGNwIn0sCit7InBlcnNvbmEiLCAgICAgICAgICAgIHtOVUxMfSwgMTkxNiwgInVkcCJ9LAoreyJub2FnZW50IiwgICAgICAgICAgICB7TlVMTH0sIDE5MTcsICJ0Y3AifSwKK3sibm9hZ2VudCIsICAgICAgICAgICAge05VTEx9LCAxOTE3LCAidWRwIn0sCit7ImNhbi1uZHMiLCAgICAgICAgICAgIHtOVUxMfSwgMTkxOCwgInRjcCJ9LAoreyJjYW4tbmRzIiwgICAgICAgICAgICB7TlVMTH0sIDE5MTgsICJ1ZHAifSwKK3siY2FuLWRjaCIsICAgICAgICAgICAge05VTEx9LCAxOTE5LCAidGNwIn0sCit7ImNhbi1kY2giLCAgICAgICAgICAgIHtOVUxMfSwgMTkxOSwgInVkcCJ9LAoreyJjYW4tZmVycmV0IiwgICAgICAgICB7TlVMTH0sIDE5MjAsICJ0Y3AifSwKK3siY2FuLWZlcnJldCIsICAgICAgICAge05VTEx9LCAxOTIwLCAidWRwIn0sCit7Im5vYWRtaW4iLCAgICAgICAgICAgIHtOVUxMfSwgMTkyMSwgInRjcCJ9LAoreyJub2FkbWluIiwgICAgICAgICAgICB7TlVMTH0sIDE5MjEsICJ1ZHAifSwKK3sidGFwZXN0cnkiLCAgICAgICAgICAge05VTEx9LCAxOTIyLCAidGNwIn0sCit7InRhcGVzdHJ5IiwgICAgICAgICAgIHtOVUxMfSwgMTkyMiwgInVkcCJ9LAoreyJzcGljZSIsICAgICAgICAgICAgICB7TlVMTH0sIDE5MjMsICJ0Y3AifSwKK3sic3BpY2UiLCAgICAgICAgICAgICAge05VTEx9LCAxOTIzLCAidWRwIn0sCit7InhpaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTkyNCwgInRjcCJ9LAoreyJ4aWlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE5MjQsICJ1ZHAifSwKK3siZGlzY292ZXJ5LXBvcnQiLCAgICAge05VTEx9LCAxOTI1LCAidGNwIn0sCit7ImRpc2NvdmVyeS1wb3J0IiwgICAgIHtOVUxMfSwgMTkyNSwgInVkcCJ9LAoreyJlZ3MiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE5MjYsICJ0Y3AifSwKK3siZWdzIiwgICAgICAgICAgICAgICAge05VTEx9LCAxOTI2LCAidWRwIn0sCit7InZpZGV0ZS1jaXBjIiwgICAgICAgIHtOVUxMfSwgMTkyNywgInRjcCJ9LAoreyJ2aWRldGUtY2lwYyIsICAgICAgICB7TlVMTH0sIDE5MjcsICJ1ZHAifSwKK3siZW1zZC1wb3J0IiwgICAgICAgICAge05VTEx9LCAxOTI4LCAidGNwIn0sCit7ImVtc2QtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMTkyOCwgInVkcCJ9LAoreyJiYW5kd2l6LXN5c3RlbSIsICAgICB7TlVMTH0sIDE5MjksICJ0Y3AifSwKK3siYmFuZHdpei1zeXN0ZW0iLCAgICAge05VTEx9LCAxOTI5LCAidWRwIn0sCit7ImRyaXZlYXBwc2VydmVyIiwgICAgIHtOVUxMfSwgMTkzMCwgInRjcCJ9LAoreyJkcml2ZWFwcHNlcnZlciIsICAgICB7TlVMTH0sIDE5MzAsICJ1ZHAifSwKK3siYW1kc2NoZWQiLCAgICAgICAgICAge05VTEx9LCAxOTMxLCAidGNwIn0sCit7ImFtZHNjaGVkIiwgICAgICAgICAgIHtOVUxMfSwgMTkzMSwgInVkcCJ9LAoreyJjdHQtYnJva2VyIiwgICAgICAgICB7TlVMTH0sIDE5MzIsICJ0Y3AifSwKK3siY3R0LWJyb2tlciIsICAgICAgICAge05VTEx9LCAxOTMyLCAidWRwIn0sCit7InhtYXBpIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTkzMywgInRjcCJ9LAoreyJ4bWFwaSIsICAgICAgICAgICAgICB7TlVMTH0sIDE5MzMsICJ1ZHAifSwKK3sieGFhcGkiLCAgICAgICAgICAgICAge05VTEx9LCAxOTM0LCAidGNwIn0sCit7InhhYXBpIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTkzNCwgInVkcCJ9LAoreyJtYWNyb21lZGlhLWZjcyIsICAgICB7TlVMTH0sIDE5MzUsICJ0Y3AifSwKK3sibWFjcm9tZWRpYS1mY3MiLCAgICAge05VTEx9LCAxOTM1LCAidWRwIn0sCit7ImpldGNtZXNlcnZlciIsICAgICAgIHtOVUxMfSwgMTkzNiwgInRjcCJ9LAoreyJqZXRjbWVzZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDE5MzYsICJ1ZHAifSwKK3siandzZXJ2ZXIiLCAgICAgICAgICAge05VTEx9LCAxOTM3LCAidGNwIn0sCit7Imp3c2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMTkzNywgInVkcCJ9LAoreyJqd2NsaWVudCIsICAgICAgICAgICB7TlVMTH0sIDE5MzgsICJ0Y3AifSwKK3siandjbGllbnQiLCAgICAgICAgICAge05VTEx9LCAxOTM4LCAidWRwIn0sCit7Imp2c2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMTkzOSwgInRjcCJ9LAoreyJqdnNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDE5MzksICJ1ZHAifSwKK3sianZjbGllbnQiLCAgICAgICAgICAge05VTEx9LCAxOTQwLCAidGNwIn0sCit7Imp2Y2xpZW50IiwgICAgICAgICAgIHtOVUxMfSwgMTk0MCwgInVkcCJ9LAoreyJkaWMtYWlkYSIsICAgICAgICAgICB7TlVMTH0sIDE5NDEsICJ0Y3AifSwKK3siZGljLWFpZGEiLCAgICAgICAgICAge05VTEx9LCAxOTQxLCAidWRwIn0sCit7InJlcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTk0MiwgInRjcCJ9LAoreyJyZXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE5NDIsICJ1ZHAifSwKK3siYmVleW9uZC1tZWRpYSIsICAgICAge05VTEx9LCAxOTQzLCAidGNwIn0sCit7ImJlZXlvbmQtbWVkaWEiLCAgICAgIHtOVUxMfSwgMTk0MywgInVkcCJ9LAoreyJjbG9zZS1jb21iYXQiLCAgICAgICB7TlVMTH0sIDE5NDQsICJ0Y3AifSwKK3siY2xvc2UtY29tYmF0IiwgICAgICAge05VTEx9LCAxOTQ0LCAidWRwIn0sCit7ImRpYWxvZ2ljLWVsbWQiLCAgICAgIHtOVUxMfSwgMTk0NSwgInRjcCJ9LAoreyJkaWFsb2dpYy1lbG1kIiwgICAgICB7TlVMTH0sIDE5NDUsICJ1ZHAifSwKK3sidGVrcGxzIiwgICAgICAgICAgICAge05VTEx9LCAxOTQ2LCAidGNwIn0sCit7InRla3BscyIsICAgICAgICAgICAgIHtOVUxMfSwgMTk0NiwgInVkcCJ9LAoreyJzZW50aW5lbHNybSIsICAgICAgICB7TlVMTH0sIDE5NDcsICJ0Y3AifSwKK3sic2VudGluZWxzcm0iLCAgICAgICAge05VTEx9LCAxOTQ3LCAidWRwIn0sCit7ImV5ZTJleWUiLCAgICAgICAgICAgIHtOVUxMfSwgMTk0OCwgInRjcCJ9LAoreyJleWUyZXllIiwgICAgICAgICAgICB7TlVMTH0sIDE5NDgsICJ1ZHAifSwKK3siaXNtYWVhc2RhcWxpdmUiLCAgICAge05VTEx9LCAxOTQ5LCAidGNwIn0sCit7ImlzbWFlYXNkYXFsaXZlIiwgICAgIHtOVUxMfSwgMTk0OSwgInVkcCJ9LAoreyJpc21hZWFzZGFxdGVzdCIsICAgICB7TlVMTH0sIDE5NTAsICJ0Y3AifSwKK3siaXNtYWVhc2RhcXRlc3QiLCAgICAge05VTEx9LCAxOTUwLCAidWRwIn0sCit7ImJjcy1sbXNlcnZlciIsICAgICAgIHtOVUxMfSwgMTk1MSwgInRjcCJ9LAoreyJiY3MtbG1zZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDE5NTEsICJ1ZHAifSwKK3sibXBuanNjIiwgICAgICAgICAgICAge05VTEx9LCAxOTUyLCAidGNwIn0sCit7Im1wbmpzYyIsICAgICAgICAgICAgIHtOVUxMfSwgMTk1MiwgInVkcCJ9LAoreyJyYXBpZGJhc2UiLCAgICAgICAgICB7TlVMTH0sIDE5NTMsICJ0Y3AifSwKK3sicmFwaWRiYXNlIiwgICAgICAgICAge05VTEx9LCAxOTUzLCAidWRwIn0sCit7ImFici1hcGkiLCAgICAgICAgICAgIHtOVUxMfSwgMTk1NCwgInRjcCJ9LAoreyJhYnItYXBpIiwgICAgICAgICAgICB7TlVMTH0sIDE5NTQsICJ1ZHAifSwKK3siYWJyLXNlY3VyZSIsICAgICAgICAge05VTEx9LCAxOTU1LCAidGNwIn0sCit7ImFici1zZWN1cmUiLCAgICAgICAgIHtOVUxMfSwgMTk1NSwgInVkcCJ9LAoreyJ2cnRsLXZtZi1kcyIsICAgICAgICB7TlVMTH0sIDE5NTYsICJ0Y3AifSwKK3sidnJ0bC12bWYtZHMiLCAgICAgICAge05VTEx9LCAxOTU2LCAidWRwIn0sCit7InVuaXgtc3RhdHVzIiwgICAgICAgIHtOVUxMfSwgMTk1NywgInRjcCJ9LAoreyJ1bml4LXN0YXR1cyIsICAgICAgICB7TlVMTH0sIDE5NTcsICJ1ZHAifSwKK3siZHhhZG1pbmQiLCAgICAgICAgICAge05VTEx9LCAxOTU4LCAidGNwIn0sCit7ImR4YWRtaW5kIiwgICAgICAgICAgIHtOVUxMfSwgMTk1OCwgInVkcCJ9LAoreyJzaW1wLWFsbCIsICAgICAgICAgICB7TlVMTH0sIDE5NTksICJ0Y3AifSwKK3sic2ltcC1hbGwiLCAgICAgICAgICAge05VTEx9LCAxOTU5LCAidWRwIn0sCit7Im5hc21hbmFnZXIiLCAgICAgICAgIHtOVUxMfSwgMTk2MCwgInRjcCJ9LAoreyJuYXNtYW5hZ2VyIiwgICAgICAgICB7TlVMTH0sIDE5NjAsICJ1ZHAifSwKK3siYnRzLWFwcHNlcnZlciIsICAgICAge05VTEx9LCAxOTYxLCAidGNwIn0sCit7ImJ0cy1hcHBzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMTk2MSwgInVkcCJ9LAoreyJiaWFwLW1wIiwgICAgICAgICAgICB7TlVMTH0sIDE5NjIsICJ0Y3AifSwKK3siYmlhcC1tcCIsICAgICAgICAgICAge05VTEx9LCAxOTYyLCAidWRwIn0sCit7IndlYm1hY2hpbmUiLCAgICAgICAgIHtOVUxMfSwgMTk2MywgInRjcCJ9LAoreyJ3ZWJtYWNoaW5lIiwgICAgICAgICB7TlVMTH0sIDE5NjMsICJ1ZHAifSwKK3sic29saWQtZS1lbmdpbmUiLCAgICAge05VTEx9LCAxOTY0LCAidGNwIn0sCit7InNvbGlkLWUtZW5naW5lIiwgICAgIHtOVUxMfSwgMTk2NCwgInVkcCJ9LAoreyJ0aXZvbGktbnBtIiwgICAgICAgICB7TlVMTH0sIDE5NjUsICJ0Y3AifSwKK3sidGl2b2xpLW5wbSIsICAgICAgICAge05VTEx9LCAxOTY1LCAidWRwIn0sCit7InNsdXNoIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTk2NiwgInRjcCJ9LAoreyJzbHVzaCIsICAgICAgICAgICAgICB7TlVMTH0sIDE5NjYsICJ1ZHAifSwKK3sic25zLXF1b3RlIiwgICAgICAgICAge05VTEx9LCAxOTY3LCAidGNwIn0sCit7InNucy1xdW90ZSIsICAgICAgICAgIHtOVUxMfSwgMTk2NywgInVkcCJ9LAoreyJsaXBzaW5jIiwgICAgICAgICAgICB7TlVMTH0sIDE5NjgsICJ0Y3AifSwKK3sibGlwc2luYyIsICAgICAgICAgICAge05VTEx9LCAxOTY4LCAidWRwIn0sCit7ImxpcHNpbmMxIiwgICAgICAgICAgIHtOVUxMfSwgMTk2OSwgInRjcCJ9LAoreyJsaXBzaW5jMSIsICAgICAgICAgICB7TlVMTH0sIDE5NjksICJ1ZHAifSwKK3sibmV0b3AtcmMiLCAgICAgICAgICAge05VTEx9LCAxOTcwLCAidGNwIn0sCit7Im5ldG9wLXJjIiwgICAgICAgICAgIHtOVUxMfSwgMTk3MCwgInVkcCJ9LAoreyJuZXRvcC1zY2hvb2wiLCAgICAgICB7TlVMTH0sIDE5NzEsICJ0Y3AifSwKK3sibmV0b3Atc2Nob29sIiwgICAgICAge05VTEx9LCAxOTcxLCAidWRwIn0sCit7ImludGVyc3lzLWNhY2hlIiwgICAgIHtOVUxMfSwgMTk3MiwgInRjcCJ9LAoreyJpbnRlcnN5cy1jYWNoZSIsICAgICB7TlVMTH0sIDE5NzIsICJ1ZHAifSwKK3siZGxzcmFwIiwgICAgICAgICAgICAge05VTEx9LCAxOTczLCAidGNwIn0sCit7ImRsc3JhcCIsICAgICAgICAgICAgIHtOVUxMfSwgMTk3MywgInVkcCJ9LAoreyJkcnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE5NzQsICJ0Y3AifSwKK3siZHJwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxOTc0LCAidWRwIn0sCit7InRjb2ZsYXNoYWdlbnQiLCAgICAgIHtOVUxMfSwgMTk3NSwgInRjcCJ9LAoreyJ0Y29mbGFzaGFnZW50IiwgICAgICB7TlVMTH0sIDE5NzUsICJ1ZHAifSwKK3sidGNvcmVnYWdlbnQiLCAgICAgICAge05VTEx9LCAxOTc2LCAidGNwIn0sCit7InRjb3JlZ2FnZW50IiwgICAgICAgIHtOVUxMfSwgMTk3NiwgInVkcCJ9LAoreyJ0Y29hZGRyZXNzYm9vayIsICAgICB7TlVMTH0sIDE5NzcsICJ0Y3AifSwKK3sidGNvYWRkcmVzc2Jvb2siLCAgICAge05VTEx9LCAxOTc3LCAidWRwIn0sCit7InVuaXNxbCIsICAgICAgICAgICAgIHtOVUxMfSwgMTk3OCwgInRjcCJ9LAoreyJ1bmlzcWwiLCAgICAgICAgICAgICB7TlVMTH0sIDE5NzgsICJ1ZHAifSwKK3sidW5pc3FsLWphdmEiLCAgICAgICAge05VTEx9LCAxOTc5LCAidGNwIn0sCit7InVuaXNxbC1qYXZhIiwgICAgICAgIHtOVUxMfSwgMTk3OSwgInVkcCJ9LAoreyJwZWFybGRvYy14YWN0IiwgICAgICB7TlVMTH0sIDE5ODAsICJ0Y3AifSwKK3sicGVhcmxkb2MteGFjdCIsICAgICAge05VTEx9LCAxOTgwLCAidWRwIn0sCit7InAycHEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTk4MSwgInRjcCJ9LAoreyJwMnBxIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE5ODEsICJ1ZHAifSwKK3siZXN0YW1wIiwgICAgICAgICAgICAge05VTEx9LCAxOTgyLCAidGNwIn0sCit7ImVzdGFtcCIsICAgICAgICAgICAgIHtOVUxMfSwgMTk4MiwgInVkcCJ9LAoreyJsaHRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE5ODMsICJ0Y3AifSwKK3sibGh0cCIsICAgICAgICAgICAgICAge05VTEx9LCAxOTgzLCAidWRwIn0sCit7ImJiIiwgICAgICAgICAgICAgICAgIHtOVUxMfSwgMTk4NCwgInRjcCJ9LAoreyJiYiIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDE5ODQsICJ1ZHAifSwKK3siaHNycCIsICAgICAgICAgICAgICAge05VTEx9LCAxOTg1LCAidGNwIn0sCit7ImhzcnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTk4NSwgInVkcCJ9LAoreyJsaWNlbnNlZGFlbW9uIiwgICAgICB7TlVMTH0sIDE5ODYsICJ0Y3AifSwKK3sibGljZW5zZWRhZW1vbiIsICAgICAge05VTEx9LCAxOTg2LCAidWRwIn0sCit7InRyLXJzcmItcDEiLCAgICAgICAgIHtOVUxMfSwgMTk4NywgInRjcCJ9LAoreyJ0ci1yc3JiLXAxIiwgICAgICAgICB7TlVMTH0sIDE5ODcsICJ1ZHAifSwKK3sidHItcnNyYi1wMiIsICAgICAgICAge05VTEx9LCAxOTg4LCAidGNwIn0sCit7InRyLXJzcmItcDIiLCAgICAgICAgIHtOVUxMfSwgMTk4OCwgInVkcCJ9LAoreyJ0ci1yc3JiLXAzIiwgICAgICAgICB7TlVMTH0sIDE5ODksICJ0Y3AifSwKK3sidHItcnNyYi1wMyIsICAgICAgICAge05VTEx9LCAxOTg5LCAidWRwIn0sCit7Im1zaG5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMTk4OSwgInRjcCJ9LAoreyJtc2huZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDE5ODksICJ1ZHAifSwKK3sic3R1bi1wMSIsICAgICAgICAgICAge05VTEx9LCAxOTkwLCAidGNwIn0sCit7InN0dW4tcDEiLCAgICAgICAgICAgIHtOVUxMfSwgMTk5MCwgInVkcCJ9LAoreyJzdHVuLXAyIiwgICAgICAgICAgICB7TlVMTH0sIDE5OTEsICJ0Y3AifSwKK3sic3R1bi1wMiIsICAgICAgICAgICAge05VTEx9LCAxOTkxLCAidWRwIn0sCit7InN0dW4tcDMiLCAgICAgICAgICAgIHtOVUxMfSwgMTk5MiwgInRjcCJ9LAoreyJzdHVuLXAzIiwgICAgICAgICAgICB7TlVMTH0sIDE5OTIsICJ1ZHAifSwKK3siaXBzZW5kbXNnIiwgICAgICAgICAge05VTEx9LCAxOTkyLCAidGNwIn0sCit7Imlwc2VuZG1zZyIsICAgICAgICAgIHtOVUxMfSwgMTk5MiwgInVkcCJ9LAoreyJzbm1wLXRjcC1wb3J0IiwgICAgICB7TlVMTH0sIDE5OTMsICJ0Y3AifSwKK3sic25tcC10Y3AtcG9ydCIsICAgICAge05VTEx9LCAxOTkzLCAidWRwIn0sCit7InN0dW4tcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMTk5NCwgInRjcCJ9LAoreyJzdHVuLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDE5OTQsICJ1ZHAifSwKK3sicGVyZi1wb3J0IiwgICAgICAgICAge05VTEx9LCAxOTk1LCAidGNwIn0sCit7InBlcmYtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMTk5NSwgInVkcCJ9LAoreyJ0ci1yc3JiLXBvcnQiLCAgICAgICB7TlVMTH0sIDE5OTYsICJ0Y3AifSwKK3sidHItcnNyYi1wb3J0IiwgICAgICAge05VTEx9LCAxOTk2LCAidWRwIn0sCit7ImdkcC1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMTk5NywgInRjcCJ9LAoreyJnZHAtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDE5OTcsICJ1ZHAifSwKK3sieDI1LXN2Yy1wb3J0IiwgICAgICAge05VTEx9LCAxOTk4LCAidGNwIn0sCit7IngyNS1zdmMtcG9ydCIsICAgICAgIHtOVUxMfSwgMTk5OCwgInVkcCJ9LAoreyJ0Y3AtaWQtcG9ydCIsICAgICAgICB7TlVMTH0sIDE5OTksICJ0Y3AifSwKK3sidGNwLWlkLXBvcnQiLCAgICAgICAge05VTEx9LCAxOTk5LCAidWRwIn0sCit7ImNpc2NvLXNjY3AiLCAgICAgICAgIHtOVUxMfSwgMjAwMCwgInRjcCJ9LAoreyJjaXNjby1zY2NwIiwgICAgICAgICB7TlVMTH0sIDIwMDAsICJ1ZHAifSwKK3siZGMiLCAgICAgICAgICAgICAgICAge05VTEx9LCAyMDAxLCAidGNwIn0sCit7IndpemFyZCIsICAgICAgICAgICAgIHtOVUxMfSwgMjAwMSwgInVkcCJ9LAoreyJnbG9iZSIsICAgICAgICAgICAgICB7TlVMTH0sIDIwMDIsICJ0Y3AifSwKK3siZ2xvYmUiLCAgICAgICAgICAgICAge05VTEx9LCAyMDAyLCAidWRwIn0sCit7ImJydXR1cyIsICAgICAgICAgICAgIHtOVUxMfSwgMjAwMywgInRjcCJ9LAoreyJicnV0dXMiLCAgICAgICAgICAgICB7TlVMTH0sIDIwMDMsICJ1ZHAifSwKK3sibWFpbGJveCIsICAgICAgICAgICAge05VTEx9LCAyMDA0LCAidGNwIn0sCit7ImVtY2UiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjAwNCwgInVkcCJ9LAoreyJiZXJrbmV0IiwgICAgICAgICAgICB7TlVMTH0sIDIwMDUsICJ0Y3AifSwKK3sib3JhY2xlIiwgICAgICAgICAgICAge05VTEx9LCAyMDA1LCAidWRwIn0sCit7Imludm9rYXRvciIsICAgICAgICAgIHtOVUxMfSwgMjAwNiwgInRjcCJ9LAoreyJyYWlkLWNkIiwgICAgICAgICAgICB7TlVMTH0sIDIwMDYsICJ1ZHAifSwKK3siZGVjdGFsayIsICAgICAgICAgICAge05VTEx9LCAyMDA3LCAidGNwIn0sCit7InJhaWQtYW0iLCAgICAgICAgICAgIHtOVUxMfSwgMjAwNywgInVkcCJ9LAoreyJjb25mIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIwMDgsICJ0Y3AifSwKK3sidGVybWluYWxkYiIsICAgICAgICAge05VTEx9LCAyMDA4LCAidWRwIn0sCit7Im5ld3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjAwOSwgInRjcCJ9LAoreyJ3aG9zb2NrYW1pIiwgICAgICAgICB7TlVMTH0sIDIwMDksICJ1ZHAifSwKK3sic2VhcmNoIiwgICAgICAgICAgICAge05VTEx9LCAyMDEwLCAidGNwIn0sCit7InBpcGVfc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMjAxMCwgInVkcCJ9LAoreyJyYWlkLWNjIiwgICAgICAgICAgICB7TlVMTH0sIDIwMTEsICJ0Y3AifSwKK3sic2VydnNlcnYiLCAgICAgICAgICAge05VTEx9LCAyMDExLCAidWRwIn0sCit7InR0eWluZm8iLCAgICAgICAgICAgIHtOVUxMfSwgMjAxMiwgInRjcCJ9LAoreyJyYWlkLWFjIiwgICAgICAgICAgICB7TlVMTH0sIDIwMTIsICJ1ZHAifSwKK3sicmFpZC1hbSIsICAgICAgICAgICAge05VTEx9LCAyMDEzLCAidGNwIn0sCit7InJhaWQtY2QiLCAgICAgICAgICAgIHtOVUxMfSwgMjAxMywgInVkcCJ9LAoreyJ0cm9mZiIsICAgICAgICAgICAgICB7TlVMTH0sIDIwMTQsICJ0Y3AifSwKK3sicmFpZC1zZiIsICAgICAgICAgICAge05VTEx9LCAyMDE0LCAidWRwIn0sCit7ImN5cHJlc3MiLCAgICAgICAgICAgIHtOVUxMfSwgMjAxNSwgInRjcCJ9LAoreyJyYWlkLWNzIiwgICAgICAgICAgICB7TlVMTH0sIDIwMTUsICJ1ZHAifSwKK3siYm9vdHNlcnZlciIsICAgICAgICAge05VTEx9LCAyMDE2LCAidGNwIn0sCit7ImJvb3RzZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMjAxNiwgInVkcCJ9LAoreyJjeXByZXNzLXN0YXQiLCAgICAgICB7TlVMTH0sIDIwMTcsICJ0Y3AifSwKK3siYm9vdGNsaWVudCIsICAgICAgICAge05VTEx9LCAyMDE3LCAidWRwIn0sCit7InRlcm1pbmFsZGIiLCAgICAgICAgIHtOVUxMfSwgMjAxOCwgInRjcCJ9LAoreyJyZWxscGFjayIsICAgICAgICAgICB7TlVMTH0sIDIwMTgsICJ1ZHAifSwKK3sid2hvc29ja2FtaSIsICAgICAgICAge05VTEx9LCAyMDE5LCAidGNwIn0sCit7ImFib3V0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMjAxOSwgInVkcCJ9LAoreyJ4aW51cGFnZXNlcnZlciIsICAgICB7TlVMTH0sIDIwMjAsICJ0Y3AifSwKK3sieGludXBhZ2VzZXJ2ZXIiLCAgICAge05VTEx9LCAyMDIwLCAidWRwIn0sCit7InNlcnZleGVjIiwgICAgICAgICAgIHtOVUxMfSwgMjAyMSwgInRjcCJ9LAoreyJ4aW51ZXhwYW5zaW9uMSIsICAgICB7TlVMTH0sIDIwMjEsICJ1ZHAifSwKK3siZG93biIsICAgICAgICAgICAgICAge05VTEx9LCAyMDIyLCAidGNwIn0sCit7InhpbnVleHBhbnNpb24yIiwgICAgIHtOVUxMfSwgMjAyMiwgInVkcCJ9LAoreyJ4aW51ZXhwYW5zaW9uMyIsICAgICB7TlVMTH0sIDIwMjMsICJ0Y3AifSwKK3sieGludWV4cGFuc2lvbjMiLCAgICAge05VTEx9LCAyMDIzLCAidWRwIn0sCit7InhpbnVleHBhbnNpb240IiwgICAgIHtOVUxMfSwgMjAyNCwgInRjcCJ9LAoreyJ4aW51ZXhwYW5zaW9uNCIsICAgICB7TlVMTH0sIDIwMjQsICJ1ZHAifSwKK3siZWxscGFjayIsICAgICAgICAgICAge05VTEx9LCAyMDI1LCAidGNwIn0sCit7InhyaWJzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjAyNSwgInVkcCJ9LAoreyJzY3JhYmJsZSIsICAgICAgICAgICB7TlVMTH0sIDIwMjYsICJ0Y3AifSwKK3sic2NyYWJibGUiLCAgICAgICAgICAge05VTEx9LCAyMDI2LCAidWRwIn0sCit7InNoYWRvd3NlcnZlciIsICAgICAgIHtOVUxMfSwgMjAyNywgInRjcCJ9LAoreyJzaGFkb3dzZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDIwMjcsICJ1ZHAifSwKK3sic3VibWl0c2VydmVyIiwgICAgICAge05VTEx9LCAyMDI4LCAidGNwIn0sCit7InN1Ym1pdHNlcnZlciIsICAgICAgIHtOVUxMfSwgMjAyOCwgInVkcCJ9LAoreyJoc3JwdjYiLCAgICAgICAgICAgICB7TlVMTH0sIDIwMjksICJ0Y3AifSwKK3siaHNycHY2IiwgICAgICAgICAgICAge05VTEx9LCAyMDI5LCAidWRwIn0sCit7ImRldmljZTIiLCAgICAgICAgICAgIHtOVUxMfSwgMjAzMCwgInRjcCJ9LAoreyJkZXZpY2UyIiwgICAgICAgICAgICB7TlVMTH0sIDIwMzAsICJ1ZHAifSwKK3sibW9icmllbi1jaGF0IiwgICAgICAge05VTEx9LCAyMDMxLCAidGNwIn0sCit7Im1vYnJpZW4tY2hhdCIsICAgICAgIHtOVUxMfSwgMjAzMSwgInVkcCJ9LAoreyJibGFja2JvYXJkIiwgICAgICAgICB7TlVMTH0sIDIwMzIsICJ0Y3AifSwKK3siYmxhY2tib2FyZCIsICAgICAgICAge05VTEx9LCAyMDMyLCAidWRwIn0sCit7Imdsb2dnZXIiLCAgICAgICAgICAgIHtOVUxMfSwgMjAzMywgInRjcCJ9LAoreyJnbG9nZ2VyIiwgICAgICAgICAgICB7TlVMTH0sIDIwMzMsICJ1ZHAifSwKK3sic2NvcmVtZ3IiLCAgICAgICAgICAge05VTEx9LCAyMDM0LCAidGNwIn0sCit7InNjb3JlbWdyIiwgICAgICAgICAgIHtOVUxMfSwgMjAzNCwgInVkcCJ9LAoreyJpbXNsZG9jIiwgICAgICAgICAgICB7TlVMTH0sIDIwMzUsICJ0Y3AifSwKK3siaW1zbGRvYyIsICAgICAgICAgICAge05VTEx9LCAyMDM1LCAidWRwIn0sCit7ImUtZHBuZXQiLCAgICAgICAgICAgIHtOVUxMfSwgMjAzNiwgInRjcCJ9LAoreyJlLWRwbmV0IiwgICAgICAgICAgICB7TlVMTH0sIDIwMzYsICJ1ZHAifSwKK3siYXBwbHVzIiwgICAgICAgICAgICAge05VTEx9LCAyMDM3LCAidGNwIn0sCit7ImFwcGx1cyIsICAgICAgICAgICAgIHtOVUxMfSwgMjAzNywgInVkcCJ9LAoreyJvYmplY3RtYW5hZ2VyIiwgICAgICB7TlVMTH0sIDIwMzgsICJ0Y3AifSwKK3sib2JqZWN0bWFuYWdlciIsICAgICAge05VTEx9LCAyMDM4LCAidWRwIn0sCit7InByaXptYSIsICAgICAgICAgICAgIHtOVUxMfSwgMjAzOSwgInRjcCJ9LAoreyJwcml6bWEiLCAgICAgICAgICAgICB7TlVMTH0sIDIwMzksICJ1ZHAifSwKK3sibGFtIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMDQwLCAidGNwIn0sCit7ImxhbSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjA0MCwgInVkcCJ9LAoreyJpbnRlcmJhc2UiLCAgICAgICAgICB7TlVMTH0sIDIwNDEsICJ0Y3AifSwKK3siaW50ZXJiYXNlIiwgICAgICAgICAge05VTEx9LCAyMDQxLCAidWRwIn0sCit7ImlzaXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjA0MiwgInRjcCJ9LAoreyJpc2lzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIwNDIsICJ1ZHAifSwKK3siaXNpcy1iY2FzdCIsICAgICAgICAge05VTEx9LCAyMDQzLCAidGNwIn0sCit7ImlzaXMtYmNhc3QiLCAgICAgICAgIHtOVUxMfSwgMjA0MywgInVkcCJ9LAoreyJyaW1zbCIsICAgICAgICAgICAgICB7TlVMTH0sIDIwNDQsICJ0Y3AifSwKK3sicmltc2wiLCAgICAgICAgICAgICAge05VTEx9LCAyMDQ0LCAidWRwIn0sCit7ImNkZnVuYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjA0NSwgInRjcCJ9LAoreyJjZGZ1bmMiLCAgICAgICAgICAgICB7TlVMTH0sIDIwNDUsICJ1ZHAifSwKK3sic2RmdW5jIiwgICAgICAgICAgICAge05VTEx9LCAyMDQ2LCAidGNwIn0sCit7InNkZnVuYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjA0NiwgInVkcCJ9LAoreyJkbHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIwNDcsICJ0Y3AifSwKK3siZGxzIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMDQ3LCAidWRwIn0sCit7ImRscy1tb25pdG9yIiwgICAgICAgIHtOVUxMfSwgMjA0OCwgInRjcCJ9LAoreyJkbHMtbW9uaXRvciIsICAgICAgICB7TlVMTH0sIDIwNDgsICJ1ZHAifSwKK3sic2hpbHAiLCAgICAgICAgICAgICAge05VTEx9LCAyMDQ5LCAidGNwIn0sCit7InNoaWxwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjA0OSwgInVkcCJ9LAoreyJuZnMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIwNDksICJ0Y3AifSwKK3sibmZzIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMDQ5LCAidWRwIn0sCit7Im5mcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjA0OSwgInNjdHAifSwKK3siYXYtZW1iLWNvbmZpZyIsICAgICAge05VTEx9LCAyMDUwLCAidGNwIn0sCit7ImF2LWVtYi1jb25maWciLCAgICAgIHtOVUxMfSwgMjA1MCwgInVkcCJ9LAoreyJlcG5zZHAiLCAgICAgICAgICAgICB7TlVMTH0sIDIwNTEsICJ0Y3AifSwKK3siZXBuc2RwIiwgICAgICAgICAgICAge05VTEx9LCAyMDUxLCAidWRwIn0sCit7ImNsZWFydmlzbiIsICAgICAgICAgIHtOVUxMfSwgMjA1MiwgInRjcCJ9LAoreyJjbGVhcnZpc24iLCAgICAgICAgICB7TlVMTH0sIDIwNTIsICJ1ZHAifSwKK3sibG90MTA1LWRzLXVwZCIsICAgICAge05VTEx9LCAyMDUzLCAidGNwIn0sCit7ImxvdDEwNS1kcy11cGQiLCAgICAgIHtOVUxMfSwgMjA1MywgInVkcCJ9LAoreyJ3ZWJsb2dpbiIsICAgICAgICAgICB7TlVMTH0sIDIwNTQsICJ0Y3AifSwKK3sid2VibG9naW4iLCAgICAgICAgICAge05VTEx9LCAyMDU0LCAidWRwIn0sCit7ImlvcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjA1NSwgInRjcCJ9LAoreyJpb3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIwNTUsICJ1ZHAifSwKK3sib21uaXNreSIsICAgICAgICAgICAge05VTEx9LCAyMDU2LCAidGNwIn0sCit7Im9tbmlza3kiLCAgICAgICAgICAgIHtOVUxMfSwgMjA1NiwgInVkcCJ9LAoreyJyaWNoLWNwIiwgICAgICAgICAgICB7TlVMTH0sIDIwNTcsICJ0Y3AifSwKK3sicmljaC1jcCIsICAgICAgICAgICAge05VTEx9LCAyMDU3LCAidWRwIn0sCit7Im5ld3dhdmVzZWFyY2giLCAgICAgIHtOVUxMfSwgMjA1OCwgInRjcCJ9LAoreyJuZXd3YXZlc2VhcmNoIiwgICAgICB7TlVMTH0sIDIwNTgsICJ1ZHAifSwKK3siYm1jLW1lc3NhZ2luZyIsICAgICAge05VTEx9LCAyMDU5LCAidGNwIn0sCit7ImJtYy1tZXNzYWdpbmciLCAgICAgIHtOVUxMfSwgMjA1OSwgInVkcCJ9LAoreyJ0ZWxlbml1bWRhZW1vbiIsICAgICB7TlVMTH0sIDIwNjAsICJ0Y3AifSwKK3sidGVsZW5pdW1kYWVtb24iLCAgICAge05VTEx9LCAyMDYwLCAidWRwIn0sCit7Im5ldG1vdW50IiwgICAgICAgICAgIHtOVUxMfSwgMjA2MSwgInRjcCJ9LAoreyJuZXRtb3VudCIsICAgICAgICAgICB7TlVMTH0sIDIwNjEsICJ1ZHAifSwKK3siaWNnLXN3cCIsICAgICAgICAgICAge05VTEx9LCAyMDYyLCAidGNwIn0sCit7ImljZy1zd3AiLCAgICAgICAgICAgIHtOVUxMfSwgMjA2MiwgInVkcCJ9LAoreyJpY2ctYnJpZGdlIiwgICAgICAgICB7TlVMTH0sIDIwNjMsICJ0Y3AifSwKK3siaWNnLWJyaWRnZSIsICAgICAgICAge05VTEx9LCAyMDYzLCAidWRwIn0sCit7ImljZy1pcHJlbGF5IiwgICAgICAgIHtOVUxMfSwgMjA2NCwgInRjcCJ9LAoreyJpY2ctaXByZWxheSIsICAgICAgICB7TlVMTH0sIDIwNjQsICJ1ZHAifSwKK3siZGxzcnBuIiwgICAgICAgICAgICAge05VTEx9LCAyMDY1LCAidGNwIn0sCit7ImRsc3JwbiIsICAgICAgICAgICAgIHtOVUxMfSwgMjA2NSwgInVkcCJ9LAoreyJhdXJhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIwNjYsICJ0Y3AifSwKK3siYXVyYSIsICAgICAgICAgICAgICAge05VTEx9LCAyMDY2LCAidWRwIn0sCit7ImRsc3dwbiIsICAgICAgICAgICAgIHtOVUxMfSwgMjA2NywgInRjcCJ9LAoreyJkbHN3cG4iLCAgICAgICAgICAgICB7TlVMTH0sIDIwNjcsICJ1ZHAifSwKK3siYXZhdXRoc3J2cHJ0Y2wiLCAgICAge05VTEx9LCAyMDY4LCAidGNwIn0sCit7ImF2YXV0aHNydnBydGNsIiwgICAgIHtOVUxMfSwgMjA2OCwgInVkcCJ9LAoreyJldmVudC1wb3J0IiwgICAgICAgICB7TlVMTH0sIDIwNjksICJ0Y3AifSwKK3siZXZlbnQtcG9ydCIsICAgICAgICAge05VTEx9LCAyMDY5LCAidWRwIn0sCit7ImFoLWVzcC1lbmNhcCIsICAgICAgIHtOVUxMfSwgMjA3MCwgInRjcCJ9LAoreyJhaC1lc3AtZW5jYXAiLCAgICAgICB7TlVMTH0sIDIwNzAsICJ1ZHAifSwKK3siYWNwLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAyMDcxLCAidGNwIn0sCit7ImFjcC1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMjA3MSwgInVkcCJ9LAoreyJtc3luYyIsICAgICAgICAgICAgICB7TlVMTH0sIDIwNzIsICJ0Y3AifSwKK3sibXN5bmMiLCAgICAgICAgICAgICAge05VTEx9LCAyMDcyLCAidWRwIn0sCit7Imd4cy1kYXRhLXBvcnQiLCAgICAgIHtOVUxMfSwgMjA3MywgInRjcCJ9LAoreyJneHMtZGF0YS1wb3J0IiwgICAgICB7TlVMTH0sIDIwNzMsICJ1ZHAifSwKK3sidnJ0bC12bWYtc2EiLCAgICAgICAge05VTEx9LCAyMDc0LCAidGNwIn0sCit7InZydGwtdm1mLXNhIiwgICAgICAgIHtOVUxMfSwgMjA3NCwgInVkcCJ9LAoreyJuZXdsaXhlbmdpbmUiLCAgICAgICB7TlVMTH0sIDIwNzUsICJ0Y3AifSwKK3sibmV3bGl4ZW5naW5lIiwgICAgICAge05VTEx9LCAyMDc1LCAidWRwIn0sCit7Im5ld2xpeGNvbmZpZyIsICAgICAgIHtOVUxMfSwgMjA3NiwgInRjcCJ9LAoreyJuZXdsaXhjb25maWciLCAgICAgICB7TlVMTH0sIDIwNzYsICJ1ZHAifSwKK3sidHNybWFndCIsICAgICAgICAgICAge05VTEx9LCAyMDc3LCAidGNwIn0sCit7InRzcm1hZ3QiLCAgICAgICAgICAgIHtOVUxMfSwgMjA3NywgInVkcCJ9LAoreyJ0cGNzcnZyIiwgICAgICAgICAgICB7TlVMTH0sIDIwNzgsICJ0Y3AifSwKK3sidHBjc3J2ciIsICAgICAgICAgICAge05VTEx9LCAyMDc4LCAidWRwIn0sCit7Imlkd2FyZS1yb3V0ZXIiLCAgICAgIHtOVUxMfSwgMjA3OSwgInRjcCJ9LAoreyJpZHdhcmUtcm91dGVyIiwgICAgICB7TlVMTH0sIDIwNzksICJ1ZHAifSwKK3siYXV0b2Rlc2stbmxtIiwgICAgICAge05VTEx9LCAyMDgwLCAidGNwIn0sCit7ImF1dG9kZXNrLW5sbSIsICAgICAgIHtOVUxMfSwgMjA4MCwgInVkcCJ9LAoreyJrbWUtdHJhcC1wb3J0IiwgICAgICB7TlVMTH0sIDIwODEsICJ0Y3AifSwKK3sia21lLXRyYXAtcG9ydCIsICAgICAge05VTEx9LCAyMDgxLCAidWRwIn0sCit7ImluZm93YXZlIiwgICAgICAgICAgIHtOVUxMfSwgMjA4MiwgInRjcCJ9LAoreyJpbmZvd2F2ZSIsICAgICAgICAgICB7TlVMTH0sIDIwODIsICJ1ZHAifSwKK3sicmFkc2VjIiwgICAgICAgICAgICAge05VTEx9LCAyMDgzLCAidGNwIn0sCit7InJhZHNlYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjA4MywgInVkcCJ9LAoreyJzdW5jbHVzdGVyZ2VvIiwgICAgICB7TlVMTH0sIDIwODQsICJ0Y3AifSwKK3sic3VuY2x1c3RlcmdlbyIsICAgICAge05VTEx9LCAyMDg0LCAidWRwIn0sCit7ImFkYS1jaXAiLCAgICAgICAgICAgIHtOVUxMfSwgMjA4NSwgInRjcCJ9LAoreyJhZGEtY2lwIiwgICAgICAgICAgICB7TlVMTH0sIDIwODUsICJ1ZHAifSwKK3siZ251bmV0IiwgICAgICAgICAgICAge05VTEx9LCAyMDg2LCAidGNwIn0sCit7ImdudW5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMjA4NiwgInVkcCJ9LAoreyJlbGkiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIwODcsICJ0Y3AifSwKK3siZWxpIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMDg3LCAidWRwIn0sCit7ImlwLWJsZiIsICAgICAgICAgICAgIHtOVUxMfSwgMjA4OCwgInRjcCJ9LAoreyJpcC1ibGYiLCAgICAgICAgICAgICB7TlVMTH0sIDIwODgsICJ1ZHAifSwKK3sic2VwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMDg5LCAidGNwIn0sCit7InNlcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjA4OSwgInVkcCJ9LAoreyJscnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIwOTAsICJ0Y3AifSwKK3sibHJwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMDkwLCAidWRwIn0sCit7InBycCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjA5MSwgInRjcCJ9LAoreyJwcnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIwOTEsICJ1ZHAifSwKK3siZGVzY2VudDMiLCAgICAgICAgICAge05VTEx9LCAyMDkyLCAidGNwIn0sCit7ImRlc2NlbnQzIiwgICAgICAgICAgIHtOVUxMfSwgMjA5MiwgInVkcCJ9LAoreyJuYngtY2MiLCAgICAgICAgICAgICB7TlVMTH0sIDIwOTMsICJ0Y3AifSwKK3sibmJ4LWNjIiwgICAgICAgICAgICAge05VTEx9LCAyMDkzLCAidWRwIn0sCit7Im5ieC1hdSIsICAgICAgICAgICAgIHtOVUxMfSwgMjA5NCwgInRjcCJ9LAoreyJuYngtYXUiLCAgICAgICAgICAgICB7TlVMTH0sIDIwOTQsICJ1ZHAifSwKK3sibmJ4LXNlciIsICAgICAgICAgICAge05VTEx9LCAyMDk1LCAidGNwIn0sCit7Im5ieC1zZXIiLCAgICAgICAgICAgIHtOVUxMfSwgMjA5NSwgInVkcCJ9LAoreyJuYngtZGlyIiwgICAgICAgICAgICB7TlVMTH0sIDIwOTYsICJ0Y3AifSwKK3sibmJ4LWRpciIsICAgICAgICAgICAge05VTEx9LCAyMDk2LCAidWRwIn0sCit7ImpldGZvcm1wcmV2aWV3IiwgICAgIHtOVUxMfSwgMjA5NywgInRjcCJ9LAoreyJqZXRmb3JtcHJldmlldyIsICAgICB7TlVMTH0sIDIwOTcsICJ1ZHAifSwKK3siZGlhbG9nLXBvcnQiLCAgICAgICAge05VTEx9LCAyMDk4LCAidGNwIn0sCit7ImRpYWxvZy1wb3J0IiwgICAgICAgIHtOVUxMfSwgMjA5OCwgInVkcCJ9LAoreyJoMjI1MC1hbm5leC1nIiwgICAgICB7TlVMTH0sIDIwOTksICJ0Y3AifSwKK3siaDIyNTAtYW5uZXgtZyIsICAgICAge05VTEx9LCAyMDk5LCAidWRwIn0sCit7ImFtaWdhbmV0ZnMiLCAgICAgICAgIHtOVUxMfSwgMjEwMCwgInRjcCJ9LAoreyJhbWlnYW5ldGZzIiwgICAgICAgICB7TlVMTH0sIDIxMDAsICJ1ZHAifSwKK3sicnRjbS1zYzEwNCIsICAgICAgICAge05VTEx9LCAyMTAxLCAidGNwIn0sCit7InJ0Y20tc2MxMDQiLCAgICAgICAgIHtOVUxMfSwgMjEwMSwgInVkcCJ9LAoreyJ6ZXBoeXItc3J2IiwgICAgICAgICB7TlVMTH0sIDIxMDIsICJ0Y3AifSwKK3siemVwaHlyLXNydiIsICAgICAgICAge05VTEx9LCAyMTAyLCAidWRwIn0sCit7InplcGh5ci1jbHQiLCAgICAgICAgIHtOVUxMfSwgMjEwMywgInRjcCJ9LAoreyJ6ZXBoeXItY2x0IiwgICAgICAgICB7TlVMTH0sIDIxMDMsICJ1ZHAifSwKK3siemVwaHlyLWhtIiwgICAgICAgICAge05VTEx9LCAyMTA0LCAidGNwIn0sCit7InplcGh5ci1obSIsICAgICAgICAgIHtOVUxMfSwgMjEwNCwgInVkcCJ9LAoreyJtaW5pcGF5IiwgICAgICAgICAgICB7TlVMTH0sIDIxMDUsICJ0Y3AifSwKK3sibWluaXBheSIsICAgICAgICAgICAge05VTEx9LCAyMTA1LCAidWRwIn0sCit7Im16YXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjEwNiwgInRjcCJ9LAoreyJtemFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIxMDYsICJ1ZHAifSwKK3siYmludGVjLWFkbWluIiwgICAgICAge05VTEx9LCAyMTA3LCAidGNwIn0sCit7ImJpbnRlYy1hZG1pbiIsICAgICAgIHtOVUxMfSwgMjEwNywgInVkcCJ9LAoreyJjb21jYW0iLCAgICAgICAgICAgICB7TlVMTH0sIDIxMDgsICJ0Y3AifSwKK3siY29tY2FtIiwgICAgICAgICAgICAge05VTEx9LCAyMTA4LCAidWRwIn0sCit7ImVyZ29saWdodCIsICAgICAgICAgIHtOVUxMfSwgMjEwOSwgInRjcCJ9LAoreyJlcmdvbGlnaHQiLCAgICAgICAgICB7TlVMTH0sIDIxMDksICJ1ZHAifSwKK3sidW1zcCIsICAgICAgICAgICAgICAge05VTEx9LCAyMTEwLCAidGNwIn0sCit7InVtc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjExMCwgInVkcCJ9LAoreyJkc2F0cCIsICAgICAgICAgICAgICB7TlVMTH0sIDIxMTEsICJ0Y3AifSwKK3siZHNhdHAiLCAgICAgICAgICAgICAge05VTEx9LCAyMTExLCAidWRwIn0sCit7Imlkb25peC1tZXRhbmV0IiwgICAgIHtOVUxMfSwgMjExMiwgInRjcCJ9LAoreyJpZG9uaXgtbWV0YW5ldCIsICAgICB7TlVMTH0sIDIxMTIsICJ1ZHAifSwKK3siaHNsLXN0b3JtIiwgICAgICAgICAge05VTEx9LCAyMTEzLCAidGNwIn0sCit7ImhzbC1zdG9ybSIsICAgICAgICAgIHtOVUxMfSwgMjExMywgInVkcCJ9LAoreyJuZXdoZWlnaHRzIiwgICAgICAgICB7TlVMTH0sIDIxMTQsICJ0Y3AifSwKK3sibmV3aGVpZ2h0cyIsICAgICAgICAge05VTEx9LCAyMTE0LCAidWRwIn0sCit7ImtkbSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjExNSwgInRjcCJ9LAoreyJrZG0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIxMTUsICJ1ZHAifSwKK3siY2Nvd2NtciIsICAgICAgICAgICAge05VTEx9LCAyMTE2LCAidGNwIn0sCit7ImNjb3djbXIiLCAgICAgICAgICAgIHtOVUxMfSwgMjExNiwgInVkcCJ9LAoreyJtZW50YWNsaWVudCIsICAgICAgICB7TlVMTH0sIDIxMTcsICJ0Y3AifSwKK3sibWVudGFjbGllbnQiLCAgICAgICAge05VTEx9LCAyMTE3LCAidWRwIn0sCit7Im1lbnRhc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMjExOCwgInRjcCJ9LAoreyJtZW50YXNlcnZlciIsICAgICAgICB7TlVMTH0sIDIxMTgsICJ1ZHAifSwKK3siZ3NpZ2F0ZWtlZXBlciIsICAgICAge05VTEx9LCAyMTE5LCAidGNwIn0sCit7ImdzaWdhdGVrZWVwZXIiLCAgICAgIHtOVUxMfSwgMjExOSwgInVkcCJ9LAoreyJxZW5jcCIsICAgICAgICAgICAgICB7TlVMTH0sIDIxMjAsICJ0Y3AifSwKK3sicWVuY3AiLCAgICAgICAgICAgICAge05VTEx9LCAyMTIwLCAidWRwIn0sCit7InNjaWVudGlhLXNzZGIiLCAgICAgIHtOVUxMfSwgMjEyMSwgInRjcCJ9LAoreyJzY2llbnRpYS1zc2RiIiwgICAgICB7TlVMTH0sIDIxMjEsICJ1ZHAifSwKK3siY2F1cGMtcmVtb3RlIiwgICAgICAge05VTEx9LCAyMTIyLCAidGNwIn0sCit7ImNhdXBjLXJlbW90ZSIsICAgICAgIHtOVUxMfSwgMjEyMiwgInVkcCJ9LAoreyJndHAtY29udHJvbCIsICAgICAgICB7TlVMTH0sIDIxMjMsICJ0Y3AifSwKK3siZ3RwLWNvbnRyb2wiLCAgICAgICAge05VTEx9LCAyMTIzLCAidWRwIn0sCit7ImVsYXRlbGluayIsICAgICAgICAgIHtOVUxMfSwgMjEyNCwgInRjcCJ9LAoreyJlbGF0ZWxpbmsiLCAgICAgICAgICB7TlVMTH0sIDIxMjQsICJ1ZHAifSwKK3sibG9ja3N0ZXAiLCAgICAgICAgICAge05VTEx9LCAyMTI1LCAidGNwIn0sCit7ImxvY2tzdGVwIiwgICAgICAgICAgIHtOVUxMfSwgMjEyNSwgInVkcCJ9LAoreyJwa3RjYWJsZS1jb3BzIiwgICAgICB7TlVMTH0sIDIxMjYsICJ0Y3AifSwKK3sicGt0Y2FibGUtY29wcyIsICAgICAge05VTEx9LCAyMTI2LCAidWRwIn0sCit7ImluZGV4LXBjLXdiIiwgICAgICAgIHtOVUxMfSwgMjEyNywgInRjcCJ9LAoreyJpbmRleC1wYy13YiIsICAgICAgICB7TlVMTH0sIDIxMjcsICJ1ZHAifSwKK3sibmV0LXN0ZXdhcmQiLCAgICAgICAge05VTEx9LCAyMTI4LCAidGNwIn0sCit7Im5ldC1zdGV3YXJkIiwgICAgICAgIHtOVUxMfSwgMjEyOCwgInVkcCJ9LAoreyJjcy1saXZlIiwgICAgICAgICAgICB7TlVMTH0sIDIxMjksICJ0Y3AifSwKK3siY3MtbGl2ZSIsICAgICAgICAgICAge05VTEx9LCAyMTI5LCAidWRwIn0sCit7InhkcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjEzMCwgInRjcCJ9LAoreyJ4ZHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIxMzAsICJ1ZHAifSwKK3siYXZhbnRhZ2ViMmIiLCAgICAgICAge05VTEx9LCAyMTMxLCAidGNwIn0sCit7ImF2YW50YWdlYjJiIiwgICAgICAgIHtOVUxMfSwgMjEzMSwgInVkcCJ9LAoreyJzb2xlcmEtZXBtYXAiLCAgICAgICB7TlVMTH0sIDIxMzIsICJ0Y3AifSwKK3sic29sZXJhLWVwbWFwIiwgICAgICAge05VTEx9LCAyMTMyLCAidWRwIn0sCit7Inp5bWVkLXpwcCIsICAgICAgICAgIHtOVUxMfSwgMjEzMywgInRjcCJ9LAoreyJ6eW1lZC16cHAiLCAgICAgICAgICB7TlVMTH0sIDIxMzMsICJ1ZHAifSwKK3siYXZlbnVlIiwgICAgICAgICAgICAge05VTEx9LCAyMTM0LCAidGNwIn0sCit7ImF2ZW51ZSIsICAgICAgICAgICAgIHtOVUxMfSwgMjEzNCwgInVkcCJ9LAoreyJncmlzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIxMzUsICJ0Y3AifSwKK3siZ3JpcyIsICAgICAgICAgICAgICAge05VTEx9LCAyMTM1LCAidWRwIn0sCit7ImFwcHdvcnhzcnYiLCAgICAgICAgIHtOVUxMfSwgMjEzNiwgInRjcCJ9LAoreyJhcHB3b3J4c3J2IiwgICAgICAgICB7TlVMTH0sIDIxMzYsICJ1ZHAifSwKK3siY29ubmVjdCIsICAgICAgICAgICAge05VTEx9LCAyMTM3LCAidGNwIn0sCit7ImNvbm5lY3QiLCAgICAgICAgICAgIHtOVUxMfSwgMjEzNywgInVkcCJ9LAoreyJ1bmJpbmQtY2x1c3RlciIsICAgICB7TlVMTH0sIDIxMzgsICJ0Y3AifSwKK3sidW5iaW5kLWNsdXN0ZXIiLCAgICAge05VTEx9LCAyMTM4LCAidWRwIn0sCit7Imlhcy1hdXRoIiwgICAgICAgICAgIHtOVUxMfSwgMjEzOSwgInRjcCJ9LAoreyJpYXMtYXV0aCIsICAgICAgICAgICB7TlVMTH0sIDIxMzksICJ1ZHAifSwKK3siaWFzLXJlZyIsICAgICAgICAgICAge05VTEx9LCAyMTQwLCAidGNwIn0sCit7Imlhcy1yZWciLCAgICAgICAgICAgIHtOVUxMfSwgMjE0MCwgInVkcCJ9LAoreyJpYXMtYWRtaW5kIiwgICAgICAgICB7TlVMTH0sIDIxNDEsICJ0Y3AifSwKK3siaWFzLWFkbWluZCIsICAgICAgICAge05VTEx9LCAyMTQxLCAidWRwIn0sCit7InRkbW9pcCIsICAgICAgICAgICAgIHtOVUxMfSwgMjE0MiwgInRjcCJ9LAoreyJ0ZG1vaXAiLCAgICAgICAgICAgICB7TlVMTH0sIDIxNDIsICJ1ZHAifSwKK3sibHYtamMiLCAgICAgICAgICAgICAge05VTEx9LCAyMTQzLCAidGNwIn0sCit7Imx2LWpjIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE0MywgInVkcCJ9LAoreyJsdi1mZngiLCAgICAgICAgICAgICB7TlVMTH0sIDIxNDQsICJ0Y3AifSwKK3sibHYtZmZ4IiwgICAgICAgICAgICAge05VTEx9LCAyMTQ0LCAidWRwIn0sCit7Imx2LXBpY2kiLCAgICAgICAgICAgIHtOVUxMfSwgMjE0NSwgInRjcCJ9LAoreyJsdi1waWNpIiwgICAgICAgICAgICB7TlVMTH0sIDIxNDUsICJ1ZHAifSwKK3sibHYtbm90IiwgICAgICAgICAgICAge05VTEx9LCAyMTQ2LCAidGNwIn0sCit7Imx2LW5vdCIsICAgICAgICAgICAgIHtOVUxMfSwgMjE0NiwgInVkcCJ9LAoreyJsdi1hdXRoIiwgICAgICAgICAgICB7TlVMTH0sIDIxNDcsICJ0Y3AifSwKK3sibHYtYXV0aCIsICAgICAgICAgICAge05VTEx9LCAyMTQ3LCAidWRwIn0sCit7InZlcml0YXMtdWNsIiwgICAgICAgIHtOVUxMfSwgMjE0OCwgInRjcCJ9LAoreyJ2ZXJpdGFzLXVjbCIsICAgICAgICB7TlVMTH0sIDIxNDgsICJ1ZHAifSwKK3siYWNwdHN5cyIsICAgICAgICAgICAge05VTEx9LCAyMTQ5LCAidGNwIn0sCit7ImFjcHRzeXMiLCAgICAgICAgICAgIHtOVUxMfSwgMjE0OSwgInVkcCJ9LAoreyJkeW5hbWljM2QiLCAgICAgICAgICB7TlVMTH0sIDIxNTAsICJ0Y3AifSwKK3siZHluYW1pYzNkIiwgICAgICAgICAge05VTEx9LCAyMTUwLCAidWRwIn0sCit7ImRvY2VudCIsICAgICAgICAgICAgIHtOVUxMfSwgMjE1MSwgInRjcCJ9LAoreyJkb2NlbnQiLCAgICAgICAgICAgICB7TlVMTH0sIDIxNTEsICJ1ZHAifSwKK3siZ3RwLXVzZXIiLCAgICAgICAgICAge05VTEx9LCAyMTUyLCAidGNwIn0sCit7Imd0cC11c2VyIiwgICAgICAgICAgIHtOVUxMfSwgMjE1MiwgInVkcCJ9LAoreyJjdGxwdGMiLCAgICAgICAgICAgICB7TlVMTH0sIDIxNTMsICJ0Y3AifSwKK3siY3RscHRjIiwgICAgICAgICAgICAge05VTEx9LCAyMTUzLCAidWRwIn0sCit7InN0ZHB0YyIsICAgICAgICAgICAgIHtOVUxMfSwgMjE1NCwgInRjcCJ9LAoreyJzdGRwdGMiLCAgICAgICAgICAgICB7TlVMTH0sIDIxNTQsICJ1ZHAifSwKK3siYnJkcHRjIiwgICAgICAgICAgICAge05VTEx9LCAyMTU1LCAidGNwIn0sCit7ImJyZHB0YyIsICAgICAgICAgICAgIHtOVUxMfSwgMjE1NSwgInVkcCJ9LAoreyJ0cnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIxNTYsICJ0Y3AifSwKK3sidHJwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMTU2LCAidWRwIn0sCit7InhuZHMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjE1NywgInRjcCJ9LAoreyJ4bmRzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIxNTcsICJ1ZHAifSwKK3sidG91Y2huZXRwbHVzIiwgICAgICAge05VTEx9LCAyMTU4LCAidGNwIn0sCit7InRvdWNobmV0cGx1cyIsICAgICAgIHtOVUxMfSwgMjE1OCwgInVkcCJ9LAoreyJnZGJyZW1vdGUiLCAgICAgICAgICB7TlVMTH0sIDIxNTksICJ0Y3AifSwKK3siZ2RicmVtb3RlIiwgICAgICAgICAge05VTEx9LCAyMTU5LCAidWRwIn0sCit7ImFwYy0yMTYwIiwgICAgICAgICAgIHtOVUxMfSwgMjE2MCwgInRjcCJ9LAoreyJhcGMtMjE2MCIsICAgICAgICAgICB7TlVMTH0sIDIxNjAsICJ1ZHAifSwKK3siYXBjLTIxNjEiLCAgICAgICAgICAge05VTEx9LCAyMTYxLCAidGNwIn0sCit7ImFwYy0yMTYxIiwgICAgICAgICAgIHtOVUxMfSwgMjE2MSwgInVkcCJ9LAoreyJuYXZpc3BoZXJlIiwgICAgICAgICB7TlVMTH0sIDIxNjIsICJ0Y3AifSwKK3sibmF2aXNwaGVyZSIsICAgICAgICAge05VTEx9LCAyMTYyLCAidWRwIn0sCit7Im5hdmlzcGhlcmUtc2VjIiwgICAgIHtOVUxMfSwgMjE2MywgInRjcCJ9LAoreyJuYXZpc3BoZXJlLXNlYyIsICAgICB7TlVMTH0sIDIxNjMsICJ1ZHAifSwKK3siZGRucy12MyIsICAgICAgICAgICAge05VTEx9LCAyMTY0LCAidGNwIn0sCit7ImRkbnMtdjMiLCAgICAgICAgICAgIHtOVUxMfSwgMjE2NCwgInVkcCJ9LAoreyJ4LWJvbmUtYXBpIiwgICAgICAgICB7TlVMTH0sIDIxNjUsICJ0Y3AifSwKK3sieC1ib25lLWFwaSIsICAgICAgICAge05VTEx9LCAyMTY1LCAidWRwIn0sCit7Iml3c2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMjE2NiwgInRjcCJ9LAoreyJpd3NlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDIxNjYsICJ1ZHAifSwKK3sicmF3LXNlcmlhbCIsICAgICAgICAge05VTEx9LCAyMTY3LCAidGNwIn0sCit7InJhdy1zZXJpYWwiLCAgICAgICAgIHtOVUxMfSwgMjE2NywgInVkcCJ9LAoreyJlYXN5LXNvZnQtbXV4IiwgICAgICB7TlVMTH0sIDIxNjgsICJ0Y3AifSwKK3siZWFzeS1zb2Z0LW11eCIsICAgICAge05VTEx9LCAyMTY4LCAidWRwIn0sCit7ImJyYWluIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE2OSwgInRjcCJ9LAoreyJicmFpbiIsICAgICAgICAgICAgICB7TlVMTH0sIDIxNjksICJ1ZHAifSwKK3siZXlldHYiLCAgICAgICAgICAgICAge05VTEx9LCAyMTcwLCAidGNwIn0sCit7ImV5ZXR2IiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE3MCwgInVkcCJ9LAoreyJtc2Z3LXN0b3JhZ2UiLCAgICAgICB7TlVMTH0sIDIxNzEsICJ0Y3AifSwKK3sibXNmdy1zdG9yYWdlIiwgICAgICAge05VTEx9LCAyMTcxLCAidWRwIn0sCit7Im1zZnctcy1zdG9yYWdlIiwgICAgIHtOVUxMfSwgMjE3MiwgInRjcCJ9LAoreyJtc2Z3LXMtc3RvcmFnZSIsICAgICB7TlVMTH0sIDIxNzIsICJ1ZHAifSwKK3sibXNmdy1yZXBsaWNhIiwgICAgICAge05VTEx9LCAyMTczLCAidGNwIn0sCit7Im1zZnctcmVwbGljYSIsICAgICAgIHtOVUxMfSwgMjE3MywgInVkcCJ9LAoreyJtc2Z3LWFycmF5IiwgICAgICAgICB7TlVMTH0sIDIxNzQsICJ0Y3AifSwKK3sibXNmdy1hcnJheSIsICAgICAgICAge05VTEx9LCAyMTc0LCAidWRwIn0sCit7ImFpcnN5bmMiLCAgICAgICAgICAgIHtOVUxMfSwgMjE3NSwgInRjcCJ9LAoreyJhaXJzeW5jIiwgICAgICAgICAgICB7TlVMTH0sIDIxNzUsICJ1ZHAifSwKK3sicmFwaSIsICAgICAgICAgICAgICAge05VTEx9LCAyMTc2LCAidGNwIn0sCit7InJhcGkiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjE3NiwgInVkcCJ9LAoreyJxd2F2ZSIsICAgICAgICAgICAgICB7TlVMTH0sIDIxNzcsICJ0Y3AifSwKK3sicXdhdmUiLCAgICAgICAgICAgICAge05VTEx9LCAyMTc3LCAidWRwIn0sCit7ImJpdHNwZWVyIiwgICAgICAgICAgIHtOVUxMfSwgMjE3OCwgInRjcCJ9LAoreyJiaXRzcGVlciIsICAgICAgICAgICB7TlVMTH0sIDIxNzgsICJ1ZHAifSwKK3sidm1yZHAiLCAgICAgICAgICAgICAge05VTEx9LCAyMTc5LCAidGNwIn0sCit7InZtcmRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE3OSwgInVkcCJ9LAoreyJtYy1ndC1zcnYiLCAgICAgICAgICB7TlVMTH0sIDIxODAsICJ0Y3AifSwKK3sibWMtZ3Qtc3J2IiwgICAgICAgICAge05VTEx9LCAyMTgwLCAidWRwIn0sCit7ImVmb3J3YXJkIiwgICAgICAgICAgIHtOVUxMfSwgMjE4MSwgInRjcCJ9LAoreyJlZm9yd2FyZCIsICAgICAgICAgICB7TlVMTH0sIDIxODEsICJ1ZHAifSwKK3siY2duLXN0YXQiLCAgICAgICAgICAge05VTEx9LCAyMTgyLCAidGNwIn0sCit7ImNnbi1zdGF0IiwgICAgICAgICAgIHtOVUxMfSwgMjE4MiwgInVkcCJ9LAoreyJjZ24tY29uZmlnIiwgICAgICAgICB7TlVMTH0sIDIxODMsICJ0Y3AifSwKK3siY2duLWNvbmZpZyIsICAgICAgICAge05VTEx9LCAyMTgzLCAidWRwIn0sCit7Im52ZCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjE4NCwgInRjcCJ9LAoreyJudmQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIxODQsICJ1ZHAifSwKK3sib25iYXNlLWRkcyIsICAgICAgICAge05VTEx9LCAyMTg1LCAidGNwIn0sCit7Im9uYmFzZS1kZHMiLCAgICAgICAgIHtOVUxMfSwgMjE4NSwgInVkcCJ9LAoreyJndGF1YSIsICAgICAgICAgICAgICB7TlVMTH0sIDIxODYsICJ0Y3AifSwKK3siZ3RhdWEiLCAgICAgICAgICAgICAge05VTEx9LCAyMTg2LCAidWRwIn0sCit7InNzbWMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjE4NywgInRjcCJ9LAoreyJzc21kIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIxODcsICJ1ZHAifSwKK3sidGl2b2Nvbm5lY3QiLCAgICAgICAge05VTEx9LCAyMTkwLCAidGNwIn0sCit7InRpdm9jb25uZWN0IiwgICAgICAgIHtOVUxMfSwgMjE5MCwgInVkcCJ9LAoreyJ0dmJ1cyIsICAgICAgICAgICAgICB7TlVMTH0sIDIxOTEsICJ0Y3AifSwKK3sidHZidXMiLCAgICAgICAgICAgICAge05VTEx9LCAyMTkxLCAidWRwIn0sCit7ImFzZGlzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE5MiwgInRjcCJ9LAoreyJhc2RpcyIsICAgICAgICAgICAgICB7TlVMTH0sIDIxOTIsICJ1ZHAifSwKK3siZHJ3Y3MiLCAgICAgICAgICAgICAge05VTEx9LCAyMTkzLCAidGNwIn0sCit7ImRyd2NzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjE5MywgInVkcCJ9LAoreyJtbnAtZXhjaGFuZ2UiLCAgICAgICB7TlVMTH0sIDIxOTcsICJ0Y3AifSwKK3sibW5wLWV4Y2hhbmdlIiwgICAgICAge05VTEx9LCAyMTk3LCAidWRwIn0sCit7Im9uZWhvbWUtcmVtb3RlIiwgICAgIHtOVUxMfSwgMjE5OCwgInRjcCJ9LAoreyJvbmVob21lLXJlbW90ZSIsICAgICB7TlVMTH0sIDIxOTgsICJ1ZHAifSwKK3sib25laG9tZS1oZWxwIiwgICAgICAge05VTEx9LCAyMTk5LCAidGNwIn0sCit7Im9uZWhvbWUtaGVscCIsICAgICAgIHtOVUxMfSwgMjE5OSwgInVkcCJ9LAoreyJpY2kiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIyMDAsICJ0Y3AifSwKK3siaWNpIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMjAwLCAidWRwIn0sCit7ImF0cyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjIwMSwgInRjcCJ9LAoreyJhdHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIyMDEsICJ1ZHAifSwKK3siaW10Yy1tYXAiLCAgICAgICAgICAge05VTEx9LCAyMjAyLCAidGNwIn0sCit7ImltdGMtbWFwIiwgICAgICAgICAgIHtOVUxMfSwgMjIwMiwgInVkcCJ9LAoreyJiMi1ydW50aW1lIiwgICAgICAgICB7TlVMTH0sIDIyMDMsICJ0Y3AifSwKK3siYjItcnVudGltZSIsICAgICAgICAge05VTEx9LCAyMjAzLCAidWRwIn0sCit7ImIyLWxpY2Vuc2UiLCAgICAgICAgIHtOVUxMfSwgMjIwNCwgInRjcCJ9LAoreyJiMi1saWNlbnNlIiwgICAgICAgICB7TlVMTH0sIDIyMDQsICJ1ZHAifSwKK3sianBzIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMjA1LCAidGNwIn0sCit7ImpwcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjIwNSwgInVkcCJ9LAoreyJocG9jYnVzIiwgICAgICAgICAgICB7TlVMTH0sIDIyMDYsICJ0Y3AifSwKK3siaHBvY2J1cyIsICAgICAgICAgICAge05VTEx9LCAyMjA2LCAidWRwIn0sCit7Imhwc3NkIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjIwNywgInRjcCJ9LAoreyJocHNzZCIsICAgICAgICAgICAgICB7TlVMTH0sIDIyMDcsICJ1ZHAifSwKK3siaHBpb2QiLCAgICAgICAgICAgICAge05VTEx9LCAyMjA4LCAidGNwIn0sCit7ImhwaW9kIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjIwOCwgInVkcCJ9LAoreyJyaW1mLXBzIiwgICAgICAgICAgICB7TlVMTH0sIDIyMDksICJ0Y3AifSwKK3sicmltZi1wcyIsICAgICAgICAgICAge05VTEx9LCAyMjA5LCAidWRwIn0sCit7Im5vYWFwb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMjIxMCwgInRjcCJ9LAoreyJub2FhcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDIyMTAsICJ1ZHAifSwKK3siZW13aW4iLCAgICAgICAgICAgICAge05VTEx9LCAyMjExLCAidGNwIn0sCit7ImVtd2luIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjIxMSwgInVkcCJ9LAoreyJsZWVjb3Bvc3NlcnZlciIsICAgICB7TlVMTH0sIDIyMTIsICJ0Y3AifSwKK3sibGVlY29wb3NzZXJ2ZXIiLCAgICAge05VTEx9LCAyMjEyLCAidWRwIn0sCit7ImthbGkiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjIxMywgInRjcCJ9LAoreyJrYWxpIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIyMTMsICJ1ZHAifSwKK3sicnBpIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMjE0LCAidGNwIn0sCit7InJwaSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjIxNCwgInVkcCJ9LAoreyJpcGNvcmUiLCAgICAgICAgICAgICB7TlVMTH0sIDIyMTUsICJ0Y3AifSwKK3siaXBjb3JlIiwgICAgICAgICAgICAge05VTEx9LCAyMjE1LCAidWRwIn0sCit7InZ0dS1jb21tcyIsICAgICAgICAgIHtOVUxMfSwgMjIxNiwgInRjcCJ9LAoreyJ2dHUtY29tbXMiLCAgICAgICAgICB7TlVMTH0sIDIyMTYsICJ1ZHAifSwKK3siZ290b2RldmljZSIsICAgICAgICAge05VTEx9LCAyMjE3LCAidGNwIn0sCit7ImdvdG9kZXZpY2UiLCAgICAgICAgIHtOVUxMfSwgMjIxNywgInVkcCJ9LAoreyJib3VuenphIiwgICAgICAgICAgICB7TlVMTH0sIDIyMTgsICJ0Y3AifSwKK3siYm91bnp6YSIsICAgICAgICAgICAge05VTEx9LCAyMjE4LCAidWRwIn0sCit7Im5ldGlxLW5jYXAiLCAgICAgICAgIHtOVUxMfSwgMjIxOSwgInRjcCJ9LAoreyJuZXRpcS1uY2FwIiwgICAgICAgICB7TlVMTH0sIDIyMTksICJ1ZHAifSwKK3sibmV0aXEiLCAgICAgICAgICAgICAge05VTEx9LCAyMjIwLCAidGNwIn0sCit7Im5ldGlxIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjIyMCwgInVkcCJ9LAoreyJyb2Nrd2VsbC1jc3AxIiwgICAgICB7TlVMTH0sIDIyMjEsICJ0Y3AifSwKK3sicm9ja3dlbGwtY3NwMSIsICAgICAge05VTEx9LCAyMjIxLCAidWRwIn0sCit7IkV0aGVyTmV0L0lQLTEiLCAgICAgIHtOVUxMfSwgMjIyMiwgInRjcCJ9LAoreyJFdGhlck5ldC9JUC0xIiwgICAgICB7TlVMTH0sIDIyMjIsICJ1ZHAifSwKK3sicm9ja3dlbGwtY3NwMiIsICAgICAge05VTEx9LCAyMjIzLCAidGNwIn0sCit7InJvY2t3ZWxsLWNzcDIiLCAgICAgIHtOVUxMfSwgMjIyMywgInVkcCJ9LAoreyJlZmktbWciLCAgICAgICAgICAgICB7TlVMTH0sIDIyMjQsICJ0Y3AifSwKK3siZWZpLW1nIiwgICAgICAgICAgICAge05VTEx9LCAyMjI0LCAidWRwIn0sCit7InJjaXAtaXR1IiwgICAgICAgICAgIHtOVUxMfSwgMjIyNSwgInRjcCJ9LAoreyJyY2lwLWl0dSIsICAgICAgICAgICB7TlVMTH0sIDIyMjUsICJzY3RwIn0sCit7ImRpLWRybSIsICAgICAgICAgICAgIHtOVUxMfSwgMjIyNiwgInRjcCJ9LAoreyJkaS1kcm0iLCAgICAgICAgICAgICB7TlVMTH0sIDIyMjYsICJ1ZHAifSwKK3siZGktbXNnIiwgICAgICAgICAgICAge05VTEx9LCAyMjI3LCAidGNwIn0sCit7ImRpLW1zZyIsICAgICAgICAgICAgIHtOVUxMfSwgMjIyNywgInVkcCJ9LAoreyJlaG9tZS1tcyIsICAgICAgICAgICB7TlVMTH0sIDIyMjgsICJ0Y3AifSwKK3siZWhvbWUtbXMiLCAgICAgICAgICAge05VTEx9LCAyMjI4LCAidWRwIn0sCit7ImRhdGFsZW5zIiwgICAgICAgICAgIHtOVUxMfSwgMjIyOSwgInRjcCJ9LAoreyJkYXRhbGVucyIsICAgICAgICAgICB7TlVMTH0sIDIyMjksICJ1ZHAifSwKK3sicXVldWVhZG0iLCAgICAgICAgICAge05VTEx9LCAyMjMwLCAidGNwIn0sCit7InF1ZXVlYWRtIiwgICAgICAgICAgIHtOVUxMfSwgMjIzMCwgInVkcCJ9LAoreyJ3aW1heGFzbmNwIiwgICAgICAgICB7TlVMTH0sIDIyMzEsICJ0Y3AifSwKK3sid2ltYXhhc25jcCIsICAgICAgICAge05VTEx9LCAyMjMxLCAidWRwIn0sCit7Iml2cy12aWRlbyIsICAgICAgICAgIHtOVUxMfSwgMjIzMiwgInRjcCJ9LAoreyJpdnMtdmlkZW8iLCAgICAgICAgICB7TlVMTH0sIDIyMzIsICJ1ZHAifSwKK3siaW5mb2NyeXB0IiwgICAgICAgICAge05VTEx9LCAyMjMzLCAidGNwIn0sCit7ImluZm9jcnlwdCIsICAgICAgICAgIHtOVUxMfSwgMjIzMywgInVkcCJ9LAoreyJkaXJlY3RwbGF5IiwgICAgICAgICB7TlVMTH0sIDIyMzQsICJ0Y3AifSwKK3siZGlyZWN0cGxheSIsICAgICAgICAge05VTEx9LCAyMjM0LCAidWRwIn0sCit7InNlcmNvbW0td2xpbmsiLCAgICAgIHtOVUxMfSwgMjIzNSwgInRjcCJ9LAoreyJzZXJjb21tLXdsaW5rIiwgICAgICB7TlVMTH0sIDIyMzUsICJ1ZHAifSwKK3sibmFuaSIsICAgICAgICAgICAgICAge05VTEx9LCAyMjM2LCAidGNwIn0sCit7Im5hbmkiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjIzNiwgInVkcCJ9LAoreyJvcHRlY2gtcG9ydDEtbG0iLCAgICB7TlVMTH0sIDIyMzcsICJ0Y3AifSwKK3sib3B0ZWNoLXBvcnQxLWxtIiwgICAge05VTEx9LCAyMjM3LCAidWRwIn0sCit7ImF2aXZhLXNuYSIsICAgICAgICAgIHtOVUxMfSwgMjIzOCwgInRjcCJ9LAoreyJhdml2YS1zbmEiLCAgICAgICAgICB7TlVMTH0sIDIyMzgsICJ1ZHAifSwKK3siaW1hZ2VxdWVyeSIsICAgICAgICAge05VTEx9LCAyMjM5LCAidGNwIn0sCit7ImltYWdlcXVlcnkiLCAgICAgICAgIHtOVUxMfSwgMjIzOSwgInVkcCJ9LAoreyJyZWNpcGUiLCAgICAgICAgICAgICB7TlVMTH0sIDIyNDAsICJ0Y3AifSwKK3sicmVjaXBlIiwgICAgICAgICAgICAge05VTEx9LCAyMjQwLCAidWRwIn0sCit7Iml2c2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjI0MSwgInRjcCJ9LAoreyJpdnNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIyNDEsICJ1ZHAifSwKK3siZm9saW9jb3JwIiwgICAgICAgICAge05VTEx9LCAyMjQyLCAidGNwIn0sCit7ImZvbGlvY29ycCIsICAgICAgICAgIHtOVUxMfSwgMjI0MiwgInVkcCJ9LAoreyJtYWdpY29tIiwgICAgICAgICAgICB7TlVMTH0sIDIyNDMsICJ0Y3AifSwKK3sibWFnaWNvbSIsICAgICAgICAgICAge05VTEx9LCAyMjQzLCAidWRwIn0sCit7Im5tc3NlcnZlciIsICAgICAgICAgIHtOVUxMfSwgMjI0NCwgInRjcCJ9LAoreyJubXNzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDIyNDQsICJ1ZHAifSwKK3siaGFvIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMjQ1LCAidGNwIn0sCit7ImhhbyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjI0NSwgInVkcCJ9LAoreyJwYy1tdGEtYWRkcm1hcCIsICAgICB7TlVMTH0sIDIyNDYsICJ0Y3AifSwKK3sicGMtbXRhLWFkZHJtYXAiLCAgICAge05VTEx9LCAyMjQ2LCAidWRwIn0sCit7ImFudGlkb3RlbWdyc3ZyIiwgICAgIHtOVUxMfSwgMjI0NywgInRjcCJ9LAoreyJhbnRpZG90ZW1ncnN2ciIsICAgICB7TlVMTH0sIDIyNDcsICJ1ZHAifSwKK3sidW1zIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMjQ4LCAidGNwIn0sCit7InVtcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjI0OCwgInVkcCJ9LAoreyJyZm1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIyNDksICJ0Y3AifSwKK3sicmZtcCIsICAgICAgICAgICAgICAge05VTEx9LCAyMjQ5LCAidWRwIn0sCit7InJlbW90ZS1jb2xsYWIiLCAgICAgIHtOVUxMfSwgMjI1MCwgInRjcCJ9LAoreyJyZW1vdGUtY29sbGFiIiwgICAgICB7TlVMTH0sIDIyNTAsICJ1ZHAifSwKK3siZGlmLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAyMjUxLCAidGNwIn0sCit7ImRpZi1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMjI1MSwgInVkcCJ9LAoreyJuamVuZXQtc3NsIiwgICAgICAgICB7TlVMTH0sIDIyNTIsICJ0Y3AifSwKK3sibmplbmV0LXNzbCIsICAgICAgICAge05VTEx9LCAyMjUyLCAidWRwIn0sCit7ImR0di1jaGFuLXJlcSIsICAgICAgIHtOVUxMfSwgMjI1MywgInRjcCJ9LAoreyJkdHYtY2hhbi1yZXEiLCAgICAgICB7TlVMTH0sIDIyNTMsICJ1ZHAifSwKK3sic2Vpc3BvYyIsICAgICAgICAgICAge05VTEx9LCAyMjU0LCAidGNwIn0sCit7InNlaXNwb2MiLCAgICAgICAgICAgIHtOVUxMfSwgMjI1NCwgInVkcCJ9LAoreyJ2cnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIyNTUsICJ0Y3AifSwKK3sidnJ0cCIsICAgICAgICAgICAgICAge05VTEx9LCAyMjU1LCAidWRwIn0sCit7InBjYy1tZnAiLCAgICAgICAgICAgIHtOVUxMfSwgMjI1NiwgInRjcCJ9LAoreyJwY2MtbWZwIiwgICAgICAgICAgICB7TlVMTH0sIDIyNTYsICJ1ZHAifSwKK3sic2ltcGxlLXR4LXJ4IiwgICAgICAge05VTEx9LCAyMjU3LCAidGNwIn0sCit7InNpbXBsZS10eC1yeCIsICAgICAgIHtOVUxMfSwgMjI1NywgInVkcCJ9LAoreyJyY3RzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIyNTgsICJ0Y3AifSwKK3sicmN0cyIsICAgICAgICAgICAgICAge05VTEx9LCAyMjU4LCAidWRwIn0sCit7ImFjZC1wbSIsICAgICAgICAgICAgIHtOVUxMfSwgMjI1OSwgInRjcCJ9LAoreyJhY2QtcG0iLCAgICAgICAgICAgICB7TlVMTH0sIDIyNTksICJ1ZHAifSwKK3siYXBjLTIyNjAiLCAgICAgICAgICAge05VTEx9LCAyMjYwLCAidGNwIn0sCit7ImFwYy0yMjYwIiwgICAgICAgICAgIHtOVUxMfSwgMjI2MCwgInVkcCJ9LAoreyJjb21vdGlvbm1hc3RlciIsICAgICB7TlVMTH0sIDIyNjEsICJ0Y3AifSwKK3siY29tb3Rpb25tYXN0ZXIiLCAgICAge05VTEx9LCAyMjYxLCAidWRwIn0sCit7ImNvbW90aW9uYmFjayIsICAgICAgIHtOVUxMfSwgMjI2MiwgInRjcCJ9LAoreyJjb21vdGlvbmJhY2siLCAgICAgICB7TlVMTH0sIDIyNjIsICJ1ZHAifSwKK3siZWN3Y2ZnIiwgICAgICAgICAgICAge05VTEx9LCAyMjYzLCAidGNwIn0sCit7ImVjd2NmZyIsICAgICAgICAgICAgIHtOVUxMfSwgMjI2MywgInVkcCJ9LAoreyJhcHg1MDBhcGktMSIsICAgICAgICB7TlVMTH0sIDIyNjQsICJ0Y3AifSwKK3siYXB4NTAwYXBpLTEiLCAgICAgICAge05VTEx9LCAyMjY0LCAidWRwIn0sCit7ImFweDUwMGFwaS0yIiwgICAgICAgIHtOVUxMfSwgMjI2NSwgInRjcCJ9LAoreyJhcHg1MDBhcGktMiIsICAgICAgICB7TlVMTH0sIDIyNjUsICJ1ZHAifSwKK3sibWZzZXJ2ZXIiLCAgICAgICAgICAge05VTEx9LCAyMjY2LCAidGNwIn0sCit7Im1mc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMjI2NiwgInVkcCJ9LAoreyJvbnRvYnJva2VyIiwgICAgICAgICB7TlVMTH0sIDIyNjcsICJ0Y3AifSwKK3sib250b2Jyb2tlciIsICAgICAgICAge05VTEx9LCAyMjY3LCAidWRwIn0sCit7ImFtdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjI2OCwgInRjcCJ9LAoreyJhbXQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIyNjgsICJ1ZHAifSwKK3sibWlrZXkiLCAgICAgICAgICAgICAge05VTEx9LCAyMjY5LCAidGNwIn0sCit7Im1pa2V5IiwgICAgICAgICAgICAgIHtOVUxMfSwgMjI2OSwgInVkcCJ9LAoreyJzdGFyc2Nob29sIiwgICAgICAgICB7TlVMTH0sIDIyNzAsICJ0Y3AifSwKK3sic3RhcnNjaG9vbCIsICAgICAgICAge05VTEx9LCAyMjcwLCAidWRwIn0sCit7Im1tY2FscyIsICAgICAgICAgICAgIHtOVUxMfSwgMjI3MSwgInRjcCJ9LAoreyJtbWNhbHMiLCAgICAgICAgICAgICB7TlVMTH0sIDIyNzEsICJ1ZHAifSwKK3sibW1jYWwiLCAgICAgICAgICAgICAge05VTEx9LCAyMjcyLCAidGNwIn0sCit7Im1tY2FsIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjI3MiwgInVkcCJ9LAoreyJteXNxbC1pbSIsICAgICAgICAgICB7TlVMTH0sIDIyNzMsICJ0Y3AifSwKK3sibXlzcWwtaW0iLCAgICAgICAgICAge05VTEx9LCAyMjczLCAidWRwIn0sCit7InBjdHR1bm5lbGwiLCAgICAgICAgIHtOVUxMfSwgMjI3NCwgInRjcCJ9LAoreyJwY3R0dW5uZWxsIiwgICAgICAgICB7TlVMTH0sIDIyNzQsICJ1ZHAifSwKK3siaWJyaWRnZS1kYXRhIiwgICAgICAge05VTEx9LCAyMjc1LCAidGNwIn0sCit7ImlicmlkZ2UtZGF0YSIsICAgICAgIHtOVUxMfSwgMjI3NSwgInVkcCJ9LAoreyJpYnJpZGdlLW1nbXQiLCAgICAgICB7TlVMTH0sIDIyNzYsICJ0Y3AifSwKK3siaWJyaWRnZS1tZ210IiwgICAgICAge05VTEx9LCAyMjc2LCAidWRwIn0sCit7ImJsdWVjdHJscHJveHkiLCAgICAgIHtOVUxMfSwgMjI3NywgInRjcCJ9LAoreyJibHVlY3RybHByb3h5IiwgICAgICB7TlVMTH0sIDIyNzcsICJ1ZHAifSwKK3siczNkYiIsICAgICAgICAgICAgICAge05VTEx9LCAyMjc4LCAidGNwIn0sCit7InMzZGIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjI3OCwgInVkcCJ9LAoreyJ4bXF1ZXJ5IiwgICAgICAgICAgICB7TlVMTH0sIDIyNzksICJ0Y3AifSwKK3sieG1xdWVyeSIsICAgICAgICAgICAge05VTEx9LCAyMjc5LCAidWRwIn0sCit7ImxudnBvbGxlciIsICAgICAgICAgIHtOVUxMfSwgMjI4MCwgInRjcCJ9LAoreyJsbnZwb2xsZXIiLCAgICAgICAgICB7TlVMTH0sIDIyODAsICJ1ZHAifSwKK3sibG52Y29uc29sZSIsICAgICAgICAge05VTEx9LCAyMjgxLCAidGNwIn0sCit7ImxudmNvbnNvbGUiLCAgICAgICAgIHtOVUxMfSwgMjI4MSwgInVkcCJ9LAoreyJsbnZhbGFybSIsICAgICAgICAgICB7TlVMTH0sIDIyODIsICJ0Y3AifSwKK3sibG52YWxhcm0iLCAgICAgICAgICAge05VTEx9LCAyMjgyLCAidWRwIn0sCit7ImxudnN0YXR1cyIsICAgICAgICAgIHtOVUxMfSwgMjI4MywgInRjcCJ9LAoreyJsbnZzdGF0dXMiLCAgICAgICAgICB7TlVMTH0sIDIyODMsICJ1ZHAifSwKK3sibG52bWFwcyIsICAgICAgICAgICAge05VTEx9LCAyMjg0LCAidGNwIn0sCit7Imxudm1hcHMiLCAgICAgICAgICAgIHtOVUxMfSwgMjI4NCwgInVkcCJ9LAoreyJsbnZtYWlsbW9uIiwgICAgICAgICB7TlVMTH0sIDIyODUsICJ0Y3AifSwKK3sibG52bWFpbG1vbiIsICAgICAgICAge05VTEx9LCAyMjg1LCAidWRwIn0sCit7Im5hcy1tZXRlcmluZyIsICAgICAgIHtOVUxMfSwgMjI4NiwgInRjcCJ9LAoreyJuYXMtbWV0ZXJpbmciLCAgICAgICB7TlVMTH0sIDIyODYsICJ1ZHAifSwKK3siZG5hIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMjg3LCAidGNwIn0sCit7ImRuYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjI4NywgInVkcCJ9LAoreyJuZXRtbCIsICAgICAgICAgICAgICB7TlVMTH0sIDIyODgsICJ0Y3AifSwKK3sibmV0bWwiLCAgICAgICAgICAgICAge05VTEx9LCAyMjg4LCAidWRwIn0sCit7ImRpY3QtbG9va3VwIiwgICAgICAgIHtOVUxMfSwgMjI4OSwgInRjcCJ9LAoreyJkaWN0LWxvb2t1cCIsICAgICAgICB7TlVMTH0sIDIyODksICJ1ZHAifSwKK3sic29udXMtbG9nZ2luZyIsICAgICAge05VTEx9LCAyMjkwLCAidGNwIn0sCit7InNvbnVzLWxvZ2dpbmciLCAgICAgIHtOVUxMfSwgMjI5MCwgInVkcCJ9LAoreyJlYXBzcCIsICAgICAgICAgICAgICB7TlVMTH0sIDIyOTEsICJ0Y3AifSwKK3siZWFwc3AiLCAgICAgICAgICAgICAge05VTEx9LCAyMjkxLCAidWRwIn0sCit7Im1pYi1zdHJlYW1pbmciLCAgICAgIHtOVUxMfSwgMjI5MiwgInRjcCJ9LAoreyJtaWItc3RyZWFtaW5nIiwgICAgICB7TlVMTH0sIDIyOTIsICJ1ZHAifSwKK3sibnBkYmdtbmdyIiwgICAgICAgICAge05VTEx9LCAyMjkzLCAidGNwIn0sCit7Im5wZGJnbW5nciIsICAgICAgICAgIHtOVUxMfSwgMjI5MywgInVkcCJ9LAoreyJrb25zaHVzLWxtIiwgICAgICAgICB7TlVMTH0sIDIyOTQsICJ0Y3AifSwKK3sia29uc2h1cy1sbSIsICAgICAgICAge05VTEx9LCAyMjk0LCAidWRwIn0sCit7ImFkdmFudC1sbSIsICAgICAgICAgIHtOVUxMfSwgMjI5NSwgInRjcCJ9LAoreyJhZHZhbnQtbG0iLCAgICAgICAgICB7TlVMTH0sIDIyOTUsICJ1ZHAifSwKK3sidGhldGEtbG0iLCAgICAgICAgICAge05VTEx9LCAyMjk2LCAidGNwIn0sCit7InRoZXRhLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMjI5NiwgInVkcCJ9LAoreyJkMmstZGF0YW1vdmVyMSIsICAgICB7TlVMTH0sIDIyOTcsICJ0Y3AifSwKK3siZDJrLWRhdGFtb3ZlcjEiLCAgICAge05VTEx9LCAyMjk3LCAidWRwIn0sCit7ImQyay1kYXRhbW92ZXIyIiwgICAgIHtOVUxMfSwgMjI5OCwgInRjcCJ9LAoreyJkMmstZGF0YW1vdmVyMiIsICAgICB7TlVMTH0sIDIyOTgsICJ1ZHAifSwKK3sicGMtdGVsZWNvbW11dGUiLCAgICAge05VTEx9LCAyMjk5LCAidGNwIn0sCit7InBjLXRlbGVjb21tdXRlIiwgICAgIHtOVUxMfSwgMjI5OSwgInVkcCJ9LAoreyJjdm1tb24iLCAgICAgICAgICAgICB7TlVMTH0sIDIzMDAsICJ0Y3AifSwKK3siY3ZtbW9uIiwgICAgICAgICAgICAge05VTEx9LCAyMzAwLCAidWRwIn0sCit7ImNwcS13YmVtIiwgICAgICAgICAgIHtOVUxMfSwgMjMwMSwgInRjcCJ9LAoreyJjcHEtd2JlbSIsICAgICAgICAgICB7TlVMTH0sIDIzMDEsICJ1ZHAifSwKK3siYmluZGVyeXN1cHBvcnQiLCAgICAge05VTEx9LCAyMzAyLCAidGNwIn0sCit7ImJpbmRlcnlzdXBwb3J0IiwgICAgIHtOVUxMfSwgMjMwMiwgInVkcCJ9LAoreyJwcm94eS1nYXRld2F5IiwgICAgICB7TlVMTH0sIDIzMDMsICJ0Y3AifSwKK3sicHJveHktZ2F0ZXdheSIsICAgICAge05VTEx9LCAyMzAzLCAidWRwIn0sCit7ImF0dGFjaG1hdGUtdXRzIiwgICAgIHtOVUxMfSwgMjMwNCwgInRjcCJ9LAoreyJhdHRhY2htYXRlLXV0cyIsICAgICB7TlVMTH0sIDIzMDQsICJ1ZHAifSwKK3sibXQtc2NhbGVzZXJ2ZXIiLCAgICAge05VTEx9LCAyMzA1LCAidGNwIn0sCit7Im10LXNjYWxlc2VydmVyIiwgICAgIHtOVUxMfSwgMjMwNSwgInVkcCJ9LAoreyJ0YXBwaS1ib3huZXQiLCAgICAgICB7TlVMTH0sIDIzMDYsICJ0Y3AifSwKK3sidGFwcGktYm94bmV0IiwgICAgICAge05VTEx9LCAyMzA2LCAidWRwIn0sCit7InBlaGVscCIsICAgICAgICAgICAgIHtOVUxMfSwgMjMwNywgInRjcCJ9LAoreyJwZWhlbHAiLCAgICAgICAgICAgICB7TlVMTH0sIDIzMDcsICJ1ZHAifSwKK3sic2RoZWxwIiwgICAgICAgICAgICAge05VTEx9LCAyMzA4LCAidGNwIn0sCit7InNkaGVscCIsICAgICAgICAgICAgIHtOVUxMfSwgMjMwOCwgInVkcCJ9LAoreyJzZHNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDIzMDksICJ0Y3AifSwKK3sic2RzZXJ2ZXIiLCAgICAgICAgICAge05VTEx9LCAyMzA5LCAidWRwIn0sCit7InNkY2xpZW50IiwgICAgICAgICAgIHtOVUxMfSwgMjMxMCwgInRjcCJ9LAoreyJzZGNsaWVudCIsICAgICAgICAgICB7TlVMTH0sIDIzMTAsICJ1ZHAifSwKK3sibWVzc2FnZXNlcnZpY2UiLCAgICAge05VTEx9LCAyMzExLCAidGNwIn0sCit7Im1lc3NhZ2VzZXJ2aWNlIiwgICAgIHtOVUxMfSwgMjMxMSwgInVkcCJ9LAoreyJ3YW5zY2FsZXIiLCAgICAgICAgICB7TlVMTH0sIDIzMTIsICJ0Y3AifSwKK3sid2Fuc2NhbGVyIiwgICAgICAgICAge05VTEx9LCAyMzEyLCAidWRwIn0sCit7ImlhcHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjMxMywgInRjcCJ9LAoreyJpYXBwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIzMTMsICJ1ZHAifSwKK3siY3Itd2Vic3lzdGVtcyIsICAgICAge05VTEx9LCAyMzE0LCAidGNwIn0sCit7ImNyLXdlYnN5c3RlbXMiLCAgICAgIHtOVUxMfSwgMjMxNCwgInVkcCJ9LAoreyJwcmVjaXNlLXNmdCIsICAgICAgICB7TlVMTH0sIDIzMTUsICJ0Y3AifSwKK3sicHJlY2lzZS1zZnQiLCAgICAgICAge05VTEx9LCAyMzE1LCAidWRwIn0sCit7InNlbnQtbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMjMxNiwgInRjcCJ9LAoreyJzZW50LWxtIiwgICAgICAgICAgICB7TlVMTH0sIDIzMTYsICJ1ZHAifSwKK3siYXR0YWNobWF0ZS1nMzIiLCAgICAge05VTEx9LCAyMzE3LCAidGNwIn0sCit7ImF0dGFjaG1hdGUtZzMyIiwgICAgIHtOVUxMfSwgMjMxNywgInVkcCJ9LAoreyJjYWRlbmNlY29udHJvbCIsICAgICB7TlVMTH0sIDIzMTgsICJ0Y3AifSwKK3siY2FkZW5jZWNvbnRyb2wiLCAgICAge05VTEx9LCAyMzE4LCAidWRwIn0sCit7ImluZm9saWJyaWEiLCAgICAgICAgIHtOVUxMfSwgMjMxOSwgInRjcCJ9LAoreyJpbmZvbGlicmlhIiwgICAgICAgICB7TlVMTH0sIDIzMTksICJ1ZHAifSwKK3sic2llYmVsLW5zIiwgICAgICAgICAge05VTEx9LCAyMzIwLCAidGNwIn0sCit7InNpZWJlbC1ucyIsICAgICAgICAgIHtOVUxMfSwgMjMyMCwgInVkcCJ9LAoreyJyZGxhcCIsICAgICAgICAgICAgICB7TlVMTH0sIDIzMjEsICJ0Y3AifSwKK3sicmRsYXAiLCAgICAgICAgICAgICAge05VTEx9LCAyMzIxLCAidWRwIn0sCit7Im9mc2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjMyMiwgInRjcCJ9LAoreyJvZnNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIzMjIsICJ1ZHAifSwKK3siM2QtbmZzZCIsICAgICAgICAgICAge05VTEx9LCAyMzIzLCAidGNwIn0sCit7IjNkLW5mc2QiLCAgICAgICAgICAgIHtOVUxMfSwgMjMyMywgInVkcCJ9LAoreyJjb3Ntb2NhbGwiLCAgICAgICAgICB7TlVMTH0sIDIzMjQsICJ0Y3AifSwKK3siY29zbW9jYWxsIiwgICAgICAgICAge05VTEx9LCAyMzI0LCAidWRwIn0sCit7ImFuc3lzbGkiLCAgICAgICAgICAgIHtOVUxMfSwgMjMyNSwgInRjcCJ9LAoreyJhbnN5c2xpIiwgICAgICAgICAgICB7TlVMTH0sIDIzMjUsICJ1ZHAifSwKK3siaWRjcCIsICAgICAgICAgICAgICAge05VTEx9LCAyMzI2LCAidGNwIn0sCit7ImlkY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjMyNiwgInVkcCJ9LAoreyJ4aW5nY3NtIiwgICAgICAgICAgICB7TlVMTH0sIDIzMjcsICJ0Y3AifSwKK3sieGluZ2NzbSIsICAgICAgICAgICAge05VTEx9LCAyMzI3LCAidWRwIn0sCit7Im5ldHJpeC1zZnRtIiwgICAgICAgIHtOVUxMfSwgMjMyOCwgInRjcCJ9LAoreyJuZXRyaXgtc2Z0bSIsICAgICAgICB7TlVMTH0sIDIzMjgsICJ1ZHAifSwKK3sibnZkIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMzI5LCAidGNwIn0sCit7Im52ZCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjMyOSwgInVkcCJ9LAoreyJ0c2NjaGF0IiwgICAgICAgICAgICB7TlVMTH0sIDIzMzAsICJ0Y3AifSwKK3sidHNjY2hhdCIsICAgICAgICAgICAge05VTEx9LCAyMzMwLCAidWRwIn0sCit7ImFnZW50dmlldyIsICAgICAgICAgIHtOVUxMfSwgMjMzMSwgInRjcCJ9LAoreyJhZ2VudHZpZXciLCAgICAgICAgICB7TlVMTH0sIDIzMzEsICJ1ZHAifSwKK3sicmNjLWhvc3QiLCAgICAgICAgICAge05VTEx9LCAyMzMyLCAidGNwIn0sCit7InJjYy1ob3N0IiwgICAgICAgICAgIHtOVUxMfSwgMjMzMiwgInVkcCJ9LAoreyJzbmFwcCIsICAgICAgICAgICAgICB7TlVMTH0sIDIzMzMsICJ0Y3AifSwKK3sic25hcHAiLCAgICAgICAgICAgICAge05VTEx9LCAyMzMzLCAidWRwIn0sCit7ImFjZS1jbGllbnQiLCAgICAgICAgIHtOVUxMfSwgMjMzNCwgInRjcCJ9LAoreyJhY2UtY2xpZW50IiwgICAgICAgICB7TlVMTH0sIDIzMzQsICJ1ZHAifSwKK3siYWNlLXByb3h5IiwgICAgICAgICAge05VTEx9LCAyMzM1LCAidGNwIn0sCit7ImFjZS1wcm94eSIsICAgICAgICAgIHtOVUxMfSwgMjMzNSwgInVkcCJ9LAoreyJhcHBsZXVnY29udHJvbCIsICAgICB7TlVMTH0sIDIzMzYsICJ0Y3AifSwKK3siYXBwbGV1Z2NvbnRyb2wiLCAgICAge05VTEx9LCAyMzM2LCAidWRwIn0sCit7ImlkZWVzcnYiLCAgICAgICAgICAgIHtOVUxMfSwgMjMzNywgInRjcCJ9LAoreyJpZGVlc3J2IiwgICAgICAgICAgICB7TlVMTH0sIDIzMzcsICJ1ZHAifSwKK3sibm9ydG9uLWxhbWJlcnQiLCAgICAge05VTEx9LCAyMzM4LCAidGNwIn0sCit7Im5vcnRvbi1sYW1iZXJ0IiwgICAgIHtOVUxMfSwgMjMzOCwgInVkcCJ9LAoreyIzY29tLXdlYnZpZXciLCAgICAgICB7TlVMTH0sIDIzMzksICJ0Y3AifSwKK3siM2NvbS13ZWJ2aWV3IiwgICAgICAge05VTEx9LCAyMzM5LCAidWRwIn0sCit7Indyc19yZWdpc3RyeSIsICAgICAgIHtOVUxMfSwgMjM0MCwgInRjcCJ9LAoreyJ3cnNfcmVnaXN0cnkiLCAgICAgICB7TlVMTH0sIDIzNDAsICJ1ZHAifSwKK3sieGlvc3RhdHVzIiwgICAgICAgICAge05VTEx9LCAyMzQxLCAidGNwIn0sCit7Inhpb3N0YXR1cyIsICAgICAgICAgIHtOVUxMfSwgMjM0MSwgInVkcCJ9LAoreyJtYW5hZ2UtZXhlYyIsICAgICAgICB7TlVMTH0sIDIzNDIsICJ0Y3AifSwKK3sibWFuYWdlLWV4ZWMiLCAgICAgICAge05VTEx9LCAyMzQyLCAidWRwIn0sCit7Im5hdGktbG9nb3MiLCAgICAgICAgIHtOVUxMfSwgMjM0MywgInRjcCJ9LAoreyJuYXRpLWxvZ29zIiwgICAgICAgICB7TlVMTH0sIDIzNDMsICJ1ZHAifSwKK3siZmNtc3lzIiwgICAgICAgICAgICAge05VTEx9LCAyMzQ0LCAidGNwIn0sCit7ImZjbXN5cyIsICAgICAgICAgICAgIHtOVUxMfSwgMjM0NCwgInVkcCJ9LAoreyJkYm0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIzNDUsICJ0Y3AifSwKK3siZGJtIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMzQ1LCAidWRwIn0sCit7InJlZHN0b3JtX2pvaW4iLCAgICAgIHtOVUxMfSwgMjM0NiwgInRjcCJ9LAoreyJyZWRzdG9ybV9qb2luIiwgICAgICB7TlVMTH0sIDIzNDYsICJ1ZHAifSwKK3sicmVkc3Rvcm1fZmluZCIsICAgICAge05VTEx9LCAyMzQ3LCAidGNwIn0sCit7InJlZHN0b3JtX2ZpbmQiLCAgICAgIHtOVUxMfSwgMjM0NywgInVkcCJ9LAoreyJyZWRzdG9ybV9pbmZvIiwgICAgICB7TlVMTH0sIDIzNDgsICJ0Y3AifSwKK3sicmVkc3Rvcm1faW5mbyIsICAgICAge05VTEx9LCAyMzQ4LCAidWRwIn0sCit7InJlZHN0b3JtX2RpYWciLCAgICAgIHtOVUxMfSwgMjM0OSwgInRjcCJ9LAoreyJyZWRzdG9ybV9kaWFnIiwgICAgICB7TlVMTH0sIDIzNDksICJ1ZHAifSwKK3sicHNic2VydmVyIiwgICAgICAgICAge05VTEx9LCAyMzUwLCAidGNwIn0sCit7InBzYnNlcnZlciIsICAgICAgICAgIHtOVUxMfSwgMjM1MCwgInVkcCJ9LAoreyJwc3JzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDIzNTEsICJ0Y3AifSwKK3sicHNyc2VydmVyIiwgICAgICAgICAge05VTEx9LCAyMzUxLCAidWRwIn0sCit7InBzbHNlcnZlciIsICAgICAgICAgIHtOVUxMfSwgMjM1MiwgInRjcCJ9LAoreyJwc2xzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDIzNTIsICJ1ZHAifSwKK3sicHNwc2VydmVyIiwgICAgICAgICAge05VTEx9LCAyMzUzLCAidGNwIn0sCit7InBzcHNlcnZlciIsICAgICAgICAgIHtOVUxMfSwgMjM1MywgInVkcCJ9LAoreyJwc3Byc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDIzNTQsICJ0Y3AifSwKK3sicHNwcnNlcnZlciIsICAgICAgICAge05VTEx9LCAyMzU0LCAidWRwIn0sCit7InBzZGJzZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMjM1NSwgInRjcCJ9LAoreyJwc2Ric2VydmVyIiwgICAgICAgICB7TlVMTH0sIDIzNTUsICJ1ZHAifSwKK3siZ3h0ZWxtZCIsICAgICAgICAgICAge05VTEx9LCAyMzU2LCAidGNwIn0sCit7Imd4dGVsbWQiLCAgICAgICAgICAgIHtOVUxMfSwgMjM1NiwgInVkcCJ9LAoreyJ1bmlodWItc2VydmVyIiwgICAgICB7TlVMTH0sIDIzNTcsICJ0Y3AifSwKK3sidW5paHViLXNlcnZlciIsICAgICAge05VTEx9LCAyMzU3LCAidWRwIn0sCit7ImZ1dHJpeCIsICAgICAgICAgICAgIHtOVUxMfSwgMjM1OCwgInRjcCJ9LAoreyJmdXRyaXgiLCAgICAgICAgICAgICB7TlVMTH0sIDIzNTgsICJ1ZHAifSwKK3siZmx1a2VzZXJ2ZXIiLCAgICAgICAge05VTEx9LCAyMzU5LCAidGNwIn0sCit7ImZsdWtlc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMjM1OSwgInVkcCJ9LAoreyJuZXhzdG9yaW5kbHRkIiwgICAgICB7TlVMTH0sIDIzNjAsICJ0Y3AifSwKK3sibmV4c3RvcmluZGx0ZCIsICAgICAge05VTEx9LCAyMzYwLCAidWRwIn0sCit7InRsMSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjM2MSwgInRjcCJ9LAoreyJ0bDEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIzNjEsICJ1ZHAifSwKK3siZGlnaW1hbiIsICAgICAgICAgICAge05VTEx9LCAyMzYyLCAidGNwIn0sCit7ImRpZ2ltYW4iLCAgICAgICAgICAgIHtOVUxMfSwgMjM2MiwgInVkcCJ9LAoreyJtZWRpYWNudHJsbmZzZCIsICAgICB7TlVMTH0sIDIzNjMsICJ0Y3AifSwKK3sibWVkaWFjbnRybG5mc2QiLCAgICAge05VTEx9LCAyMzYzLCAidWRwIn0sCit7Im9pLTIwMDAiLCAgICAgICAgICAgIHtOVUxMfSwgMjM2NCwgInRjcCJ9LAoreyJvaS0yMDAwIiwgICAgICAgICAgICB7TlVMTH0sIDIzNjQsICJ1ZHAifSwKK3siZGJyZWYiLCAgICAgICAgICAgICAge05VTEx9LCAyMzY1LCAidGNwIn0sCit7ImRicmVmIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjM2NSwgInVkcCJ9LAoreyJxaXAtbG9naW4iLCAgICAgICAgICB7TlVMTH0sIDIzNjYsICJ0Y3AifSwKK3sicWlwLWxvZ2luIiwgICAgICAgICAge05VTEx9LCAyMzY2LCAidWRwIn0sCit7InNlcnZpY2UtY3RybCIsICAgICAgIHtOVUxMfSwgMjM2NywgInRjcCJ9LAoreyJzZXJ2aWNlLWN0cmwiLCAgICAgICB7TlVMTH0sIDIzNjcsICJ1ZHAifSwKK3sib3BlbnRhYmxlIiwgICAgICAgICAge05VTEx9LCAyMzY4LCAidGNwIn0sCit7Im9wZW50YWJsZSIsICAgICAgICAgIHtOVUxMfSwgMjM2OCwgInVkcCJ9LAoreyJsMy1oYm1vbiIsICAgICAgICAgICB7TlVMTH0sIDIzNzAsICJ0Y3AifSwKK3sibDMtaGJtb24iLCAgICAgICAgICAge05VTEx9LCAyMzcwLCAidWRwIn0sCit7Indvcmxkd2lyZSIsICAgICAgICAgIHtOVUxMfSwgMjM3MSwgInRjcCJ9LAoreyJ3b3JsZHdpcmUiLCAgICAgICAgICB7TlVMTH0sIDIzNzEsICJ1ZHAifSwKK3sibGFubWVzc2VuZ2VyIiwgICAgICAge05VTEx9LCAyMzcyLCAidGNwIn0sCit7Imxhbm1lc3NlbmdlciIsICAgICAgIHtOVUxMfSwgMjM3MiwgInVkcCJ9LAoreyJyZW1vZ3JhcGhsbSIsICAgICAgICB7TlVMTH0sIDIzNzMsICJ0Y3AifSwKK3siaHlkcmEiLCAgICAgICAgICAgICAge05VTEx9LCAyMzc0LCAidGNwIn0sCit7ImNvbXBhcS1odHRwcyIsICAgICAgIHtOVUxMfSwgMjM4MSwgInRjcCJ9LAoreyJjb21wYXEtaHR0cHMiLCAgICAgICB7TlVMTH0sIDIzODEsICJ1ZHAifSwKK3sibXMtb2xhcDMiLCAgICAgICAgICAge05VTEx9LCAyMzgyLCAidGNwIn0sCit7Im1zLW9sYXAzIiwgICAgICAgICAgIHtOVUxMfSwgMjM4MiwgInVkcCJ9LAoreyJtcy1vbGFwNCIsICAgICAgICAgICB7TlVMTH0sIDIzODMsICJ0Y3AifSwKK3sibXMtb2xhcDQiLCAgICAgICAgICAge05VTEx9LCAyMzgzLCAidWRwIn0sCit7InNkLXJlcXVlc3QiLCAgICAgICAgIHtOVUxMfSwgMjM4NCwgInRjcCJ9LAoreyJzZC1jYXBhY2l0eSIsICAgICAgICB7TlVMTH0sIDIzODQsICJ1ZHAifSwKK3sic2QtZGF0YSIsICAgICAgICAgICAge05VTEx9LCAyMzg1LCAidGNwIn0sCit7InNkLWRhdGEiLCAgICAgICAgICAgIHtOVUxMfSwgMjM4NSwgInVkcCJ9LAoreyJ2aXJ0dWFsdGFwZSIsICAgICAgICB7TlVMTH0sIDIzODYsICJ0Y3AifSwKK3sidmlydHVhbHRhcGUiLCAgICAgICAge05VTEx9LCAyMzg2LCAidWRwIn0sCit7InZzYW1yZWRpcmVjdG9yIiwgICAgIHtOVUxMfSwgMjM4NywgInRjcCJ9LAoreyJ2c2FtcmVkaXJlY3RvciIsICAgICB7TlVMTH0sIDIzODcsICJ1ZHAifSwKK3sibXluYWhhdXRvc3RhcnQiLCAgICAge05VTEx9LCAyMzg4LCAidGNwIn0sCit7Im15bmFoYXV0b3N0YXJ0IiwgICAgIHtOVUxMfSwgMjM4OCwgInVkcCJ9LAoreyJvdnNlc3Npb25tZ3IiLCAgICAgICB7TlVMTH0sIDIzODksICJ0Y3AifSwKK3sib3ZzZXNzaW9ubWdyIiwgICAgICAge05VTEx9LCAyMzg5LCAidWRwIn0sCit7InJzbXRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjM5MCwgInRjcCJ9LAoreyJyc210cCIsICAgICAgICAgICAgICB7TlVMTH0sIDIzOTAsICJ1ZHAifSwKK3siM2NvbS1uZXQtbWdtdCIsICAgICAge05VTEx9LCAyMzkxLCAidGNwIn0sCit7IjNjb20tbmV0LW1nbXQiLCAgICAgIHtOVUxMfSwgMjM5MSwgInVkcCJ9LAoreyJ0YWN0aWNhbGF1dGgiLCAgICAgICB7TlVMTH0sIDIzOTIsICJ0Y3AifSwKK3sidGFjdGljYWxhdXRoIiwgICAgICAge05VTEx9LCAyMzkyLCAidWRwIn0sCit7Im1zLW9sYXAxIiwgICAgICAgICAgIHtOVUxMfSwgMjM5MywgInRjcCJ9LAoreyJtcy1vbGFwMSIsICAgICAgICAgICB7TlVMTH0sIDIzOTMsICJ1ZHAifSwKK3sibXMtb2xhcDIiLCAgICAgICAgICAge05VTEx9LCAyMzk0LCAidGNwIn0sCit7Im1zLW9sYXAyIiwgICAgICAgICAgIHtOVUxMfSwgMjM5NCwgInVkcCJ9LAoreyJsYW45MDBfcmVtb3RlIiwgICAgICB7TlVMTH0sIDIzOTUsICJ0Y3AifSwKK3sibGFuOTAwX3JlbW90ZSIsICAgICAge05VTEx9LCAyMzk1LCAidWRwIn0sCit7Ind1c2FnZSIsICAgICAgICAgICAgIHtOVUxMfSwgMjM5NiwgInRjcCJ9LAoreyJ3dXNhZ2UiLCAgICAgICAgICAgICB7TlVMTH0sIDIzOTYsICJ1ZHAifSwKK3sibmNsIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMzk3LCAidGNwIn0sCit7Im5jbCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjM5NywgInVkcCJ9LAoreyJvcmJpdGVyIiwgICAgICAgICAgICB7TlVMTH0sIDIzOTgsICJ0Y3AifSwKK3sib3JiaXRlciIsICAgICAgICAgICAge05VTEx9LCAyMzk4LCAidWRwIn0sCit7ImZtcHJvLWZkYWwiLCAgICAgICAgIHtOVUxMfSwgMjM5OSwgInRjcCJ9LAoreyJmbXByby1mZGFsIiwgICAgICAgICB7TlVMTH0sIDIzOTksICJ1ZHAifSwKK3sib3BlcXV1cy1zZXJ2ZXIiLCAgICAge05VTEx9LCAyNDAwLCAidGNwIn0sCit7Im9wZXF1dXMtc2VydmVyIiwgICAgIHtOVUxMfSwgMjQwMCwgInVkcCJ9LAoreyJjdnNwc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDI0MDEsICJ0Y3AifSwKK3siY3ZzcHNlcnZlciIsICAgICAgICAge05VTEx9LCAyNDAxLCAidWRwIn0sCit7InRhc2ttYXN0ZXIyMDAwIiwgICAgIHtOVUxMfSwgMjQwMiwgInRjcCJ9LAoreyJ0YXNrbWFzdGVyMjAwMCIsICAgICB7TlVMTH0sIDI0MDIsICJ1ZHAifSwKK3sidGFza21hc3RlcjIwMDAiLCAgICAge05VTEx9LCAyNDAzLCAidGNwIn0sCit7InRhc2ttYXN0ZXIyMDAwIiwgICAgIHtOVUxMfSwgMjQwMywgInVkcCJ9LAoreyJpZWMtMTA0IiwgICAgICAgICAgICB7TlVMTH0sIDI0MDQsICJ0Y3AifSwKK3siaWVjLTEwNCIsICAgICAgICAgICAge05VTEx9LCAyNDA0LCAidWRwIn0sCit7InRyYy1uZXRwb2xsIiwgICAgICAgIHtOVUxMfSwgMjQwNSwgInRjcCJ9LAoreyJ0cmMtbmV0cG9sbCIsICAgICAgICB7TlVMTH0sIDI0MDUsICJ1ZHAifSwKK3siamVkaXNlcnZlciIsICAgICAgICAge05VTEx9LCAyNDA2LCAidGNwIn0sCit7ImplZGlzZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMjQwNiwgInVkcCJ9LAoreyJvcmlvbiIsICAgICAgICAgICAgICB7TlVMTH0sIDI0MDcsICJ0Y3AifSwKK3sib3Jpb24iLCAgICAgICAgICAgICAge05VTEx9LCAyNDA3LCAidWRwIn0sCit7Im9wdGltYW5ldCIsICAgICAgICAgIHtOVUxMfSwgMjQwOCwgInRjcCJ9LAoreyJvcHRpbWFuZXQiLCAgICAgICAgICB7TlVMTH0sIDI0MDgsICJ1ZHAifSwKK3sic25zLXByb3RvY29sIiwgICAgICAge05VTEx9LCAyNDA5LCAidGNwIn0sCit7InNucy1wcm90b2NvbCIsICAgICAgIHtOVUxMfSwgMjQwOSwgInVkcCJ9LAoreyJ2cnRzLXJlZ2lzdHJ5IiwgICAgICB7TlVMTH0sIDI0MTAsICJ0Y3AifSwKK3sidnJ0cy1yZWdpc3RyeSIsICAgICAge05VTEx9LCAyNDEwLCAidWRwIn0sCit7Im5ldHdhdmUtYXAtbWdtdCIsICAgIHtOVUxMfSwgMjQxMSwgInRjcCJ9LAoreyJuZXR3YXZlLWFwLW1nbXQiLCAgICB7TlVMTH0sIDI0MTEsICJ1ZHAifSwKK3siY2RuIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNDEyLCAidGNwIn0sCit7ImNkbiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjQxMiwgInVkcCJ9LAoreyJvcmlvbi1ybWktcmVnIiwgICAgICB7TlVMTH0sIDI0MTMsICJ0Y3AifSwKK3sib3Jpb24tcm1pLXJlZyIsICAgICAge05VTEx9LCAyNDEzLCAidWRwIn0sCit7ImJlZXlvbmQiLCAgICAgICAgICAgIHtOVUxMfSwgMjQxNCwgInRjcCJ9LAoreyJiZWV5b25kIiwgICAgICAgICAgICB7TlVMTH0sIDI0MTQsICJ1ZHAifSwKK3siY29kaW1hLXJ0cCIsICAgICAgICAge05VTEx9LCAyNDE1LCAidGNwIn0sCit7ImNvZGltYS1ydHAiLCAgICAgICAgIHtOVUxMfSwgMjQxNSwgInVkcCJ9LAoreyJybXRzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDI0MTYsICJ0Y3AifSwKK3sicm10c2VydmVyIiwgICAgICAgICAge05VTEx9LCAyNDE2LCAidWRwIn0sCit7ImNvbXBvc2l0LXNlcnZlciIsICAgIHtOVUxMfSwgMjQxNywgInRjcCJ9LAoreyJjb21wb3NpdC1zZXJ2ZXIiLCAgICB7TlVMTH0sIDI0MTcsICJ1ZHAifSwKK3siY2FzIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNDE4LCAidGNwIn0sCit7ImNhcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjQxOCwgInVkcCJ9LAoreyJhdHRhY2htYXRlLXMycyIsICAgICB7TlVMTH0sIDI0MTksICJ0Y3AifSwKK3siYXR0YWNobWF0ZS1zMnMiLCAgICAge05VTEx9LCAyNDE5LCAidWRwIn0sCit7ImRzbHJlbW90ZS1tZ210IiwgICAgIHtOVUxMfSwgMjQyMCwgInRjcCJ9LAoreyJkc2xyZW1vdGUtbWdtdCIsICAgICB7TlVMTH0sIDI0MjAsICJ1ZHAifSwKK3siZy10YWxrIiwgICAgICAgICAgICAge05VTEx9LCAyNDIxLCAidGNwIn0sCit7ImctdGFsayIsICAgICAgICAgICAgIHtOVUxMfSwgMjQyMSwgInVkcCJ9LAoreyJjcm1zYml0cyIsICAgICAgICAgICB7TlVMTH0sIDI0MjIsICJ0Y3AifSwKK3siY3Jtc2JpdHMiLCAgICAgICAgICAge05VTEx9LCAyNDIyLCAidWRwIn0sCit7InJucnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQyMywgInRjcCJ9LAoreyJybnJwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI0MjMsICJ1ZHAifSwKK3sia29mYXgtc3ZyIiwgICAgICAgICAge05VTEx9LCAyNDI0LCAidGNwIn0sCit7ImtvZmF4LXN2ciIsICAgICAgICAgIHtOVUxMfSwgMjQyNCwgInVkcCJ9LAoreyJmaml0c3VhcHBtZ3IiLCAgICAgICB7TlVMTH0sIDI0MjUsICJ0Y3AifSwKK3siZmppdHN1YXBwbWdyIiwgICAgICAge05VTEx9LCAyNDI1LCAidWRwIn0sCit7Im1nY3AtZ2F0ZXdheSIsICAgICAgIHtOVUxMfSwgMjQyNywgInRjcCJ9LAoreyJtZ2NwLWdhdGV3YXkiLCAgICAgICB7TlVMTH0sIDI0MjcsICJ1ZHAifSwKK3sib3R0IiwgICAgICAgICAgICAgICAge05VTEx9LCAyNDI4LCAidGNwIn0sCit7Im90dCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjQyOCwgInVkcCJ9LAoreyJmdC1yb2xlIiwgICAgICAgICAgICB7TlVMTH0sIDI0MjksICJ0Y3AifSwKK3siZnQtcm9sZSIsICAgICAgICAgICAge05VTEx9LCAyNDI5LCAidWRwIn0sCit7InZlbnVzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjQzMCwgInRjcCJ9LAoreyJ2ZW51cyIsICAgICAgICAgICAgICB7TlVMTH0sIDI0MzAsICJ1ZHAifSwKK3sidmVudXMtc2UiLCAgICAgICAgICAge05VTEx9LCAyNDMxLCAidGNwIn0sCit7InZlbnVzLXNlIiwgICAgICAgICAgIHtOVUxMfSwgMjQzMSwgInVkcCJ9LAoreyJjb2Rhc3J2IiwgICAgICAgICAgICB7TlVMTH0sIDI0MzIsICJ0Y3AifSwKK3siY29kYXNydiIsICAgICAgICAgICAge05VTEx9LCAyNDMyLCAidWRwIn0sCit7ImNvZGFzcnYtc2UiLCAgICAgICAgIHtOVUxMfSwgMjQzMywgInRjcCJ9LAoreyJjb2Rhc3J2LXNlIiwgICAgICAgICB7TlVMTH0sIDI0MzMsICJ1ZHAifSwKK3sicHhjLWVwbWFwIiwgICAgICAgICAge05VTEx9LCAyNDM0LCAidGNwIn0sCit7InB4Yy1lcG1hcCIsICAgICAgICAgIHtOVUxMfSwgMjQzNCwgInVkcCJ9LAoreyJvcHRpbG9naWMiLCAgICAgICAgICB7TlVMTH0sIDI0MzUsICJ0Y3AifSwKK3sib3B0aWxvZ2ljIiwgICAgICAgICAge05VTEx9LCAyNDM1LCAidWRwIn0sCit7InRvcHgiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQzNiwgInRjcCJ9LAoreyJ0b3B4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDI0MzYsICJ1ZHAifSwKK3sidW5pY29udHJvbCIsICAgICAgICAge05VTEx9LCAyNDM3LCAidGNwIn0sCit7InVuaWNvbnRyb2wiLCAgICAgICAgIHtOVUxMfSwgMjQzNywgInVkcCJ9LAoreyJtc3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI0MzgsICJ0Y3AifSwKK3sibXNwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNDM4LCAidWRwIn0sCit7InN5YmFzZWRic3luY2giLCAgICAgIHtOVUxMfSwgMjQzOSwgInRjcCJ9LAoreyJzeWJhc2VkYnN5bmNoIiwgICAgICB7TlVMTH0sIDI0MzksICJ1ZHAifSwKK3sic3BlYXJ3YXkiLCAgICAgICAgICAge05VTEx9LCAyNDQwLCAidGNwIn0sCit7InNwZWFyd2F5IiwgICAgICAgICAgIHtOVUxMfSwgMjQ0MCwgInVkcCJ9LAoreyJwdnN3LWluZXQiLCAgICAgICAgICB7TlVMTH0sIDI0NDEsICJ0Y3AifSwKK3sicHZzdy1pbmV0IiwgICAgICAgICAge05VTEx9LCAyNDQxLCAidWRwIn0sCit7Im5ldGFuZ2VsIiwgICAgICAgICAgIHtOVUxMfSwgMjQ0MiwgInRjcCJ9LAoreyJuZXRhbmdlbCIsICAgICAgICAgICB7TlVMTH0sIDI0NDIsICJ1ZHAifSwKK3sicG93ZXJjbGllbnRjc2YiLCAgICAge05VTEx9LCAyNDQzLCAidGNwIn0sCit7InBvd2VyY2xpZW50Y3NmIiwgICAgIHtOVUxMfSwgMjQ0MywgInVkcCJ9LAoreyJidHBwMnNlY3RyYW5zIiwgICAgICB7TlVMTH0sIDI0NDQsICJ0Y3AifSwKK3siYnRwcDJzZWN0cmFucyIsICAgICAge05VTEx9LCAyNDQ0LCAidWRwIn0sCit7ImR0bjEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ0NSwgInRjcCJ9LAoreyJkdG4xIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI0NDUsICJ1ZHAifSwKK3siYnVlc19zZXJ2aWNlIiwgICAgICAge05VTEx9LCAyNDQ2LCAidGNwIn0sCit7ImJ1ZXNfc2VydmljZSIsICAgICAgIHtOVUxMfSwgMjQ0NiwgInVkcCJ9LAoreyJvdndkYiIsICAgICAgICAgICAgICB7TlVMTH0sIDI0NDcsICJ0Y3AifSwKK3sib3Z3ZGIiLCAgICAgICAgICAgICAge05VTEx9LCAyNDQ3LCAidWRwIn0sCit7ImhwcHBzc3ZyIiwgICAgICAgICAgIHtOVUxMfSwgMjQ0OCwgInRjcCJ9LAoreyJocHBwc3N2ciIsICAgICAgICAgICB7TlVMTH0sIDI0NDgsICJ1ZHAifSwKK3sicmF0bCIsICAgICAgICAgICAgICAge05VTEx9LCAyNDQ5LCAidGNwIn0sCit7InJhdGwiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ0OSwgInVkcCJ9LAoreyJuZXRhZG1pbiIsICAgICAgICAgICB7TlVMTH0sIDI0NTAsICJ0Y3AifSwKK3sibmV0YWRtaW4iLCAgICAgICAgICAge05VTEx9LCAyNDUwLCAidWRwIn0sCit7Im5ldGNoYXQiLCAgICAgICAgICAgIHtOVUxMfSwgMjQ1MSwgInRjcCJ9LAoreyJuZXRjaGF0IiwgICAgICAgICAgICB7TlVMTH0sIDI0NTEsICJ1ZHAifSwKK3sic25pZmZlcmNsaWVudCIsICAgICAge05VTEx9LCAyNDUyLCAidGNwIn0sCit7InNuaWZmZXJjbGllbnQiLCAgICAgIHtOVUxMfSwgMjQ1MiwgInVkcCJ9LAoreyJtYWRnZS1sdGQiLCAgICAgICAgICB7TlVMTH0sIDI0NTMsICJ0Y3AifSwKK3sibWFkZ2UtbHRkIiwgICAgICAgICAge05VTEx9LCAyNDUzLCAidWRwIn0sCit7ImluZHgtZGRzIiwgICAgICAgICAgIHtOVUxMfSwgMjQ1NCwgInRjcCJ9LAoreyJpbmR4LWRkcyIsICAgICAgICAgICB7TlVMTH0sIDI0NTQsICJ1ZHAifSwKK3sid2Fnby1pby1zeXN0ZW0iLCAgICAge05VTEx9LCAyNDU1LCAidGNwIn0sCit7IndhZ28taW8tc3lzdGVtIiwgICAgIHtOVUxMfSwgMjQ1NSwgInVkcCJ9LAoreyJhbHRhdi1yZW1tZ3QiLCAgICAgICB7TlVMTH0sIDI0NTYsICJ0Y3AifSwKK3siYWx0YXYtcmVtbWd0IiwgICAgICAge05VTEx9LCAyNDU2LCAidWRwIn0sCit7InJhcGlkby1pcCIsICAgICAgICAgIHtOVUxMfSwgMjQ1NywgInRjcCJ9LAoreyJyYXBpZG8taXAiLCAgICAgICAgICB7TlVMTH0sIDI0NTcsICJ1ZHAifSwKK3siZ3JpZmZpbiIsICAgICAgICAgICAge05VTEx9LCAyNDU4LCAidGNwIn0sCit7ImdyaWZmaW4iLCAgICAgICAgICAgIHtOVUxMfSwgMjQ1OCwgInVkcCJ9LAoreyJjb21tdW5pdHkiLCAgICAgICAgICB7TlVMTH0sIDI0NTksICJ0Y3AifSwKK3siY29tbXVuaXR5IiwgICAgICAgICAge05VTEx9LCAyNDU5LCAidWRwIn0sCit7Im1zLXRoZWF0ZXIiLCAgICAgICAgIHtOVUxMfSwgMjQ2MCwgInRjcCJ9LAoreyJtcy10aGVhdGVyIiwgICAgICAgICB7TlVMTH0sIDI0NjAsICJ1ZHAifSwKK3sicWFkbWlmb3BlciIsICAgICAgICAge05VTEx9LCAyNDYxLCAidGNwIn0sCit7InFhZG1pZm9wZXIiLCAgICAgICAgIHtOVUxMfSwgMjQ2MSwgInVkcCJ9LAoreyJxYWRtaWZldmVudCIsICAgICAgICB7TlVMTH0sIDI0NjIsICJ0Y3AifSwKK3sicWFkbWlmZXZlbnQiLCAgICAgICAge05VTEx9LCAyNDYyLCAidWRwIn0sCit7ImxzaS1yYWlkLW1nbXQiLCAgICAgIHtOVUxMfSwgMjQ2MywgInRjcCJ9LAoreyJsc2ktcmFpZC1tZ210IiwgICAgICB7TlVMTH0sIDI0NjMsICJ1ZHAifSwKK3siZGlyZWNwYy1zaSIsICAgICAgICAge05VTEx9LCAyNDY0LCAidGNwIn0sCit7ImRpcmVjcGMtc2kiLCAgICAgICAgIHtOVUxMfSwgMjQ2NCwgInVkcCJ9LAoreyJsYm0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI0NjUsICJ0Y3AifSwKK3sibGJtIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNDY1LCAidWRwIn0sCit7ImxiZiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ2NiwgInRjcCJ9LAoreyJsYmYiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI0NjYsICJ1ZHAifSwKK3siaGlnaC1jcml0ZXJpYSIsICAgICAge05VTEx9LCAyNDY3LCAidGNwIn0sCit7ImhpZ2gtY3JpdGVyaWEiLCAgICAgIHtOVUxMfSwgMjQ2NywgInVkcCJ9LAoreyJxaXAtbXNnZCIsICAgICAgICAgICB7TlVMTH0sIDI0NjgsICJ0Y3AifSwKK3sicWlwLW1zZ2QiLCAgICAgICAgICAge05VTEx9LCAyNDY4LCAidWRwIn0sCit7Im10aS10Y3MtY29tbSIsICAgICAgIHtOVUxMfSwgMjQ2OSwgInRjcCJ9LAoreyJtdGktdGNzLWNvbW0iLCAgICAgICB7TlVMTH0sIDI0NjksICJ1ZHAifSwKK3sidGFza21hbi1wb3J0IiwgICAgICAge05VTEx9LCAyNDcwLCAidGNwIn0sCit7InRhc2ttYW4tcG9ydCIsICAgICAgIHtOVUxMfSwgMjQ3MCwgInVkcCJ9LAoreyJzZWFvZGJjIiwgICAgICAgICAgICB7TlVMTH0sIDI0NzEsICJ0Y3AifSwKK3sic2Vhb2RiYyIsICAgICAgICAgICAge05VTEx9LCAyNDcxLCAidWRwIn0sCit7ImMzIiwgICAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ3MiwgInRjcCJ9LAoreyJjMyIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDI0NzIsICJ1ZHAifSwKK3siYWtlci1jZHAiLCAgICAgICAgICAge05VTEx9LCAyNDczLCAidGNwIn0sCit7ImFrZXItY2RwIiwgICAgICAgICAgIHtOVUxMfSwgMjQ3MywgInVkcCJ9LAoreyJ2aXRhbGFuYWx5c2lzIiwgICAgICB7TlVMTH0sIDI0NzQsICJ0Y3AifSwKK3sidml0YWxhbmFseXNpcyIsICAgICAge05VTEx9LCAyNDc0LCAidWRwIn0sCit7ImFjZS1zZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMjQ3NSwgInRjcCJ9LAoreyJhY2Utc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDI0NzUsICJ1ZHAifSwKK3siYWNlLXN2ci1wcm9wIiwgICAgICAge05VTEx9LCAyNDc2LCAidGNwIn0sCit7ImFjZS1zdnItcHJvcCIsICAgICAgIHtOVUxMfSwgMjQ3NiwgInVkcCJ9LAoreyJzc20tY3ZzIiwgICAgICAgICAgICB7TlVMTH0sIDI0NzcsICJ0Y3AifSwKK3sic3NtLWN2cyIsICAgICAgICAgICAge05VTEx9LCAyNDc3LCAidWRwIn0sCit7InNzbS1jc3NwcyIsICAgICAgICAgIHtOVUxMfSwgMjQ3OCwgInRjcCJ9LAoreyJzc20tY3NzcHMiLCAgICAgICAgICB7TlVMTH0sIDI0NzgsICJ1ZHAifSwKK3sic3NtLWVscyIsICAgICAgICAgICAge05VTEx9LCAyNDc5LCAidGNwIn0sCit7InNzbS1lbHMiLCAgICAgICAgICAgIHtOVUxMfSwgMjQ3OSwgInVkcCJ9LAoreyJwb3dlcmV4Y2hhbmdlIiwgICAgICB7TlVMTH0sIDI0ODAsICJ0Y3AifSwKK3sicG93ZXJleGNoYW5nZSIsICAgICAge05VTEx9LCAyNDgwLCAidWRwIn0sCit7Imdpb3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ4MSwgInRjcCJ9LAoreyJnaW9wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI0ODEsICJ1ZHAifSwKK3siZ2lvcC1zc2wiLCAgICAgICAgICAge05VTEx9LCAyNDgyLCAidGNwIn0sCit7Imdpb3Atc3NsIiwgICAgICAgICAgIHtOVUxMfSwgMjQ4MiwgInVkcCJ9LAoreyJ0dGMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI0ODMsICJ0Y3AifSwKK3sidHRjIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNDgzLCAidWRwIn0sCit7InR0Yy1zc2wiLCAgICAgICAgICAgIHtOVUxMfSwgMjQ4NCwgInRjcCJ9LAoreyJ0dGMtc3NsIiwgICAgICAgICAgICB7TlVMTH0sIDI0ODQsICJ1ZHAifSwKK3sibmV0b2JqZWN0czEiLCAgICAgICAge05VTEx9LCAyNDg1LCAidGNwIn0sCit7Im5ldG9iamVjdHMxIiwgICAgICAgIHtOVUxMfSwgMjQ4NSwgInVkcCJ9LAoreyJuZXRvYmplY3RzMiIsICAgICAgICB7TlVMTH0sIDI0ODYsICJ0Y3AifSwKK3sibmV0b2JqZWN0czIiLCAgICAgICAge05VTEx9LCAyNDg2LCAidWRwIn0sCit7InBucyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ4NywgInRjcCJ9LAoreyJwbnMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI0ODcsICJ1ZHAifSwKK3sibW95LWNvcnAiLCAgICAgICAgICAge05VTEx9LCAyNDg4LCAidGNwIn0sCit7Im1veS1jb3JwIiwgICAgICAgICAgIHtOVUxMfSwgMjQ4OCwgInVkcCJ9LAoreyJ0c2lsYiIsICAgICAgICAgICAgICB7TlVMTH0sIDI0ODksICJ0Y3AifSwKK3sidHNpbGIiLCAgICAgICAgICAgICAge05VTEx9LCAyNDg5LCAidWRwIn0sCit7InFpcC1xZGhjcCIsICAgICAgICAgIHtOVUxMfSwgMjQ5MCwgInRjcCJ9LAoreyJxaXAtcWRoY3AiLCAgICAgICAgICB7TlVMTH0sIDI0OTAsICJ1ZHAifSwKK3siY29uY2xhdmUtY3BwIiwgICAgICAge05VTEx9LCAyNDkxLCAidGNwIn0sCit7ImNvbmNsYXZlLWNwcCIsICAgICAgIHtOVUxMfSwgMjQ5MSwgInVkcCJ9LAoreyJncm9vdmUiLCAgICAgICAgICAgICB7TlVMTH0sIDI0OTIsICJ0Y3AifSwKK3siZ3Jvb3ZlIiwgICAgICAgICAgICAge05VTEx9LCAyNDkyLCAidWRwIn0sCit7InRhbGFyaWFuLW1xcyIsICAgICAgIHtOVUxMfSwgMjQ5MywgInRjcCJ9LAoreyJ0YWxhcmlhbi1tcXMiLCAgICAgICB7TlVMTH0sIDI0OTMsICJ1ZHAifSwKK3siYm1jLWFyIiwgICAgICAgICAgICAge05VTEx9LCAyNDk0LCAidGNwIn0sCit7ImJtYy1hciIsICAgICAgICAgICAgIHtOVUxMfSwgMjQ5NCwgInVkcCJ9LAoreyJmYXN0LXJlbS1zZXJ2IiwgICAgICB7TlVMTH0sIDI0OTUsICJ0Y3AifSwKK3siZmFzdC1yZW0tc2VydiIsICAgICAge05VTEx9LCAyNDk1LCAidWRwIn0sCit7ImRpcmdpcyIsICAgICAgICAgICAgIHtOVUxMfSwgMjQ5NiwgInRjcCJ9LAoreyJkaXJnaXMiLCAgICAgICAgICAgICB7TlVMTH0sIDI0OTYsICJ1ZHAifSwKK3sicXVhZGRiIiwgICAgICAgICAgICAge05VTEx9LCAyNDk3LCAidGNwIn0sCit7InF1YWRkYiIsICAgICAgICAgICAgIHtOVUxMfSwgMjQ5NywgInVkcCJ9LAoreyJvZG4tY2FzdHJhcSIsICAgICAgICB7TlVMTH0sIDI0OTgsICJ0Y3AifSwKK3sib2RuLWNhc3RyYXEiLCAgICAgICAge05VTEx9LCAyNDk4LCAidWRwIn0sCit7InVuaWNvbnRyb2wiLCAgICAgICAgIHtOVUxMfSwgMjQ5OSwgInRjcCJ9LAoreyJ1bmljb250cm9sIiwgICAgICAgICB7TlVMTH0sIDI0OTksICJ1ZHAifSwKK3sicnRzc2VydiIsICAgICAgICAgICAge05VTEx9LCAyNTAwLCAidGNwIn0sCit7InJ0c3NlcnYiLCAgICAgICAgICAgIHtOVUxMfSwgMjUwMCwgInVkcCJ9LAoreyJydHNjbGllbnQiLCAgICAgICAgICB7TlVMTH0sIDI1MDEsICJ0Y3AifSwKK3sicnRzY2xpZW50IiwgICAgICAgICAge05VTEx9LCAyNTAxLCAidWRwIn0sCit7ImtlbnRyb3gtcHJvdCIsICAgICAgIHtOVUxMfSwgMjUwMiwgInRjcCJ9LAoreyJrZW50cm94LXByb3QiLCAgICAgICB7TlVMTH0sIDI1MDIsICJ1ZHAifSwKK3sibm1zLWRwbnNzIiwgICAgICAgICAge05VTEx9LCAyNTAzLCAidGNwIn0sCit7Im5tcy1kcG5zcyIsICAgICAgICAgIHtOVUxMfSwgMjUwMywgInVkcCJ9LAoreyJ3bGJzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI1MDQsICJ0Y3AifSwKK3sid2xicyIsICAgICAgICAgICAgICAge05VTEx9LCAyNTA0LCAidWRwIn0sCit7InBwY29udHJvbCIsICAgICAgICAgIHtOVUxMfSwgMjUwNSwgInRjcCJ9LAoreyJwcGNvbnRyb2wiLCAgICAgICAgICB7TlVMTH0sIDI1MDUsICJ1ZHAifSwKK3siamJyb2tlciIsICAgICAgICAgICAge05VTEx9LCAyNTA2LCAidGNwIn0sCit7Impicm9rZXIiLCAgICAgICAgICAgIHtOVUxMfSwgMjUwNiwgInVkcCJ9LAoreyJzcG9jayIsICAgICAgICAgICAgICB7TlVMTH0sIDI1MDcsICJ0Y3AifSwKK3sic3BvY2siLCAgICAgICAgICAgICAge05VTEx9LCAyNTA3LCAidWRwIn0sCit7ImpkYXRhc3RvcmUiLCAgICAgICAgIHtOVUxMfSwgMjUwOCwgInRjcCJ9LAoreyJqZGF0YXN0b3JlIiwgICAgICAgICB7TlVMTH0sIDI1MDgsICJ1ZHAifSwKK3siZmptcHNzIiwgICAgICAgICAgICAge05VTEx9LCAyNTA5LCAidGNwIn0sCit7ImZqbXBzcyIsICAgICAgICAgICAgIHtOVUxMfSwgMjUwOSwgInVkcCJ9LAoreyJmamFwcG1ncmJ1bGsiLCAgICAgICB7TlVMTH0sIDI1MTAsICJ0Y3AifSwKK3siZmphcHBtZ3JidWxrIiwgICAgICAge05VTEx9LCAyNTEwLCAidWRwIn0sCit7Im1ldGFzdG9ybSIsICAgICAgICAgIHtOVUxMfSwgMjUxMSwgInRjcCJ9LAoreyJtZXRhc3Rvcm0iLCAgICAgICAgICB7TlVMTH0sIDI1MTEsICJ1ZHAifSwKK3siY2l0cml4aW1hIiwgICAgICAgICAge05VTEx9LCAyNTEyLCAidGNwIn0sCit7ImNpdHJpeGltYSIsICAgICAgICAgIHtOVUxMfSwgMjUxMiwgInVkcCJ9LAoreyJjaXRyaXhhZG1pbiIsICAgICAgICB7TlVMTH0sIDI1MTMsICJ0Y3AifSwKK3siY2l0cml4YWRtaW4iLCAgICAgICAge05VTEx9LCAyNTEzLCAidWRwIn0sCit7ImZhY3N5cy1udHAiLCAgICAgICAgIHtOVUxMfSwgMjUxNCwgInRjcCJ9LAoreyJmYWNzeXMtbnRwIiwgICAgICAgICB7TlVMTH0sIDI1MTQsICJ1ZHAifSwKK3siZmFjc3lzLXJvdXRlciIsICAgICAge05VTEx9LCAyNTE1LCAidGNwIn0sCit7ImZhY3N5cy1yb3V0ZXIiLCAgICAgIHtOVUxMfSwgMjUxNSwgInVkcCJ9LAoreyJtYWluY29udHJvbCIsICAgICAgICB7TlVMTH0sIDI1MTYsICJ0Y3AifSwKK3sibWFpbmNvbnRyb2wiLCAgICAgICAge05VTEx9LCAyNTE2LCAidWRwIn0sCit7ImNhbGwtc2lnLXRyYW5zIiwgICAgIHtOVUxMfSwgMjUxNywgInRjcCJ9LAoreyJjYWxsLXNpZy10cmFucyIsICAgICB7TlVMTH0sIDI1MTcsICJ1ZHAifSwKK3sid2lsbHkiLCAgICAgICAgICAgICAge05VTEx9LCAyNTE4LCAidGNwIn0sCit7IndpbGx5IiwgICAgICAgICAgICAgIHtOVUxMfSwgMjUxOCwgInVkcCJ9LAoreyJnbG9ibXNnc3ZjIiwgICAgICAgICB7TlVMTH0sIDI1MTksICJ0Y3AifSwKK3siZ2xvYm1zZ3N2YyIsICAgICAgICAge05VTEx9LCAyNTE5LCAidWRwIn0sCit7InB2c3ciLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjUyMCwgInRjcCJ9LAoreyJwdnN3IiwgICAgICAgICAgICAgICB7TlVMTH0sIDI1MjAsICJ1ZHAifSwKK3siYWRhcHRlY21nciIsICAgICAgICAge05VTEx9LCAyNTIxLCAidGNwIn0sCit7ImFkYXB0ZWNtZ3IiLCAgICAgICAgIHtOVUxMfSwgMjUyMSwgInVkcCJ9LAoreyJ3aW5kYiIsICAgICAgICAgICAgICB7TlVMTH0sIDI1MjIsICJ0Y3AifSwKK3sid2luZGIiLCAgICAgICAgICAgICAge05VTEx9LCAyNTIyLCAidWRwIn0sCit7InFrZS1sbGMtdjMiLCAgICAgICAgIHtOVUxMfSwgMjUyMywgInRjcCJ9LAoreyJxa2UtbGxjLXYzIiwgICAgICAgICB7TlVMTH0sIDI1MjMsICJ1ZHAifSwKK3sib3B0aXdhdmUtbG0iLCAgICAgICAge05VTEx9LCAyNTI0LCAidGNwIn0sCit7Im9wdGl3YXZlLWxtIiwgICAgICAgIHtOVUxMfSwgMjUyNCwgInVkcCJ9LAoreyJtcy12LXdvcmxkcyIsICAgICAgICB7TlVMTH0sIDI1MjUsICJ0Y3AifSwKK3sibXMtdi13b3JsZHMiLCAgICAgICAge05VTEx9LCAyNTI1LCAidWRwIn0sCit7ImVtYS1zZW50LWxtIiwgICAgICAgIHtOVUxMfSwgMjUyNiwgInRjcCJ9LAoreyJlbWEtc2VudC1sbSIsICAgICAgICB7TlVMTH0sIDI1MjYsICJ1ZHAifSwKK3siaXFzZXJ2ZXIiLCAgICAgICAgICAge05VTEx9LCAyNTI3LCAidGNwIn0sCit7Imlxc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMjUyNywgInVkcCJ9LAoreyJuY3JfY2NsIiwgICAgICAgICAgICB7TlVMTH0sIDI1MjgsICJ0Y3AifSwKK3sibmNyX2NjbCIsICAgICAgICAgICAge05VTEx9LCAyNTI4LCAidWRwIn0sCit7InV0c2Z0cCIsICAgICAgICAgICAgIHtOVUxMfSwgMjUyOSwgInRjcCJ9LAoreyJ1dHNmdHAiLCAgICAgICAgICAgICB7TlVMTH0sIDI1MjksICJ1ZHAifSwKK3sidnJjb21tZXJjZSIsICAgICAgICAge05VTEx9LCAyNTMwLCAidGNwIn0sCit7InZyY29tbWVyY2UiLCAgICAgICAgIHtOVUxMfSwgMjUzMCwgInVkcCJ9LAoreyJpdG8tZS1ndWkiLCAgICAgICAgICB7TlVMTH0sIDI1MzEsICJ0Y3AifSwKK3siaXRvLWUtZ3VpIiwgICAgICAgICAge05VTEx9LCAyNTMxLCAidWRwIn0sCit7Im92dG9wbWQiLCAgICAgICAgICAgIHtOVUxMfSwgMjUzMiwgInRjcCJ9LAoreyJvdnRvcG1kIiwgICAgICAgICAgICB7TlVMTH0sIDI1MzIsICJ1ZHAifSwKK3sic25pZmZlcnNlcnZlciIsICAgICAge05VTEx9LCAyNTMzLCAidGNwIn0sCit7InNuaWZmZXJzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMjUzMywgInVkcCJ9LAoreyJjb21ib3gtd2ViLWFjYyIsICAgICB7TlVMTH0sIDI1MzQsICJ0Y3AifSwKK3siY29tYm94LXdlYi1hY2MiLCAgICAge05VTEx9LCAyNTM0LCAidWRwIn0sCit7Im1hZGNhcCIsICAgICAgICAgICAgIHtOVUxMfSwgMjUzNSwgInRjcCJ9LAoreyJtYWRjYXAiLCAgICAgICAgICAgICB7TlVMTH0sIDI1MzUsICJ1ZHAifSwKK3siYnRwcDJhdWRjdHIxIiwgICAgICAge05VTEx9LCAyNTM2LCAidGNwIn0sCit7ImJ0cHAyYXVkY3RyMSIsICAgICAgIHtOVUxMfSwgMjUzNiwgInVkcCJ9LAoreyJ1cGdyYWRlIiwgICAgICAgICAgICB7TlVMTH0sIDI1MzcsICJ0Y3AifSwKK3sidXBncmFkZSIsICAgICAgICAgICAge05VTEx9LCAyNTM3LCAidWRwIn0sCit7InZud2stcHJhcGkiLCAgICAgICAgIHtOVUxMfSwgMjUzOCwgInRjcCJ9LAoreyJ2bndrLXByYXBpIiwgICAgICAgICB7TlVMTH0sIDI1MzgsICJ1ZHAifSwKK3sidnNpYWRtaW4iLCAgICAgICAgICAge05VTEx9LCAyNTM5LCAidGNwIn0sCit7InZzaWFkbWluIiwgICAgICAgICAgIHtOVUxMfSwgMjUzOSwgInVkcCJ9LAoreyJsb253b3JrcyIsICAgICAgICAgICB7TlVMTH0sIDI1NDAsICJ0Y3AifSwKK3sibG9ud29ya3MiLCAgICAgICAgICAge05VTEx9LCAyNTQwLCAidWRwIn0sCit7ImxvbndvcmtzMiIsICAgICAgICAgIHtOVUxMfSwgMjU0MSwgInRjcCJ9LAoreyJsb253b3JrczIiLCAgICAgICAgICB7TlVMTH0sIDI1NDEsICJ1ZHAifSwKK3sidWRyYXdncmFwaCIsICAgICAgICAge05VTEx9LCAyNTQyLCAidGNwIn0sCit7InVkcmF3Z3JhcGgiLCAgICAgICAgIHtOVUxMfSwgMjU0MiwgInVkcCJ9LAoreyJyZWZ0ZWsiLCAgICAgICAgICAgICB7TlVMTH0sIDI1NDMsICJ0Y3AifSwKK3sicmVmdGVrIiwgICAgICAgICAgICAge05VTEx9LCAyNTQzLCAidWRwIn0sCit7Im5vdmVsbC16ZW4iLCAgICAgICAgIHtOVUxMfSwgMjU0NCwgInRjcCJ9LAoreyJub3ZlbGwtemVuIiwgICAgICAgICB7TlVMTH0sIDI1NDQsICJ1ZHAifSwKK3sic2lzLWVtdCIsICAgICAgICAgICAge05VTEx9LCAyNTQ1LCAidGNwIn0sCit7InNpcy1lbXQiLCAgICAgICAgICAgIHtOVUxMfSwgMjU0NSwgInVkcCJ9LAoreyJ2eXRhbHZhdWx0YnJ0cCIsICAgICB7TlVMTH0sIDI1NDYsICJ0Y3AifSwKK3sidnl0YWx2YXVsdGJydHAiLCAgICAge05VTEx9LCAyNTQ2LCAidWRwIn0sCit7InZ5dGFsdmF1bHR2c21wIiwgICAgIHtOVUxMfSwgMjU0NywgInRjcCJ9LAoreyJ2eXRhbHZhdWx0dnNtcCIsICAgICB7TlVMTH0sIDI1NDcsICJ1ZHAifSwKK3sidnl0YWx2YXVsdHBpcGUiLCAgICAge05VTEx9LCAyNTQ4LCAidGNwIn0sCit7InZ5dGFsdmF1bHRwaXBlIiwgICAgIHtOVUxMfSwgMjU0OCwgInVkcCJ9LAoreyJpcGFzcyIsICAgICAgICAgICAgICB7TlVMTH0sIDI1NDksICJ0Y3AifSwKK3siaXBhc3MiLCAgICAgICAgICAgICAge05VTEx9LCAyNTQ5LCAidWRwIn0sCit7ImFkcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU1MCwgInRjcCJ9LAoreyJhZHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI1NTAsICJ1ZHAifSwKK3siaXNnLXVkYS1zZXJ2ZXIiLCAgICAge05VTEx9LCAyNTUxLCAidGNwIn0sCit7ImlzZy11ZGEtc2VydmVyIiwgICAgIHtOVUxMfSwgMjU1MSwgInVkcCJ9LAoreyJjYWxsLWxvZ2dpbmciLCAgICAgICB7TlVMTH0sIDI1NTIsICJ0Y3AifSwKK3siY2FsbC1sb2dnaW5nIiwgICAgICAge05VTEx9LCAyNTUyLCAidWRwIn0sCit7ImVmaWRpbmluZ3BvcnQiLCAgICAgIHtOVUxMfSwgMjU1MywgInRjcCJ9LAoreyJlZmlkaW5pbmdwb3J0IiwgICAgICB7TlVMTH0sIDI1NTMsICJ1ZHAifSwKK3sidmNuZXQtbGluay12MTAiLCAgICAge05VTEx9LCAyNTU0LCAidGNwIn0sCit7InZjbmV0LWxpbmstdjEwIiwgICAgIHtOVUxMfSwgMjU1NCwgInVkcCJ9LAoreyJjb21wYXEtd2NwIiwgICAgICAgICB7TlVMTH0sIDI1NTUsICJ0Y3AifSwKK3siY29tcGFxLXdjcCIsICAgICAgICAge05VTEx9LCAyNTU1LCAidWRwIn0sCit7Im5pY2V0ZWMtbm1zdmMiLCAgICAgIHtOVUxMfSwgMjU1NiwgInRjcCJ9LAoreyJuaWNldGVjLW5tc3ZjIiwgICAgICB7TlVMTH0sIDI1NTYsICJ1ZHAifSwKK3sibmljZXRlYy1tZ210IiwgICAgICAge05VTEx9LCAyNTU3LCAidGNwIn0sCit7Im5pY2V0ZWMtbWdtdCIsICAgICAgIHtOVUxMfSwgMjU1NywgInVkcCJ9LAoreyJwY2xlbXVsdGltZWRpYSIsICAgICB7TlVMTH0sIDI1NTgsICJ0Y3AifSwKK3sicGNsZW11bHRpbWVkaWEiLCAgICAge05VTEx9LCAyNTU4LCAidWRwIn0sCit7ImxzdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjU1OSwgInRjcCJ9LAoreyJsc3RwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI1NTksICJ1ZHAifSwKK3sibGFicmF0IiwgICAgICAgICAgICAge05VTEx9LCAyNTYwLCAidGNwIn0sCit7ImxhYnJhdCIsICAgICAgICAgICAgIHtOVUxMfSwgMjU2MCwgInVkcCJ9LAoreyJtb3NhaXhjYyIsICAgICAgICAgICB7TlVMTH0sIDI1NjEsICJ0Y3AifSwKK3sibW9zYWl4Y2MiLCAgICAgICAgICAge05VTEx9LCAyNTYxLCAidWRwIn0sCit7ImRlbGlibyIsICAgICAgICAgICAgIHtOVUxMfSwgMjU2MiwgInRjcCJ9LAoreyJkZWxpYm8iLCAgICAgICAgICAgICB7TlVMTH0sIDI1NjIsICJ1ZHAifSwKK3siY3RpLXJlZHdvb2QiLCAgICAgICAge05VTEx9LCAyNTYzLCAidGNwIn0sCit7ImN0aS1yZWR3b29kIiwgICAgICAgIHtOVUxMfSwgMjU2MywgInVkcCJ9LAoreyJocC0zMDAwLXRlbG5ldCIsICAgICB7TlVMTH0sIDI1NjQsICJ0Y3AifSwKK3siY29vcmQtc3ZyIiwgICAgICAgICAge05VTEx9LCAyNTY1LCAidGNwIn0sCit7ImNvb3JkLXN2ciIsICAgICAgICAgIHtOVUxMfSwgMjU2NSwgInVkcCJ9LAoreyJwY3MtcGN3IiwgICAgICAgICAgICB7TlVMTH0sIDI1NjYsICJ0Y3AifSwKK3sicGNzLXBjdyIsICAgICAgICAgICAge05VTEx9LCAyNTY2LCAidWRwIn0sCit7ImNscCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU2NywgInRjcCJ9LAoreyJjbHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI1NjcsICJ1ZHAifSwKK3sic3BhbXRyYXAiLCAgICAgICAgICAge05VTEx9LCAyNTY4LCAidGNwIn0sCit7InNwYW10cmFwIiwgICAgICAgICAgIHtOVUxMfSwgMjU2OCwgInVkcCJ9LAoreyJzb251c2NhbGxzaWciLCAgICAgICB7TlVMTH0sIDI1NjksICJ0Y3AifSwKK3sic29udXNjYWxsc2lnIiwgICAgICAge05VTEx9LCAyNTY5LCAidWRwIn0sCit7ImhzLXBvcnQiLCAgICAgICAgICAgIHtOVUxMfSwgMjU3MCwgInRjcCJ9LAoreyJocy1wb3J0IiwgICAgICAgICAgICB7TlVMTH0sIDI1NzAsICJ1ZHAifSwKK3siY2Vjc3ZjIiwgICAgICAgICAgICAge05VTEx9LCAyNTcxLCAidGNwIn0sCit7ImNlY3N2YyIsICAgICAgICAgICAgIHtOVUxMfSwgMjU3MSwgInVkcCJ9LAoreyJpYnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI1NzIsICJ0Y3AifSwKK3siaWJwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNTcyLCAidWRwIn0sCit7InRydXN0ZXN0YWJsaXNoIiwgICAgIHtOVUxMfSwgMjU3MywgInRjcCJ9LAoreyJ0cnVzdGVzdGFibGlzaCIsICAgICB7TlVMTH0sIDI1NzMsICJ1ZHAifSwKK3siYmxvY2thZGUtYnBzcCIsICAgICAge05VTEx9LCAyNTc0LCAidGNwIn0sCit7ImJsb2NrYWRlLWJwc3AiLCAgICAgIHtOVUxMfSwgMjU3NCwgInVkcCJ9LAoreyJobDciLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI1NzUsICJ0Y3AifSwKK3siaGw3IiwgICAgICAgICAgICAgICAge05VTEx9LCAyNTc1LCAidWRwIn0sCit7InRjbHByb2RlYnVnZ2VyIiwgICAgIHtOVUxMfSwgMjU3NiwgInRjcCJ9LAoreyJ0Y2xwcm9kZWJ1Z2dlciIsICAgICB7TlVMTH0sIDI1NzYsICJ1ZHAifSwKK3sic2NpcHRpY3Nsc3J2ciIsICAgICAge05VTEx9LCAyNTc3LCAidGNwIn0sCit7InNjaXB0aWNzbHNydnIiLCAgICAgIHtOVUxMfSwgMjU3NywgInVkcCJ9LAoreyJydnMtaXNkbi1kY3AiLCAgICAgICB7TlVMTH0sIDI1NzgsICJ0Y3AifSwKK3sicnZzLWlzZG4tZGNwIiwgICAgICAge05VTEx9LCAyNTc4LCAidWRwIn0sCit7Im1wZm9uY2wiLCAgICAgICAgICAgIHtOVUxMfSwgMjU3OSwgInRjcCJ9LAoreyJtcGZvbmNsIiwgICAgICAgICAgICB7TlVMTH0sIDI1NzksICJ1ZHAifSwKK3sidHJpYnV0YXJ5IiwgICAgICAgICAge05VTEx9LCAyNTgwLCAidGNwIn0sCit7InRyaWJ1dGFyeSIsICAgICAgICAgIHtOVUxMfSwgMjU4MCwgInVkcCJ9LAoreyJhcmdpcy10ZSIsICAgICAgICAgICB7TlVMTH0sIDI1ODEsICJ0Y3AifSwKK3siYXJnaXMtdGUiLCAgICAgICAgICAge05VTEx9LCAyNTgxLCAidWRwIn0sCit7ImFyZ2lzLWRzIiwgICAgICAgICAgIHtOVUxMfSwgMjU4MiwgInRjcCJ9LAoreyJhcmdpcy1kcyIsICAgICAgICAgICB7TlVMTH0sIDI1ODIsICJ1ZHAifSwKK3sibW9uIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNTgzLCAidGNwIn0sCit7Im1vbiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU4MywgInVkcCJ9LAoreyJjeWFzZXJ2IiwgICAgICAgICAgICB7TlVMTH0sIDI1ODQsICJ0Y3AifSwKK3siY3lhc2VydiIsICAgICAgICAgICAge05VTEx9LCAyNTg0LCAidWRwIn0sCit7Im5ldHgtc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMjU4NSwgInRjcCJ9LAoreyJuZXR4LXNlcnZlciIsICAgICAgICB7TlVMTH0sIDI1ODUsICJ1ZHAifSwKK3sibmV0eC1hZ2VudCIsICAgICAgICAge05VTEx9LCAyNTg2LCAidGNwIn0sCit7Im5ldHgtYWdlbnQiLCAgICAgICAgIHtOVUxMfSwgMjU4NiwgInVkcCJ9LAoreyJtYXNjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI1ODcsICJ0Y3AifSwKK3sibWFzYyIsICAgICAgICAgICAgICAge05VTEx9LCAyNTg3LCAidWRwIn0sCit7InByaXZpbGVnZSIsICAgICAgICAgIHtOVUxMfSwgMjU4OCwgInRjcCJ9LAoreyJwcml2aWxlZ2UiLCAgICAgICAgICB7TlVMTH0sIDI1ODgsICJ1ZHAifSwKK3sicXVhcnR1cy10Y2wiLCAgICAgICAge05VTEx9LCAyNTg5LCAidGNwIn0sCit7InF1YXJ0dXMtdGNsIiwgICAgICAgIHtOVUxMfSwgMjU4OSwgInVkcCJ9LAoreyJpZG90ZGlzdCIsICAgICAgICAgICB7TlVMTH0sIDI1OTAsICJ0Y3AifSwKK3siaWRvdGRpc3QiLCAgICAgICAgICAge05VTEx9LCAyNTkwLCAidWRwIn0sCit7Im1heXRhZ3NodWZmbGUiLCAgICAgIHtOVUxMfSwgMjU5MSwgInRjcCJ9LAoreyJtYXl0YWdzaHVmZmxlIiwgICAgICB7TlVMTH0sIDI1OTEsICJ1ZHAifSwKK3sibmV0cmVrIiwgICAgICAgICAgICAge05VTEx9LCAyNTkyLCAidGNwIn0sCit7Im5ldHJlayIsICAgICAgICAgICAgIHtOVUxMfSwgMjU5MiwgInVkcCJ9LAoreyJtbnMtbWFpbCIsICAgICAgICAgICB7TlVMTH0sIDI1OTMsICJ0Y3AifSwKK3sibW5zLW1haWwiLCAgICAgICAgICAge05VTEx9LCAyNTkzLCAidWRwIn0sCit7ImR0cyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjU5NCwgInRjcCJ9LAoreyJkdHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI1OTQsICJ1ZHAifSwKK3sid29ybGRmdXNpb24xIiwgICAgICAge05VTEx9LCAyNTk1LCAidGNwIn0sCit7IndvcmxkZnVzaW9uMSIsICAgICAgIHtOVUxMfSwgMjU5NSwgInVkcCJ9LAoreyJ3b3JsZGZ1c2lvbjIiLCAgICAgICB7TlVMTH0sIDI1OTYsICJ0Y3AifSwKK3sid29ybGRmdXNpb24yIiwgICAgICAge05VTEx9LCAyNTk2LCAidWRwIn0sCit7ImhvbWVzdGVhZGdsb3J5IiwgICAgIHtOVUxMfSwgMjU5NywgInRjcCJ9LAoreyJob21lc3RlYWRnbG9yeSIsICAgICB7TlVMTH0sIDI1OTcsICJ1ZHAifSwKK3siY2l0cml4aW1hY2xpZW50IiwgICAge05VTEx9LCAyNTk4LCAidGNwIn0sCit7ImNpdHJpeGltYWNsaWVudCIsICAgIHtOVUxMfSwgMjU5OCwgInVkcCJ9LAoreyJzbmFwZCIsICAgICAgICAgICAgICB7TlVMTH0sIDI1OTksICJ0Y3AifSwKK3sic25hcGQiLCAgICAgICAgICAgICAge05VTEx9LCAyNTk5LCAidWRwIn0sCit7Imhwc3RnbWdyIiwgICAgICAgICAgIHtOVUxMfSwgMjYwMCwgInRjcCJ9LAoreyJocHN0Z21nciIsICAgICAgICAgICB7TlVMTH0sIDI2MDAsICJ1ZHAifSwKK3siZGlzY3AtY2xpZW50IiwgICAgICAge05VTEx9LCAyNjAxLCAidGNwIn0sCit7ImRpc2NwLWNsaWVudCIsICAgICAgIHtOVUxMfSwgMjYwMSwgInVkcCJ9LAoreyJkaXNjcC1zZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDI2MDIsICJ0Y3AifSwKK3siZGlzY3Atc2VydmVyIiwgICAgICAge05VTEx9LCAyNjAyLCAidWRwIn0sCit7InNlcnZpY2VtZXRlciIsICAgICAgIHtOVUxMfSwgMjYwMywgInRjcCJ9LAoreyJzZXJ2aWNlbWV0ZXIiLCAgICAgICB7TlVMTH0sIDI2MDMsICJ1ZHAifSwKK3sibnNjLWNjcyIsICAgICAgICAgICAge05VTEx9LCAyNjA0LCAidGNwIn0sCit7Im5zYy1jY3MiLCAgICAgICAgICAgIHtOVUxMfSwgMjYwNCwgInVkcCJ9LAoreyJuc2MtcG9zYSIsICAgICAgICAgICB7TlVMTH0sIDI2MDUsICJ0Y3AifSwKK3sibnNjLXBvc2EiLCAgICAgICAgICAge05VTEx9LCAyNjA1LCAidWRwIn0sCit7Im5ldG1vbiIsICAgICAgICAgICAgIHtOVUxMfSwgMjYwNiwgInRjcCJ9LAoreyJuZXRtb24iLCAgICAgICAgICAgICB7TlVMTH0sIDI2MDYsICJ1ZHAifSwKK3siY29ubmVjdGlvbiIsICAgICAgICAge05VTEx9LCAyNjA3LCAidGNwIn0sCit7ImNvbm5lY3Rpb24iLCAgICAgICAgIHtOVUxMfSwgMjYwNywgInVkcCJ9LAoreyJ3YWctc2VydmljZSIsICAgICAgICB7TlVMTH0sIDI2MDgsICJ0Y3AifSwKK3sid2FnLXNlcnZpY2UiLCAgICAgICAge05VTEx9LCAyNjA4LCAidWRwIn0sCit7InN5c3RlbS1tb25pdG9yIiwgICAgIHtOVUxMfSwgMjYwOSwgInRjcCJ9LAoreyJzeXN0ZW0tbW9uaXRvciIsICAgICB7TlVMTH0sIDI2MDksICJ1ZHAifSwKK3sidmVyc2EtdGVrIiwgICAgICAgICAge05VTEx9LCAyNjEwLCAidGNwIn0sCit7InZlcnNhLXRlayIsICAgICAgICAgIHtOVUxMfSwgMjYxMCwgInVkcCJ9LAoreyJsaW9uaGVhZCIsICAgICAgICAgICB7TlVMTH0sIDI2MTEsICJ0Y3AifSwKK3sibGlvbmhlYWQiLCAgICAgICAgICAge05VTEx9LCAyNjExLCAidWRwIn0sCit7InFwYXNhLWFnZW50IiwgICAgICAgIHtOVUxMfSwgMjYxMiwgInRjcCJ9LAoreyJxcGFzYS1hZ2VudCIsICAgICAgICB7TlVMTH0sIDI2MTIsICJ1ZHAifSwKK3sic21udHVib290c3RyYXAiLCAgICAge05VTEx9LCAyNjEzLCAidGNwIn0sCit7InNtbnR1Ym9vdHN0cmFwIiwgICAgIHtOVUxMfSwgMjYxMywgInVkcCJ9LAoreyJuZXZlcm9mZmxpbmUiLCAgICAgICB7TlVMTH0sIDI2MTQsICJ0Y3AifSwKK3sibmV2ZXJvZmZsaW5lIiwgICAgICAge05VTEx9LCAyNjE0LCAidWRwIn0sCit7ImZpcmVwb3dlciIsICAgICAgICAgIHtOVUxMfSwgMjYxNSwgInRjcCJ9LAoreyJmaXJlcG93ZXIiLCAgICAgICAgICB7TlVMTH0sIDI2MTUsICJ1ZHAifSwKK3siYXBwc3dpdGNoLWVtcCIsICAgICAge05VTEx9LCAyNjE2LCAidGNwIn0sCit7ImFwcHN3aXRjaC1lbXAiLCAgICAgIHtOVUxMfSwgMjYxNiwgInVkcCJ9LAoreyJjbWFkbWluIiwgICAgICAgICAgICB7TlVMTH0sIDI2MTcsICJ0Y3AifSwKK3siY21hZG1pbiIsICAgICAgICAgICAge05VTEx9LCAyNjE3LCAidWRwIn0sCit7InByaW9yaXR5LWUtY29tIiwgICAgIHtOVUxMfSwgMjYxOCwgInRjcCJ9LAoreyJwcmlvcml0eS1lLWNvbSIsICAgICB7TlVMTH0sIDI2MTgsICJ1ZHAifSwKK3siYnJ1Y2UiLCAgICAgICAgICAgICAge05VTEx9LCAyNjE5LCAidGNwIn0sCit7ImJydWNlIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjYxOSwgInVkcCJ9LAoreyJscHNyZWNvbW1lbmRlciIsICAgICB7TlVMTH0sIDI2MjAsICJ0Y3AifSwKK3sibHBzcmVjb21tZW5kZXIiLCAgICAge05VTEx9LCAyNjIwLCAidWRwIn0sCit7Im1pbGVzLWFwYXJ0IiwgICAgICAgIHtOVUxMfSwgMjYyMSwgInRjcCJ9LAoreyJtaWxlcy1hcGFydCIsICAgICAgICB7TlVMTH0sIDI2MjEsICJ1ZHAifSwKK3sibWV0cmljYWRiYyIsICAgICAgICAge05VTEx9LCAyNjIyLCAidGNwIn0sCit7Im1ldHJpY2FkYmMiLCAgICAgICAgIHtOVUxMfSwgMjYyMiwgInVkcCJ9LAoreyJsbWRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI2MjMsICJ0Y3AifSwKK3sibG1kcCIsICAgICAgICAgICAgICAge05VTEx9LCAyNjIzLCAidWRwIn0sCit7ImFyaWEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjYyNCwgInRjcCJ9LAoreyJhcmlhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI2MjQsICJ1ZHAifSwKK3siYmx3bmtsLXBvcnQiLCAgICAgICAge05VTEx9LCAyNjI1LCAidGNwIn0sCit7ImJsd25rbC1wb3J0IiwgICAgICAgIHtOVUxMfSwgMjYyNSwgInVkcCJ9LAoreyJnYmpkODE2IiwgICAgICAgICAgICB7TlVMTH0sIDI2MjYsICJ0Y3AifSwKK3siZ2JqZDgxNiIsICAgICAgICAgICAge05VTEx9LCAyNjI2LCAidWRwIn0sCit7Im1vc2hlYmVlcmkiLCAgICAgICAgIHtOVUxMfSwgMjYyNywgInRjcCJ9LAoreyJtb3NoZWJlZXJpIiwgICAgICAgICB7TlVMTH0sIDI2MjcsICJ1ZHAifSwKK3siZGljdCIsICAgICAgICAgICAgICAge05VTEx9LCAyNjI4LCAidGNwIn0sCit7ImRpY3QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjYyOCwgInVkcCJ9LAoreyJzaXRhcmFzZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDI2MjksICJ0Y3AifSwKK3sic2l0YXJhc2VydmVyIiwgICAgICAge05VTEx9LCAyNjI5LCAidWRwIn0sCit7InNpdGFyYW1nbXQiLCAgICAgICAgIHtOVUxMfSwgMjYzMCwgInRjcCJ9LAoreyJzaXRhcmFtZ210IiwgICAgICAgICB7TlVMTH0sIDI2MzAsICJ1ZHAifSwKK3sic2l0YXJhZGlyIiwgICAgICAgICAge05VTEx9LCAyNjMxLCAidGNwIn0sCit7InNpdGFyYWRpciIsICAgICAgICAgIHtOVUxMfSwgMjYzMSwgInVkcCJ9LAoreyJpcmRnLXBvc3QiLCAgICAgICAgICB7TlVMTH0sIDI2MzIsICJ0Y3AifSwKK3siaXJkZy1wb3N0IiwgICAgICAgICAge05VTEx9LCAyNjMyLCAidWRwIn0sCit7ImludGVyaW50ZWxsaSIsICAgICAgIHtOVUxMfSwgMjYzMywgInRjcCJ9LAoreyJpbnRlcmludGVsbGkiLCAgICAgICB7TlVMTH0sIDI2MzMsICJ1ZHAifSwKK3sicGstZWxlY3Ryb25pY3MiLCAgICAge05VTEx9LCAyNjM0LCAidGNwIn0sCit7InBrLWVsZWN0cm9uaWNzIiwgICAgIHtOVUxMfSwgMjYzNCwgInVkcCJ9LAoreyJiYWNrYnVybmVyIiwgICAgICAgICB7TlVMTH0sIDI2MzUsICJ0Y3AifSwKK3siYmFja2J1cm5lciIsICAgICAgICAge05VTEx9LCAyNjM1LCAidWRwIn0sCit7InNvbHZlIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjYzNiwgInRjcCJ9LAoreyJzb2x2ZSIsICAgICAgICAgICAgICB7TlVMTH0sIDI2MzYsICJ1ZHAifSwKK3siaW1kb2NzdmMiLCAgICAgICAgICAge05VTEx9LCAyNjM3LCAidGNwIn0sCit7ImltZG9jc3ZjIiwgICAgICAgICAgIHtOVUxMfSwgMjYzNywgInVkcCJ9LAoreyJzeWJhc2Vhbnl3aGVyZSIsICAgICB7TlVMTH0sIDI2MzgsICJ0Y3AifSwKK3sic3liYXNlYW55d2hlcmUiLCAgICAge05VTEx9LCAyNjM4LCAidWRwIn0sCit7ImFtaW5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMjYzOSwgInRjcCJ9LAoreyJhbWluZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDI2MzksICJ1ZHAifSwKK3sic2FpX3NlbnRsbSIsICAgICAgICAge05VTEx9LCAyNjQwLCAidGNwIn0sCit7InNhaV9zZW50bG0iLCAgICAgICAgIHtOVUxMfSwgMjY0MCwgInVkcCJ9LAoreyJoZGwtc3J2IiwgICAgICAgICAgICB7TlVMTH0sIDI2NDEsICJ0Y3AifSwKK3siaGRsLXNydiIsICAgICAgICAgICAge05VTEx9LCAyNjQxLCAidWRwIn0sCit7InRyYWdpYyIsICAgICAgICAgICAgIHtOVUxMfSwgMjY0MiwgInRjcCJ9LAoreyJ0cmFnaWMiLCAgICAgICAgICAgICB7TlVMTH0sIDI2NDIsICJ1ZHAifSwKK3siZ3RlLXNhbXAiLCAgICAgICAgICAge05VTEx9LCAyNjQzLCAidGNwIn0sCit7Imd0ZS1zYW1wIiwgICAgICAgICAgIHtOVUxMfSwgMjY0MywgInVkcCJ9LAoreyJ0cmF2c29mdC1pcHgtdCIsICAgICB7TlVMTH0sIDI2NDQsICJ0Y3AifSwKK3sidHJhdnNvZnQtaXB4LXQiLCAgICAge05VTEx9LCAyNjQ0LCAidWRwIn0sCit7Im5vdmVsbC1pcHgtY21kIiwgICAgIHtOVUxMfSwgMjY0NSwgInRjcCJ9LAoreyJub3ZlbGwtaXB4LWNtZCIsICAgICB7TlVMTH0sIDI2NDUsICJ1ZHAifSwKK3siYW5kLWxtIiwgICAgICAgICAgICAge05VTEx9LCAyNjQ2LCAidGNwIn0sCit7ImFuZC1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMjY0NiwgInVkcCJ9LAoreyJzeW5jc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDI2NDcsICJ0Y3AifSwKK3sic3luY3NlcnZlciIsICAgICAgICAge05VTEx9LCAyNjQ3LCAidWRwIn0sCit7InVwc25vdGlmeXByb3QiLCAgICAgIHtOVUxMfSwgMjY0OCwgInRjcCJ9LAoreyJ1cHNub3RpZnlwcm90IiwgICAgICB7TlVMTH0sIDI2NDgsICJ1ZHAifSwKK3sidnBzaXBwb3J0IiwgICAgICAgICAge05VTEx9LCAyNjQ5LCAidGNwIn0sCit7InZwc2lwcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMjY0OSwgInVkcCJ9LAoreyJlcmlzdHdvZ3VucyIsICAgICAgICB7TlVMTH0sIDI2NTAsICJ0Y3AifSwKK3siZXJpc3R3b2d1bnMiLCAgICAgICAge05VTEx9LCAyNjUwLCAidWRwIn0sCit7ImViaW5zaXRlIiwgICAgICAgICAgIHtOVUxMfSwgMjY1MSwgInRjcCJ9LAoreyJlYmluc2l0ZSIsICAgICAgICAgICB7TlVMTH0sIDI2NTEsICJ1ZHAifSwKK3siaW50ZXJwYXRocGFuZWwiLCAgICAge05VTEx9LCAyNjUyLCAidGNwIn0sCit7ImludGVycGF0aHBhbmVsIiwgICAgIHtOVUxMfSwgMjY1MiwgInVkcCJ9LAoreyJzb251cyIsICAgICAgICAgICAgICB7TlVMTH0sIDI2NTMsICJ0Y3AifSwKK3sic29udXMiLCAgICAgICAgICAgICAge05VTEx9LCAyNjUzLCAidWRwIn0sCit7ImNvcmVsX3ZuY2FkbWluIiwgICAgIHtOVUxMfSwgMjY1NCwgInRjcCJ9LAoreyJjb3JlbF92bmNhZG1pbiIsICAgICB7TlVMTH0sIDI2NTQsICJ1ZHAifSwKK3sidW5nbHVlIiwgICAgICAgICAgICAge05VTEx9LCAyNjU1LCAidGNwIn0sCit7InVuZ2x1ZSIsICAgICAgICAgICAgIHtOVUxMfSwgMjY1NSwgInVkcCJ9LAoreyJrYW5hIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI2NTYsICJ0Y3AifSwKK3sia2FuYSIsICAgICAgICAgICAgICAge05VTEx9LCAyNjU2LCAidWRwIn0sCit7InNucy1kaXNwYXRjaGVyIiwgICAgIHtOVUxMfSwgMjY1NywgInRjcCJ9LAoreyJzbnMtZGlzcGF0Y2hlciIsICAgICB7TlVMTH0sIDI2NTcsICJ1ZHAifSwKK3sic25zLWFkbWluIiwgICAgICAgICAge05VTEx9LCAyNjU4LCAidGNwIn0sCit7InNucy1hZG1pbiIsICAgICAgICAgIHtOVUxMfSwgMjY1OCwgInVkcCJ9LAoreyJzbnMtcXVlcnkiLCAgICAgICAgICB7TlVMTH0sIDI2NTksICJ0Y3AifSwKK3sic25zLXF1ZXJ5IiwgICAgICAgICAge05VTEx9LCAyNjU5LCAidWRwIn0sCit7ImdjbW9uaXRvciIsICAgICAgICAgIHtOVUxMfSwgMjY2MCwgInRjcCJ9LAoreyJnY21vbml0b3IiLCAgICAgICAgICB7TlVMTH0sIDI2NjAsICJ1ZHAifSwKK3sib2xob3N0IiwgICAgICAgICAgICAge05VTEx9LCAyNjYxLCAidGNwIn0sCit7Im9saG9zdCIsICAgICAgICAgICAgIHtOVUxMfSwgMjY2MSwgInVkcCJ9LAoreyJiaW50ZWMtY2FwaSIsICAgICAgICB7TlVMTH0sIDI2NjIsICJ0Y3AifSwKK3siYmludGVjLWNhcGkiLCAgICAgICAge05VTEx9LCAyNjYyLCAidWRwIn0sCit7ImJpbnRlYy10YXBpIiwgICAgICAgIHtOVUxMfSwgMjY2MywgInRjcCJ9LAoreyJiaW50ZWMtdGFwaSIsICAgICAgICB7TlVMTH0sIDI2NjMsICJ1ZHAifSwKK3sicGF0cm9sLW1xLWdtIiwgICAgICAge05VTEx9LCAyNjY0LCAidGNwIn0sCit7InBhdHJvbC1tcS1nbSIsICAgICAgIHtOVUxMfSwgMjY2NCwgInVkcCJ9LAoreyJwYXRyb2wtbXEtbm0iLCAgICAgICB7TlVMTH0sIDI2NjUsICJ0Y3AifSwKK3sicGF0cm9sLW1xLW5tIiwgICAgICAge05VTEx9LCAyNjY1LCAidWRwIn0sCit7ImV4dGVuc2lzIiwgICAgICAgICAgIHtOVUxMfSwgMjY2NiwgInRjcCJ9LAoreyJleHRlbnNpcyIsICAgICAgICAgICB7TlVMTH0sIDI2NjYsICJ1ZHAifSwKK3siYWxhcm0tY2xvY2stcyIsICAgICAge05VTEx9LCAyNjY3LCAidGNwIn0sCit7ImFsYXJtLWNsb2NrLXMiLCAgICAgIHtOVUxMfSwgMjY2NywgInVkcCJ9LAoreyJhbGFybS1jbG9jay1jIiwgICAgICB7TlVMTH0sIDI2NjgsICJ0Y3AifSwKK3siYWxhcm0tY2xvY2stYyIsICAgICAge05VTEx9LCAyNjY4LCAidWRwIn0sCit7InRvYWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjY2OSwgInRjcCJ9LAoreyJ0b2FkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI2NjksICJ1ZHAifSwKK3sidHZlLWFubm91bmNlIiwgICAgICAge05VTEx9LCAyNjcwLCAidGNwIn0sCit7InR2ZS1hbm5vdW5jZSIsICAgICAgIHtOVUxMfSwgMjY3MCwgInVkcCJ9LAoreyJuZXdsaXhyZWciLCAgICAgICAgICB7TlVMTH0sIDI2NzEsICJ0Y3AifSwKK3sibmV3bGl4cmVnIiwgICAgICAgICAge05VTEx9LCAyNjcxLCAidWRwIn0sCit7Im5oc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMjY3MiwgInRjcCJ9LAoreyJuaHNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDI2NzIsICJ1ZHAifSwKK3siZmlyc3RjYWxsNDIiLCAgICAgICAge05VTEx9LCAyNjczLCAidGNwIn0sCit7ImZpcnN0Y2FsbDQyIiwgICAgICAgIHtOVUxMfSwgMjY3MywgInVkcCJ9LAoreyJld25uIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI2NzQsICJ0Y3AifSwKK3siZXdubiIsICAgICAgICAgICAgICAge05VTEx9LCAyNjc0LCAidWRwIn0sCit7InR0Yy1ldGFwIiwgICAgICAgICAgIHtOVUxMfSwgMjY3NSwgInRjcCJ9LAoreyJ0dGMtZXRhcCIsICAgICAgICAgICB7TlVMTH0sIDI2NzUsICJ1ZHAifSwKK3sic2ltc2xpbmsiLCAgICAgICAgICAge05VTEx9LCAyNjc2LCAidGNwIn0sCit7InNpbXNsaW5rIiwgICAgICAgICAgIHtOVUxMfSwgMjY3NiwgInVkcCJ9LAoreyJnYWRnZXRnYXRlMXdheSIsICAgICB7TlVMTH0sIDI2NzcsICJ0Y3AifSwKK3siZ2FkZ2V0Z2F0ZTF3YXkiLCAgICAge05VTEx9LCAyNjc3LCAidWRwIn0sCit7ImdhZGdldGdhdGUyd2F5IiwgICAgIHtOVUxMfSwgMjY3OCwgInRjcCJ9LAoreyJnYWRnZXRnYXRlMndheSIsICAgICB7TlVMTH0sIDI2NzgsICJ1ZHAifSwKK3sic3luY3NlcnZlcnNzbCIsICAgICAge05VTEx9LCAyNjc5LCAidGNwIn0sCit7InN5bmNzZXJ2ZXJzc2wiLCAgICAgIHtOVUxMfSwgMjY3OSwgInVkcCJ9LAoreyJweGMtc2FweG9tIiwgICAgICAgICB7TlVMTH0sIDI2ODAsICJ0Y3AifSwKK3sicHhjLXNhcHhvbSIsICAgICAgICAge05VTEx9LCAyNjgwLCAidWRwIn0sCit7Im1wbmpzb21iIiwgICAgICAgICAgIHtOVUxMfSwgMjY4MSwgInRjcCJ9LAoreyJtcG5qc29tYiIsICAgICAgICAgICB7TlVMTH0sIDI2ODEsICJ1ZHAifSwKK3sibmNkbG9hZGJhbGFuY2UiLCAgICAge05VTEx9LCAyNjgzLCAidGNwIn0sCit7Im5jZGxvYWRiYWxhbmNlIiwgICAgIHtOVUxMfSwgMjY4MywgInVkcCJ9LAoreyJtcG5qc29zdiIsICAgICAgICAgICB7TlVMTH0sIDI2ODQsICJ0Y3AifSwKK3sibXBuanNvc3YiLCAgICAgICAgICAge05VTEx9LCAyNjg0LCAidWRwIn0sCit7Im1wbmpzb2NsIiwgICAgICAgICAgIHtOVUxMfSwgMjY4NSwgInRjcCJ9LAoreyJtcG5qc29jbCIsICAgICAgICAgICB7TlVMTH0sIDI2ODUsICJ1ZHAifSwKK3sibXBuanNvbWciLCAgICAgICAgICAge05VTEx9LCAyNjg2LCAidGNwIn0sCit7Im1wbmpzb21nIiwgICAgICAgICAgIHtOVUxMfSwgMjY4NiwgInVkcCJ9LAoreyJwcS1saWMtbWdtdCIsICAgICAgICB7TlVMTH0sIDI2ODcsICJ0Y3AifSwKK3sicHEtbGljLW1nbXQiLCAgICAgICAge05VTEx9LCAyNjg3LCAidWRwIn0sCit7Im1kLWNnLWh0dHAiLCAgICAgICAgIHtOVUxMfSwgMjY4OCwgInRjcCJ9LAoreyJtZC1jZy1odHRwIiwgICAgICAgICB7TlVMTH0sIDI2ODgsICJ1ZHAifSwKK3siZmFzdGx5bngiLCAgICAgICAgICAge05VTEx9LCAyNjg5LCAidGNwIn0sCit7ImZhc3RseW54IiwgICAgICAgICAgIHtOVUxMfSwgMjY4OSwgInVkcCJ9LAoreyJocC1ubm0tZGF0YSIsICAgICAgICB7TlVMTH0sIDI2OTAsICJ0Y3AifSwKK3siaHAtbm5tLWRhdGEiLCAgICAgICAge05VTEx9LCAyNjkwLCAidWRwIn0sCit7Iml0aW50ZXJuZXQiLCAgICAgICAgIHtOVUxMfSwgMjY5MSwgInRjcCJ9LAoreyJpdGludGVybmV0IiwgICAgICAgICB7TlVMTH0sIDI2OTEsICJ1ZHAifSwKK3siYWRtaW5zLWxtcyIsICAgICAgICAge05VTEx9LCAyNjkyLCAidGNwIn0sCit7ImFkbWlucy1sbXMiLCAgICAgICAgIHtOVUxMfSwgMjY5MiwgInVkcCJ9LAoreyJwd3JzZXZlbnQiLCAgICAgICAgICB7TlVMTH0sIDI2OTQsICJ0Y3AifSwKK3sicHdyc2V2ZW50IiwgICAgICAgICAge05VTEx9LCAyNjk0LCAidWRwIn0sCit7InZzcHJlYWQiLCAgICAgICAgICAgIHtOVUxMfSwgMjY5NSwgInRjcCJ9LAoreyJ2c3ByZWFkIiwgICAgICAgICAgICB7TlVMTH0sIDI2OTUsICJ1ZHAifSwKK3sidW5pZnlhZG1pbiIsICAgICAgICAge05VTEx9LCAyNjk2LCAidGNwIn0sCit7InVuaWZ5YWRtaW4iLCAgICAgICAgIHtOVUxMfSwgMjY5NiwgInVkcCJ9LAoreyJvY2Utc25tcC10cmFwIiwgICAgICB7TlVMTH0sIDI2OTcsICJ0Y3AifSwKK3sib2NlLXNubXAtdHJhcCIsICAgICAge05VTEx9LCAyNjk3LCAidWRwIn0sCit7Im1jay1pdnBpcCIsICAgICAgICAgIHtOVUxMfSwgMjY5OCwgInRjcCJ9LAoreyJtY2staXZwaXAiLCAgICAgICAgICB7TlVMTH0sIDI2OTgsICJ1ZHAifSwKK3siY3NvZnQtcGx1c2NsbnQiLCAgICAge05VTEx9LCAyNjk5LCAidGNwIn0sCit7ImNzb2Z0LXBsdXNjbG50IiwgICAgIHtOVUxMfSwgMjY5OSwgInVkcCJ9LAoreyJ0cWRhdGEiLCAgICAgICAgICAgICB7TlVMTH0sIDI3MDAsICJ0Y3AifSwKK3sidHFkYXRhIiwgICAgICAgICAgICAge05VTEx9LCAyNzAwLCAidWRwIn0sCit7InNtcy1yY2luZm8iLCAgICAgICAgIHtOVUxMfSwgMjcwMSwgInRjcCJ9LAoreyJzbXMtcmNpbmZvIiwgICAgICAgICB7TlVMTH0sIDI3MDEsICJ1ZHAifSwKK3sic21zLXhmZXIiLCAgICAgICAgICAge05VTEx9LCAyNzAyLCAidGNwIn0sCit7InNtcy14ZmVyIiwgICAgICAgICAgIHtOVUxMfSwgMjcwMiwgInVkcCJ9LAoreyJzbXMtY2hhdCIsICAgICAgICAgICB7TlVMTH0sIDI3MDMsICJ0Y3AifSwKK3sic21zLWNoYXQiLCAgICAgICAgICAge05VTEx9LCAyNzAzLCAidWRwIn0sCit7InNtcy1yZW1jdHJsIiwgICAgICAgIHtOVUxMfSwgMjcwNCwgInRjcCJ9LAoreyJzbXMtcmVtY3RybCIsICAgICAgICB7TlVMTH0sIDI3MDQsICJ1ZHAifSwKK3sic2RzLWFkbWluIiwgICAgICAgICAge05VTEx9LCAyNzA1LCAidGNwIn0sCit7InNkcy1hZG1pbiIsICAgICAgICAgIHtOVUxMfSwgMjcwNSwgInVkcCJ9LAoreyJuY2RtaXJyb3JpbmciLCAgICAgICB7TlVMTH0sIDI3MDYsICJ0Y3AifSwKK3sibmNkbWlycm9yaW5nIiwgICAgICAge05VTEx9LCAyNzA2LCAidWRwIn0sCit7ImVtY3N5bWFwaXBvcnQiLCAgICAgIHtOVUxMfSwgMjcwNywgInRjcCJ9LAoreyJlbWNzeW1hcGlwb3J0IiwgICAgICB7TlVMTH0sIDI3MDcsICJ1ZHAifSwKK3siYmFueWFuLW5ldCIsICAgICAgICAge05VTEx9LCAyNzA4LCAidGNwIn0sCit7ImJhbnlhbi1uZXQiLCAgICAgICAgIHtOVUxMfSwgMjcwOCwgInVkcCJ9LAoreyJzdXBlcm1vbiIsICAgICAgICAgICB7TlVMTH0sIDI3MDksICJ0Y3AifSwKK3sic3VwZXJtb24iLCAgICAgICAgICAge05VTEx9LCAyNzA5LCAidWRwIn0sCit7InNzby1zZXJ2aWNlIiwgICAgICAgIHtOVUxMfSwgMjcxMCwgInRjcCJ9LAoreyJzc28tc2VydmljZSIsICAgICAgICB7TlVMTH0sIDI3MTAsICJ1ZHAifSwKK3sic3NvLWNvbnRyb2wiLCAgICAgICAge05VTEx9LCAyNzExLCAidGNwIn0sCit7InNzby1jb250cm9sIiwgICAgICAgIHtOVUxMfSwgMjcxMSwgInVkcCJ9LAoreyJhb2NwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI3MTIsICJ0Y3AifSwKK3siYW9jcCIsICAgICAgICAgICAgICAge05VTEx9LCAyNzEyLCAidWRwIn0sCit7InJhdmVudGJzIiwgICAgICAgICAgIHtOVUxMfSwgMjcxMywgInRjcCJ9LAoreyJyYXZlbnRicyIsICAgICAgICAgICB7TlVMTH0sIDI3MTMsICJ1ZHAifSwKK3sicmF2ZW50ZG0iLCAgICAgICAgICAge05VTEx9LCAyNzE0LCAidGNwIn0sCit7InJhdmVudGRtIiwgICAgICAgICAgIHtOVUxMfSwgMjcxNCwgInVkcCJ9LAoreyJocHN0Z21ncjIiLCAgICAgICAgICB7TlVMTH0sIDI3MTUsICJ0Y3AifSwKK3siaHBzdGdtZ3IyIiwgICAgICAgICAge05VTEx9LCAyNzE1LCAidWRwIn0sCit7Imlub3ZhLWlwLWRpc2NvIiwgICAgIHtOVUxMfSwgMjcxNiwgInRjcCJ9LAoreyJpbm92YS1pcC1kaXNjbyIsICAgICB7TlVMTH0sIDI3MTYsICJ1ZHAifSwKK3sicG4tcmVxdWVzdGVyIiwgICAgICAge05VTEx9LCAyNzE3LCAidGNwIn0sCit7InBuLXJlcXVlc3RlciIsICAgICAgIHtOVUxMfSwgMjcxNywgInVkcCJ9LAoreyJwbi1yZXF1ZXN0ZXIyIiwgICAgICB7TlVMTH0sIDI3MTgsICJ0Y3AifSwKK3sicG4tcmVxdWVzdGVyMiIsICAgICAge05VTEx9LCAyNzE4LCAidWRwIn0sCit7InNjYW4tY2hhbmdlIiwgICAgICAgIHtOVUxMfSwgMjcxOSwgInRjcCJ9LAoreyJzY2FuLWNoYW5nZSIsICAgICAgICB7TlVMTH0sIDI3MTksICJ1ZHAifSwKK3sid2thcnMiLCAgICAgICAgICAgICAge05VTEx9LCAyNzIwLCAidGNwIn0sCit7IndrYXJzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjcyMCwgInVkcCJ9LAoreyJzbWFydC1kaWFnbm9zZSIsICAgICB7TlVMTH0sIDI3MjEsICJ0Y3AifSwKK3sic21hcnQtZGlhZ25vc2UiLCAgICAge05VTEx9LCAyNzIxLCAidWRwIn0sCit7InByb2FjdGl2ZXNydnIiLCAgICAgIHtOVUxMfSwgMjcyMiwgInRjcCJ9LAoreyJwcm9hY3RpdmVzcnZyIiwgICAgICB7TlVMTH0sIDI3MjIsICJ1ZHAifSwKK3sid2F0Y2hkb2ctbnQiLCAgICAgICAge05VTEx9LCAyNzIzLCAidGNwIn0sCit7IndhdGNoZG9nLW50IiwgICAgICAgIHtOVUxMfSwgMjcyMywgInVkcCJ9LAoreyJxb3RwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDI3MjQsICJ0Y3AifSwKK3sicW90cHMiLCAgICAgICAgICAgICAge05VTEx9LCAyNzI0LCAidWRwIn0sCit7Im1zb2xhcC1wdHAyIiwgICAgICAgIHtOVUxMfSwgMjcyNSwgInRjcCJ9LAoreyJtc29sYXAtcHRwMiIsICAgICAgICB7TlVMTH0sIDI3MjUsICJ1ZHAifSwKK3sidGFtcyIsICAgICAgICAgICAgICAge05VTEx9LCAyNzI2LCAidGNwIn0sCit7InRhbXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjcyNiwgInVkcCJ9LAoreyJtZ2NwLWNhbGxhZ2VudCIsICAgICB7TlVMTH0sIDI3MjcsICJ0Y3AifSwKK3sibWdjcC1jYWxsYWdlbnQiLCAgICAge05VTEx9LCAyNzI3LCAidWRwIn0sCit7InNxZHIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjcyOCwgInRjcCJ9LAoreyJzcWRyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI3MjgsICJ1ZHAifSwKK3sidGNpbS1jb250cm9sIiwgICAgICAge05VTEx9LCAyNzI5LCAidGNwIn0sCit7InRjaW0tY29udHJvbCIsICAgICAgIHtOVUxMfSwgMjcyOSwgInVkcCJ9LAoreyJuZWMtcmFpZHBsdXMiLCAgICAgICB7TlVMTH0sIDI3MzAsICJ0Y3AifSwKK3sibmVjLXJhaWRwbHVzIiwgICAgICAge05VTEx9LCAyNzMwLCAidWRwIn0sCit7ImZ5cmUtbWVzc2FuZ2VyIiwgICAgIHtOVUxMfSwgMjczMSwgInRjcCJ9LAoreyJmeXJlLW1lc3NhbmdlciIsICAgICB7TlVMTH0sIDI3MzEsICJ1ZHAifSwKK3siZzVtIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNzMyLCAidGNwIn0sCit7Imc1bSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjczMiwgInVkcCJ9LAoreyJzaWduZXQtY3RmIiwgICAgICAgICB7TlVMTH0sIDI3MzMsICJ0Y3AifSwKK3sic2lnbmV0LWN0ZiIsICAgICAgICAge05VTEx9LCAyNzMzLCAidWRwIn0sCit7ImNjcy1zb2Z0d2FyZSIsICAgICAgIHtOVUxMfSwgMjczNCwgInRjcCJ9LAoreyJjY3Mtc29mdHdhcmUiLCAgICAgICB7TlVMTH0sIDI3MzQsICJ1ZHAifSwKK3sibmV0aXEtbWMiLCAgICAgICAgICAge05VTEx9LCAyNzM1LCAidGNwIn0sCit7Im5ldGlxLW1jIiwgICAgICAgICAgIHtOVUxMfSwgMjczNSwgInVkcCJ9LAoreyJyYWR3aXotbm1zLXNydiIsICAgICB7TlVMTH0sIDI3MzYsICJ0Y3AifSwKK3sicmFkd2l6LW5tcy1zcnYiLCAgICAge05VTEx9LCAyNzM2LCAidWRwIn0sCit7InNycC1mZWVkYmFjayIsICAgICAgIHtOVUxMfSwgMjczNywgInRjcCJ9LAoreyJzcnAtZmVlZGJhY2siLCAgICAgICB7TlVMTH0sIDI3MzcsICJ1ZHAifSwKK3sibmRsLXRjcC1vaXMtZ3ciLCAgICAge05VTEx9LCAyNzM4LCAidGNwIn0sCit7Im5kbC10Y3Atb2lzLWd3IiwgICAgIHtOVUxMfSwgMjczOCwgInVkcCJ9LAoreyJ0bi10aW1pbmciLCAgICAgICAgICB7TlVMTH0sIDI3MzksICJ0Y3AifSwKK3sidG4tdGltaW5nIiwgICAgICAgICAge05VTEx9LCAyNzM5LCAidWRwIn0sCit7ImFsYXJtIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjc0MCwgInRjcCJ9LAoreyJhbGFybSIsICAgICAgICAgICAgICB7TlVMTH0sIDI3NDAsICJ1ZHAifSwKK3sidHNiIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNzQxLCAidGNwIn0sCit7InRzYiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjc0MSwgInVkcCJ9LAoreyJ0c2IyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI3NDIsICJ0Y3AifSwKK3sidHNiMiIsICAgICAgICAgICAgICAge05VTEx9LCAyNzQyLCAidWRwIn0sCit7Im11cngiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjc0MywgInRjcCJ9LAoreyJtdXJ4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDI3NDMsICJ1ZHAifSwKK3siaG9ueWFrdSIsICAgICAgICAgICAge05VTEx9LCAyNzQ0LCAidGNwIn0sCit7Imhvbnlha3UiLCAgICAgICAgICAgIHtOVUxMfSwgMjc0NCwgInVkcCJ9LAoreyJ1cmJpc25ldCIsICAgICAgICAgICB7TlVMTH0sIDI3NDUsICJ0Y3AifSwKK3sidXJiaXNuZXQiLCAgICAgICAgICAge05VTEx9LCAyNzQ1LCAidWRwIn0sCit7ImNwdWRwZW5jYXAiLCAgICAgICAgIHtOVUxMfSwgMjc0NiwgInRjcCJ9LAoreyJjcHVkcGVuY2FwIiwgICAgICAgICB7TlVMTH0sIDI3NDYsICJ1ZHAifSwKK3siZmppcHBvbC1zd3JseSIsICAgICAge05VTEx9LCAyNzQ3LCAidGNwIn0sCit7ImZqaXBwb2wtc3dybHkiLCAgICAgIHtOVUxMfSwgMjc0NywgInVkcCJ9LAoreyJmamlwcG9sLXBvbHN2ciIsICAgICB7TlVMTH0sIDI3NDgsICJ0Y3AifSwKK3siZmppcHBvbC1wb2xzdnIiLCAgICAge05VTEx9LCAyNzQ4LCAidWRwIn0sCit7ImZqaXBwb2wtY25zbCIsICAgICAgIHtOVUxMfSwgMjc0OSwgInRjcCJ9LAoreyJmamlwcG9sLWNuc2wiLCAgICAgICB7TlVMTH0sIDI3NDksICJ1ZHAifSwKK3siZmppcHBvbC1wb3J0MSIsICAgICAge05VTEx9LCAyNzUwLCAidGNwIn0sCit7ImZqaXBwb2wtcG9ydDEiLCAgICAgIHtOVUxMfSwgMjc1MCwgInVkcCJ9LAoreyJmamlwcG9sLXBvcnQyIiwgICAgICB7TlVMTH0sIDI3NTEsICJ0Y3AifSwKK3siZmppcHBvbC1wb3J0MiIsICAgICAge05VTEx9LCAyNzUxLCAidWRwIn0sCit7InJzaXN5c2FjY2VzcyIsICAgICAgIHtOVUxMfSwgMjc1MiwgInRjcCJ9LAoreyJyc2lzeXNhY2Nlc3MiLCAgICAgICB7TlVMTH0sIDI3NTIsICJ1ZHAifSwKK3siZGUtc3BvdCIsICAgICAgICAgICAge05VTEx9LCAyNzUzLCAidGNwIn0sCit7ImRlLXNwb3QiLCAgICAgICAgICAgIHtOVUxMfSwgMjc1MywgInVkcCJ9LAoreyJhcG9sbG8tY2MiLCAgICAgICAgICB7TlVMTH0sIDI3NTQsICJ0Y3AifSwKK3siYXBvbGxvLWNjIiwgICAgICAgICAge05VTEx9LCAyNzU0LCAidWRwIn0sCit7ImV4cHJlc3NwYXkiLCAgICAgICAgIHtOVUxMfSwgMjc1NSwgInRjcCJ9LAoreyJleHByZXNzcGF5IiwgICAgICAgICB7TlVMTH0sIDI3NTUsICJ1ZHAifSwKK3sic2ltcGxlbWVudC10aWUiLCAgICAge05VTEx9LCAyNzU2LCAidGNwIn0sCit7InNpbXBsZW1lbnQtdGllIiwgICAgIHtOVUxMfSwgMjc1NiwgInVkcCJ9LAoreyJjbnJwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI3NTcsICJ0Y3AifSwKK3siY25ycCIsICAgICAgICAgICAgICAge05VTEx9LCAyNzU3LCAidWRwIn0sCit7ImFwb2xsby1zdGF0dXMiLCAgICAgIHtOVUxMfSwgMjc1OCwgInRjcCJ9LAoreyJhcG9sbG8tc3RhdHVzIiwgICAgICB7TlVMTH0sIDI3NTgsICJ1ZHAifSwKK3siYXBvbGxvLWdtcyIsICAgICAgICAge05VTEx9LCAyNzU5LCAidGNwIn0sCit7ImFwb2xsby1nbXMiLCAgICAgICAgIHtOVUxMfSwgMjc1OSwgInVkcCJ9LAoreyJzYWJhbXMiLCAgICAgICAgICAgICB7TlVMTH0sIDI3NjAsICJ0Y3AifSwKK3sic2FiYW1zIiwgICAgICAgICAgICAge05VTEx9LCAyNzYwLCAidWRwIn0sCit7ImRpY29tLWlzY2wiLCAgICAgICAgIHtOVUxMfSwgMjc2MSwgInRjcCJ9LAoreyJkaWNvbS1pc2NsIiwgICAgICAgICB7TlVMTH0sIDI3NjEsICJ1ZHAifSwKK3siZGljb20tdGxzIiwgICAgICAgICAge05VTEx9LCAyNzYyLCAidGNwIn0sCit7ImRpY29tLXRscyIsICAgICAgICAgIHtOVUxMfSwgMjc2MiwgInVkcCJ9LAoreyJkZXNrdG9wLWRuYSIsICAgICAgICB7TlVMTH0sIDI3NjMsICJ0Y3AifSwKK3siZGVza3RvcC1kbmEiLCAgICAgICAge05VTEx9LCAyNzYzLCAidWRwIn0sCit7ImRhdGEtaW5zdXJhbmNlIiwgICAgIHtOVUxMfSwgMjc2NCwgInRjcCJ9LAoreyJkYXRhLWluc3VyYW5jZSIsICAgICB7TlVMTH0sIDI3NjQsICJ1ZHAifSwKK3sicWlwLWF1ZHVwIiwgICAgICAgICAge05VTEx9LCAyNzY1LCAidGNwIn0sCit7InFpcC1hdWR1cCIsICAgICAgICAgIHtOVUxMfSwgMjc2NSwgInVkcCJ9LAoreyJjb21wYXEtc2NwIiwgICAgICAgICB7TlVMTH0sIDI3NjYsICJ0Y3AifSwKK3siY29tcGFxLXNjcCIsICAgICAgICAge05VTEx9LCAyNzY2LCAidWRwIn0sCit7InVhZHRjIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjc2NywgInRjcCJ9LAoreyJ1YWR0YyIsICAgICAgICAgICAgICB7TlVMTH0sIDI3NjcsICJ1ZHAifSwKK3sidWFjcyIsICAgICAgICAgICAgICAge05VTEx9LCAyNzY4LCAidGNwIn0sCit7InVhY3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjc2OCwgInVkcCJ9LAoreyJleGNlIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI3NjksICJ0Y3AifSwKK3siZXhjZSIsICAgICAgICAgICAgICAge05VTEx9LCAyNzY5LCAidWRwIn0sCit7InZlcm9uaWNhIiwgICAgICAgICAgIHtOVUxMfSwgMjc3MCwgInRjcCJ9LAoreyJ2ZXJvbmljYSIsICAgICAgICAgICB7TlVMTH0sIDI3NzAsICJ1ZHAifSwKK3sidmVyZ2VuY2VjbSIsICAgICAgICAge05VTEx9LCAyNzcxLCAidGNwIn0sCit7InZlcmdlbmNlY20iLCAgICAgICAgIHtOVUxMfSwgMjc3MSwgInVkcCJ9LAoreyJhdXJpcyIsICAgICAgICAgICAgICB7TlVMTH0sIDI3NzIsICJ0Y3AifSwKK3siYXVyaXMiLCAgICAgICAgICAgICAge05VTEx9LCAyNzcyLCAidWRwIn0sCit7InJiYWtjdXAxIiwgICAgICAgICAgIHtOVUxMfSwgMjc3MywgInRjcCJ9LAoreyJyYmFrY3VwMSIsICAgICAgICAgICB7TlVMTH0sIDI3NzMsICJ1ZHAifSwKK3sicmJha2N1cDIiLCAgICAgICAgICAge05VTEx9LCAyNzc0LCAidGNwIn0sCit7InJiYWtjdXAyIiwgICAgICAgICAgIHtOVUxMfSwgMjc3NCwgInVkcCJ9LAoreyJzbXBwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI3NzUsICJ0Y3AifSwKK3sic21wcCIsICAgICAgICAgICAgICAge05VTEx9LCAyNzc1LCAidWRwIn0sCit7InJpZGdld2F5MSIsICAgICAgICAgIHtOVUxMfSwgMjc3NiwgInRjcCJ9LAoreyJyaWRnZXdheTEiLCAgICAgICAgICB7TlVMTH0sIDI3NzYsICJ1ZHAifSwKK3sicmlkZ2V3YXkyIiwgICAgICAgICAge05VTEx9LCAyNzc3LCAidGNwIn0sCit7InJpZGdld2F5MiIsICAgICAgICAgIHtOVUxMfSwgMjc3NywgInVkcCJ9LAoreyJnd2VuLXNvbnlhIiwgICAgICAgICB7TlVMTH0sIDI3NzgsICJ0Y3AifSwKK3siZ3dlbi1zb255YSIsICAgICAgICAge05VTEx9LCAyNzc4LCAidWRwIn0sCit7ImxiYy1zeW5jIiwgICAgICAgICAgIHtOVUxMfSwgMjc3OSwgInRjcCJ9LAoreyJsYmMtc3luYyIsICAgICAgICAgICB7TlVMTH0sIDI3NzksICJ1ZHAifSwKK3sibGJjLWNvbnRyb2wiLCAgICAgICAge05VTEx9LCAyNzgwLCAidGNwIn0sCit7ImxiYy1jb250cm9sIiwgICAgICAgIHtOVUxMfSwgMjc4MCwgInVkcCJ9LAoreyJ3aG9zZWxscyIsICAgICAgICAgICB7TlVMTH0sIDI3ODEsICJ0Y3AifSwKK3sid2hvc2VsbHMiLCAgICAgICAgICAge05VTEx9LCAyNzgxLCAidWRwIn0sCit7ImV2ZXJ5ZGF5cmMiLCAgICAgICAgIHtOVUxMfSwgMjc4MiwgInRjcCJ9LAoreyJldmVyeWRheXJjIiwgICAgICAgICB7TlVMTH0sIDI3ODIsICJ1ZHAifSwKK3siYWlzZXMiLCAgICAgICAgICAgICAge05VTEx9LCAyNzgzLCAidGNwIn0sCit7ImFpc2VzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjc4MywgInVkcCJ9LAoreyJ3d3ctZGV2IiwgICAgICAgICAgICB7TlVMTH0sIDI3ODQsICJ0Y3AifSwKK3sid3d3LWRldiIsICAgICAgICAgICAge05VTEx9LCAyNzg0LCAidWRwIn0sCit7ImFpYy1ucCIsICAgICAgICAgICAgIHtOVUxMfSwgMjc4NSwgInRjcCJ9LAoreyJhaWMtbnAiLCAgICAgICAgICAgICB7TlVMTH0sIDI3ODUsICJ1ZHAifSwKK3siYWljLW9uY3JwYyIsICAgICAgICAge05VTEx9LCAyNzg2LCAidGNwIn0sCit7ImFpYy1vbmNycGMiLCAgICAgICAgIHtOVUxMfSwgMjc4NiwgInVkcCJ9LAoreyJwaWNjb2xvIiwgICAgICAgICAgICB7TlVMTH0sIDI3ODcsICJ0Y3AifSwKK3sicGljY29sbyIsICAgICAgICAgICAge05VTEx9LCAyNzg3LCAidWRwIn0sCit7ImZyeWVzZXJ2IiwgICAgICAgICAgIHtOVUxMfSwgMjc4OCwgInRjcCJ9LAoreyJmcnllc2VydiIsICAgICAgICAgICB7TlVMTH0sIDI3ODgsICJ1ZHAifSwKK3sibWVkaWEtYWdlbnQiLCAgICAgICAge05VTEx9LCAyNzg5LCAidGNwIn0sCit7Im1lZGlhLWFnZW50IiwgICAgICAgIHtOVUxMfSwgMjc4OSwgInVkcCJ9LAoreyJwbGdwcm94eSIsICAgICAgICAgICB7TlVMTH0sIDI3OTAsICJ0Y3AifSwKK3sicGxncHJveHkiLCAgICAgICAgICAge05VTEx9LCAyNzkwLCAidWRwIn0sCit7Im10cG9ydC1yZWdpc3QiLCAgICAgIHtOVUxMfSwgMjc5MSwgInRjcCJ9LAoreyJtdHBvcnQtcmVnaXN0IiwgICAgICB7TlVMTH0sIDI3OTEsICJ1ZHAifSwKK3siZjUtZ2xvYmFsc2l0ZSIsICAgICAge05VTEx9LCAyNzkyLCAidGNwIn0sCit7ImY1LWdsb2JhbHNpdGUiLCAgICAgIHtOVUxMfSwgMjc5MiwgInVkcCJ9LAoreyJpbml0bHNtc2FkIiwgICAgICAgICB7TlVMTH0sIDI3OTMsICJ0Y3AifSwKK3siaW5pdGxzbXNhZCIsICAgICAgICAge05VTEx9LCAyNzkzLCAidWRwIn0sCit7ImxpdmVzdGF0cyIsICAgICAgICAgIHtOVUxMfSwgMjc5NSwgInRjcCJ9LAoreyJsaXZlc3RhdHMiLCAgICAgICAgICB7TlVMTH0sIDI3OTUsICJ1ZHAifSwKK3siYWMtdGVjaCIsICAgICAgICAgICAge05VTEx9LCAyNzk2LCAidGNwIn0sCit7ImFjLXRlY2giLCAgICAgICAgICAgIHtOVUxMfSwgMjc5NiwgInVkcCJ9LAoreyJlc3AtZW5jYXAiLCAgICAgICAgICB7TlVMTH0sIDI3OTcsICJ0Y3AifSwKK3siZXNwLWVuY2FwIiwgICAgICAgICAge05VTEx9LCAyNzk3LCAidWRwIn0sCit7InRtZXNpcy11cHNob3QiLCAgICAgIHtOVUxMfSwgMjc5OCwgInRjcCJ9LAoreyJ0bWVzaXMtdXBzaG90IiwgICAgICB7TlVMTH0sIDI3OTgsICJ1ZHAifSwKK3siaWNvbi1kaXNjb3ZlciIsICAgICAge05VTEx9LCAyNzk5LCAidGNwIn0sCit7Imljb24tZGlzY292ZXIiLCAgICAgIHtOVUxMfSwgMjc5OSwgInVkcCJ9LAoreyJhY2MtcmFpZCIsICAgICAgICAgICB7TlVMTH0sIDI4MDAsICJ0Y3AifSwKK3siYWNjLXJhaWQiLCAgICAgICAgICAge05VTEx9LCAyODAwLCAidWRwIn0sCit7ImlnY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjgwMSwgInRjcCJ9LAoreyJpZ2NwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4MDEsICJ1ZHAifSwKK3sidmVyaXRhcy10Y3AxIiwgICAgICAge05VTEx9LCAyODAyLCAidGNwIn0sCit7InZlcml0YXMtdWRwMSIsICAgICAgIHtOVUxMfSwgMjgwMiwgInVkcCJ9LAoreyJidHByamN0cmwiLCAgICAgICAgICB7TlVMTH0sIDI4MDMsICJ0Y3AifSwKK3siYnRwcmpjdHJsIiwgICAgICAgICAge05VTEx9LCAyODAzLCAidWRwIn0sCit7ImR2ci1lc20iLCAgICAgICAgICAgIHtOVUxMfSwgMjgwNCwgInRjcCJ9LAoreyJkdnItZXNtIiwgICAgICAgICAgICB7TlVMTH0sIDI4MDQsICJ1ZHAifSwKK3sid3RhLXdzcC1zIiwgICAgICAgICAge05VTEx9LCAyODA1LCAidGNwIn0sCit7Ind0YS13c3AtcyIsICAgICAgICAgIHtOVUxMfSwgMjgwNSwgInVkcCJ9LAoreyJjc3B1bmkiLCAgICAgICAgICAgICB7TlVMTH0sIDI4MDYsICJ0Y3AifSwKK3siY3NwdW5pIiwgICAgICAgICAgICAge05VTEx9LCAyODA2LCAidWRwIn0sCit7ImNzcG11bHRpIiwgICAgICAgICAgIHtOVUxMfSwgMjgwNywgInRjcCJ9LAoreyJjc3BtdWx0aSIsICAgICAgICAgICB7TlVMTH0sIDI4MDcsICJ1ZHAifSwKK3siai1sYW4tcCIsICAgICAgICAgICAge05VTEx9LCAyODA4LCAidGNwIn0sCit7ImotbGFuLXAiLCAgICAgICAgICAgIHtOVUxMfSwgMjgwOCwgInVkcCJ9LAoreyJjb3JiYWxvYyIsICAgICAgICAgICB7TlVMTH0sIDI4MDksICJ0Y3AifSwKK3siY29yYmFsb2MiLCAgICAgICAgICAge05VTEx9LCAyODA5LCAidWRwIn0sCit7Im5ldHN0ZXdhcmQiLCAgICAgICAgIHtOVUxMfSwgMjgxMCwgInRjcCJ9LAoreyJuZXRzdGV3YXJkIiwgICAgICAgICB7TlVMTH0sIDI4MTAsICJ1ZHAifSwKK3siZ3NpZnRwIiwgICAgICAgICAgICAge05VTEx9LCAyODExLCAidGNwIn0sCit7ImdzaWZ0cCIsICAgICAgICAgICAgIHtOVUxMfSwgMjgxMSwgInVkcCJ9LAoreyJhdG10Y3AiLCAgICAgICAgICAgICB7TlVMTH0sIDI4MTIsICJ0Y3AifSwKK3siYXRtdGNwIiwgICAgICAgICAgICAge05VTEx9LCAyODEyLCAidWRwIn0sCit7ImxsbS1wYXNzIiwgICAgICAgICAgIHtOVUxMfSwgMjgxMywgInRjcCJ9LAoreyJsbG0tcGFzcyIsICAgICAgICAgICB7TlVMTH0sIDI4MTMsICJ1ZHAifSwKK3sibGxtLWNzdiIsICAgICAgICAgICAge05VTEx9LCAyODE0LCAidGNwIn0sCit7ImxsbS1jc3YiLCAgICAgICAgICAgIHtOVUxMfSwgMjgxNCwgInVkcCJ9LAoreyJsYmMtbWVhc3VyZSIsICAgICAgICB7TlVMTH0sIDI4MTUsICJ0Y3AifSwKK3sibGJjLW1lYXN1cmUiLCAgICAgICAge05VTEx9LCAyODE1LCAidWRwIn0sCit7ImxiYy13YXRjaGRvZyIsICAgICAgIHtOVUxMfSwgMjgxNiwgInRjcCJ9LAoreyJsYmMtd2F0Y2hkb2ciLCAgICAgICB7TlVMTH0sIDI4MTYsICJ1ZHAifSwKK3sibm1zaWdwb3J0IiwgICAgICAgICAge05VTEx9LCAyODE3LCAidGNwIn0sCit7Im5tc2lncG9ydCIsICAgICAgICAgIHtOVUxMfSwgMjgxNywgInVkcCJ9LAoreyJybWxuayIsICAgICAgICAgICAgICB7TlVMTH0sIDI4MTgsICJ0Y3AifSwKK3sicm1sbmsiLCAgICAgICAgICAgICAge05VTEx9LCAyODE4LCAidWRwIn0sCit7ImZjLWZhdWx0bm90aWZ5IiwgICAgIHtOVUxMfSwgMjgxOSwgInRjcCJ9LAoreyJmYy1mYXVsdG5vdGlmeSIsICAgICB7TlVMTH0sIDI4MTksICJ1ZHAifSwKK3sidW5pdmlzaW9uIiwgICAgICAgICAge05VTEx9LCAyODIwLCAidGNwIn0sCit7InVuaXZpc2lvbiIsICAgICAgICAgIHtOVUxMfSwgMjgyMCwgInVkcCJ9LAoreyJ2cnRzLWF0LXBvcnQiLCAgICAgICB7TlVMTH0sIDI4MjEsICJ0Y3AifSwKK3sidnJ0cy1hdC1wb3J0IiwgICAgICAge05VTEx9LCAyODIxLCAidWRwIn0sCit7ImthMHd1YyIsICAgICAgICAgICAgIHtOVUxMfSwgMjgyMiwgInRjcCJ9LAoreyJrYTB3dWMiLCAgICAgICAgICAgICB7TlVMTH0sIDI4MjIsICJ1ZHAifSwKK3siY3FnLW5ldGxhbiIsICAgICAgICAge05VTEx9LCAyODIzLCAidGNwIn0sCit7ImNxZy1uZXRsYW4iLCAgICAgICAgIHtOVUxMfSwgMjgyMywgInVkcCJ9LAoreyJjcWctbmV0bGFuLTEiLCAgICAgICB7TlVMTH0sIDI4MjQsICJ0Y3AifSwKK3siY3FnLW5ldGxhbi0xIiwgICAgICAge05VTEx9LCAyODI0LCAidWRwIn0sCit7InNsYy1zeXN0ZW1sb2ciLCAgICAgIHtOVUxMfSwgMjgyNiwgInRjcCJ9LAoreyJzbGMtc3lzdGVtbG9nIiwgICAgICB7TlVMTH0sIDI4MjYsICJ1ZHAifSwKK3sic2xjLWN0cmxybG9vcHMiLCAgICAge05VTEx9LCAyODI3LCAidGNwIn0sCit7InNsYy1jdHJscmxvb3BzIiwgICAgIHtOVUxMfSwgMjgyNywgInVkcCJ9LAoreyJpdG0tbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDI4MjgsICJ0Y3AifSwKK3siaXRtLWxtIiwgICAgICAgICAgICAge05VTEx9LCAyODI4LCAidWRwIn0sCit7InNpbGtwMSIsICAgICAgICAgICAgIHtOVUxMfSwgMjgyOSwgInRjcCJ9LAoreyJzaWxrcDEiLCAgICAgICAgICAgICB7TlVMTH0sIDI4MjksICJ1ZHAifSwKK3sic2lsa3AyIiwgICAgICAgICAgICAge05VTEx9LCAyODMwLCAidGNwIn0sCit7InNpbGtwMiIsICAgICAgICAgICAgIHtOVUxMfSwgMjgzMCwgInVkcCJ9LAoreyJzaWxrcDMiLCAgICAgICAgICAgICB7TlVMTH0sIDI4MzEsICJ0Y3AifSwKK3sic2lsa3AzIiwgICAgICAgICAgICAge05VTEx9LCAyODMxLCAidWRwIn0sCit7InNpbGtwNCIsICAgICAgICAgICAgIHtOVUxMfSwgMjgzMiwgInRjcCJ9LAoreyJzaWxrcDQiLCAgICAgICAgICAgICB7TlVMTH0sIDI4MzIsICJ1ZHAifSwKK3siZ2xpc2hkIiwgICAgICAgICAgICAge05VTEx9LCAyODMzLCAidGNwIn0sCit7ImdsaXNoZCIsICAgICAgICAgICAgIHtOVUxMfSwgMjgzMywgInVkcCJ9LAoreyJldnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4MzQsICJ0Y3AifSwKK3siZXZ0cCIsICAgICAgICAgICAgICAge05VTEx9LCAyODM0LCAidWRwIn0sCit7ImV2dHAtZGF0YSIsICAgICAgICAgIHtOVUxMfSwgMjgzNSwgInRjcCJ9LAoreyJldnRwLWRhdGEiLCAgICAgICAgICB7TlVMTH0sIDI4MzUsICJ1ZHAifSwKK3siY2F0YWx5c3QiLCAgICAgICAgICAge05VTEx9LCAyODM2LCAidGNwIn0sCit7ImNhdGFseXN0IiwgICAgICAgICAgIHtOVUxMfSwgMjgzNiwgInVkcCJ9LAoreyJyZXBsaXdlYiIsICAgICAgICAgICB7TlVMTH0sIDI4MzcsICJ0Y3AifSwKK3sicmVwbGl3ZWIiLCAgICAgICAgICAge05VTEx9LCAyODM3LCAidWRwIn0sCit7InN0YXJib3QiLCAgICAgICAgICAgIHtOVUxMfSwgMjgzOCwgInRjcCJ9LAoreyJzdGFyYm90IiwgICAgICAgICAgICB7TlVMTH0sIDI4MzgsICJ1ZHAifSwKK3sibm1zaWdwb3J0IiwgICAgICAgICAge05VTEx9LCAyODM5LCAidGNwIn0sCit7Im5tc2lncG9ydCIsICAgICAgICAgIHtOVUxMfSwgMjgzOSwgInVkcCJ9LAoreyJsMy1leHBydCIsICAgICAgICAgICB7TlVMTH0sIDI4NDAsICJ0Y3AifSwKK3sibDMtZXhwcnQiLCAgICAgICAgICAge05VTEx9LCAyODQwLCAidWRwIn0sCit7ImwzLXJhbmdlciIsICAgICAgICAgIHtOVUxMfSwgMjg0MSwgInRjcCJ9LAoreyJsMy1yYW5nZXIiLCAgICAgICAgICB7TlVMTH0sIDI4NDEsICJ1ZHAifSwKK3sibDMtaGF3ayIsICAgICAgICAgICAge05VTEx9LCAyODQyLCAidGNwIn0sCit7ImwzLWhhd2siLCAgICAgICAgICAgIHtOVUxMfSwgMjg0MiwgInVkcCJ9LAoreyJwZG5ldCIsICAgICAgICAgICAgICB7TlVMTH0sIDI4NDMsICJ0Y3AifSwKK3sicGRuZXQiLCAgICAgICAgICAgICAge05VTEx9LCAyODQzLCAidWRwIn0sCit7ImJwY3AtcG9sbCIsICAgICAgICAgIHtOVUxMfSwgMjg0NCwgInRjcCJ9LAoreyJicGNwLXBvbGwiLCAgICAgICAgICB7TlVMTH0sIDI4NDQsICJ1ZHAifSwKK3siYnBjcC10cmFwIiwgICAgICAgICAge05VTEx9LCAyODQ1LCAidGNwIn0sCit7ImJwY3AtdHJhcCIsICAgICAgICAgIHtOVUxMfSwgMjg0NSwgInVkcCJ9LAoreyJhaW1wcC1oZWxsbyIsICAgICAgICB7TlVMTH0sIDI4NDYsICJ0Y3AifSwKK3siYWltcHAtaGVsbG8iLCAgICAgICAge05VTEx9LCAyODQ2LCAidWRwIn0sCit7ImFpbXBwLXBvcnQtcmVxIiwgICAgIHtOVUxMfSwgMjg0NywgInRjcCJ9LAoreyJhaW1wcC1wb3J0LXJlcSIsICAgICB7TlVMTH0sIDI4NDcsICJ1ZHAifSwKK3siYW10LWJsYy1wb3J0IiwgICAgICAge05VTEx9LCAyODQ4LCAidGNwIn0sCit7ImFtdC1ibGMtcG9ydCIsICAgICAgIHtOVUxMfSwgMjg0OCwgInVkcCJ9LAoreyJmeHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI4NDksICJ0Y3AifSwKK3siZnhwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyODQ5LCAidWRwIn0sCit7Im1ldGFjb25zb2xlIiwgICAgICAgIHtOVUxMfSwgMjg1MCwgInRjcCJ9LAoreyJtZXRhY29uc29sZSIsICAgICAgICB7TlVMTH0sIDI4NTAsICJ1ZHAifSwKK3sid2ViZW1zaHR0cCIsICAgICAgICAge05VTEx9LCAyODUxLCAidGNwIn0sCit7IndlYmVtc2h0dHAiLCAgICAgICAgIHtOVUxMfSwgMjg1MSwgInVkcCJ9LAoreyJiZWFycy0wMSIsICAgICAgICAgICB7TlVMTH0sIDI4NTIsICJ0Y3AifSwKK3siYmVhcnMtMDEiLCAgICAgICAgICAge05VTEx9LCAyODUyLCAidWRwIn0sCit7ImlzcGlwZXMiLCAgICAgICAgICAgIHtOVUxMfSwgMjg1MywgInRjcCJ9LAoreyJpc3BpcGVzIiwgICAgICAgICAgICB7TlVMTH0sIDI4NTMsICJ1ZHAifSwKK3siaW5mb21vdmVyIiwgICAgICAgICAge05VTEx9LCAyODU0LCAidGNwIn0sCit7ImluZm9tb3ZlciIsICAgICAgICAgIHtOVUxMfSwgMjg1NCwgInVkcCJ9LAoreyJtc3JwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4NTUsICJ0Y3AifSwKK3sibXNycCIsICAgICAgICAgICAgICAge05VTEx9LCAyODU1LCAidWRwIn0sCit7ImNlc2RpbnYiLCAgICAgICAgICAgIHtOVUxMfSwgMjg1NiwgInRjcCJ9LAoreyJjZXNkaW52IiwgICAgICAgICAgICB7TlVMTH0sIDI4NTYsICJ1ZHAifSwKK3sic2ltY3RscCIsICAgICAgICAgICAge05VTEx9LCAyODU3LCAidGNwIn0sCit7InNpbWN0bHAiLCAgICAgICAgICAgIHtOVUxMfSwgMjg1NywgInVkcCJ9LAoreyJlY25wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4NTgsICJ0Y3AifSwKK3siZWNucCIsICAgICAgICAgICAgICAge05VTEx9LCAyODU4LCAidWRwIn0sCit7ImFjdGl2ZW1lbW9yeSIsICAgICAgIHtOVUxMfSwgMjg1OSwgInRjcCJ9LAoreyJhY3RpdmVtZW1vcnkiLCAgICAgICB7TlVMTH0sIDI4NTksICJ1ZHAifSwKK3siZGlhbHBhZC12b2ljZTEiLCAgICAge05VTEx9LCAyODYwLCAidGNwIn0sCit7ImRpYWxwYWQtdm9pY2UxIiwgICAgIHtOVUxMfSwgMjg2MCwgInVkcCJ9LAoreyJkaWFscGFkLXZvaWNlMiIsICAgICB7TlVMTH0sIDI4NjEsICJ0Y3AifSwKK3siZGlhbHBhZC12b2ljZTIiLCAgICAge05VTEx9LCAyODYxLCAidWRwIn0sCit7InR0Zy1wcm90b2NvbCIsICAgICAgIHtOVUxMfSwgMjg2MiwgInRjcCJ9LAoreyJ0dGctcHJvdG9jb2wiLCAgICAgICB7TlVMTH0sIDI4NjIsICJ1ZHAifSwKK3sic29uYXJkYXRhIiwgICAgICAgICAge05VTEx9LCAyODYzLCAidGNwIn0sCit7InNvbmFyZGF0YSIsICAgICAgICAgIHtOVUxMfSwgMjg2MywgInVkcCJ9LAoreyJhc3Ryb21lZC1tYWluIiwgICAgICB7TlVMTH0sIDI4NjQsICJ0Y3AifSwKK3siYXN0cm9tZWQtbWFpbiIsICAgICAge05VTEx9LCAyODY0LCAidWRwIn0sCit7InBpdC12cG4iLCAgICAgICAgICAgIHtOVUxMfSwgMjg2NSwgInRjcCJ9LAoreyJwaXQtdnBuIiwgICAgICAgICAgICB7TlVMTH0sIDI4NjUsICJ1ZHAifSwKK3siaXdsaXN0ZW5lciIsICAgICAgICAge05VTEx9LCAyODY2LCAidGNwIn0sCit7Iml3bGlzdGVuZXIiLCAgICAgICAgIHtOVUxMfSwgMjg2NiwgInVkcCJ9LAoreyJlc3BzLXBvcnRhbCIsICAgICAgICB7TlVMTH0sIDI4NjcsICJ0Y3AifSwKK3siZXNwcy1wb3J0YWwiLCAgICAgICAge05VTEx9LCAyODY3LCAidWRwIn0sCit7Im5wZXAtbWVzc2FnaW5nIiwgICAgIHtOVUxMfSwgMjg2OCwgInRjcCJ9LAoreyJucGVwLW1lc3NhZ2luZyIsICAgICB7TlVMTH0sIDI4NjgsICJ1ZHAifSwKK3siaWNzbGFwIiwgICAgICAgICAgICAge05VTEx9LCAyODY5LCAidGNwIn0sCit7Imljc2xhcCIsICAgICAgICAgICAgIHtOVUxMfSwgMjg2OSwgInVkcCJ9LAoreyJkYWlzaGkiLCAgICAgICAgICAgICB7TlVMTH0sIDI4NzAsICJ0Y3AifSwKK3siZGFpc2hpIiwgICAgICAgICAgICAge05VTEx9LCAyODcwLCAidWRwIn0sCit7Im1zaS1zZWxlY3RwbGF5IiwgICAgIHtOVUxMfSwgMjg3MSwgInRjcCJ9LAoreyJtc2ktc2VsZWN0cGxheSIsICAgICB7TlVMTH0sIDI4NzEsICJ1ZHAifSwKK3sicmFkaXgiLCAgICAgICAgICAgICAge05VTEx9LCAyODcyLCAidGNwIn0sCit7InJhZGl4IiwgICAgICAgICAgICAgIHtOVUxMfSwgMjg3MiwgInVkcCJ9LAoreyJkeG1lc3NhZ2ViYXNlMSIsICAgICB7TlVMTH0sIDI4NzQsICJ0Y3AifSwKK3siZHhtZXNzYWdlYmFzZTEiLCAgICAge05VTEx9LCAyODc0LCAidWRwIn0sCit7ImR4bWVzc2FnZWJhc2UyIiwgICAgIHtOVUxMfSwgMjg3NSwgInRjcCJ9LAoreyJkeG1lc3NhZ2ViYXNlMiIsICAgICB7TlVMTH0sIDI4NzUsICJ1ZHAifSwKK3sic3BzLXR1bm5lbCIsICAgICAgICAge05VTEx9LCAyODc2LCAidGNwIn0sCit7InNwcy10dW5uZWwiLCAgICAgICAgIHtOVUxMfSwgMjg3NiwgInVkcCJ9LAoreyJibHVlbGFuY2UiLCAgICAgICAgICB7TlVMTH0sIDI4NzcsICJ0Y3AifSwKK3siYmx1ZWxhbmNlIiwgICAgICAgICAge05VTEx9LCAyODc3LCAidWRwIn0sCit7ImFhcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjg3OCwgInRjcCJ9LAoreyJhYXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI4NzgsICJ1ZHAifSwKK3sidWNlbnRyaWMtZHMiLCAgICAgICAge05VTEx9LCAyODc5LCAidGNwIn0sCit7InVjZW50cmljLWRzIiwgICAgICAgIHtOVUxMfSwgMjg3OSwgInVkcCJ9LAoreyJzeW5hcHNlIiwgICAgICAgICAgICB7TlVMTH0sIDI4ODAsICJ0Y3AifSwKK3sic3luYXBzZSIsICAgICAgICAgICAge05VTEx9LCAyODgwLCAidWRwIn0sCit7Im5kc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjg4MSwgInRjcCJ9LAoreyJuZHNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4ODEsICJ1ZHAifSwKK3sibmR0cCIsICAgICAgICAgICAgICAge05VTEx9LCAyODgyLCAidGNwIn0sCit7Im5kdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjg4MiwgInVkcCJ9LAoreyJuZG5wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4ODMsICJ0Y3AifSwKK3sibmRucCIsICAgICAgICAgICAgICAge05VTEx9LCAyODgzLCAidWRwIn0sCit7ImZsYXNobXNnIiwgICAgICAgICAgIHtOVUxMfSwgMjg4NCwgInRjcCJ9LAoreyJmbGFzaG1zZyIsICAgICAgICAgICB7TlVMTH0sIDI4ODQsICJ1ZHAifSwKK3sidG9wZmxvdyIsICAgICAgICAgICAge05VTEx9LCAyODg1LCAidGNwIn0sCit7InRvcGZsb3ciLCAgICAgICAgICAgIHtOVUxMfSwgMjg4NSwgInVkcCJ9LAoreyJyZXNwb25zZWxvZ2ljIiwgICAgICB7TlVMTH0sIDI4ODYsICJ0Y3AifSwKK3sicmVzcG9uc2Vsb2dpYyIsICAgICAge05VTEx9LCAyODg2LCAidWRwIn0sCit7ImFpcm9uZXRkZHAiLCAgICAgICAgIHtOVUxMfSwgMjg4NywgInRjcCJ9LAoreyJhaXJvbmV0ZGRwIiwgICAgICAgICB7TlVMTH0sIDI4ODcsICJ1ZHAifSwKK3sic3Bjc2Rsb2JieSIsICAgICAgICAge05VTEx9LCAyODg4LCAidGNwIn0sCit7InNwY3NkbG9iYnkiLCAgICAgICAgIHtOVUxMfSwgMjg4OCwgInVkcCJ9LAoreyJyc29tIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4ODksICJ0Y3AifSwKK3sicnNvbSIsICAgICAgICAgICAgICAge05VTEx9LCAyODg5LCAidWRwIn0sCit7ImNzcGNsbXVsdGkiLCAgICAgICAgIHtOVUxMfSwgMjg5MCwgInRjcCJ9LAoreyJjc3BjbG11bHRpIiwgICAgICAgICB7TlVMTH0sIDI4OTAsICJ1ZHAifSwKK3siY2luZWdyZngtZWxtZCIsICAgICAge05VTEx9LCAyODkxLCAidGNwIn0sCit7ImNpbmVncmZ4LWVsbWQiLCAgICAgIHtOVUxMfSwgMjg5MSwgInVkcCJ9LAoreyJzbmlmZmVyZGF0YSIsICAgICAgICB7TlVMTH0sIDI4OTIsICJ0Y3AifSwKK3sic25pZmZlcmRhdGEiLCAgICAgICAge05VTEx9LCAyODkyLCAidWRwIn0sCit7InZzZWNvbm5lY3RvciIsICAgICAgIHtOVUxMfSwgMjg5MywgInRjcCJ9LAoreyJ2c2Vjb25uZWN0b3IiLCAgICAgICB7TlVMTH0sIDI4OTMsICJ1ZHAifSwKK3siYWJhY3VzLXJlbW90ZSIsICAgICAge05VTEx9LCAyODk0LCAidGNwIn0sCit7ImFiYWN1cy1yZW1vdGUiLCAgICAgIHtOVUxMfSwgMjg5NCwgInVkcCJ9LAoreyJuYXR1c2xpbmsiLCAgICAgICAgICB7TlVMTH0sIDI4OTUsICJ0Y3AifSwKK3sibmF0dXNsaW5rIiwgICAgICAgICAge05VTEx9LCAyODk1LCAidWRwIn0sCit7ImVjb3Zpc2lvbmc2LTEiLCAgICAgIHtOVUxMfSwgMjg5NiwgInRjcCJ9LAoreyJlY292aXNpb25nNi0xIiwgICAgICB7TlVMTH0sIDI4OTYsICJ1ZHAifSwKK3siY2l0cml4LXJ0bXAiLCAgICAgICAge05VTEx9LCAyODk3LCAidGNwIn0sCit7ImNpdHJpeC1ydG1wIiwgICAgICAgIHtOVUxMfSwgMjg5NywgInVkcCJ9LAoreyJhcHBsaWFuY2UtY2ZnIiwgICAgICB7TlVMTH0sIDI4OTgsICJ0Y3AifSwKK3siYXBwbGlhbmNlLWNmZyIsICAgICAge05VTEx9LCAyODk4LCAidWRwIn0sCit7InBvd2VyZ2VtcGx1cyIsICAgICAgIHtOVUxMfSwgMjg5OSwgInRjcCJ9LAoreyJwb3dlcmdlbXBsdXMiLCAgICAgICB7TlVMTH0sIDI4OTksICJ1ZHAifSwKK3sicXVpY2tzdWl0ZSIsICAgICAgICAge05VTEx9LCAyOTAwLCAidGNwIn0sCit7InF1aWNrc3VpdGUiLCAgICAgICAgIHtOVUxMfSwgMjkwMCwgInVkcCJ9LAoreyJhbGxzdG9yY25zIiwgICAgICAgICB7TlVMTH0sIDI5MDEsICJ0Y3AifSwKK3siYWxsc3RvcmNucyIsICAgICAgICAge05VTEx9LCAyOTAxLCAidWRwIn0sCit7Im5ldGFzcGkiLCAgICAgICAgICAgIHtOVUxMfSwgMjkwMiwgInRjcCJ9LAoreyJuZXRhc3BpIiwgICAgICAgICAgICB7TlVMTH0sIDI5MDIsICJ1ZHAifSwKK3sic3VpdGNhc2UiLCAgICAgICAgICAge05VTEx9LCAyOTAzLCAidGNwIn0sCit7InN1aXRjYXNlIiwgICAgICAgICAgIHtOVUxMfSwgMjkwMywgInVkcCJ9LAoreyJtMnVhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI5MDQsICJ0Y3AifSwKK3sibTJ1YSIsICAgICAgICAgICAgICAge05VTEx9LCAyOTA0LCAidWRwIn0sCit7Im0ydWEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjkwNCwgInNjdHAifSwKK3sibTN1YSIsICAgICAgICAgICAgICAge05VTEx9LCAyOTA1LCAidGNwIn0sCit7Im0zdWEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjkwNSwgInNjdHAifSwKK3siY2FsbGVyOSIsICAgICAgICAgICAge05VTEx9LCAyOTA2LCAidGNwIn0sCit7ImNhbGxlcjkiLCAgICAgICAgICAgIHtOVUxMfSwgMjkwNiwgInVkcCJ9LAoreyJ3ZWJtZXRob2RzLWIyYiIsICAgICB7TlVMTH0sIDI5MDcsICJ0Y3AifSwKK3sid2VibWV0aG9kcy1iMmIiLCAgICAge05VTEx9LCAyOTA3LCAidWRwIn0sCit7Im1hbyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjkwOCwgInRjcCJ9LAoreyJtYW8iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI5MDgsICJ1ZHAifSwKK3siZnVuay1kaWFsb3V0IiwgICAgICAge05VTEx9LCAyOTA5LCAidGNwIn0sCit7ImZ1bmstZGlhbG91dCIsICAgICAgIHtOVUxMfSwgMjkwOSwgInVkcCJ9LAoreyJ0ZGFjY2VzcyIsICAgICAgICAgICB7TlVMTH0sIDI5MTAsICJ0Y3AifSwKK3sidGRhY2Nlc3MiLCAgICAgICAgICAge05VTEx9LCAyOTEwLCAidWRwIn0sCit7ImJsb2NrYWRlIiwgICAgICAgICAgIHtOVUxMfSwgMjkxMSwgInRjcCJ9LAoreyJibG9ja2FkZSIsICAgICAgICAgICB7TlVMTH0sIDI5MTEsICJ1ZHAifSwKK3siZXBpY29uIiwgICAgICAgICAgICAge05VTEx9LCAyOTEyLCAidGNwIn0sCit7ImVwaWNvbiIsICAgICAgICAgICAgIHtOVUxMfSwgMjkxMiwgInVkcCJ9LAoreyJib29zdGVyd2FyZSIsICAgICAgICB7TlVMTH0sIDI5MTMsICJ0Y3AifSwKK3siYm9vc3RlcndhcmUiLCAgICAgICAge05VTEx9LCAyOTEzLCAidWRwIn0sCit7ImdhbWVsb2JieSIsICAgICAgICAgIHtOVUxMfSwgMjkxNCwgInRjcCJ9LAoreyJnYW1lbG9iYnkiLCAgICAgICAgICB7TlVMTH0sIDI5MTQsICJ1ZHAifSwKK3sidGtzb2NrZXQiLCAgICAgICAgICAge05VTEx9LCAyOTE1LCAidGNwIn0sCit7InRrc29ja2V0IiwgICAgICAgICAgIHtOVUxMfSwgMjkxNSwgInVkcCJ9LAoreyJlbHZpbl9zZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDI5MTYsICJ0Y3AifSwKK3siZWx2aW5fc2VydmVyIiwgICAgICAge05VTEx9LCAyOTE2LCAidWRwIn0sCit7ImVsdmluX2NsaWVudCIsICAgICAgIHtOVUxMfSwgMjkxNywgInRjcCJ9LAoreyJlbHZpbl9jbGllbnQiLCAgICAgICB7TlVMTH0sIDI5MTcsICJ1ZHAifSwKK3sia2FzdGVuY2hhc2VwYWQiLCAgICAge05VTEx9LCAyOTE4LCAidGNwIn0sCit7Imthc3RlbmNoYXNlcGFkIiwgICAgIHtOVUxMfSwgMjkxOCwgInVkcCJ9LAoreyJyb2JvZXIiLCAgICAgICAgICAgICB7TlVMTH0sIDI5MTksICJ0Y3AifSwKK3sicm9ib2VyIiwgICAgICAgICAgICAge05VTEx9LCAyOTE5LCAidWRwIn0sCit7InJvYm9lZGEiLCAgICAgICAgICAgIHtOVUxMfSwgMjkyMCwgInRjcCJ9LAoreyJyb2JvZWRhIiwgICAgICAgICAgICB7TlVMTH0sIDI5MjAsICJ1ZHAifSwKK3siY2VzZGNkbWFuIiwgICAgICAgICAge05VTEx9LCAyOTIxLCAidGNwIn0sCit7ImNlc2RjZG1hbiIsICAgICAgICAgIHtOVUxMfSwgMjkyMSwgInVkcCJ9LAoreyJjZXNkY2R0cm4iLCAgICAgICAgICB7TlVMTH0sIDI5MjIsICJ0Y3AifSwKK3siY2VzZGNkdHJuIiwgICAgICAgICAge05VTEx9LCAyOTIyLCAidWRwIn0sCit7Ind0YS13c3Atd3RwLXMiLCAgICAgIHtOVUxMfSwgMjkyMywgInRjcCJ9LAoreyJ3dGEtd3NwLXd0cC1zIiwgICAgICB7TlVMTH0sIDI5MjMsICJ1ZHAifSwKK3sicHJlY2lzZS12aXAiLCAgICAgICAge05VTEx9LCAyOTI0LCAidGNwIn0sCit7InByZWNpc2UtdmlwIiwgICAgICAgIHtOVUxMfSwgMjkyNCwgInVkcCJ9LAoreyJtb2JpbGUtZmlsZS1kbCIsICAgICB7TlVMTH0sIDI5MjYsICJ0Y3AifSwKK3sibW9iaWxlLWZpbGUtZGwiLCAgICAge05VTEx9LCAyOTI2LCAidWRwIn0sCit7InVuaW1vYmlsZWN0cmwiLCAgICAgIHtOVUxMfSwgMjkyNywgInRjcCJ9LAoreyJ1bmltb2JpbGVjdHJsIiwgICAgICB7TlVMTH0sIDI5MjcsICJ1ZHAifSwKK3sicmVkc3RvbmUtY3BzcyIsICAgICAge05VTEx9LCAyOTI4LCAidGNwIn0sCit7InJlZHN0b25lLWNwc3MiLCAgICAgIHtOVUxMfSwgMjkyOCwgInVkcCJ9LAoreyJhbXgtd2ViYWRtaW4iLCAgICAgICB7TlVMTH0sIDI5MjksICJ0Y3AifSwKK3siYW14LXdlYmFkbWluIiwgICAgICAge05VTEx9LCAyOTI5LCAidWRwIn0sCit7ImFteC13ZWJsaW54IiwgICAgICAgIHtOVUxMfSwgMjkzMCwgInRjcCJ9LAoreyJhbXgtd2VibGlueCIsICAgICAgICB7TlVMTH0sIDI5MzAsICJ1ZHAifSwKK3siY2lyY2xlLXgiLCAgICAgICAgICAge05VTEx9LCAyOTMxLCAidGNwIn0sCit7ImNpcmNsZS14IiwgICAgICAgICAgIHtOVUxMfSwgMjkzMSwgInVkcCJ9LAoreyJpbmNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI5MzIsICJ0Y3AifSwKK3siaW5jcCIsICAgICAgICAgICAgICAge05VTEx9LCAyOTMyLCAidWRwIn0sCit7IjQtdGllcm9wbWd3IiwgICAgICAgIHtOVUxMfSwgMjkzMywgInRjcCJ9LAoreyI0LXRpZXJvcG1ndyIsICAgICAgICB7TlVMTH0sIDI5MzMsICJ1ZHAifSwKK3siNC10aWVyb3BtY2xpIiwgICAgICAge05VTEx9LCAyOTM0LCAidGNwIn0sCit7IjQtdGllcm9wbWNsaSIsICAgICAgIHtOVUxMfSwgMjkzNCwgInVkcCJ9LAoreyJxdHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI5MzUsICJ0Y3AifSwKK3sicXRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAyOTM1LCAidWRwIn0sCit7Im90cGF0Y2giLCAgICAgICAgICAgIHtOVUxMfSwgMjkzNiwgInRjcCJ9LAoreyJvdHBhdGNoIiwgICAgICAgICAgICB7TlVMTH0sIDI5MzYsICJ1ZHAifSwKK3sicG5hY29uc3VsdC1sbSIsICAgICAge05VTEx9LCAyOTM3LCAidGNwIn0sCit7InBuYWNvbnN1bHQtbG0iLCAgICAgIHtOVUxMfSwgMjkzNywgInVkcCJ9LAoreyJzbS1wYXMtMSIsICAgICAgICAgICB7TlVMTH0sIDI5MzgsICJ0Y3AifSwKK3sic20tcGFzLTEiLCAgICAgICAgICAge05VTEx9LCAyOTM4LCAidWRwIn0sCit7InNtLXBhcy0yIiwgICAgICAgICAgIHtOVUxMfSwgMjkzOSwgInRjcCJ9LAoreyJzbS1wYXMtMiIsICAgICAgICAgICB7TlVMTH0sIDI5MzksICJ1ZHAifSwKK3sic20tcGFzLTMiLCAgICAgICAgICAge05VTEx9LCAyOTQwLCAidGNwIn0sCit7InNtLXBhcy0zIiwgICAgICAgICAgIHtOVUxMfSwgMjk0MCwgInVkcCJ9LAoreyJzbS1wYXMtNCIsICAgICAgICAgICB7TlVMTH0sIDI5NDEsICJ0Y3AifSwKK3sic20tcGFzLTQiLCAgICAgICAgICAge05VTEx9LCAyOTQxLCAidWRwIn0sCit7InNtLXBhcy01IiwgICAgICAgICAgIHtOVUxMfSwgMjk0MiwgInRjcCJ9LAoreyJzbS1wYXMtNSIsICAgICAgICAgICB7TlVMTH0sIDI5NDIsICJ1ZHAifSwKK3sidHRucmVwb3NpdG9yeSIsICAgICAge05VTEx9LCAyOTQzLCAidGNwIn0sCit7InR0bnJlcG9zaXRvcnkiLCAgICAgIHtOVUxMfSwgMjk0MywgInVkcCJ9LAoreyJtZWdhY28taDI0OCIsICAgICAgICB7TlVMTH0sIDI5NDQsICJ0Y3AifSwKK3sibWVnYWNvLWgyNDgiLCAgICAgICAge05VTEx9LCAyOTQ0LCAidWRwIn0sCit7Im1lZ2Fjby1oMjQ4IiwgICAgICAgIHtOVUxMfSwgMjk0NCwgInNjdHAifSwKK3siaDI0OC1iaW5hcnkiLCAgICAgICAge05VTEx9LCAyOTQ1LCAidGNwIn0sCit7ImgyNDgtYmluYXJ5IiwgICAgICAgIHtOVUxMfSwgMjk0NSwgInVkcCJ9LAoreyJoMjQ4LWJpbmFyeSIsICAgICAgICB7TlVMTH0sIDI5NDUsICJzY3RwIn0sCit7ImZqc3ZtcG9yIiwgICAgICAgICAgIHtOVUxMfSwgMjk0NiwgInRjcCJ9LAoreyJmanN2bXBvciIsICAgICAgICAgICB7TlVMTH0sIDI5NDYsICJ1ZHAifSwKK3siZ3BzZCIsICAgICAgICAgICAgICAge05VTEx9LCAyOTQ3LCAidGNwIn0sCit7Imdwc2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjk0NywgInVkcCJ9LAoreyJ3YXAtcHVzaCIsICAgICAgICAgICB7TlVMTH0sIDI5NDgsICJ0Y3AifSwKK3sid2FwLXB1c2giLCAgICAgICAgICAge05VTEx9LCAyOTQ4LCAidWRwIn0sCit7IndhcC1wdXNoc2VjdXJlIiwgICAgIHtOVUxMfSwgMjk0OSwgInRjcCJ9LAoreyJ3YXAtcHVzaHNlY3VyZSIsICAgICB7TlVMTH0sIDI5NDksICJ1ZHAifSwKK3siZXNpcCIsICAgICAgICAgICAgICAge05VTEx9LCAyOTUwLCAidGNwIn0sCit7ImVzaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjk1MCwgInVkcCJ9LAoreyJvdHRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI5NTEsICJ0Y3AifSwKK3sib3R0cCIsICAgICAgICAgICAgICAge05VTEx9LCAyOTUxLCAidWRwIn0sCit7Im1wZndzYXMiLCAgICAgICAgICAgIHtOVUxMfSwgMjk1MiwgInRjcCJ9LAoreyJtcGZ3c2FzIiwgICAgICAgICAgICB7TlVMTH0sIDI5NTIsICJ1ZHAifSwKK3sib3ZhbGFybXNydiIsICAgICAgICAge05VTEx9LCAyOTUzLCAidGNwIn0sCit7Im92YWxhcm1zcnYiLCAgICAgICAgIHtOVUxMfSwgMjk1MywgInVkcCJ9LAoreyJvdmFsYXJtc3J2LWNtZCIsICAgICB7TlVMTH0sIDI5NTQsICJ0Y3AifSwKK3sib3ZhbGFybXNydi1jbWQiLCAgICAge05VTEx9LCAyOTU0LCAidWRwIn0sCit7ImNzbm90aWZ5IiwgICAgICAgICAgIHtOVUxMfSwgMjk1NSwgInRjcCJ9LAoreyJjc25vdGlmeSIsICAgICAgICAgICB7TlVMTH0sIDI5NTUsICJ1ZHAifSwKK3sib3ZyaW1vc2RibWFuIiwgICAgICAge05VTEx9LCAyOTU2LCAidGNwIn0sCit7Im92cmltb3NkYm1hbiIsICAgICAgIHtOVUxMfSwgMjk1NiwgInVkcCJ9LAoreyJqbWFjdDUiLCAgICAgICAgICAgICB7TlVMTH0sIDI5NTcsICJ0Y3AifSwKK3siam1hY3Q1IiwgICAgICAgICAgICAge05VTEx9LCAyOTU3LCAidWRwIn0sCit7ImptYWN0NiIsICAgICAgICAgICAgIHtOVUxMfSwgMjk1OCwgInRjcCJ9LAoreyJqbWFjdDYiLCAgICAgICAgICAgICB7TlVMTH0sIDI5NTgsICJ1ZHAifSwKK3sicm1vcGFndCIsICAgICAgICAgICAge05VTEx9LCAyOTU5LCAidGNwIn0sCit7InJtb3BhZ3QiLCAgICAgICAgICAgIHtOVUxMfSwgMjk1OSwgInVkcCJ9LAoreyJkZm94c2VydmVyIiwgICAgICAgICB7TlVMTH0sIDI5NjAsICJ0Y3AifSwKK3siZGZveHNlcnZlciIsICAgICAgICAge05VTEx9LCAyOTYwLCAidWRwIn0sCit7ImJvbGRzb2Z0LWxtIiwgICAgICAgIHtOVUxMfSwgMjk2MSwgInRjcCJ9LAoreyJib2xkc29mdC1sbSIsICAgICAgICB7TlVMTH0sIDI5NjEsICJ1ZHAifSwKK3siaXBoLXBvbGljeS1jbGkiLCAgICAge05VTEx9LCAyOTYyLCAidGNwIn0sCit7ImlwaC1wb2xpY3ktY2xpIiwgICAgIHtOVUxMfSwgMjk2MiwgInVkcCJ9LAoreyJpcGgtcG9saWN5LWFkbSIsICAgICB7TlVMTH0sIDI5NjMsICJ0Y3AifSwKK3siaXBoLXBvbGljeS1hZG0iLCAgICAge05VTEx9LCAyOTYzLCAidWRwIn0sCit7ImJ1bGxhbnQtc3JhcCIsICAgICAgIHtOVUxMfSwgMjk2NCwgInRjcCJ9LAoreyJidWxsYW50LXNyYXAiLCAgICAgICB7TlVMTH0sIDI5NjQsICJ1ZHAifSwKK3siYnVsbGFudC1yYXAiLCAgICAgICAge05VTEx9LCAyOTY1LCAidGNwIn0sCit7ImJ1bGxhbnQtcmFwIiwgICAgICAgIHtOVUxMfSwgMjk2NSwgInVkcCJ9LAoreyJpZHAtaW5mb3RyaWV2ZSIsICAgICB7TlVMTH0sIDI5NjYsICJ0Y3AifSwKK3siaWRwLWluZm90cmlldmUiLCAgICAge05VTEx9LCAyOTY2LCAidWRwIn0sCit7InNzYy1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgMjk2NywgInRjcCJ9LAoreyJzc2MtYWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDI5NjcsICJ1ZHAifSwKK3siZW5wcCIsICAgICAgICAgICAgICAge05VTEx9LCAyOTY4LCAidGNwIn0sCit7ImVucHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjk2OCwgInVkcCJ9LAoreyJlc3NwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI5NjksICJ0Y3AifSwKK3siZXNzcCIsICAgICAgICAgICAgICAge05VTEx9LCAyOTY5LCAidWRwIn0sCit7ImluZGV4LW5ldCIsICAgICAgICAgIHtOVUxMfSwgMjk3MCwgInRjcCJ9LAoreyJpbmRleC1uZXQiLCAgICAgICAgICB7TlVMTH0sIDI5NzAsICJ1ZHAifSwKK3sibmV0Y2xpcCIsICAgICAgICAgICAge05VTEx9LCAyOTcxLCAidGNwIn0sCit7Im5ldGNsaXAiLCAgICAgICAgICAgIHtOVUxMfSwgMjk3MSwgInVkcCJ9LAoreyJwbXNtLXdlYnJjdGwiLCAgICAgICB7TlVMTH0sIDI5NzIsICJ0Y3AifSwKK3sicG1zbS13ZWJyY3RsIiwgICAgICAge05VTEx9LCAyOTcyLCAidWRwIn0sCit7InN2bmV0d29ya3MiLCAgICAgICAgIHtOVUxMfSwgMjk3MywgInRjcCJ9LAoreyJzdm5ldHdvcmtzIiwgICAgICAgICB7TlVMTH0sIDI5NzMsICJ1ZHAifSwKK3sic2lnbmFsIiwgICAgICAgICAgICAge05VTEx9LCAyOTc0LCAidGNwIn0sCit7InNpZ25hbCIsICAgICAgICAgICAgIHtOVUxMfSwgMjk3NCwgInVkcCJ9LAoreyJmam1wY20iLCAgICAgICAgICAgICB7TlVMTH0sIDI5NzUsICJ0Y3AifSwKK3siZmptcGNtIiwgICAgICAgICAgICAge05VTEx9LCAyOTc1LCAidWRwIn0sCit7ImNucy1zcnYtcG9ydCIsICAgICAgIHtOVUxMfSwgMjk3NiwgInRjcCJ9LAoreyJjbnMtc3J2LXBvcnQiLCAgICAgICB7TlVMTH0sIDI5NzYsICJ1ZHAifSwKK3sidHRjLWV0YXAtbnMiLCAgICAgICAge05VTEx9LCAyOTc3LCAidGNwIn0sCit7InR0Yy1ldGFwLW5zIiwgICAgICAgIHtOVUxMfSwgMjk3NywgInVkcCJ9LAoreyJ0dGMtZXRhcC1kcyIsICAgICAgICB7TlVMTH0sIDI5NzgsICJ0Y3AifSwKK3sidHRjLWV0YXAtZHMiLCAgICAgICAge05VTEx9LCAyOTc4LCAidWRwIn0sCit7ImgyNjMtdmlkZW8iLCAgICAgICAgIHtOVUxMfSwgMjk3OSwgInRjcCJ9LAoreyJoMjYzLXZpZGVvIiwgICAgICAgICB7TlVMTH0sIDI5NzksICJ1ZHAifSwKK3sid2ltZCIsICAgICAgICAgICAgICAge05VTEx9LCAyOTgwLCAidGNwIn0sCit7IndpbWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjk4MCwgInVkcCJ9LAoreyJteWx4YW1wb3J0IiwgICAgICAgICB7TlVMTH0sIDI5ODEsICJ0Y3AifSwKK3sibXlseGFtcG9ydCIsICAgICAgICAge05VTEx9LCAyOTgxLCAidWRwIn0sCit7Iml3Yi13aGl0ZWJvYXJkIiwgICAgIHtOVUxMfSwgMjk4MiwgInRjcCJ9LAoreyJpd2Itd2hpdGVib2FyZCIsICAgICB7TlVMTH0sIDI5ODIsICJ1ZHAifSwKK3sibmV0cGxhbiIsICAgICAgICAgICAge05VTEx9LCAyOTgzLCAidGNwIn0sCit7Im5ldHBsYW4iLCAgICAgICAgICAgIHtOVUxMfSwgMjk4MywgInVkcCJ9LAoreyJocGlkc2FkbWluIiwgICAgICAgICB7TlVMTH0sIDI5ODQsICJ0Y3AifSwKK3siaHBpZHNhZG1pbiIsICAgICAgICAge05VTEx9LCAyOTg0LCAidWRwIn0sCit7ImhwaWRzYWdlbnQiLCAgICAgICAgIHtOVUxMfSwgMjk4NSwgInRjcCJ9LAoreyJocGlkc2FnZW50IiwgICAgICAgICB7TlVMTH0sIDI5ODUsICJ1ZHAifSwKK3sic3RvbmVmYWxscyIsICAgICAgICAge05VTEx9LCAyOTg2LCAidGNwIn0sCit7InN0b25lZmFsbHMiLCAgICAgICAgIHtOVUxMfSwgMjk4NiwgInVkcCJ9LAoreyJpZGVudGlmeSIsICAgICAgICAgICB7TlVMTH0sIDI5ODcsICJ0Y3AifSwKK3siaWRlbnRpZnkiLCAgICAgICAgICAge05VTEx9LCAyOTg3LCAidWRwIn0sCit7ImhpcHBhZCIsICAgICAgICAgICAgIHtOVUxMfSwgMjk4OCwgInRjcCJ9LAoreyJoaXBwYWQiLCAgICAgICAgICAgICB7TlVMTH0sIDI5ODgsICJ1ZHAifSwKK3siemFya292IiwgICAgICAgICAgICAge05VTEx9LCAyOTg5LCAidGNwIn0sCit7InphcmtvdiIsICAgICAgICAgICAgIHtOVUxMfSwgMjk4OSwgInVkcCJ9LAoreyJib3NjYXAiLCAgICAgICAgICAgICB7TlVMTH0sIDI5OTAsICJ0Y3AifSwKK3siYm9zY2FwIiwgICAgICAgICAgICAge05VTEx9LCAyOTkwLCAidWRwIn0sCit7Indrc3RuLW1vbiIsICAgICAgICAgIHtOVUxMfSwgMjk5MSwgInRjcCJ9LAoreyJ3a3N0bi1tb24iLCAgICAgICAgICB7TlVMTH0sIDI5OTEsICJ1ZHAifSwKK3siYXZlbnlvIiwgICAgICAgICAgICAge05VTEx9LCAyOTkyLCAidGNwIn0sCit7ImF2ZW55byIsICAgICAgICAgICAgIHtOVUxMfSwgMjk5MiwgInVkcCJ9LAoreyJ2ZXJpdGFzLXZpczEiLCAgICAgICB7TlVMTH0sIDI5OTMsICJ0Y3AifSwKK3sidmVyaXRhcy12aXMxIiwgICAgICAge05VTEx9LCAyOTkzLCAidWRwIn0sCit7InZlcml0YXMtdmlzMiIsICAgICAgIHtOVUxMfSwgMjk5NCwgInRjcCJ9LAoreyJ2ZXJpdGFzLXZpczIiLCAgICAgICB7TlVMTH0sIDI5OTQsICJ1ZHAifSwKK3siaWRycyIsICAgICAgICAgICAgICAge05VTEx9LCAyOTk1LCAidGNwIn0sCit7ImlkcnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjk5NSwgInVkcCJ9LAoreyJ2c2l4bWwiLCAgICAgICAgICAgICB7TlVMTH0sIDI5OTYsICJ0Y3AifSwKK3sidnNpeG1sIiwgICAgICAgICAgICAge05VTEx9LCAyOTk2LCAidWRwIn0sCit7InJlYm9sIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjk5NywgInRjcCJ9LAoreyJyZWJvbCIsICAgICAgICAgICAgICB7TlVMTH0sIDI5OTcsICJ1ZHAifSwKK3sicmVhbHNlY3VyZSIsICAgICAgICAge05VTEx9LCAyOTk4LCAidGNwIn0sCit7InJlYWxzZWN1cmUiLCAgICAgICAgIHtOVUxMfSwgMjk5OCwgInVkcCJ9LAoreyJyZW1vdGV3YXJlLXVuIiwgICAgICB7TlVMTH0sIDI5OTksICJ0Y3AifSwKK3sicmVtb3Rld2FyZS11biIsICAgICAge05VTEx9LCAyOTk5LCAidWRwIn0sCit7ImhiY2kiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzAwMCwgInRjcCJ9LAoreyJoYmNpIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwMDAsICJ1ZHAifSwKK3sicmVtb3Rld2FyZS1jbCIsICAgICAge05VTEx9LCAzMDAwLCAidGNwIn0sCit7InJlbW90ZXdhcmUtY2wiLCAgICAgIHtOVUxMfSwgMzAwMCwgInVkcCJ9LAoreyJleGxtLWFnZW50IiwgICAgICAgICB7TlVMTH0sIDMwMDIsICJ0Y3AifSwKK3siZXhsbS1hZ2VudCIsICAgICAgICAge05VTEx9LCAzMDAyLCAidWRwIn0sCit7InJlbW90ZXdhcmUtc3J2IiwgICAgIHtOVUxMfSwgMzAwMiwgInRjcCJ9LAoreyJyZW1vdGV3YXJlLXNydiIsICAgICB7TlVMTH0sIDMwMDIsICJ1ZHAifSwKK3siY2dtcyIsICAgICAgICAgICAgICAge05VTEx9LCAzMDAzLCAidGNwIn0sCit7ImNnbXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzAwMywgInVkcCJ9LAoreyJjc29mdHJhZ2VudCIsICAgICAgICB7TlVMTH0sIDMwMDQsICJ0Y3AifSwKK3siY3NvZnRyYWdlbnQiLCAgICAgICAge05VTEx9LCAzMDA0LCAidWRwIn0sCit7Imdlbml1c2xtIiwgICAgICAgICAgIHtOVUxMfSwgMzAwNSwgInRjcCJ9LAoreyJnZW5pdXNsbSIsICAgICAgICAgICB7TlVMTH0sIDMwMDUsICJ1ZHAifSwKK3siaWktYWRtaW4iLCAgICAgICAgICAge05VTEx9LCAzMDA2LCAidGNwIn0sCit7ImlpLWFkbWluIiwgICAgICAgICAgIHtOVUxMfSwgMzAwNiwgInVkcCJ9LAoreyJsb3R1c210YXAiLCAgICAgICAgICB7TlVMTH0sIDMwMDcsICJ0Y3AifSwKK3sibG90dXNtdGFwIiwgICAgICAgICAge05VTEx9LCAzMDA3LCAidWRwIn0sCit7Im1pZG5pZ2h0LXRlY2giLCAgICAgIHtOVUxMfSwgMzAwOCwgInRjcCJ9LAoreyJtaWRuaWdodC10ZWNoIiwgICAgICB7TlVMTH0sIDMwMDgsICJ1ZHAifSwKK3sicHhjLW50ZnkiLCAgICAgICAgICAge05VTEx9LCAzMDA5LCAidGNwIn0sCit7InB4Yy1udGZ5IiwgICAgICAgICAgIHtOVUxMfSwgMzAwOSwgInVkcCJ9LAoreyJndyIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDMwMTAsICJ0Y3AifSwKK3sicGluZy1wb25nIiwgICAgICAgICAge05VTEx9LCAzMDEwLCAidWRwIn0sCit7InRydXN0ZWQtd2ViIiwgICAgICAgIHtOVUxMfSwgMzAxMSwgInRjcCJ9LAoreyJ0cnVzdGVkLXdlYiIsICAgICAgICB7TlVMTH0sIDMwMTEsICJ1ZHAifSwKK3sidHdzZHNzIiwgICAgICAgICAgICAge05VTEx9LCAzMDEyLCAidGNwIn0sCit7InR3c2RzcyIsICAgICAgICAgICAgIHtOVUxMfSwgMzAxMiwgInVkcCJ9LAoreyJnaWxhdHNreXN1cmZlciIsICAgICB7TlVMTH0sIDMwMTMsICJ0Y3AifSwKK3siZ2lsYXRza3lzdXJmZXIiLCAgICAge05VTEx9LCAzMDEzLCAidWRwIn0sCit7ImJyb2tlcl9zZXJ2aWNlIiwgICAgIHtOVUxMfSwgMzAxNCwgInRjcCJ9LAoreyJicm9rZXJfc2VydmljZSIsICAgICB7TlVMTH0sIDMwMTQsICJ1ZHAifSwKK3sibmF0aS1kc3RwIiwgICAgICAgICAge05VTEx9LCAzMDE1LCAidGNwIn0sCit7Im5hdGktZHN0cCIsICAgICAgICAgIHtOVUxMfSwgMzAxNSwgInVkcCJ9LAoreyJub3RpZnlfc3J2ciIsICAgICAgICB7TlVMTH0sIDMwMTYsICJ0Y3AifSwKK3sibm90aWZ5X3NydnIiLCAgICAgICAge05VTEx9LCAzMDE2LCAidWRwIn0sCit7ImV2ZW50X2xpc3RlbmVyIiwgICAgIHtOVUxMfSwgMzAxNywgInRjcCJ9LAoreyJldmVudF9saXN0ZW5lciIsICAgICB7TlVMTH0sIDMwMTcsICJ1ZHAifSwKK3sic3J2Y19yZWdpc3RyeSIsICAgICAge05VTEx9LCAzMDE4LCAidGNwIn0sCit7InNydmNfcmVnaXN0cnkiLCAgICAgIHtOVUxMfSwgMzAxOCwgInVkcCJ9LAoreyJyZXNvdXJjZV9tZ3IiLCAgICAgICB7TlVMTH0sIDMwMTksICJ0Y3AifSwKK3sicmVzb3VyY2VfbWdyIiwgICAgICAge05VTEx9LCAzMDE5LCAidWRwIn0sCit7ImNpZnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzAyMCwgInRjcCJ9LAoreyJjaWZzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwMjAsICJ1ZHAifSwKK3siYWdyaXNlcnZlciIsICAgICAgICAge05VTEx9LCAzMDIxLCAidGNwIn0sCit7ImFncmlzZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMzAyMSwgInVkcCJ9LAoreyJjc3JlZ2FnZW50IiwgICAgICAgICB7TlVMTH0sIDMwMjIsICJ0Y3AifSwKK3siY3NyZWdhZ2VudCIsICAgICAgICAge05VTEx9LCAzMDIyLCAidWRwIn0sCit7Im1hZ2ljbm90ZXMiLCAgICAgICAgIHtOVUxMfSwgMzAyMywgInRjcCJ9LAoreyJtYWdpY25vdGVzIiwgICAgICAgICB7TlVMTH0sIDMwMjMsICJ1ZHAifSwKK3sibmRzX3NzbyIsICAgICAgICAgICAge05VTEx9LCAzMDI0LCAidGNwIn0sCit7Im5kc19zc28iLCAgICAgICAgICAgIHtOVUxMfSwgMzAyNCwgInVkcCJ9LAoreyJhcmVwYS1yYWZ0IiwgICAgICAgICB7TlVMTH0sIDMwMjUsICJ0Y3AifSwKK3siYXJlcGEtcmFmdCIsICAgICAgICAge05VTEx9LCAzMDI1LCAidWRwIn0sCit7ImFncmktZ2F0ZXdheSIsICAgICAgIHtOVUxMfSwgMzAyNiwgInRjcCJ9LAoreyJhZ3JpLWdhdGV3YXkiLCAgICAgICB7TlVMTH0sIDMwMjYsICJ1ZHAifSwKK3siTGllYkRldk1nbXRfQyIsICAgICAge05VTEx9LCAzMDI3LCAidGNwIn0sCit7IkxpZWJEZXZNZ210X0MiLCAgICAgIHtOVUxMfSwgMzAyNywgInVkcCJ9LAoreyJMaWViRGV2TWdtdF9ETSIsICAgICB7TlVMTH0sIDMwMjgsICJ0Y3AifSwKK3siTGllYkRldk1nbXRfRE0iLCAgICAge05VTEx9LCAzMDI4LCAidWRwIn0sCit7IkxpZWJEZXZNZ210X0EiLCAgICAgIHtOVUxMfSwgMzAyOSwgInRjcCJ9LAoreyJMaWViRGV2TWdtdF9BIiwgICAgICB7TlVMTH0sIDMwMjksICJ1ZHAifSwKK3siYXJlcGEtY2FzIiwgICAgICAgICAge05VTEx9LCAzMDMwLCAidGNwIn0sCit7ImFyZXBhLWNhcyIsICAgICAgICAgIHtOVUxMfSwgMzAzMCwgInVkcCJ9LAoreyJlcHBjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwMzEsICJ0Y3AifSwKK3siZXBwYyIsICAgICAgICAgICAgICAge05VTEx9LCAzMDMxLCAidWRwIn0sCit7InJlZHdvb2QtY2hhdCIsICAgICAgIHtOVUxMfSwgMzAzMiwgInRjcCJ9LAoreyJyZWR3b29kLWNoYXQiLCAgICAgICB7TlVMTH0sIDMwMzIsICJ1ZHAifSwKK3sicGRiIiwgICAgICAgICAgICAgICAge05VTEx9LCAzMDMzLCAidGNwIn0sCit7InBkYiIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzAzMywgInVkcCJ9LAoreyJvc21vc2lzLWFlZWEiLCAgICAgICB7TlVMTH0sIDMwMzQsICJ0Y3AifSwKK3sib3Ntb3Npcy1hZWVhIiwgICAgICAge05VTEx9LCAzMDM0LCAidWRwIn0sCit7ImZqc3YtZ3NzYWd0IiwgICAgICAgIHtOVUxMfSwgMzAzNSwgInRjcCJ9LAoreyJmanN2LWdzc2FndCIsICAgICAgICB7TlVMTH0sIDMwMzUsICJ1ZHAifSwKK3siaGFnZWwtZHVtcCIsICAgICAgICAge05VTEx9LCAzMDM2LCAidGNwIn0sCit7ImhhZ2VsLWR1bXAiLCAgICAgICAgIHtOVUxMfSwgMzAzNiwgInVkcCJ9LAoreyJocC1zYW4tbWdtdCIsICAgICAgICB7TlVMTH0sIDMwMzcsICJ0Y3AifSwKK3siaHAtc2FuLW1nbXQiLCAgICAgICAge05VTEx9LCAzMDM3LCAidWRwIn0sCit7InNhbnRhay11cHMiLCAgICAgICAgIHtOVUxMfSwgMzAzOCwgInRjcCJ9LAoreyJzYW50YWstdXBzIiwgICAgICAgICB7TlVMTH0sIDMwMzgsICJ1ZHAifSwKK3siY29naXRhdGUiLCAgICAgICAgICAge05VTEx9LCAzMDM5LCAidGNwIn0sCit7ImNvZ2l0YXRlIiwgICAgICAgICAgIHtOVUxMfSwgMzAzOSwgInVkcCJ9LAoreyJ0b21hdG8tc3ByaW5ncyIsICAgICB7TlVMTH0sIDMwNDAsICJ0Y3AifSwKK3sidG9tYXRvLXNwcmluZ3MiLCAgICAge05VTEx9LCAzMDQwLCAidWRwIn0sCit7ImRpLXRyYWNld2FyZSIsICAgICAgIHtOVUxMfSwgMzA0MSwgInRjcCJ9LAoreyJkaS10cmFjZXdhcmUiLCAgICAgICB7TlVMTH0sIDMwNDEsICJ1ZHAifSwKK3siam91cm5lZSIsICAgICAgICAgICAge05VTEx9LCAzMDQyLCAidGNwIn0sCit7ImpvdXJuZWUiLCAgICAgICAgICAgIHtOVUxMfSwgMzA0MiwgInVkcCJ9LAoreyJicnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDMwNDMsICJ0Y3AifSwKK3siYnJwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzMDQzLCAidWRwIn0sCit7ImVwcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzA0NCwgInRjcCJ9LAoreyJlcHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDMwNDQsICJ1ZHAifSwKK3sicmVzcG9uc2VuZXQiLCAgICAgICAge05VTEx9LCAzMDQ1LCAidGNwIn0sCit7InJlc3BvbnNlbmV0IiwgICAgICAgIHtOVUxMfSwgMzA0NSwgInVkcCJ9LAoreyJkaS1hc2UiLCAgICAgICAgICAgICB7TlVMTH0sIDMwNDYsICJ0Y3AifSwKK3siZGktYXNlIiwgICAgICAgICAgICAge05VTEx9LCAzMDQ2LCAidWRwIn0sCit7Imhsc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMzA0NywgInRjcCJ9LAoreyJobHNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDMwNDcsICJ1ZHAifSwKK3sicGN0cmFkZXIiLCAgICAgICAgICAge05VTEx9LCAzMDQ4LCAidGNwIn0sCit7InBjdHJhZGVyIiwgICAgICAgICAgIHtOVUxMfSwgMzA0OCwgInVkcCJ9LAoreyJuc3dzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwNDksICJ0Y3AifSwKK3sibnN3cyIsICAgICAgICAgICAgICAge05VTEx9LCAzMDQ5LCAidWRwIn0sCit7Imdkc19kYiIsICAgICAgICAgICAgIHtOVUxMfSwgMzA1MCwgInRjcCJ9LAoreyJnZHNfZGIiLCAgICAgICAgICAgICB7TlVMTH0sIDMwNTAsICJ1ZHAifSwKK3siZ2FsYXh5LXNlcnZlciIsICAgICAge05VTEx9LCAzMDUxLCAidGNwIn0sCit7ImdhbGF4eS1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzA1MSwgInVkcCJ9LAoreyJhcGMtMzA1MiIsICAgICAgICAgICB7TlVMTH0sIDMwNTIsICJ0Y3AifSwKK3siYXBjLTMwNTIiLCAgICAgICAgICAge05VTEx9LCAzMDUyLCAidWRwIn0sCit7ImRzb20tc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzA1MywgInRjcCJ9LAoreyJkc29tLXNlcnZlciIsICAgICAgICB7TlVMTH0sIDMwNTMsICJ1ZHAifSwKK3siYW10LWNuZi1wcm90IiwgICAgICAge05VTEx9LCAzMDU0LCAidGNwIn0sCit7ImFtdC1jbmYtcHJvdCIsICAgICAgIHtOVUxMfSwgMzA1NCwgInVkcCJ9LAoreyJwb2xpY3lzZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDMwNTUsICJ0Y3AifSwKK3sicG9saWN5c2VydmVyIiwgICAgICAge05VTEx9LCAzMDU1LCAidWRwIn0sCit7ImNkbC1zZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMzA1NiwgInRjcCJ9LAoreyJjZGwtc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDMwNTYsICJ1ZHAifSwKK3siZ29haGVhZC1mbGR1cCIsICAgICAge05VTEx9LCAzMDU3LCAidGNwIn0sCit7ImdvYWhlYWQtZmxkdXAiLCAgICAgIHtOVUxMfSwgMzA1NywgInVkcCJ9LAoreyJ2aWRlb2JlYW5zIiwgICAgICAgICB7TlVMTH0sIDMwNTgsICJ0Y3AifSwKK3sidmlkZW9iZWFucyIsICAgICAgICAge05VTEx9LCAzMDU4LCAidWRwIn0sCit7InFzb2Z0IiwgICAgICAgICAgICAgIHtOVUxMfSwgMzA1OSwgInRjcCJ9LAoreyJxc29mdCIsICAgICAgICAgICAgICB7TlVMTH0sIDMwNTksICJ1ZHAifSwKK3siaW50ZXJzZXJ2ZXIiLCAgICAgICAge05VTEx9LCAzMDYwLCAidGNwIn0sCit7ImludGVyc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzA2MCwgInVkcCJ9LAoreyJjYXV0Y3BkIiwgICAgICAgICAgICB7TlVMTH0sIDMwNjEsICJ0Y3AifSwKK3siY2F1dGNwZCIsICAgICAgICAgICAge05VTEx9LCAzMDYxLCAidWRwIn0sCit7Im5jYWNuLWlwLXRjcCIsICAgICAgIHtOVUxMfSwgMzA2MiwgInRjcCJ9LAoreyJuY2Fjbi1pcC10Y3AiLCAgICAgICB7TlVMTH0sIDMwNjIsICJ1ZHAifSwKK3sibmNhZGctaXAtdWRwIiwgICAgICAge05VTEx9LCAzMDYzLCAidGNwIn0sCit7Im5jYWRnLWlwLXVkcCIsICAgICAgIHtOVUxMfSwgMzA2MywgInVkcCJ9LAoreyJycHJ0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwNjQsICJ0Y3AifSwKK3sicnBydCIsICAgICAgICAgICAgICAge05VTEx9LCAzMDY0LCAidWRwIn0sCit7InNsaW50ZXJiYXNlIiwgICAgICAgIHtOVUxMfSwgMzA2NSwgInRjcCJ9LAoreyJzbGludGVyYmFzZSIsICAgICAgICB7TlVMTH0sIDMwNjUsICJ1ZHAifSwKK3sibmV0YXR0YWNoc2RtcCIsICAgICAge05VTEx9LCAzMDY2LCAidGNwIn0sCit7Im5ldGF0dGFjaHNkbXAiLCAgICAgIHtOVUxMfSwgMzA2NiwgInVkcCJ9LAoreyJmamhwanAiLCAgICAgICAgICAgICB7TlVMTH0sIDMwNjcsICJ0Y3AifSwKK3siZmpocGpwIiwgICAgICAgICAgICAge05VTEx9LCAzMDY3LCAidWRwIn0sCit7ImxzM2JjYXN0IiwgICAgICAgICAgIHtOVUxMfSwgMzA2OCwgInRjcCJ9LAoreyJsczNiY2FzdCIsICAgICAgICAgICB7TlVMTH0sIDMwNjgsICJ1ZHAifSwKK3sibHMzIiwgICAgICAgICAgICAgICAge05VTEx9LCAzMDY5LCAidGNwIn0sCit7ImxzMyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzA2OSwgInVkcCJ9LAoreyJtZ3hzd2l0Y2giLCAgICAgICAgICB7TlVMTH0sIDMwNzAsICJ0Y3AifSwKK3sibWd4c3dpdGNoIiwgICAgICAgICAge05VTEx9LCAzMDcwLCAidWRwIn0sCit7ImNzZC1tZ210LXBvcnQiLCAgICAgIHtOVUxMfSwgMzA3MSwgInRjcCJ9LAoreyJjc2QtbWdtdC1wb3J0IiwgICAgICB7TlVMTH0sIDMwNzEsICJ1ZHAifSwKK3siY3NkLW1vbml0b3IiLCAgICAgICAge05VTEx9LCAzMDcyLCAidGNwIn0sCit7ImNzZC1tb25pdG9yIiwgICAgICAgIHtOVUxMfSwgMzA3MiwgInVkcCJ9LAoreyJ2Y3JwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwNzMsICJ0Y3AifSwKK3sidmNycCIsICAgICAgICAgICAgICAge05VTEx9LCAzMDczLCAidWRwIn0sCit7Inhib3giLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzA3NCwgInRjcCJ9LAoreyJ4Ym94IiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwNzQsICJ1ZHAifSwKK3sib3JiaXgtbG9jYXRvciIsICAgICAge05VTEx9LCAzMDc1LCAidGNwIn0sCit7Im9yYml4LWxvY2F0b3IiLCAgICAgIHtOVUxMfSwgMzA3NSwgInVkcCJ9LAoreyJvcmJpeC1jb25maWciLCAgICAgICB7TlVMTH0sIDMwNzYsICJ0Y3AifSwKK3sib3JiaXgtY29uZmlnIiwgICAgICAge05VTEx9LCAzMDc2LCAidWRwIn0sCit7Im9yYml4LWxvYy1zc2wiLCAgICAgIHtOVUxMfSwgMzA3NywgInRjcCJ9LAoreyJvcmJpeC1sb2Mtc3NsIiwgICAgICB7TlVMTH0sIDMwNzcsICJ1ZHAifSwKK3sib3JiaXgtY2ZnLXNzbCIsICAgICAge05VTEx9LCAzMDc4LCAidGNwIn0sCit7Im9yYml4LWNmZy1zc2wiLCAgICAgIHtOVUxMfSwgMzA3OCwgInVkcCJ9LAoreyJsdi1mcm9udHBhbmVsIiwgICAgICB7TlVMTH0sIDMwNzksICJ0Y3AifSwKK3sibHYtZnJvbnRwYW5lbCIsICAgICAge05VTEx9LCAzMDc5LCAidWRwIn0sCit7InN0bV9wcHJvYyIsICAgICAgICAgIHtOVUxMfSwgMzA4MCwgInRjcCJ9LAoreyJzdG1fcHByb2MiLCAgICAgICAgICB7TlVMTH0sIDMwODAsICJ1ZHAifSwKK3sidGwxLWx2IiwgICAgICAgICAgICAge05VTEx9LCAzMDgxLCAidGNwIn0sCit7InRsMS1sdiIsICAgICAgICAgICAgIHtOVUxMfSwgMzA4MSwgInVkcCJ9LAoreyJ0bDEtcmF3IiwgICAgICAgICAgICB7TlVMTH0sIDMwODIsICJ0Y3AifSwKK3sidGwxLXJhdyIsICAgICAgICAgICAge05VTEx9LCAzMDgyLCAidWRwIn0sCit7InRsMS10ZWxuZXQiLCAgICAgICAgIHtOVUxMfSwgMzA4MywgInRjcCJ9LAoreyJ0bDEtdGVsbmV0IiwgICAgICAgICB7TlVMTH0sIDMwODMsICJ1ZHAifSwKK3siaXRtLW1jY3MiLCAgICAgICAgICAge05VTEx9LCAzMDg0LCAidGNwIn0sCit7Iml0bS1tY2NzIiwgICAgICAgICAgIHtOVUxMfSwgMzA4NCwgInVkcCJ9LAoreyJwY2locmVxIiwgICAgICAgICAgICB7TlVMTH0sIDMwODUsICJ0Y3AifSwKK3sicGNpaHJlcSIsICAgICAgICAgICAge05VTEx9LCAzMDg1LCAidWRwIn0sCit7ImpkbC1kYmtpdGNoZW4iLCAgICAgIHtOVUxMfSwgMzA4NiwgInRjcCJ9LAoreyJqZGwtZGJraXRjaGVuIiwgICAgICB7TlVMTH0sIDMwODYsICJ1ZHAifSwKK3siYXNva2ktc21hIiwgICAgICAgICAge05VTEx9LCAzMDg3LCAidGNwIn0sCit7ImFzb2tpLXNtYSIsICAgICAgICAgIHtOVUxMfSwgMzA4NywgInVkcCJ9LAoreyJ4ZHRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwODgsICJ0Y3AifSwKK3sieGR0cCIsICAgICAgICAgICAgICAge05VTEx9LCAzMDg4LCAidWRwIn0sCit7InB0ay1hbGluayIsICAgICAgICAgIHtOVUxMfSwgMzA4OSwgInRjcCJ9LAoreyJwdGstYWxpbmsiLCAgICAgICAgICB7TlVMTH0sIDMwODksICJ1ZHAifSwKK3sic3RzcyIsICAgICAgICAgICAgICAge05VTEx9LCAzMDkwLCAidGNwIn0sCit7InN0c3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzA5MCwgInVkcCJ9LAoreyIxY2ktc21jcyIsICAgICAgICAgICB7TlVMTH0sIDMwOTEsICJ0Y3AifSwKK3siMWNpLXNtY3MiLCAgICAgICAgICAge05VTEx9LCAzMDkxLCAidWRwIn0sCit7InJhcGlkbXEtY2VudGVyIiwgICAgIHtOVUxMfSwgMzA5MywgInRjcCJ9LAoreyJyYXBpZG1xLWNlbnRlciIsICAgICB7TlVMTH0sIDMwOTMsICJ1ZHAifSwKK3sicmFwaWRtcS1yZWciLCAgICAgICAge05VTEx9LCAzMDk0LCAidGNwIn0sCit7InJhcGlkbXEtcmVnIiwgICAgICAgIHtOVUxMfSwgMzA5NCwgInVkcCJ9LAoreyJwYW5hc2FzIiwgICAgICAgICAgICB7TlVMTH0sIDMwOTUsICJ0Y3AifSwKK3sicGFuYXNhcyIsICAgICAgICAgICAge05VTEx9LCAzMDk1LCAidWRwIn0sCit7Im5kbC1hcHMiLCAgICAgICAgICAgIHtOVUxMfSwgMzA5NiwgInRjcCJ9LAoreyJuZGwtYXBzIiwgICAgICAgICAgICB7TlVMTH0sIDMwOTYsICJ1ZHAifSwKK3siaXR1LWJpY2Mtc3RjIiwgICAgICAge05VTEx9LCAzMDk3LCAic2N0cCJ9LAoreyJ1bW0tcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDMwOTgsICJ0Y3AifSwKK3sidW1tLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzMDk4LCAidWRwIn0sCit7ImNobWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzA5OSwgInRjcCJ9LAoreyJjaG1kIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMwOTksICJ1ZHAifSwKK3sib3Bjb24teHBzIiwgICAgICAgICAge05VTEx9LCAzMTAwLCAidGNwIn0sCit7Im9wY29uLXhwcyIsICAgICAgICAgIHtOVUxMfSwgMzEwMCwgInVkcCJ9LAoreyJocC1weHBpYiIsICAgICAgICAgICB7TlVMTH0sIDMxMDEsICJ0Y3AifSwKK3siaHAtcHhwaWIiLCAgICAgICAgICAge05VTEx9LCAzMTAxLCAidWRwIn0sCit7InNsc2xhdmVtb24iLCAgICAgICAgIHtOVUxMfSwgMzEwMiwgInRjcCJ9LAoreyJzbHNsYXZlbW9uIiwgICAgICAgICB7TlVMTH0sIDMxMDIsICJ1ZHAifSwKK3siYXV0b2N1ZXNtaSIsICAgICAgICAge05VTEx9LCAzMTAzLCAidGNwIn0sCit7ImF1dG9jdWVzbWkiLCAgICAgICAgIHtOVUxMfSwgMzEwMywgInVkcCJ9LAoreyJhdXRvY3VlbG9nIiwgICAgICAgICB7TlVMTH0sIDMxMDQsICJ0Y3AifSwKK3siYXV0b2N1ZXRpbWUiLCAgICAgICAge05VTEx9LCAzMTA0LCAidWRwIn0sCit7ImNhcmRib3giLCAgICAgICAgICAgIHtOVUxMfSwgMzEwNSwgInRjcCJ9LAoreyJjYXJkYm94IiwgICAgICAgICAgICB7TlVMTH0sIDMxMDUsICJ1ZHAifSwKK3siY2FyZGJveC1odHRwIiwgICAgICAge05VTEx9LCAzMTA2LCAidGNwIn0sCit7ImNhcmRib3gtaHR0cCIsICAgICAgIHtOVUxMfSwgMzEwNiwgInVkcCJ9LAoreyJidXNpbmVzcyIsICAgICAgICAgICB7TlVMTH0sIDMxMDcsICJ0Y3AifSwKK3siYnVzaW5lc3MiLCAgICAgICAgICAge05VTEx9LCAzMTA3LCAidWRwIn0sCit7Imdlb2xvY2F0ZSIsICAgICAgICAgIHtOVUxMfSwgMzEwOCwgInRjcCJ9LAoreyJnZW9sb2NhdGUiLCAgICAgICAgICB7TlVMTH0sIDMxMDgsICJ1ZHAifSwKK3sicGVyc29ubmVsIiwgICAgICAgICAge05VTEx9LCAzMTA5LCAidGNwIn0sCit7InBlcnNvbm5lbCIsICAgICAgICAgIHtOVUxMfSwgMzEwOSwgInVkcCJ9LAoreyJzaW0tY29udHJvbCIsICAgICAgICB7TlVMTH0sIDMxMTAsICJ0Y3AifSwKK3sic2ltLWNvbnRyb2wiLCAgICAgICAge05VTEx9LCAzMTEwLCAidWRwIn0sCit7IndzeW5jaCIsICAgICAgICAgICAgIHtOVUxMfSwgMzExMSwgInRjcCJ9LAoreyJ3c3luY2giLCAgICAgICAgICAgICB7TlVMTH0sIDMxMTEsICJ1ZHAifSwKK3sia3N5c2d1YXJkIiwgICAgICAgICAge05VTEx9LCAzMTEyLCAidGNwIn0sCit7ImtzeXNndWFyZCIsICAgICAgICAgIHtOVUxMfSwgMzExMiwgInVkcCJ9LAoreyJjcy1hdXRoLXN2ciIsICAgICAgICB7TlVMTH0sIDMxMTMsICJ0Y3AifSwKK3siY3MtYXV0aC1zdnIiLCAgICAgICAge05VTEx9LCAzMTEzLCAidWRwIn0sCit7ImNjbWFkIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzExNCwgInRjcCJ9LAoreyJjY21hZCIsICAgICAgICAgICAgICB7TlVMTH0sIDMxMTQsICJ1ZHAifSwKK3sibWN0ZXQtbWFzdGVyIiwgICAgICAge05VTEx9LCAzMTE1LCAidGNwIn0sCit7Im1jdGV0LW1hc3RlciIsICAgICAgIHtOVUxMfSwgMzExNSwgInVkcCJ9LAoreyJtY3RldC1nYXRld2F5IiwgICAgICB7TlVMTH0sIDMxMTYsICJ0Y3AifSwKK3sibWN0ZXQtZ2F0ZXdheSIsICAgICAge05VTEx9LCAzMTE2LCAidWRwIn0sCit7Im1jdGV0LWpzZXJ2IiwgICAgICAgIHtOVUxMfSwgMzExNywgInRjcCJ9LAoreyJtY3RldC1qc2VydiIsICAgICAgICB7TlVMTH0sIDMxMTcsICJ1ZHAifSwKK3sicGthZ2VudCIsICAgICAgICAgICAge05VTEx9LCAzMTE4LCAidGNwIn0sCit7InBrYWdlbnQiLCAgICAgICAgICAgIHtOVUxMfSwgMzExOCwgInVkcCJ9LAoreyJkMjAwMGtlcm5lbCIsICAgICAgICB7TlVMTH0sIDMxMTksICJ0Y3AifSwKK3siZDIwMDBrZXJuZWwiLCAgICAgICAge05VTEx9LCAzMTE5LCAidWRwIn0sCit7ImQyMDAwd2Vic2VydmVyIiwgICAgIHtOVUxMfSwgMzEyMCwgInRjcCJ9LAoreyJkMjAwMHdlYnNlcnZlciIsICAgICB7TlVMTH0sIDMxMjAsICJ1ZHAifSwKK3sidnRyLWVtdWxhdG9yIiwgICAgICAge05VTEx9LCAzMTIyLCAidGNwIn0sCit7InZ0ci1lbXVsYXRvciIsICAgICAgIHtOVUxMfSwgMzEyMiwgInVkcCJ9LAoreyJlZGl4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDMxMjMsICJ0Y3AifSwKK3siZWRpeCIsICAgICAgICAgICAgICAge05VTEx9LCAzMTIzLCAidWRwIn0sCit7ImJlYWNvbi1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzEyNCwgInRjcCJ9LAoreyJiZWFjb24tcG9ydCIsICAgICAgICB7TlVMTH0sIDMxMjQsICJ1ZHAifSwKK3siYTEzLWFuIiwgICAgICAgICAgICAge05VTEx9LCAzMTI1LCAidGNwIn0sCit7ImExMy1hbiIsICAgICAgICAgICAgIHtOVUxMfSwgMzEyNSwgInVkcCJ9LAoreyJjdHgtYnJpZGdlIiwgICAgICAgICB7TlVMTH0sIDMxMjcsICJ0Y3AifSwKK3siY3R4LWJyaWRnZSIsICAgICAgICAge05VTEx9LCAzMTI3LCAidWRwIn0sCit7Im5kbC1hYXMiLCAgICAgICAgICAgIHtOVUxMfSwgMzEyOCwgInRjcCJ9LAoreyJuZGwtYWFzIiwgICAgICAgICAgICB7TlVMTH0sIDMxMjgsICJ1ZHAifSwKK3sibmV0cG9ydC1pZCIsICAgICAgICAge05VTEx9LCAzMTI5LCAidGNwIn0sCit7Im5ldHBvcnQtaWQiLCAgICAgICAgIHtOVUxMfSwgMzEyOSwgInVkcCJ9LAoreyJpY3B2MiIsICAgICAgICAgICAgICB7TlVMTH0sIDMxMzAsICJ0Y3AifSwKK3siaWNwdjIiLCAgICAgICAgICAgICAge05VTEx9LCAzMTMwLCAidWRwIn0sCit7Im5ldGJvb2ttYXJrIiwgICAgICAgIHtOVUxMfSwgMzEzMSwgInRjcCJ9LAoreyJuZXRib29rbWFyayIsICAgICAgICB7TlVMTH0sIDMxMzEsICJ1ZHAifSwKK3sibXMtcnVsZS1lbmdpbmUiLCAgICAge05VTEx9LCAzMTMyLCAidGNwIn0sCit7Im1zLXJ1bGUtZW5naW5lIiwgICAgIHtOVUxMfSwgMzEzMiwgInVkcCJ9LAoreyJwcmlzbS1kZXBsb3kiLCAgICAgICB7TlVMTH0sIDMxMzMsICJ0Y3AifSwKK3sicHJpc20tZGVwbG95IiwgICAgICAge05VTEx9LCAzMTMzLCAidWRwIn0sCit7ImVjcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzEzNCwgInRjcCJ9LAoreyJlY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDMxMzQsICJ1ZHAifSwKK3sicGVlcmJvb2stcG9ydCIsICAgICAge05VTEx9LCAzMTM1LCAidGNwIn0sCit7InBlZXJib29rLXBvcnQiLCAgICAgIHtOVUxMfSwgMzEzNSwgInVkcCJ9LAoreyJncnViZCIsICAgICAgICAgICAgICB7TlVMTH0sIDMxMzYsICJ0Y3AifSwKK3siZ3J1YmQiLCAgICAgICAgICAgICAge05VTEx9LCAzMTM2LCAidWRwIn0sCit7InJ0bnQtMSIsICAgICAgICAgICAgIHtOVUxMfSwgMzEzNywgInRjcCJ9LAoreyJydG50LTEiLCAgICAgICAgICAgICB7TlVMTH0sIDMxMzcsICJ1ZHAifSwKK3sicnRudC0yIiwgICAgICAgICAgICAge05VTEx9LCAzMTM4LCAidGNwIn0sCit7InJ0bnQtMiIsICAgICAgICAgICAgIHtOVUxMfSwgMzEzOCwgInVkcCJ9LAoreyJpbmNvZ25pdG9ydiIsICAgICAgICB7TlVMTH0sIDMxMzksICJ0Y3AifSwKK3siaW5jb2duaXRvcnYiLCAgICAgICAge05VTEx9LCAzMTM5LCAidWRwIn0sCit7ImFyaWxpYW11bHRpIiwgICAgICAgIHtOVUxMfSwgMzE0MCwgInRjcCJ9LAoreyJhcmlsaWFtdWx0aSIsICAgICAgICB7TlVMTH0sIDMxNDAsICJ1ZHAifSwKK3sidm1vZGVtIiwgICAgICAgICAgICAge05VTEx9LCAzMTQxLCAidGNwIn0sCit7InZtb2RlbSIsICAgICAgICAgICAgIHtOVUxMfSwgMzE0MSwgInVkcCJ9LAoreyJyZGMtd2gtZW9zIiwgICAgICAgICB7TlVMTH0sIDMxNDIsICJ0Y3AifSwKK3sicmRjLXdoLWVvcyIsICAgICAgICAge05VTEx9LCAzMTQyLCAidWRwIn0sCit7InNlYXZpZXciLCAgICAgICAgICAgIHtOVUxMfSwgMzE0MywgInRjcCJ9LAoreyJzZWF2aWV3IiwgICAgICAgICAgICB7TlVMTH0sIDMxNDMsICJ1ZHAifSwKK3sidGFyYW50ZWxsYSIsICAgICAgICAge05VTEx9LCAzMTQ0LCAidGNwIn0sCit7InRhcmFudGVsbGEiLCAgICAgICAgIHtOVUxMfSwgMzE0NCwgInVkcCJ9LAoreyJjc2ktbGZhcCIsICAgICAgICAgICB7TlVMTH0sIDMxNDUsICJ0Y3AifSwKK3siY3NpLWxmYXAiLCAgICAgICAgICAge05VTEx9LCAzMTQ1LCAidWRwIn0sCit7ImJlYXJzLTAyIiwgICAgICAgICAgIHtOVUxMfSwgMzE0NiwgInRjcCJ9LAoreyJiZWFycy0wMiIsICAgICAgICAgICB7TlVMTH0sIDMxNDYsICJ1ZHAifSwKK3sicmZpbyIsICAgICAgICAgICAgICAge05VTEx9LCAzMTQ3LCAidGNwIn0sCit7InJmaW8iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzE0NywgInVkcCJ9LAoreyJubS1nYW1lLWFkbWluIiwgICAgICB7TlVMTH0sIDMxNDgsICJ0Y3AifSwKK3sibm0tZ2FtZS1hZG1pbiIsICAgICAge05VTEx9LCAzMTQ4LCAidWRwIn0sCit7Im5tLWdhbWUtc2VydmVyIiwgICAgIHtOVUxMfSwgMzE0OSwgInRjcCJ9LAoreyJubS1nYW1lLXNlcnZlciIsICAgICB7TlVMTH0sIDMxNDksICJ1ZHAifSwKK3sibm0tYXNzZXMtYWRtaW4iLCAgICAge05VTEx9LCAzMTUwLCAidGNwIn0sCit7Im5tLWFzc2VzLWFkbWluIiwgICAgIHtOVUxMfSwgMzE1MCwgInVkcCJ9LAoreyJubS1hc3Nlc3NvciIsICAgICAgICB7TlVMTH0sIDMxNTEsICJ0Y3AifSwKK3sibm0tYXNzZXNzb3IiLCAgICAgICAge05VTEx9LCAzMTUxLCAidWRwIn0sCit7ImZlaXRpYW5yb2NrZXkiLCAgICAgIHtOVUxMfSwgMzE1MiwgInRjcCJ9LAoreyJmZWl0aWFucm9ja2V5IiwgICAgICB7TlVMTH0sIDMxNTIsICJ1ZHAifSwKK3siczgtY2xpZW50LXBvcnQiLCAgICAge05VTEx9LCAzMTUzLCAidGNwIn0sCit7InM4LWNsaWVudC1wb3J0IiwgICAgIHtOVUxMfSwgMzE1MywgInVkcCJ9LAoreyJjY21ybWkiLCAgICAgICAgICAgICB7TlVMTH0sIDMxNTQsICJ0Y3AifSwKK3siY2Ntcm1pIiwgICAgICAgICAgICAge05VTEx9LCAzMTU0LCAidWRwIn0sCit7ImpwZWdtcGVnIiwgICAgICAgICAgIHtOVUxMfSwgMzE1NSwgInRjcCJ9LAoreyJqcGVnbXBlZyIsICAgICAgICAgICB7TlVMTH0sIDMxNTUsICJ1ZHAifSwKK3siaW5kdXJhIiwgICAgICAgICAgICAge05VTEx9LCAzMTU2LCAidGNwIn0sCit7ImluZHVyYSIsICAgICAgICAgICAgIHtOVUxMfSwgMzE1NiwgInVkcCJ9LAoreyJlM2NvbnN1bHRhbnRzIiwgICAgICB7TlVMTH0sIDMxNTcsICJ0Y3AifSwKK3siZTNjb25zdWx0YW50cyIsICAgICAge05VTEx9LCAzMTU3LCAidWRwIn0sCit7InN0dnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzE1OCwgInRjcCJ9LAoreyJzdHZwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMxNTgsICJ1ZHAifSwKK3sibmF2ZWdhd2ViLXBvcnQiLCAgICAge05VTEx9LCAzMTU5LCAidGNwIn0sCit7Im5hdmVnYXdlYi1wb3J0IiwgICAgIHtOVUxMfSwgMzE1OSwgInVkcCJ9LAoreyJ0aXAtYXBwLXNlcnZlciIsICAgICB7TlVMTH0sIDMxNjAsICJ0Y3AifSwKK3sidGlwLWFwcC1zZXJ2ZXIiLCAgICAge05VTEx9LCAzMTYwLCAidWRwIn0sCit7ImRvYzFsbSIsICAgICAgICAgICAgIHtOVUxMfSwgMzE2MSwgInRjcCJ9LAoreyJkb2MxbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDMxNjEsICJ1ZHAifSwKK3sic2ZsbSIsICAgICAgICAgICAgICAge05VTEx9LCAzMTYyLCAidGNwIn0sCit7InNmbG0iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzE2MiwgInVkcCJ9LAoreyJyZXMtc2FwIiwgICAgICAgICAgICB7TlVMTH0sIDMxNjMsICJ0Y3AifSwKK3sicmVzLXNhcCIsICAgICAgICAgICAge05VTEx9LCAzMTYzLCAidWRwIn0sCit7ImltcHJzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzE2NCwgInRjcCJ9LAoreyJpbXBycyIsICAgICAgICAgICAgICB7TlVMTH0sIDMxNjQsICJ1ZHAifSwKK3sibmV3Z2VucGF5IiwgICAgICAgICAge05VTEx9LCAzMTY1LCAidGNwIn0sCit7Im5ld2dlbnBheSIsICAgICAgICAgIHtOVUxMfSwgMzE2NSwgInVkcCJ9LAoreyJzb3NzZWNvbGxlY3RvciIsICAgICB7TlVMTH0sIDMxNjYsICJ0Y3AifSwKK3sic29zc2Vjb2xsZWN0b3IiLCAgICAge05VTEx9LCAzMTY2LCAidWRwIn0sCit7Im5vd2NvbnRhY3QiLCAgICAgICAgIHtOVUxMfSwgMzE2NywgInRjcCJ9LAoreyJub3djb250YWN0IiwgICAgICAgICB7TlVMTH0sIDMxNjcsICJ1ZHAifSwKK3sicG93ZXJvbm51ZCIsICAgICAgICAge05VTEx9LCAzMTY4LCAidGNwIn0sCit7InBvd2Vyb25udWQiLCAgICAgICAgIHtOVUxMfSwgMzE2OCwgInVkcCJ9LAoreyJzZXJ2ZXJ2aWV3LWFzIiwgICAgICB7TlVMTH0sIDMxNjksICJ0Y3AifSwKK3sic2VydmVydmlldy1hcyIsICAgICAge05VTEx9LCAzMTY5LCAidWRwIn0sCit7InNlcnZlcnZpZXctYXNuIiwgICAgIHtOVUxMfSwgMzE3MCwgInRjcCJ9LAoreyJzZXJ2ZXJ2aWV3LWFzbiIsICAgICB7TlVMTH0sIDMxNzAsICJ1ZHAifSwKK3sic2VydmVydmlldy1nZiIsICAgICAge05VTEx9LCAzMTcxLCAidGNwIn0sCit7InNlcnZlcnZpZXctZ2YiLCAgICAgIHtOVUxMfSwgMzE3MSwgInVkcCJ9LAoreyJzZXJ2ZXJ2aWV3LXJtIiwgICAgICB7TlVMTH0sIDMxNzIsICJ0Y3AifSwKK3sic2VydmVydmlldy1ybSIsICAgICAge05VTEx9LCAzMTcyLCAidWRwIn0sCit7InNlcnZlcnZpZXctaWNjIiwgICAgIHtOVUxMfSwgMzE3MywgInRjcCJ9LAoreyJzZXJ2ZXJ2aWV3LWljYyIsICAgICB7TlVMTH0sIDMxNzMsICJ1ZHAifSwKK3siYXJtaS1zZXJ2ZXIiLCAgICAgICAge05VTEx9LCAzMTc0LCAidGNwIn0sCit7ImFybWktc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzE3NCwgInVkcCJ9LAoreyJ0MS1lMS1vdmVyLWlwIiwgICAgICB7TlVMTH0sIDMxNzUsICJ0Y3AifSwKK3sidDEtZTEtb3Zlci1pcCIsICAgICAge05VTEx9LCAzMTc1LCAidWRwIn0sCit7ImFycy1tYXN0ZXIiLCAgICAgICAgIHtOVUxMfSwgMzE3NiwgInRjcCJ9LAoreyJhcnMtbWFzdGVyIiwgICAgICAgICB7TlVMTH0sIDMxNzYsICJ1ZHAifSwKK3sicGhvbmV4LXBvcnQiLCAgICAgICAge05VTEx9LCAzMTc3LCAidGNwIn0sCit7InBob25leC1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzE3NywgInVkcCJ9LAoreyJyYWRjbGllbnRwb3J0IiwgICAgICB7TlVMTH0sIDMxNzgsICJ0Y3AifSwKK3sicmFkY2xpZW50cG9ydCIsICAgICAge05VTEx9LCAzMTc4LCAidWRwIn0sCit7ImgyZ2Ytdy0ybSIsICAgICAgICAgIHtOVUxMfSwgMzE3OSwgInRjcCJ9LAoreyJoMmdmLXctMm0iLCAgICAgICAgICB7TlVMTH0sIDMxNzksICJ1ZHAifSwKK3sibWMtYnJrLXNydiIsICAgICAgICAge05VTEx9LCAzMTgwLCAidGNwIn0sCit7Im1jLWJyay1zcnYiLCAgICAgICAgIHtOVUxMfSwgMzE4MCwgInVkcCJ9LAoreyJibWNwYXRyb2xhZ2VudCIsICAgICB7TlVMTH0sIDMxODEsICJ0Y3AifSwKK3siYm1jcGF0cm9sYWdlbnQiLCAgICAge05VTEx9LCAzMTgxLCAidWRwIn0sCit7ImJtY3BhdHJvbHJudnUiLCAgICAgIHtOVUxMfSwgMzE4MiwgInRjcCJ9LAoreyJibWNwYXRyb2xybnZ1IiwgICAgICB7TlVMTH0sIDMxODIsICJ1ZHAifSwKK3siY29wcy10bHMiLCAgICAgICAgICAge05VTEx9LCAzMTgzLCAidGNwIn0sCit7ImNvcHMtdGxzIiwgICAgICAgICAgIHtOVUxMfSwgMzE4MywgInVkcCJ9LAoreyJhcG9nZWV4LXBvcnQiLCAgICAgICB7TlVMTH0sIDMxODQsICJ0Y3AifSwKK3siYXBvZ2VleC1wb3J0IiwgICAgICAge05VTEx9LCAzMTg0LCAidWRwIn0sCit7InNtcHBwZCIsICAgICAgICAgICAgIHtOVUxMfSwgMzE4NSwgInRjcCJ9LAoreyJzbXBwcGQiLCAgICAgICAgICAgICB7TlVMTH0sIDMxODUsICJ1ZHAifSwKK3siaWl3LXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzMTg2LCAidGNwIn0sCit7Imlpdy1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzE4NiwgInVkcCJ9LAoreyJvZGktcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDMxODcsICJ0Y3AifSwKK3sib2RpLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzMTg3LCAidWRwIn0sCit7ImJyY20tY29tbS1wb3J0IiwgICAgIHtOVUxMfSwgMzE4OCwgInRjcCJ9LAoreyJicmNtLWNvbW0tcG9ydCIsICAgICB7TlVMTH0sIDMxODgsICJ1ZHAifSwKK3sicGNsZS1pbmZleCIsICAgICAgICAge05VTEx9LCAzMTg5LCAidGNwIn0sCit7InBjbGUtaW5mZXgiLCAgICAgICAgIHtOVUxMfSwgMzE4OSwgInVkcCJ9LAoreyJjc3ZyLXByb3h5IiwgICAgICAgICB7TlVMTH0sIDMxOTAsICJ0Y3AifSwKK3siY3N2ci1wcm94eSIsICAgICAgICAge05VTEx9LCAzMTkwLCAidWRwIn0sCit7ImNzdnItc3NscHJveHkiLCAgICAgIHtOVUxMfSwgMzE5MSwgInRjcCJ9LAoreyJjc3ZyLXNzbHByb3h5IiwgICAgICB7TlVMTH0sIDMxOTEsICJ1ZHAifSwKK3siZmlyZW1vbnJjYyIsICAgICAgICAge05VTEx9LCAzMTkyLCAidGNwIn0sCit7ImZpcmVtb25yY2MiLCAgICAgICAgIHtOVUxMfSwgMzE5MiwgInVkcCJ9LAoreyJzcGFuZGF0YXBvcnQiLCAgICAgICB7TlVMTH0sIDMxOTMsICJ0Y3AifSwKK3sic3BhbmRhdGFwb3J0IiwgICAgICAge05VTEx9LCAzMTkzLCAidWRwIn0sCit7Im1hZ2JpbmQiLCAgICAgICAgICAgIHtOVUxMfSwgMzE5NCwgInRjcCJ9LAoreyJtYWdiaW5kIiwgICAgICAgICAgICB7TlVMTH0sIDMxOTQsICJ1ZHAifSwKK3sibmN1LTEiLCAgICAgICAgICAgICAge05VTEx9LCAzMTk1LCAidGNwIn0sCit7Im5jdS0xIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzE5NSwgInVkcCJ9LAoreyJuY3UtMiIsICAgICAgICAgICAgICB7TlVMTH0sIDMxOTYsICJ0Y3AifSwKK3sibmN1LTIiLCAgICAgICAgICAgICAge05VTEx9LCAzMTk2LCAidWRwIn0sCit7ImVtYnJhY2UtZHAtcyIsICAgICAgIHtOVUxMfSwgMzE5NywgInRjcCJ9LAoreyJlbWJyYWNlLWRwLXMiLCAgICAgICB7TlVMTH0sIDMxOTcsICJ1ZHAifSwKK3siZW1icmFjZS1kcC1jIiwgICAgICAge05VTEx9LCAzMTk4LCAidGNwIn0sCit7ImVtYnJhY2UtZHAtYyIsICAgICAgIHtOVUxMfSwgMzE5OCwgInVkcCJ9LAoreyJkbW9kLXdvcmtzcGFjZSIsICAgICB7TlVMTH0sIDMxOTksICJ0Y3AifSwKK3siZG1vZC13b3Jrc3BhY2UiLCAgICAge05VTEx9LCAzMTk5LCAidWRwIn0sCit7InRpY2stcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMzIwMCwgInRjcCJ9LAoreyJ0aWNrLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDMyMDAsICJ1ZHAifSwKK3siY3BxLXRhc2tzbWFydCIsICAgICAge05VTEx9LCAzMjAxLCAidGNwIn0sCit7ImNwcS10YXNrc21hcnQiLCAgICAgIHtOVUxMfSwgMzIwMSwgInVkcCJ9LAoreyJpbnRyYWludHJhIiwgICAgICAgICB7TlVMTH0sIDMyMDIsICJ0Y3AifSwKK3siaW50cmFpbnRyYSIsICAgICAgICAge05VTEx9LCAzMjAyLCAidWRwIn0sCit7Im5ldHdhdGNoZXItbW9uIiwgICAgIHtOVUxMfSwgMzIwMywgInRjcCJ9LAoreyJuZXR3YXRjaGVyLW1vbiIsICAgICB7TlVMTH0sIDMyMDMsICJ1ZHAifSwKK3sibmV0d2F0Y2hlci1kYiIsICAgICAge05VTEx9LCAzMjA0LCAidGNwIn0sCit7Im5ldHdhdGNoZXItZGIiLCAgICAgIHtOVUxMfSwgMzIwNCwgInVkcCJ9LAoreyJpc25zIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMyMDUsICJ0Y3AifSwKK3siaXNucyIsICAgICAgICAgICAgICAge05VTEx9LCAzMjA1LCAidWRwIn0sCit7Imlyb25tYWlsIiwgICAgICAgICAgIHtOVUxMfSwgMzIwNiwgInRjcCJ9LAoreyJpcm9ubWFpbCIsICAgICAgICAgICB7TlVMTH0sIDMyMDYsICJ1ZHAifSwKK3sidngtYXV0aC1wb3J0IiwgICAgICAge05VTEx9LCAzMjA3LCAidGNwIn0sCit7InZ4LWF1dGgtcG9ydCIsICAgICAgIHtOVUxMfSwgMzIwNywgInVkcCJ9LAoreyJwZnUtcHJjYWxsYmFjayIsICAgICB7TlVMTH0sIDMyMDgsICJ0Y3AifSwKK3sicGZ1LXByY2FsbGJhY2siLCAgICAge05VTEx9LCAzMjA4LCAidWRwIn0sCit7Im5ldHdrcGF0aGVuZ2luZSIsICAgIHtOVUxMfSwgMzIwOSwgInRjcCJ9LAoreyJuZXR3a3BhdGhlbmdpbmUiLCAgICB7TlVMTH0sIDMyMDksICJ1ZHAifSwKK3siZmxhbWVuY28tcHJveHkiLCAgICAge05VTEx9LCAzMjEwLCAidGNwIn0sCit7ImZsYW1lbmNvLXByb3h5IiwgICAgIHtOVUxMfSwgMzIxMCwgInVkcCJ9LAoreyJhdnNlY3VyZW1nbXQiLCAgICAgICB7TlVMTH0sIDMyMTEsICJ0Y3AifSwKK3siYXZzZWN1cmVtZ210IiwgICAgICAge05VTEx9LCAzMjExLCAidWRwIn0sCit7InN1cnZleWluc3QiLCAgICAgICAgIHtOVUxMfSwgMzIxMiwgInRjcCJ9LAoreyJzdXJ2ZXlpbnN0IiwgICAgICAgICB7TlVMTH0sIDMyMTIsICJ1ZHAifSwKK3sibmVvbjI0eDciLCAgICAgICAgICAge05VTEx9LCAzMjEzLCAidGNwIn0sCit7Im5lb24yNHg3IiwgICAgICAgICAgIHtOVUxMfSwgMzIxMywgInVkcCJ9LAoreyJqbXEtZGFlbW9uLTEiLCAgICAgICB7TlVMTH0sIDMyMTQsICJ0Y3AifSwKK3siam1xLWRhZW1vbi0xIiwgICAgICAge05VTEx9LCAzMjE0LCAidWRwIn0sCit7ImptcS1kYWVtb24tMiIsICAgICAgIHtOVUxMfSwgMzIxNSwgInRjcCJ9LAoreyJqbXEtZGFlbW9uLTIiLCAgICAgICB7TlVMTH0sIDMyMTUsICJ1ZHAifSwKK3siZmVycmFyaS1mb2FtIiwgICAgICAge05VTEx9LCAzMjE2LCAidGNwIn0sCit7ImZlcnJhcmktZm9hbSIsICAgICAgIHtOVUxMfSwgMzIxNiwgInVkcCJ9LAoreyJ1bml0ZSIsICAgICAgICAgICAgICB7TlVMTH0sIDMyMTcsICJ0Y3AifSwKK3sidW5pdGUiLCAgICAgICAgICAgICAge05VTEx9LCAzMjE3LCAidWRwIn0sCit7InNtYXJ0cGFja2V0cyIsICAgICAgIHtOVUxMfSwgMzIxOCwgInRjcCJ9LAoreyJzbWFydHBhY2tldHMiLCAgICAgICB7TlVMTH0sIDMyMTgsICJ1ZHAifSwKK3sid21zLW1lc3NlbmdlciIsICAgICAge05VTEx9LCAzMjE5LCAidGNwIn0sCit7Indtcy1tZXNzZW5nZXIiLCAgICAgIHtOVUxMfSwgMzIxOSwgInVkcCJ9LAoreyJ4bm0tc3NsIiwgICAgICAgICAgICB7TlVMTH0sIDMyMjAsICJ0Y3AifSwKK3sieG5tLXNzbCIsICAgICAgICAgICAge05VTEx9LCAzMjIwLCAidWRwIn0sCit7InhubS1jbGVhci10ZXh0IiwgICAgIHtOVUxMfSwgMzIyMSwgInRjcCJ9LAoreyJ4bm0tY2xlYXItdGV4dCIsICAgICB7TlVMTH0sIDMyMjEsICJ1ZHAifSwKK3siZ2xicCIsICAgICAgICAgICAgICAge05VTEx9LCAzMjIyLCAidGNwIn0sCit7ImdsYnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzIyMiwgInVkcCJ9LAoreyJkaWdpdm90ZSIsICAgICAgICAgICB7TlVMTH0sIDMyMjMsICJ0Y3AifSwKK3siZGlnaXZvdGUiLCAgICAgICAgICAge05VTEx9LCAzMjIzLCAidWRwIn0sCit7ImFlcy1kaXNjb3ZlcnkiLCAgICAgIHtOVUxMfSwgMzIyNCwgInRjcCJ9LAoreyJhZXMtZGlzY292ZXJ5IiwgICAgICB7TlVMTH0sIDMyMjQsICJ1ZHAifSwKK3siZmNpcC1wb3J0IiwgICAgICAgICAge05VTEx9LCAzMjI1LCAidGNwIn0sCit7ImZjaXAtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMzIyNSwgInVkcCJ9LAoreyJpc2ktaXJwIiwgICAgICAgICAgICB7TlVMTH0sIDMyMjYsICJ0Y3AifSwKK3siaXNpLWlycCIsICAgICAgICAgICAge05VTEx9LCAzMjI2LCAidWRwIn0sCit7ImR3bm1zaHR0cCIsICAgICAgICAgIHtOVUxMfSwgMzIyNywgInRjcCJ9LAoreyJkd25tc2h0dHAiLCAgICAgICAgICB7TlVMTH0sIDMyMjcsICJ1ZHAifSwKK3siZHdtc2dzZXJ2ZXIiLCAgICAgICAge05VTEx9LCAzMjI4LCAidGNwIn0sCit7ImR3bXNnc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzIyOCwgInVkcCJ9LAoreyJnbG9iYWwtY2QtcG9ydCIsICAgICB7TlVMTH0sIDMyMjksICJ0Y3AifSwKK3siZ2xvYmFsLWNkLXBvcnQiLCAgICAge05VTEx9LCAzMjI5LCAidWRwIn0sCit7InNmdGRzdC1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzIzMCwgInRjcCJ9LAoreyJzZnRkc3QtcG9ydCIsICAgICAgICB7TlVMTH0sIDMyMzAsICJ1ZHAifSwKK3sidmlkaWdvIiwgICAgICAgICAgICAge05VTEx9LCAzMjMxLCAidGNwIn0sCit7InZpZGlnbyIsICAgICAgICAgICAgIHtOVUxMfSwgMzIzMSwgInVkcCJ9LAoreyJtZHRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMyMzIsICJ0Y3AifSwKK3sibWR0cCIsICAgICAgICAgICAgICAge05VTEx9LCAzMjMyLCAidWRwIn0sCit7IndoaXNrZXIiLCAgICAgICAgICAgIHtOVUxMfSwgMzIzMywgInRjcCJ9LAoreyJ3aGlza2VyIiwgICAgICAgICAgICB7TlVMTH0sIDMyMzMsICJ1ZHAifSwKK3siYWxjaGVteSIsICAgICAgICAgICAge05VTEx9LCAzMjM0LCAidGNwIn0sCit7ImFsY2hlbXkiLCAgICAgICAgICAgIHtOVUxMfSwgMzIzNCwgInVkcCJ9LAoreyJtZGFwLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDMyMzUsICJ0Y3AifSwKK3sibWRhcC1wb3J0IiwgICAgICAgICAge05VTEx9LCAzMjM1LCAidWRwIn0sCit7ImFwcGFyZW5ldC10cyIsICAgICAgIHtOVUxMfSwgMzIzNiwgInRjcCJ9LAoreyJhcHBhcmVuZXQtdHMiLCAgICAgICB7TlVMTH0sIDMyMzYsICJ1ZHAifSwKK3siYXBwYXJlbmV0LXRwcyIsICAgICAge05VTEx9LCAzMjM3LCAidGNwIn0sCit7ImFwcGFyZW5ldC10cHMiLCAgICAgIHtOVUxMfSwgMzIzNywgInVkcCJ9LAoreyJhcHBhcmVuZXQtYXMiLCAgICAgICB7TlVMTH0sIDMyMzgsICJ0Y3AifSwKK3siYXBwYXJlbmV0LWFzIiwgICAgICAge05VTEx9LCAzMjM4LCAidWRwIn0sCit7ImFwcGFyZW5ldC11aSIsICAgICAgIHtOVUxMfSwgMzIzOSwgInRjcCJ9LAoreyJhcHBhcmVuZXQtdWkiLCAgICAgICB7TlVMTH0sIDMyMzksICJ1ZHAifSwKK3sidHJpb21vdGlvbiIsICAgICAgICAge05VTEx9LCAzMjQwLCAidGNwIn0sCit7InRyaW9tb3Rpb24iLCAgICAgICAgIHtOVUxMfSwgMzI0MCwgInVkcCJ9LAoreyJzeXNvcmIiLCAgICAgICAgICAgICB7TlVMTH0sIDMyNDEsICJ0Y3AifSwKK3sic3lzb3JiIiwgICAgICAgICAgICAge05VTEx9LCAzMjQxLCAidWRwIn0sCit7InNkcC1pZC1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzI0MiwgInRjcCJ9LAoreyJzZHAtaWQtcG9ydCIsICAgICAgICB7TlVMTH0sIDMyNDIsICJ1ZHAifSwKK3sidGltZWxvdCIsICAgICAgICAgICAge05VTEx9LCAzMjQzLCAidGNwIn0sCit7InRpbWVsb3QiLCAgICAgICAgICAgIHtOVUxMfSwgMzI0MywgInVkcCJ9LAoreyJvbmVzYWYiLCAgICAgICAgICAgICB7TlVMTH0sIDMyNDQsICJ0Y3AifSwKK3sib25lc2FmIiwgICAgICAgICAgICAge05VTEx9LCAzMjQ0LCAidWRwIn0sCit7InZpZW8tZmUiLCAgICAgICAgICAgIHtOVUxMfSwgMzI0NSwgInRjcCJ9LAoreyJ2aWVvLWZlIiwgICAgICAgICAgICB7TlVMTH0sIDMyNDUsICJ1ZHAifSwKK3siZHZ0LXN5c3RlbSIsICAgICAgICAge05VTEx9LCAzMjQ2LCAidGNwIn0sCit7ImR2dC1zeXN0ZW0iLCAgICAgICAgIHtOVUxMfSwgMzI0NiwgInVkcCJ9LAoreyJkdnQtZGF0YSIsICAgICAgICAgICB7TlVMTH0sIDMyNDcsICJ0Y3AifSwKK3siZHZ0LWRhdGEiLCAgICAgICAgICAge05VTEx9LCAzMjQ3LCAidWRwIn0sCit7InByb2Nvcy1sbSIsICAgICAgICAgIHtOVUxMfSwgMzI0OCwgInRjcCJ9LAoreyJwcm9jb3MtbG0iLCAgICAgICAgICB7TlVMTH0sIDMyNDgsICJ1ZHAifSwKK3sic3NwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzMjQ5LCAidGNwIn0sCit7InNzcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzI0OSwgInVkcCJ9LAoreyJoaWNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMyNTAsICJ0Y3AifSwKK3siaGljcCIsICAgICAgICAgICAgICAge05VTEx9LCAzMjUwLCAidWRwIn0sCit7InN5c3NjYW5uZXIiLCAgICAgICAgIHtOVUxMfSwgMzI1MSwgInRjcCJ9LAoreyJzeXNzY2FubmVyIiwgICAgICAgICB7TlVMTH0sIDMyNTEsICJ1ZHAifSwKK3siZGhlIiwgICAgICAgICAgICAgICAge05VTEx9LCAzMjUyLCAidGNwIn0sCit7ImRoZSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzI1MiwgInVkcCJ9LAoreyJwZGEtZGF0YSIsICAgICAgICAgICB7TlVMTH0sIDMyNTMsICJ0Y3AifSwKK3sicGRhLWRhdGEiLCAgICAgICAgICAge05VTEx9LCAzMjUzLCAidWRwIn0sCit7InBkYS1zeXMiLCAgICAgICAgICAgIHtOVUxMfSwgMzI1NCwgInRjcCJ9LAoreyJwZGEtc3lzIiwgICAgICAgICAgICB7TlVMTH0sIDMyNTQsICJ1ZHAifSwKK3sic2VtYXBob3JlIiwgICAgICAgICAge05VTEx9LCAzMjU1LCAidGNwIn0sCit7InNlbWFwaG9yZSIsICAgICAgICAgIHtOVUxMfSwgMzI1NSwgInVkcCJ9LAoreyJjcHFycG0tYWdlbnQiLCAgICAgICB7TlVMTH0sIDMyNTYsICJ0Y3AifSwKK3siY3BxcnBtLWFnZW50IiwgICAgICAge05VTEx9LCAzMjU2LCAidWRwIn0sCit7ImNwcXJwbS1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzI1NywgInRjcCJ9LAoreyJjcHFycG0tc2VydmVyIiwgICAgICB7TlVMTH0sIDMyNTcsICJ1ZHAifSwKK3siaXZlY29uLXBvcnQiLCAgICAgICAge05VTEx9LCAzMjU4LCAidGNwIn0sCit7Iml2ZWNvbi1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzI1OCwgInVkcCJ9LAoreyJlcG5jZHAyIiwgICAgICAgICAgICB7TlVMTH0sIDMyNTksICJ0Y3AifSwKK3siZXBuY2RwMiIsICAgICAgICAgICAge05VTEx9LCAzMjU5LCAidWRwIn0sCit7ImlzY3NpLXRhcmdldCIsICAgICAgIHtOVUxMfSwgMzI2MCwgInRjcCJ9LAoreyJpc2NzaS10YXJnZXQiLCAgICAgICB7TlVMTH0sIDMyNjAsICJ1ZHAifSwKK3sid2luc2hhZG93IiwgICAgICAgICAge05VTEx9LCAzMjYxLCAidGNwIn0sCit7IndpbnNoYWRvdyIsICAgICAgICAgIHtOVUxMfSwgMzI2MSwgInVkcCJ9LAoreyJuZWNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMyNjIsICJ0Y3AifSwKK3sibmVjcCIsICAgICAgICAgICAgICAge05VTEx9LCAzMjYyLCAidWRwIn0sCit7ImVjb2xvci1pbWFnZXIiLCAgICAgIHtOVUxMfSwgMzI2MywgInRjcCJ9LAoreyJlY29sb3ItaW1hZ2VyIiwgICAgICB7TlVMTH0sIDMyNjMsICJ1ZHAifSwKK3siY2NtYWlsIiwgICAgICAgICAgICAge05VTEx9LCAzMjY0LCAidGNwIn0sCit7ImNjbWFpbCIsICAgICAgICAgICAgIHtOVUxMfSwgMzI2NCwgInVkcCJ9LAoreyJhbHRhdi10dW5uZWwiLCAgICAgICB7TlVMTH0sIDMyNjUsICJ0Y3AifSwKK3siYWx0YXYtdHVubmVsIiwgICAgICAge05VTEx9LCAzMjY1LCAidWRwIn0sCit7Im5zLWNmZy1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzI2NiwgInRjcCJ9LAoreyJucy1jZmctc2VydmVyIiwgICAgICB7TlVMTH0sIDMyNjYsICJ1ZHAifSwKK3siaWJtLWRpYWwtb3V0IiwgICAgICAge05VTEx9LCAzMjY3LCAidGNwIn0sCit7ImlibS1kaWFsLW91dCIsICAgICAgIHtOVUxMfSwgMzI2NywgInVkcCJ9LAoreyJtc2Z0LWdjIiwgICAgICAgICAgICB7TlVMTH0sIDMyNjgsICJ0Y3AifSwKK3sibXNmdC1nYyIsICAgICAgICAgICAge05VTEx9LCAzMjY4LCAidWRwIn0sCit7Im1zZnQtZ2Mtc3NsIiwgICAgICAgIHtOVUxMfSwgMzI2OSwgInRjcCJ9LAoreyJtc2Z0LWdjLXNzbCIsICAgICAgICB7TlVMTH0sIDMyNjksICJ1ZHAifSwKK3sidmVyaXNtYXJ0IiwgICAgICAgICAge05VTEx9LCAzMjcwLCAidGNwIn0sCit7InZlcmlzbWFydCIsICAgICAgICAgIHtOVUxMfSwgMzI3MCwgInVkcCJ9LAoreyJjc29mdC1wcmV2IiwgICAgICAgICB7TlVMTH0sIDMyNzEsICJ0Y3AifSwKK3siY3NvZnQtcHJldiIsICAgICAgICAge05VTEx9LCAzMjcxLCAidWRwIn0sCit7InVzZXItbWFuYWdlciIsICAgICAgIHtOVUxMfSwgMzI3MiwgInRjcCJ9LAoreyJ1c2VyLW1hbmFnZXIiLCAgICAgICB7TlVMTH0sIDMyNzIsICJ1ZHAifSwKK3sic3htcCIsICAgICAgICAgICAgICAge05VTEx9LCAzMjczLCAidGNwIn0sCit7InN4bXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzI3MywgInVkcCJ9LAoreyJvcmRpbm94LXNlcnZlciIsICAgICB7TlVMTH0sIDMyNzQsICJ0Y3AifSwKK3sib3JkaW5veC1zZXJ2ZXIiLCAgICAge05VTEx9LCAzMjc0LCAidWRwIn0sCit7InNhbWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzI3NSwgInRjcCJ9LAoreyJzYW1kIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMyNzUsICJ1ZHAifSwKK3sibWF4aW0tYXNpY3MiLCAgICAgICAge05VTEx9LCAzMjc2LCAidGNwIn0sCit7Im1heGltLWFzaWNzIiwgICAgICAgIHtOVUxMfSwgMzI3NiwgInVkcCJ9LAoreyJhd2ctcHJveHkiLCAgICAgICAgICB7TlVMTH0sIDMyNzcsICJ0Y3AifSwKK3siYXdnLXByb3h5IiwgICAgICAgICAge05VTEx9LCAzMjc3LCAidWRwIn0sCit7ImxrY21zZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMzI3OCwgInRjcCJ9LAoreyJsa2Ntc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDMyNzgsICJ1ZHAifSwKK3siYWRtaW5kIiwgICAgICAgICAgICAge05VTEx9LCAzMjc5LCAidGNwIn0sCit7ImFkbWluZCIsICAgICAgICAgICAgIHtOVUxMfSwgMzI3OSwgInVkcCJ9LAoreyJ2cy1zZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDMyODAsICJ0Y3AifSwKK3sidnMtc2VydmVyIiwgICAgICAgICAge05VTEx9LCAzMjgwLCAidWRwIn0sCit7InN5c29wdCIsICAgICAgICAgICAgIHtOVUxMfSwgMzI4MSwgInRjcCJ9LAoreyJzeXNvcHQiLCAgICAgICAgICAgICB7TlVMTH0sIDMyODEsICJ1ZHAifSwKK3siZGF0dXNvcmIiLCAgICAgICAgICAge05VTEx9LCAzMjgyLCAidGNwIn0sCit7ImRhdHVzb3JiIiwgICAgICAgICAgIHtOVUxMfSwgMzI4MiwgInVkcCJ9LAoreyJuZXQtYXNzaXN0YW50IiwgICAgICB7TlVMTH0sIDMyODMsICJ0Y3AifSwKK3sibmV0LWFzc2lzdGFudCIsICAgICAge05VTEx9LCAzMjgzLCAidWRwIn0sCit7IjR0YWxrIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzI4NCwgInRjcCJ9LAoreyI0dGFsayIsICAgICAgICAgICAgICB7TlVMTH0sIDMyODQsICJ1ZHAifSwKK3sicGxhdG8iLCAgICAgICAgICAgICAge05VTEx9LCAzMjg1LCAidGNwIn0sCit7InBsYXRvIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzI4NSwgInVkcCJ9LAoreyJlLW5ldCIsICAgICAgICAgICAgICB7TlVMTH0sIDMyODYsICJ0Y3AifSwKK3siZS1uZXQiLCAgICAgICAgICAgICAge05VTEx9LCAzMjg2LCAidWRwIn0sCit7ImRpcmVjdHZkYXRhIiwgICAgICAgIHtOVUxMfSwgMzI4NywgInRjcCJ9LAoreyJkaXJlY3R2ZGF0YSIsICAgICAgICB7TlVMTH0sIDMyODcsICJ1ZHAifSwKK3siY29wcyIsICAgICAgICAgICAgICAge05VTEx9LCAzMjg4LCAidGNwIn0sCit7ImNvcHMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzI4OCwgInVkcCJ9LAoreyJlbnBjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMyODksICJ0Y3AifSwKK3siZW5wYyIsICAgICAgICAgICAgICAge05VTEx9LCAzMjg5LCAidWRwIn0sCit7ImNhcHMtbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMzI5MCwgInRjcCJ9LAoreyJjYXBzLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDMyOTAsICJ1ZHAifSwKK3sic2FoLWxtIiwgICAgICAgICAgICAge05VTEx9LCAzMjkxLCAidGNwIn0sCit7InNhaC1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMzI5MSwgInVkcCJ9LAoreyJjYXJ0LW8tcmFtYSIsICAgICAgICB7TlVMTH0sIDMyOTIsICJ0Y3AifSwKK3siY2FydC1vLXJhbWEiLCAgICAgICAge05VTEx9LCAzMjkyLCAidWRwIn0sCit7ImZnLWZwcyIsICAgICAgICAgICAgIHtOVUxMfSwgMzI5MywgInRjcCJ9LAoreyJmZy1mcHMiLCAgICAgICAgICAgICB7TlVMTH0sIDMyOTMsICJ1ZHAifSwKK3siZmctZ2lwIiwgICAgICAgICAgICAge05VTEx9LCAzMjk0LCAidGNwIn0sCit7ImZnLWdpcCIsICAgICAgICAgICAgIHtOVUxMfSwgMzI5NCwgInVkcCJ9LAoreyJkeW5pcGxvb2t1cCIsICAgICAgICB7TlVMTH0sIDMyOTUsICJ0Y3AifSwKK3siZHluaXBsb29rdXAiLCAgICAgICAge05VTEx9LCAzMjk1LCAidWRwIn0sCit7InJpYi1zbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMzI5NiwgInRjcCJ9LAoreyJyaWItc2xtIiwgICAgICAgICAgICB7TlVMTH0sIDMyOTYsICJ1ZHAifSwKK3siY3l0ZWwtbG0iLCAgICAgICAgICAge05VTEx9LCAzMjk3LCAidGNwIn0sCit7ImN5dGVsLWxtIiwgICAgICAgICAgIHtOVUxMfSwgMzI5NywgInVkcCJ9LAoreyJkZXNrdmlldyIsICAgICAgICAgICB7TlVMTH0sIDMyOTgsICJ0Y3AifSwKK3siZGVza3ZpZXciLCAgICAgICAgICAge05VTEx9LCAzMjk4LCAidWRwIn0sCit7InBkcm5jcyIsICAgICAgICAgICAgIHtOVUxMfSwgMzI5OSwgInRjcCJ9LAoreyJwZHJuY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDMyOTksICJ1ZHAifSwKK3sibWNzLWZhc3RtYWlsIiwgICAgICAge05VTEx9LCAzMzAyLCAidGNwIn0sCit7Im1jcy1mYXN0bWFpbCIsICAgICAgIHtOVUxMfSwgMzMwMiwgInVkcCJ9LAoreyJvcHNlc3Npb24tY2xudCIsICAgICB7TlVMTH0sIDMzMDMsICJ0Y3AifSwKK3sib3BzZXNzaW9uLWNsbnQiLCAgICAge05VTEx9LCAzMzAzLCAidWRwIn0sCit7Im9wc2Vzc2lvbi1zcnZyIiwgICAgIHtOVUxMfSwgMzMwNCwgInRjcCJ9LAoreyJvcHNlc3Npb24tc3J2ciIsICAgICB7TlVMTH0sIDMzMDQsICJ1ZHAifSwKK3sib2RldHRlLWZ0cCIsICAgICAgICAge05VTEx9LCAzMzA1LCAidGNwIn0sCit7Im9kZXR0ZS1mdHAiLCAgICAgICAgIHtOVUxMfSwgMzMwNSwgInVkcCJ9LAoreyJteXNxbCIsICAgICAgICAgICAgICB7TlVMTH0sIDMzMDYsICJ0Y3AifSwKK3sibXlzcWwiLCAgICAgICAgICAgICAge05VTEx9LCAzMzA2LCAidWRwIn0sCit7Im9wc2Vzc2lvbi1wcnh5IiwgICAgIHtOVUxMfSwgMzMwNywgInRjcCJ9LAoreyJvcHNlc3Npb24tcHJ4eSIsICAgICB7TlVMTH0sIDMzMDcsICJ1ZHAifSwKK3sidG5zLXNlcnZlciIsICAgICAgICAge05VTEx9LCAzMzA4LCAidGNwIn0sCit7InRucy1zZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMzMwOCwgInVkcCJ9LAoreyJ0bnMtYWR2IiwgICAgICAgICAgICB7TlVMTH0sIDMzMDksICJ0Y3AifSwKK3sidG5zLWFkdiIsICAgICAgICAgICAge05VTEx9LCAzMzA5LCAidWRwIn0sCit7ImR5bmEtYWNjZXNzIiwgICAgICAgIHtOVUxMfSwgMzMxMCwgInRjcCJ9LAoreyJkeW5hLWFjY2VzcyIsICAgICAgICB7TlVMTH0sIDMzMTAsICJ1ZHAifSwKK3sibWNucy10ZWwtcmV0IiwgICAgICAge05VTEx9LCAzMzExLCAidGNwIn0sCit7Im1jbnMtdGVsLXJldCIsICAgICAgIHtOVUxMfSwgMzMxMSwgInVkcCJ9LAoreyJhcHBtYW4tc2VydmVyIiwgICAgICB7TlVMTH0sIDMzMTIsICJ0Y3AifSwKK3siYXBwbWFuLXNlcnZlciIsICAgICAge05VTEx9LCAzMzEyLCAidWRwIn0sCit7InVvcmIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzMxMywgInRjcCJ9LAoreyJ1b3JiIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMzMTMsICJ1ZHAifSwKK3sidW9ob3N0IiwgICAgICAgICAgICAge05VTEx9LCAzMzE0LCAidGNwIn0sCit7InVvaG9zdCIsICAgICAgICAgICAgIHtOVUxMfSwgMzMxNCwgInVkcCJ9LAoreyJjZGlkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMzMTUsICJ0Y3AifSwKK3siY2RpZCIsICAgICAgICAgICAgICAge05VTEx9LCAzMzE1LCAidWRwIn0sCit7ImFpY2MtY21pIiwgICAgICAgICAgIHtOVUxMfSwgMzMxNiwgInRjcCJ9LAoreyJhaWNjLWNtaSIsICAgICAgICAgICB7TlVMTH0sIDMzMTYsICJ1ZHAifSwKK3sidnNhaXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzMzE3LCAidGNwIn0sCit7InZzYWlwb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzMxNywgInVkcCJ9LAoreyJzc3JpcCIsICAgICAgICAgICAgICB7TlVMTH0sIDMzMTgsICJ0Y3AifSwKK3sic3NyaXAiLCAgICAgICAgICAgICAge05VTEx9LCAzMzE4LCAidWRwIn0sCit7InNkdC1sbWQiLCAgICAgICAgICAgIHtOVUxMfSwgMzMxOSwgInRjcCJ9LAoreyJzZHQtbG1kIiwgICAgICAgICAgICB7TlVMTH0sIDMzMTksICJ1ZHAifSwKK3sib2ZmaWNlbGluazIwMDAiLCAgICAge05VTEx9LCAzMzIwLCAidGNwIn0sCit7Im9mZmljZWxpbmsyMDAwIiwgICAgIHtOVUxMfSwgMzMyMCwgInVkcCJ9LAoreyJ2bnNzdHIiLCAgICAgICAgICAgICB7TlVMTH0sIDMzMjEsICJ0Y3AifSwKK3sidm5zc3RyIiwgICAgICAgICAgICAge05VTEx9LCAzMzIxLCAidWRwIn0sCit7InNmdHUiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzMyNiwgInRjcCJ9LAoreyJzZnR1IiwgICAgICAgICAgICAgICB7TlVMTH0sIDMzMjYsICJ1ZHAifSwKK3siYmJhcnMiLCAgICAgICAgICAgICAge05VTEx9LCAzMzI3LCAidGNwIn0sCit7ImJiYXJzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzMyNywgInVkcCJ9LAoreyJlZ3B0bG0iLCAgICAgICAgICAgICB7TlVMTH0sIDMzMjgsICJ0Y3AifSwKK3siZWdwdGxtIiwgICAgICAgICAgICAge05VTEx9LCAzMzI4LCAidWRwIn0sCit7ImhwLWRldmljZS1kaXNjIiwgICAgIHtOVUxMfSwgMzMyOSwgInRjcCJ9LAoreyJocC1kZXZpY2UtZGlzYyIsICAgICB7TlVMTH0sIDMzMjksICJ1ZHAifSwKK3sibWNzLWNhbHlwc29pY2YiLCAgICAge05VTEx9LCAzMzMwLCAidGNwIn0sCit7Im1jcy1jYWx5cHNvaWNmIiwgICAgIHtOVUxMfSwgMzMzMCwgInVkcCJ9LAoreyJtY3MtbWVzc2FnaW5nIiwgICAgICB7TlVMTH0sIDMzMzEsICJ0Y3AifSwKK3sibWNzLW1lc3NhZ2luZyIsICAgICAge05VTEx9LCAzMzMxLCAidWRwIn0sCit7Im1jcy1tYWlsc3ZyIiwgICAgICAgIHtOVUxMfSwgMzMzMiwgInRjcCJ9LAoreyJtY3MtbWFpbHN2ciIsICAgICAgICB7TlVMTH0sIDMzMzIsICJ1ZHAifSwKK3siZGVjLW5vdGVzIiwgICAgICAgICAge05VTEx9LCAzMzMzLCAidGNwIn0sCit7ImRlYy1ub3RlcyIsICAgICAgICAgIHtOVUxMfSwgMzMzMywgInVkcCJ9LAoreyJkaXJlY3R2LXdlYiIsICAgICAgICB7TlVMTH0sIDMzMzQsICJ0Y3AifSwKK3siZGlyZWN0di13ZWIiLCAgICAgICAge05VTEx9LCAzMzM0LCAidWRwIn0sCit7ImRpcmVjdHYtc29mdCIsICAgICAgIHtOVUxMfSwgMzMzNSwgInRjcCJ9LAoreyJkaXJlY3R2LXNvZnQiLCAgICAgICB7TlVMTH0sIDMzMzUsICJ1ZHAifSwKK3siZGlyZWN0di10aWNrIiwgICAgICAge05VTEx9LCAzMzM2LCAidGNwIn0sCit7ImRpcmVjdHYtdGljayIsICAgICAgIHtOVUxMfSwgMzMzNiwgInVkcCJ9LAoreyJkaXJlY3R2LWNhdGxnIiwgICAgICB7TlVMTH0sIDMzMzcsICJ0Y3AifSwKK3siZGlyZWN0di1jYXRsZyIsICAgICAge05VTEx9LCAzMzM3LCAidWRwIn0sCit7ImFuZXQtYiIsICAgICAgICAgICAgIHtOVUxMfSwgMzMzOCwgInRjcCJ9LAoreyJhbmV0LWIiLCAgICAgICAgICAgICB7TlVMTH0sIDMzMzgsICJ1ZHAifSwKK3siYW5ldC1sIiwgICAgICAgICAgICAge05VTEx9LCAzMzM5LCAidGNwIn0sCit7ImFuZXQtbCIsICAgICAgICAgICAgIHtOVUxMfSwgMzMzOSwgInVkcCJ9LAoreyJhbmV0LW0iLCAgICAgICAgICAgICB7TlVMTH0sIDMzNDAsICJ0Y3AifSwKK3siYW5ldC1tIiwgICAgICAgICAgICAge05VTEx9LCAzMzQwLCAidWRwIn0sCit7ImFuZXQtaCIsICAgICAgICAgICAgIHtOVUxMfSwgMzM0MSwgInRjcCJ9LAoreyJhbmV0LWgiLCAgICAgICAgICAgICB7TlVMTH0sIDMzNDEsICJ1ZHAifSwKK3sid2VidGllIiwgICAgICAgICAgICAge05VTEx9LCAzMzQyLCAidGNwIn0sCit7IndlYnRpZSIsICAgICAgICAgICAgIHtOVUxMfSwgMzM0MiwgInVkcCJ9LAoreyJtcy1jbHVzdGVyLW5ldCIsICAgICB7TlVMTH0sIDMzNDMsICJ0Y3AifSwKK3sibXMtY2x1c3Rlci1uZXQiLCAgICAge05VTEx9LCAzMzQzLCAidWRwIn0sCit7ImJudC1tYW5hZ2VyIiwgICAgICAgIHtOVUxMfSwgMzM0NCwgInRjcCJ9LAoreyJibnQtbWFuYWdlciIsICAgICAgICB7TlVMTH0sIDMzNDQsICJ1ZHAifSwKK3siaW5mbHVlbmNlIiwgICAgICAgICAge05VTEx9LCAzMzQ1LCAidGNwIn0sCit7ImluZmx1ZW5jZSIsICAgICAgICAgIHtOVUxMfSwgMzM0NSwgInVkcCJ9LAoreyJ0cm5zcHJudHByb3h5IiwgICAgICB7TlVMTH0sIDMzNDYsICJ0Y3AifSwKK3sidHJuc3BybnRwcm94eSIsICAgICAge05VTEx9LCAzMzQ2LCAidWRwIn0sCit7InBob2VuaXgtcnBjIiwgICAgICAgIHtOVUxMfSwgMzM0NywgInRjcCJ9LAoreyJwaG9lbml4LXJwYyIsICAgICAgICB7TlVMTH0sIDMzNDcsICJ1ZHAifSwKK3sicGFuZ29saW4tbGFzZXIiLCAgICAge05VTEx9LCAzMzQ4LCAidGNwIn0sCit7InBhbmdvbGluLWxhc2VyIiwgICAgIHtOVUxMfSwgMzM0OCwgInVkcCJ9LAoreyJjaGV2aW5zZXJ2aWNlcyIsICAgICB7TlVMTH0sIDMzNDksICJ0Y3AifSwKK3siY2hldmluc2VydmljZXMiLCAgICAge05VTEx9LCAzMzQ5LCAidWRwIn0sCit7ImZpbmR2aWF0diIsICAgICAgICAgIHtOVUxMfSwgMzM1MCwgInRjcCJ9LAoreyJmaW5kdmlhdHYiLCAgICAgICAgICB7TlVMTH0sIDMzNTAsICJ1ZHAifSwKK3siYnRyaWV2ZSIsICAgICAgICAgICAge05VTEx9LCAzMzUxLCAidGNwIn0sCit7ImJ0cmlldmUiLCAgICAgICAgICAgIHtOVUxMfSwgMzM1MSwgInVkcCJ9LAoreyJzc3FsIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMzNTIsICJ0Y3AifSwKK3sic3NxbCIsICAgICAgICAgICAgICAge05VTEx9LCAzMzUyLCAidWRwIn0sCit7ImZhdHBpcGUiLCAgICAgICAgICAgIHtOVUxMfSwgMzM1MywgInRjcCJ9LAoreyJmYXRwaXBlIiwgICAgICAgICAgICB7TlVMTH0sIDMzNTMsICJ1ZHAifSwKK3sic3VpdGpkIiwgICAgICAgICAgICAge05VTEx9LCAzMzU0LCAidGNwIn0sCit7InN1aXRqZCIsICAgICAgICAgICAgIHtOVUxMfSwgMzM1NCwgInVkcCJ9LAoreyJvcmRpbm94LWRiYXNlIiwgICAgICB7TlVMTH0sIDMzNTUsICJ0Y3AifSwKK3sib3JkaW5veC1kYmFzZSIsICAgICAge05VTEx9LCAzMzU1LCAidWRwIn0sCit7InVwbm90aWZ5cHMiLCAgICAgICAgIHtOVUxMfSwgMzM1NiwgInRjcCJ9LAoreyJ1cG5vdGlmeXBzIiwgICAgICAgICB7TlVMTH0sIDMzNTYsICJ1ZHAifSwKK3siYWR0ZWNoLXRlc3QiLCAgICAgICAge05VTEx9LCAzMzU3LCAidGNwIn0sCit7ImFkdGVjaC10ZXN0IiwgICAgICAgIHtOVUxMfSwgMzM1NywgInVkcCJ9LAoreyJtcHN5c3Jtc3ZyIiwgICAgICAgICB7TlVMTH0sIDMzNTgsICJ0Y3AifSwKK3sibXBzeXNybXN2ciIsICAgICAgICAge05VTEx9LCAzMzU4LCAidWRwIn0sCit7IndnLW5ldGZvcmNlIiwgICAgICAgIHtOVUxMfSwgMzM1OSwgInRjcCJ9LAoreyJ3Zy1uZXRmb3JjZSIsICAgICAgICB7TlVMTH0sIDMzNTksICJ1ZHAifSwKK3sia3Ytc2VydmVyIiwgICAgICAgICAge05VTEx9LCAzMzYwLCAidGNwIn0sCit7Imt2LXNlcnZlciIsICAgICAgICAgIHtOVUxMfSwgMzM2MCwgInVkcCJ9LAoreyJrdi1hZ2VudCIsICAgICAgICAgICB7TlVMTH0sIDMzNjEsICJ0Y3AifSwKK3sia3YtYWdlbnQiLCAgICAgICAgICAge05VTEx9LCAzMzYxLCAidWRwIn0sCit7ImRqLWlsbSIsICAgICAgICAgICAgIHtOVUxMfSwgMzM2MiwgInRjcCJ9LAoreyJkai1pbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDMzNjIsICJ1ZHAifSwKK3sibmF0aS12aS1zZXJ2ZXIiLCAgICAge05VTEx9LCAzMzYzLCAidGNwIn0sCit7Im5hdGktdmktc2VydmVyIiwgICAgIHtOVUxMfSwgMzM2MywgInVkcCJ9LAoreyJjcmVhdGl2ZXNlcnZlciIsICAgICB7TlVMTH0sIDMzNjQsICJ0Y3AifSwKK3siY3JlYXRpdmVzZXJ2ZXIiLCAgICAge05VTEx9LCAzMzY0LCAidWRwIn0sCit7ImNvbnRlbnRzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzM2NSwgInRjcCJ9LAoreyJjb250ZW50c2VydmVyIiwgICAgICB7TlVMTH0sIDMzNjUsICJ1ZHAifSwKK3siY3JlYXRpdmVwYXJ0bnIiLCAgICAge05VTEx9LCAzMzY2LCAidGNwIn0sCit7ImNyZWF0aXZlcGFydG5yIiwgICAgIHtOVUxMfSwgMzM2NiwgInVkcCJ9LAoreyJ0aXAyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMzNzIsICJ0Y3AifSwKK3sidGlwMiIsICAgICAgICAgICAgICAge05VTEx9LCAzMzcyLCAidWRwIn0sCit7ImxhdmVuaXItbG0iLCAgICAgICAgIHtOVUxMfSwgMzM3MywgInRjcCJ9LAoreyJsYXZlbmlyLWxtIiwgICAgICAgICB7TlVMTH0sIDMzNzMsICJ1ZHAifSwKK3siY2x1c3Rlci1kaXNjIiwgICAgICAge05VTEx9LCAzMzc0LCAidGNwIn0sCit7ImNsdXN0ZXItZGlzYyIsICAgICAgIHtOVUxMfSwgMzM3NCwgInVkcCJ9LAoreyJ2c25tLWFnZW50IiwgICAgICAgICB7TlVMTH0sIDMzNzUsICJ0Y3AifSwKK3sidnNubS1hZ2VudCIsICAgICAgICAge05VTEx9LCAzMzc1LCAidWRwIn0sCit7ImNkYnJva2VyIiwgICAgICAgICAgIHtOVUxMfSwgMzM3NiwgInRjcCJ9LAoreyJjZGJyb2tlciIsICAgICAgICAgICB7TlVMTH0sIDMzNzYsICJ1ZHAifSwKK3siY29nc3lzLWxtIiwgICAgICAgICAge05VTEx9LCAzMzc3LCAidGNwIn0sCit7ImNvZ3N5cy1sbSIsICAgICAgICAgIHtOVUxMfSwgMzM3NywgInVkcCJ9LAoreyJ3c2ljb3B5IiwgICAgICAgICAgICB7TlVMTH0sIDMzNzgsICJ0Y3AifSwKK3sid3NpY29weSIsICAgICAgICAgICAge05VTEx9LCAzMzc4LCAidWRwIn0sCit7InNvY29yZnMiLCAgICAgICAgICAgIHtOVUxMfSwgMzM3OSwgInRjcCJ9LAoreyJzb2NvcmZzIiwgICAgICAgICAgICB7TlVMTH0sIDMzNzksICJ1ZHAifSwKK3sic25zLWNoYW5uZWxzIiwgICAgICAge05VTEx9LCAzMzgwLCAidGNwIn0sCit7InNucy1jaGFubmVscyIsICAgICAgIHtOVUxMfSwgMzM4MCwgInVkcCJ9LAoreyJnZW5lb3VzIiwgICAgICAgICAgICB7TlVMTH0sIDMzODEsICJ0Y3AifSwKK3siZ2VuZW91cyIsICAgICAgICAgICAge05VTEx9LCAzMzgxLCAidWRwIn0sCit7ImZ1aml0c3UtbmVhdCIsICAgICAgIHtOVUxMfSwgMzM4MiwgInRjcCJ9LAoreyJmdWppdHN1LW5lYXQiLCAgICAgICB7TlVMTH0sIDMzODIsICJ1ZHAifSwKK3siZXNwLWxtIiwgICAgICAgICAgICAge05VTEx9LCAzMzgzLCAidGNwIn0sCit7ImVzcC1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMzM4MywgInVkcCJ9LAoreyJocC1jbGljIiwgICAgICAgICAgICB7TlVMTH0sIDMzODQsICJ0Y3AifSwKK3siaHAtY2xpYyIsICAgICAgICAgICAge05VTEx9LCAzMzg0LCAidWRwIn0sCit7InFueG5ldG1hbiIsICAgICAgICAgIHtOVUxMfSwgMzM4NSwgInRjcCJ9LAoreyJxbnhuZXRtYW4iLCAgICAgICAgICB7TlVMTH0sIDMzODUsICJ1ZHAifSwKK3siZ3Bycy1kYXRhIiwgICAgICAgICAge05VTEx9LCAzMzg2LCAidGNwIn0sCit7ImdwcnMtc2lnIiwgICAgICAgICAgIHtOVUxMfSwgMzM4NiwgInVkcCJ9LAoreyJiYWNrcm9vbW5ldCIsICAgICAgICB7TlVMTH0sIDMzODcsICJ0Y3AifSwKK3siYmFja3Jvb21uZXQiLCAgICAgICAge05VTEx9LCAzMzg3LCAidWRwIn0sCit7ImNic2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMzM4OCwgInRjcCJ9LAoreyJjYnNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDMzODgsICJ1ZHAifSwKK3sibXMtd2J0LXNlcnZlciIsICAgICAge05VTEx9LCAzMzg5LCAidGNwIn0sCit7Im1zLXdidC1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzM4OSwgInVkcCJ9LAoreyJkc2MiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDMzOTAsICJ0Y3AifSwKK3siZHNjIiwgICAgICAgICAgICAgICAge05VTEx9LCAzMzkwLCAidWRwIn0sCit7InNhdmFudCIsICAgICAgICAgICAgIHtOVUxMfSwgMzM5MSwgInRjcCJ9LAoreyJzYXZhbnQiLCAgICAgICAgICAgICB7TlVMTH0sIDMzOTEsICJ1ZHAifSwKK3siZWZpLWxtIiwgICAgICAgICAgICAge05VTEx9LCAzMzkyLCAidGNwIn0sCit7ImVmaS1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgMzM5MiwgInVkcCJ9LAoreyJkMmstdGFwZXN0cnkxIiwgICAgICB7TlVMTH0sIDMzOTMsICJ0Y3AifSwKK3siZDJrLXRhcGVzdHJ5MSIsICAgICAge05VTEx9LCAzMzkzLCAidWRwIn0sCit7ImQyay10YXBlc3RyeTIiLCAgICAgIHtOVUxMfSwgMzM5NCwgInRjcCJ9LAoreyJkMmstdGFwZXN0cnkyIiwgICAgICB7TlVMTH0sIDMzOTQsICJ1ZHAifSwKK3siZHluYS1sbSIsICAgICAgICAgICAge05VTEx9LCAzMzk1LCAidGNwIn0sCit7ImR5bmEtbG0iLCAgICAgICAgICAgIHtOVUxMfSwgMzM5NSwgInVkcCJ9LAoreyJwcmludGVyX2FnZW50IiwgICAgICB7TlVMTH0sIDMzOTYsICJ0Y3AifSwKK3sicHJpbnRlcl9hZ2VudCIsICAgICAge05VTEx9LCAzMzk2LCAidWRwIn0sCit7ImNsb2FudG8tbG0iLCAgICAgICAgIHtOVUxMfSwgMzM5NywgInRjcCJ9LAoreyJjbG9hbnRvLWxtIiwgICAgICAgICB7TlVMTH0sIDMzOTcsICJ1ZHAifSwKK3sibWVyY2FudGlsZSIsICAgICAgICAge05VTEx9LCAzMzk4LCAidGNwIn0sCit7Im1lcmNhbnRpbGUiLCAgICAgICAgIHtOVUxMfSwgMzM5OCwgInVkcCJ9LAoreyJjc21zIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMzOTksICJ0Y3AifSwKK3siY3NtcyIsICAgICAgICAgICAgICAge05VTEx9LCAzMzk5LCAidWRwIn0sCit7ImNzbXMyIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQwMCwgInRjcCJ9LAoreyJjc21zMiIsICAgICAgICAgICAgICB7TlVMTH0sIDM0MDAsICJ1ZHAifSwKK3siZmlsZWNhc3QiLCAgICAgICAgICAge05VTEx9LCAzNDAxLCAidGNwIn0sCit7ImZpbGVjYXN0IiwgICAgICAgICAgIHtOVUxMfSwgMzQwMSwgInVkcCJ9LAoreyJmeGFlbmdpbmUtbmV0IiwgICAgICB7TlVMTH0sIDM0MDIsICJ0Y3AifSwKK3siZnhhZW5naW5lLW5ldCIsICAgICAge05VTEx9LCAzNDAyLCAidWRwIn0sCit7Im5va2lhLWFubi1jaDEiLCAgICAgIHtOVUxMfSwgMzQwNSwgInRjcCJ9LAoreyJub2tpYS1hbm4tY2gxIiwgICAgICB7TlVMTH0sIDM0MDUsICJ1ZHAifSwKK3sibm9raWEtYW5uLWNoMiIsICAgICAge05VTEx9LCAzNDA2LCAidGNwIn0sCit7Im5va2lhLWFubi1jaDIiLCAgICAgIHtOVUxMfSwgMzQwNiwgInVkcCJ9LAoreyJsZGFwLWFkbWluIiwgICAgICAgICB7TlVMTH0sIDM0MDcsICJ0Y3AifSwKK3sibGRhcC1hZG1pbiIsICAgICAgICAge05VTEx9LCAzNDA3LCAidWRwIn0sCit7IkJFU0FwaSIsICAgICAgICAgICAgIHtOVUxMfSwgMzQwOCwgInRjcCJ9LAoreyJCRVNBcGkiLCAgICAgICAgICAgICB7TlVMTH0sIDM0MDgsICJ1ZHAifSwKK3sibmV0d29ya2xlbnMiLCAgICAgICAge05VTEx9LCAzNDA5LCAidGNwIn0sCit7Im5ldHdvcmtsZW5zIiwgICAgICAgIHtOVUxMfSwgMzQwOSwgInVkcCJ9LAoreyJuZXR3b3JrbGVuc3MiLCAgICAgICB7TlVMTH0sIDM0MTAsICJ0Y3AifSwKK3sibmV0d29ya2xlbnNzIiwgICAgICAge05VTEx9LCAzNDEwLCAidWRwIn0sCit7ImJpb2xpbmstYXV0aCIsICAgICAgIHtOVUxMfSwgMzQxMSwgInRjcCJ9LAoreyJiaW9saW5rLWF1dGgiLCAgICAgICB7TlVMTH0sIDM0MTEsICJ1ZHAifSwKK3sieG1sYmxhc3RlciIsICAgICAgICAge05VTEx9LCAzNDEyLCAidGNwIn0sCit7InhtbGJsYXN0ZXIiLCAgICAgICAgIHtOVUxMfSwgMzQxMiwgInVkcCJ9LAoreyJzdm5ldCIsICAgICAgICAgICAgICB7TlVMTH0sIDM0MTMsICJ0Y3AifSwKK3sic3ZuZXQiLCAgICAgICAgICAgICAge05VTEx9LCAzNDEzLCAidWRwIn0sCit7IndpcC1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzQxNCwgInRjcCJ9LAoreyJ3aXAtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM0MTQsICJ1ZHAifSwKK3siYmNpbmFtZXNlcnZpY2UiLCAgICAge05VTEx9LCAzNDE1LCAidGNwIn0sCit7ImJjaW5hbWVzZXJ2aWNlIiwgICAgIHtOVUxMfSwgMzQxNSwgInVkcCJ9LAoreyJjb21tYW5kcG9ydCIsICAgICAgICB7TlVMTH0sIDM0MTYsICJ0Y3AifSwKK3siY29tbWFuZHBvcnQiLCAgICAgICAge05VTEx9LCAzNDE2LCAidWRwIn0sCit7ImNzdnIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQxNywgInRjcCJ9LAoreyJjc3ZyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM0MTcsICJ1ZHAifSwKK3sicm5tYXAiLCAgICAgICAgICAgICAge05VTEx9LCAzNDE4LCAidGNwIn0sCit7InJubWFwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQxOCwgInVkcCJ9LAoreyJzb2Z0YXVkaXQiLCAgICAgICAgICB7TlVMTH0sIDM0MTksICJ0Y3AifSwKK3sic29mdGF1ZGl0IiwgICAgICAgICAge05VTEx9LCAzNDE5LCAidWRwIn0sCit7ImlmY3AtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMzQyMCwgInRjcCJ9LAoreyJpZmNwLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM0MjAsICJ1ZHAifSwKK3siYm1hcCIsICAgICAgICAgICAgICAge05VTEx9LCAzNDIxLCAidGNwIn0sCit7ImJtYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQyMSwgInVkcCJ9LAoreyJydXNiLXN5cy1wb3J0IiwgICAgICB7TlVMTH0sIDM0MjIsICJ0Y3AifSwKK3sicnVzYi1zeXMtcG9ydCIsICAgICAge05VTEx9LCAzNDIyLCAidWRwIn0sCit7Inh0cm0iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQyMywgInRjcCJ9LAoreyJ4dHJtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM0MjMsICJ1ZHAifSwKK3sieHRybXMiLCAgICAgICAgICAgICAge05VTEx9LCAzNDI0LCAidGNwIn0sCit7Inh0cm1zIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQyNCwgInVkcCJ9LAoreyJhZ3BzLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM0MjUsICJ0Y3AifSwKK3siYWdwcy1wb3J0IiwgICAgICAgICAge05VTEx9LCAzNDI1LCAidWRwIn0sCit7ImFya2l2aW8iLCAgICAgICAgICAgIHtOVUxMfSwgMzQyNiwgInRjcCJ9LAoreyJhcmtpdmlvIiwgICAgICAgICAgICB7TlVMTH0sIDM0MjYsICJ1ZHAifSwKK3sid2Vic3BoZXJlLXNubXAiLCAgICAge05VTEx9LCAzNDI3LCAidGNwIn0sCit7IndlYnNwaGVyZS1zbm1wIiwgICAgIHtOVUxMfSwgMzQyNywgInVkcCJ9LAoreyJ0d2NzcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM0MjgsICJ0Y3AifSwKK3sidHdjc3MiLCAgICAgICAgICAgICAge05VTEx9LCAzNDI4LCAidWRwIn0sCit7Imdjc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQyOSwgInRjcCJ9LAoreyJnY3NwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM0MjksICJ1ZHAifSwKK3sic3NkaXNwYXRjaCIsICAgICAgICAge05VTEx9LCAzNDMwLCAidGNwIn0sCit7InNzZGlzcGF0Y2giLCAgICAgICAgIHtOVUxMfSwgMzQzMCwgInVkcCJ9LAoreyJuZGwtYWxzIiwgICAgICAgICAgICB7TlVMTH0sIDM0MzEsICJ0Y3AifSwKK3sibmRsLWFscyIsICAgICAgICAgICAge05VTEx9LCAzNDMxLCAidWRwIn0sCit7Im9zZGNwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQzMiwgInRjcCJ9LAoreyJvc2RjcCIsICAgICAgICAgICAgICB7TlVMTH0sIDM0MzIsICJ1ZHAifSwKK3siYWx0YS1zbXAiLCAgICAgICAgICAge05VTEx9LCAzNDMzLCAidGNwIn0sCit7ImFsdGEtc21wIiwgICAgICAgICAgIHtOVUxMfSwgMzQzMywgInVkcCJ9LAoreyJvcGVuY20iLCAgICAgICAgICAgICB7TlVMTH0sIDM0MzQsICJ0Y3AifSwKK3sib3BlbmNtIiwgICAgICAgICAgICAge05VTEx9LCAzNDM0LCAidWRwIn0sCit7InBhY29tIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQzNSwgInRjcCJ9LAoreyJwYWNvbSIsICAgICAgICAgICAgICB7TlVMTH0sIDM0MzUsICJ1ZHAifSwKK3siZ2MtY29uZmlnIiwgICAgICAgICAge05VTEx9LCAzNDM2LCAidGNwIn0sCit7ImdjLWNvbmZpZyIsICAgICAgICAgIHtOVUxMfSwgMzQzNiwgInVkcCJ9LAoreyJhdXRvY3VlZHMiLCAgICAgICAgICB7TlVMTH0sIDM0MzcsICJ0Y3AifSwKK3siYXV0b2N1ZWRzIiwgICAgICAgICAge05VTEx9LCAzNDM3LCAidWRwIn0sCit7InNwaXJhbC1hZG1pbiIsICAgICAgIHtOVUxMfSwgMzQzOCwgInRjcCJ9LAoreyJzcGlyYWwtYWRtaW4iLCAgICAgICB7TlVMTH0sIDM0MzgsICJ1ZHAifSwKK3siaHJpLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNDM5LCAidGNwIn0sCit7ImhyaS1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzQzOSwgInVkcCJ9LAoreyJhbnMtY29uc29sZSIsICAgICAgICB7TlVMTH0sIDM0NDAsICJ0Y3AifSwKK3siYW5zLWNvbnNvbGUiLCAgICAgICAge05VTEx9LCAzNDQwLCAidWRwIn0sCit7ImNvbm5lY3QtY2xpZW50IiwgICAgIHtOVUxMfSwgMzQ0MSwgInRjcCJ9LAoreyJjb25uZWN0LWNsaWVudCIsICAgICB7TlVMTH0sIDM0NDEsICJ1ZHAifSwKK3siY29ubmVjdC1zZXJ2ZXIiLCAgICAge05VTEx9LCAzNDQyLCAidGNwIn0sCit7ImNvbm5lY3Qtc2VydmVyIiwgICAgIHtOVUxMfSwgMzQ0MiwgInVkcCJ9LAoreyJvdi1ubm0td2Vic3J2IiwgICAgICB7TlVMTH0sIDM0NDMsICJ0Y3AifSwKK3sib3Ytbm5tLXdlYnNydiIsICAgICAge05VTEx9LCAzNDQzLCAidWRwIn0sCit7ImRlbmFsaS1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzQ0NCwgInRjcCJ9LAoreyJkZW5hbGktc2VydmVyIiwgICAgICB7TlVMTH0sIDM0NDQsICJ1ZHAifSwKK3sibW9ucCIsICAgICAgICAgICAgICAge05VTEx9LCAzNDQ1LCAidGNwIn0sCit7Im1vbnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ0NSwgInVkcCJ9LAoreyIzY29tZmF4cnBjIiwgICAgICAgICB7TlVMTH0sIDM0NDYsICJ0Y3AifSwKK3siM2NvbWZheHJwYyIsICAgICAgICAge05VTEx9LCAzNDQ2LCAidWRwIn0sCit7ImRpcmVjdG5ldCIsICAgICAgICAgIHtOVUxMfSwgMzQ0NywgInRjcCJ9LAoreyJkaXJlY3RuZXQiLCAgICAgICAgICB7TlVMTH0sIDM0NDcsICJ1ZHAifSwKK3siZG5jLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNDQ4LCAidGNwIn0sCit7ImRuYy1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzQ0OCwgInVkcCJ9LAoreyJob3R1LWNoYXQiLCAgICAgICAgICB7TlVMTH0sIDM0NDksICJ0Y3AifSwKK3siaG90dS1jaGF0IiwgICAgICAgICAge05VTEx9LCAzNDQ5LCAidWRwIn0sCit7ImNhc3RvcnByb3h5IiwgICAgICAgIHtOVUxMfSwgMzQ1MCwgInRjcCJ9LAoreyJjYXN0b3Jwcm94eSIsICAgICAgICB7TlVMTH0sIDM0NTAsICJ1ZHAifSwKK3siYXNhbSIsICAgICAgICAgICAgICAge05VTEx9LCAzNDUxLCAidGNwIn0sCit7ImFzYW0iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ1MSwgInVkcCJ9LAoreyJzYWJwLXNpZ25hbCIsICAgICAgICB7TlVMTH0sIDM0NTIsICJ0Y3AifSwKK3sic2FicC1zaWduYWwiLCAgICAgICAge05VTEx9LCAzNDUyLCAidWRwIn0sCit7InBzY3VwZCIsICAgICAgICAgICAgIHtOVUxMfSwgMzQ1MywgInRjcCJ9LAoreyJwc2N1cGQiLCAgICAgICAgICAgICB7TlVMTH0sIDM0NTMsICJ1ZHAifSwKK3sibWlyYSIsICAgICAgICAgICAgICAge05VTEx9LCAzNDU0LCAidGNwIn0sCit7InByc3ZwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQ1NSwgInRjcCJ9LAoreyJwcnN2cCIsICAgICAgICAgICAgICB7TlVMTH0sIDM0NTUsICJ1ZHAifSwKK3sidmF0IiwgICAgICAgICAgICAgICAge05VTEx9LCAzNDU2LCAidGNwIn0sCit7InZhdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ1NiwgInVkcCJ9LAoreyJ2YXQtY29udHJvbCIsICAgICAgICB7TlVMTH0sIDM0NTcsICJ0Y3AifSwKK3sidmF0LWNvbnRyb2wiLCAgICAgICAge05VTEx9LCAzNDU3LCAidWRwIn0sCit7ImQzd2lub3NmaSIsICAgICAgICAgIHtOVUxMfSwgMzQ1OCwgInRjcCJ9LAoreyJkM3dpbm9zZmkiLCAgICAgICAgICB7TlVMTH0sIDM0NTgsICJ1ZHAifSwKK3siaW50ZWdyYWwiLCAgICAgICAgICAge05VTEx9LCAzNDU5LCAidGNwIn0sCit7ImludGVncmFsIiwgICAgICAgICAgIHtOVUxMfSwgMzQ1OSwgInVkcCJ9LAoreyJlZG0tbWFuYWdlciIsICAgICAgICB7TlVMTH0sIDM0NjAsICJ0Y3AifSwKK3siZWRtLW1hbmFnZXIiLCAgICAgICAge05VTEx9LCAzNDYwLCAidWRwIn0sCit7ImVkbS1zdGFnZXIiLCAgICAgICAgIHtOVUxMfSwgMzQ2MSwgInRjcCJ9LAoreyJlZG0tc3RhZ2VyIiwgICAgICAgICB7TlVMTH0sIDM0NjEsICJ1ZHAifSwKK3siZWRtLXN0ZC1ub3RpZnkiLCAgICAge05VTEx9LCAzNDYyLCAidGNwIn0sCit7ImVkbS1zdGQtbm90aWZ5IiwgICAgIHtOVUxMfSwgMzQ2MiwgInVkcCJ9LAoreyJlZG0tYWRtLW5vdGlmeSIsICAgICB7TlVMTH0sIDM0NjMsICJ0Y3AifSwKK3siZWRtLWFkbS1ub3RpZnkiLCAgICAge05VTEx9LCAzNDYzLCAidWRwIn0sCit7ImVkbS1tZ3Itc3luYyIsICAgICAgIHtOVUxMfSwgMzQ2NCwgInRjcCJ9LAoreyJlZG0tbWdyLXN5bmMiLCAgICAgICB7TlVMTH0sIDM0NjQsICJ1ZHAifSwKK3siZWRtLW1nci1jbnRybCIsICAgICAge05VTEx9LCAzNDY1LCAidGNwIn0sCit7ImVkbS1tZ3ItY250cmwiLCAgICAgIHtOVUxMfSwgMzQ2NSwgInVkcCJ9LAoreyJ3b3JrZmxvdyIsICAgICAgICAgICB7TlVMTH0sIDM0NjYsICJ0Y3AifSwKK3sid29ya2Zsb3ciLCAgICAgICAgICAge05VTEx9LCAzNDY2LCAidWRwIn0sCit7InJjc3QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ2NywgInRjcCJ9LAoreyJyY3N0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDM0NjcsICJ1ZHAifSwKK3sidHRjbXJlbW90ZWN0cmwiLCAgICAge05VTEx9LCAzNDY4LCAidGNwIn0sCit7InR0Y21yZW1vdGVjdHJsIiwgICAgIHtOVUxMfSwgMzQ2OCwgInVkcCJ9LAoreyJwbHVyaWJ1cyIsICAgICAgICAgICB7TlVMTH0sIDM0NjksICJ0Y3AifSwKK3sicGx1cmlidXMiLCAgICAgICAgICAge05VTEx9LCAzNDY5LCAidWRwIn0sCit7Imp0NDAwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQ3MCwgInRjcCJ9LAoreyJqdDQwMCIsICAgICAgICAgICAgICB7TlVMTH0sIDM0NzAsICJ1ZHAifSwKK3sianQ0MDAtc3NsIiwgICAgICAgICAge05VTEx9LCAzNDcxLCAidGNwIn0sCit7Imp0NDAwLXNzbCIsICAgICAgICAgIHtOVUxMfSwgMzQ3MSwgInVkcCJ9LAoreyJqYXVnc3JlbW90ZWMtMSIsICAgICB7TlVMTH0sIDM0NzIsICJ0Y3AifSwKK3siamF1Z3NyZW1vdGVjLTEiLCAgICAge05VTEx9LCAzNDcyLCAidWRwIn0sCit7ImphdWdzcmVtb3RlYy0yIiwgICAgIHtOVUxMfSwgMzQ3MywgInRjcCJ9LAoreyJqYXVnc3JlbW90ZWMtMiIsICAgICB7TlVMTH0sIDM0NzMsICJ1ZHAifSwKK3sidHRudHNwYXV0byIsICAgICAgICAge05VTEx9LCAzNDc0LCAidGNwIn0sCit7InR0bnRzcGF1dG8iLCAgICAgICAgIHtOVUxMfSwgMzQ3NCwgInVkcCJ9LAoreyJnZW5pc2FyLXBvcnQiLCAgICAgICB7TlVMTH0sIDM0NzUsICJ0Y3AifSwKK3siZ2VuaXNhci1wb3J0IiwgICAgICAge05VTEx9LCAzNDc1LCAidWRwIn0sCit7Im5wcG1wIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQ3NiwgInRjcCJ9LAoreyJucHBtcCIsICAgICAgICAgICAgICB7TlVMTH0sIDM0NzYsICJ1ZHAifSwKK3siZWNvbW0iLCAgICAgICAgICAgICAge05VTEx9LCAzNDc3LCAidGNwIn0sCit7ImVjb21tIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzQ3NywgInVkcCJ9LAoreyJzdHVuIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM0NzgsICJ0Y3AifSwKK3sic3R1biIsICAgICAgICAgICAgICAge05VTEx9LCAzNDc4LCAidWRwIn0sCit7InR1cm4iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ3OCwgInRjcCJ9LAoreyJ0dXJuIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM0NzgsICJ1ZHAifSwKK3sic3R1bi1iZWhhdmlvciIsICAgICAge05VTEx9LCAzNDc4LCAidGNwIn0sCit7InN0dW4tYmVoYXZpb3IiLCAgICAgIHtOVUxMfSwgMzQ3OCwgInVkcCJ9LAoreyJ0d3JwYyIsICAgICAgICAgICAgICB7TlVMTH0sIDM0NzksICJ0Y3AifSwKK3sidHdycGMiLCAgICAgICAgICAgICAge05VTEx9LCAzNDc5LCAidWRwIn0sCit7InBsZXRob3JhIiwgICAgICAgICAgIHtOVUxMfSwgMzQ4MCwgInRjcCJ9LAoreyJwbGV0aG9yYSIsICAgICAgICAgICB7TlVMTH0sIDM0ODAsICJ1ZHAifSwKK3siY2xlYW5lcmxpdmVyYyIsICAgICAge05VTEx9LCAzNDgxLCAidGNwIn0sCit7ImNsZWFuZXJsaXZlcmMiLCAgICAgIHtOVUxMfSwgMzQ4MSwgInVkcCJ9LAoreyJ2dWx0dXJlIiwgICAgICAgICAgICB7TlVMTH0sIDM0ODIsICJ0Y3AifSwKK3sidnVsdHVyZSIsICAgICAgICAgICAge05VTEx9LCAzNDgyLCAidWRwIn0sCit7InNsaW0tZGV2aWNlcyIsICAgICAgIHtOVUxMfSwgMzQ4MywgInRjcCJ9LAoreyJzbGltLWRldmljZXMiLCAgICAgICB7TlVMTH0sIDM0ODMsICJ1ZHAifSwKK3siZ2JzLXN0cCIsICAgICAgICAgICAge05VTEx9LCAzNDg0LCAidGNwIn0sCit7Imdicy1zdHAiLCAgICAgICAgICAgIHtOVUxMfSwgMzQ4NCwgInVkcCJ9LAoreyJjZWxhdGFsayIsICAgICAgICAgICB7TlVMTH0sIDM0ODUsICJ0Y3AifSwKK3siY2VsYXRhbGsiLCAgICAgICAgICAge05VTEx9LCAzNDg1LCAidWRwIn0sCit7Imlmc2YtaGItcG9ydCIsICAgICAgIHtOVUxMfSwgMzQ4NiwgInRjcCJ9LAoreyJpZnNmLWhiLXBvcnQiLCAgICAgICB7TlVMTH0sIDM0ODYsICJ1ZHAifSwKK3sibHRjdGNwIiwgICAgICAgICAgICAge05VTEx9LCAzNDg3LCAidGNwIn0sCit7Imx0Y3VkcCIsICAgICAgICAgICAgIHtOVUxMfSwgMzQ4NywgInVkcCJ9LAoreyJmcy1yaC1zcnYiLCAgICAgICAgICB7TlVMTH0sIDM0ODgsICJ0Y3AifSwKK3siZnMtcmgtc3J2IiwgICAgICAgICAge05VTEx9LCAzNDg4LCAidWRwIn0sCit7ImR0cC1kaWEiLCAgICAgICAgICAgIHtOVUxMfSwgMzQ4OSwgInRjcCJ9LAoreyJkdHAtZGlhIiwgICAgICAgICAgICB7TlVMTH0sIDM0ODksICJ1ZHAifSwKK3siY29sdWJyaXMiLCAgICAgICAgICAge05VTEx9LCAzNDkwLCAidGNwIn0sCit7ImNvbHVicmlzIiwgICAgICAgICAgIHtOVUxMfSwgMzQ5MCwgInVkcCJ9LAoreyJzd3ItcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM0OTEsICJ0Y3AifSwKK3sic3dyLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNDkxLCAidWRwIn0sCit7InR2ZHVtdHJheS1wb3J0IiwgICAgIHtOVUxMfSwgMzQ5MiwgInRjcCJ9LAoreyJ0dmR1bXRyYXktcG9ydCIsICAgICB7TlVMTH0sIDM0OTIsICJ1ZHAifSwKK3sibnV0IiwgICAgICAgICAgICAgICAge05VTEx9LCAzNDkzLCAidGNwIn0sCit7Im51dCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzQ5MywgInVkcCJ9LAoreyJpYm0zNDk0IiwgICAgICAgICAgICB7TlVMTH0sIDM0OTQsICJ0Y3AifSwKK3siaWJtMzQ5NCIsICAgICAgICAgICAge05VTEx9LCAzNDk0LCAidWRwIn0sCit7InNlY2xheWVyLXRjcCIsICAgICAgIHtOVUxMfSwgMzQ5NSwgInRjcCJ9LAoreyJzZWNsYXllci10Y3AiLCAgICAgICB7TlVMTH0sIDM0OTUsICJ1ZHAifSwKK3sic2VjbGF5ZXItdGxzIiwgICAgICAge05VTEx9LCAzNDk2LCAidGNwIn0sCit7InNlY2xheWVyLXRscyIsICAgICAgIHtOVUxMfSwgMzQ5NiwgInVkcCJ9LAoreyJpcGV0aGVyMjMycG9ydCIsICAgICB7TlVMTH0sIDM0OTcsICJ0Y3AifSwKK3siaXBldGhlcjIzMnBvcnQiLCAgICAge05VTEx9LCAzNDk3LCAidWRwIn0sCit7ImRhc2hwYXMtcG9ydCIsICAgICAgIHtOVUxMfSwgMzQ5OCwgInRjcCJ9LAoreyJkYXNocGFzLXBvcnQiLCAgICAgICB7TlVMTH0sIDM0OTgsICJ1ZHAifSwKK3sic2NjaXAtbWVkaWEiLCAgICAgICAge05VTEx9LCAzNDk5LCAidGNwIn0sCit7InNjY2lwLW1lZGlhIiwgICAgICAgIHtOVUxMfSwgMzQ5OSwgInVkcCJ9LAoreyJydG1wLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM1MDAsICJ0Y3AifSwKK3sicnRtcC1wb3J0IiwgICAgICAgICAge05VTEx9LCAzNTAwLCAidWRwIn0sCit7Imlzb2Z0LXAycCIsICAgICAgICAgIHtOVUxMfSwgMzUwMSwgInRjcCJ9LAoreyJpc29mdC1wMnAiLCAgICAgICAgICB7TlVMTH0sIDM1MDEsICJ1ZHAifSwKK3siYXZpbnN0YWxsZGlzYyIsICAgICAge05VTEx9LCAzNTAyLCAidGNwIn0sCit7ImF2aW5zdGFsbGRpc2MiLCAgICAgIHtOVUxMfSwgMzUwMiwgInVkcCJ9LAoreyJsc3AtcGluZyIsICAgICAgICAgICB7TlVMTH0sIDM1MDMsICJ0Y3AifSwKK3sibHNwLXBpbmciLCAgICAgICAgICAge05VTEx9LCAzNTAzLCAidWRwIn0sCit7Imlyb25zdG9ybSIsICAgICAgICAgIHtOVUxMfSwgMzUwNCwgInRjcCJ9LAoreyJpcm9uc3Rvcm0iLCAgICAgICAgICB7TlVMTH0sIDM1MDQsICJ1ZHAifSwKK3siY2NtY29tbSIsICAgICAgICAgICAge05VTEx9LCAzNTA1LCAidGNwIn0sCit7ImNjbWNvbW0iLCAgICAgICAgICAgIHtOVUxMfSwgMzUwNSwgInVkcCJ9LAoreyJhcGMtMzUwNiIsICAgICAgICAgICB7TlVMTH0sIDM1MDYsICJ0Y3AifSwKK3siYXBjLTM1MDYiLCAgICAgICAgICAge05VTEx9LCAzNTA2LCAidWRwIn0sCit7Im5lc2gtYnJva2VyIiwgICAgICAgIHtOVUxMfSwgMzUwNywgInRjcCJ9LAoreyJuZXNoLWJyb2tlciIsICAgICAgICB7TlVMTH0sIDM1MDcsICJ1ZHAifSwKK3siaW50ZXJhY3Rpb253ZWIiLCAgICAge05VTEx9LCAzNTA4LCAidGNwIn0sCit7ImludGVyYWN0aW9ud2ViIiwgICAgIHtOVUxMfSwgMzUwOCwgInVkcCJ9LAoreyJ2dC1zc2wiLCAgICAgICAgICAgICB7TlVMTH0sIDM1MDksICJ0Y3AifSwKK3sidnQtc3NsIiwgICAgICAgICAgICAge05VTEx9LCAzNTA5LCAidWRwIn0sCit7Inhzcy1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzUxMCwgInRjcCJ9LAoreyJ4c3MtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM1MTAsICJ1ZHAifSwKK3sid2VibWFpbC0yIiwgICAgICAgICAge05VTEx9LCAzNTExLCAidGNwIn0sCit7IndlYm1haWwtMiIsICAgICAgICAgIHtOVUxMfSwgMzUxMSwgInVkcCJ9LAoreyJhenRlYyIsICAgICAgICAgICAgICB7TlVMTH0sIDM1MTIsICJ0Y3AifSwKK3siYXp0ZWMiLCAgICAgICAgICAgICAge05VTEx9LCAzNTEyLCAidWRwIn0sCit7ImFyY3BkIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzUxMywgInRjcCJ9LAoreyJhcmNwZCIsICAgICAgICAgICAgICB7TlVMTH0sIDM1MTMsICJ1ZHAifSwKK3sibXVzdC1wMnAiLCAgICAgICAgICAge05VTEx9LCAzNTE0LCAidGNwIn0sCit7Im11c3QtcDJwIiwgICAgICAgICAgIHtOVUxMfSwgMzUxNCwgInVkcCJ9LAoreyJtdXN0LWJhY2twbGFuZSIsICAgICB7TlVMTH0sIDM1MTUsICJ0Y3AifSwKK3sibXVzdC1iYWNrcGxhbmUiLCAgICAge05VTEx9LCAzNTE1LCAidWRwIn0sCit7InNtYXJ0Y2FyZC1wb3J0IiwgICAgIHtOVUxMfSwgMzUxNiwgInRjcCJ9LAoreyJzbWFydGNhcmQtcG9ydCIsICAgICB7TlVMTH0sIDM1MTYsICJ1ZHAifSwKK3siODAyLTExLWlhcHAiLCAgICAgICAge05VTEx9LCAzNTE3LCAidGNwIn0sCit7IjgwMi0xMS1pYXBwIiwgICAgICAgIHtOVUxMfSwgMzUxNywgInVkcCJ9LAoreyJhcnRpZmFjdC1tc2ciLCAgICAgICB7TlVMTH0sIDM1MTgsICJ0Y3AifSwKK3siYXJ0aWZhY3QtbXNnIiwgICAgICAge05VTEx9LCAzNTE4LCAidWRwIn0sCit7Im52bXNnZCIsICAgICAgICAgICAgIHtOVUxMfSwgMzUxOSwgInRjcCJ9LAoreyJnYWxpbGVvIiwgICAgICAgICAgICB7TlVMTH0sIDM1MTksICJ1ZHAifSwKK3siZ2FsaWxlb2xvZyIsICAgICAgICAge05VTEx9LCAzNTIwLCAidGNwIn0sCit7ImdhbGlsZW9sb2ciLCAgICAgICAgIHtOVUxMfSwgMzUyMCwgInVkcCJ9LAoreyJtYzNzcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM1MjEsICJ0Y3AifSwKK3sibWMzc3MiLCAgICAgICAgICAgICAge05VTEx9LCAzNTIxLCAidWRwIn0sCit7Im5zc29ja2V0cG9ydCIsICAgICAgIHtOVUxMfSwgMzUyMiwgInRjcCJ9LAoreyJuc3NvY2tldHBvcnQiLCAgICAgICB7TlVMTH0sIDM1MjIsICJ1ZHAifSwKK3sib2RldW1zZXJ2bGluayIsICAgICAge05VTEx9LCAzNTIzLCAidGNwIn0sCit7Im9kZXVtc2VydmxpbmsiLCAgICAgIHtOVUxMfSwgMzUyMywgInVkcCJ9LAoreyJlY21wb3J0IiwgICAgICAgICAgICB7TlVMTH0sIDM1MjQsICJ0Y3AifSwKK3siZWNtcG9ydCIsICAgICAgICAgICAge05VTEx9LCAzNTI0LCAidWRwIn0sCit7ImVpc3BvcnQiLCAgICAgICAgICAgIHtOVUxMfSwgMzUyNSwgInRjcCJ9LAoreyJlaXNwb3J0IiwgICAgICAgICAgICB7TlVMTH0sIDM1MjUsICJ1ZHAifSwKK3sic3RhcnF1aXotcG9ydCIsICAgICAge05VTEx9LCAzNTI2LCAidGNwIn0sCit7InN0YXJxdWl6LXBvcnQiLCAgICAgIHtOVUxMfSwgMzUyNiwgInVkcCJ9LAoreyJiZXNlcnZlci1tc2ctcSIsICAgICB7TlVMTH0sIDM1MjcsICJ0Y3AifSwKK3siYmVzZXJ2ZXItbXNnLXEiLCAgICAge05VTEx9LCAzNTI3LCAidWRwIn0sCit7Impib3NzLWlpb3AiLCAgICAgICAgIHtOVUxMfSwgMzUyOCwgInRjcCJ9LAoreyJqYm9zcy1paW9wIiwgICAgICAgICB7TlVMTH0sIDM1MjgsICJ1ZHAifSwKK3siamJvc3MtaWlvcC1zc2wiLCAgICAge05VTEx9LCAzNTI5LCAidGNwIn0sCit7Impib3NzLWlpb3Atc3NsIiwgICAgIHtOVUxMfSwgMzUyOSwgInVkcCJ9LAoreyJnZiIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDM1MzAsICJ0Y3AifSwKK3siZ2YiLCAgICAgICAgICAgICAgICAge05VTEx9LCAzNTMwLCAidWRwIn0sCit7ImpvbHRpZCIsICAgICAgICAgICAgIHtOVUxMfSwgMzUzMSwgInRjcCJ9LAoreyJqb2x0aWQiLCAgICAgICAgICAgICB7TlVMTH0sIDM1MzEsICJ1ZHAifSwKK3sicmF2ZW4tcm1wIiwgICAgICAgICAge05VTEx9LCAzNTMyLCAidGNwIn0sCit7InJhdmVuLXJtcCIsICAgICAgICAgIHtOVUxMfSwgMzUzMiwgInVkcCJ9LAoreyJyYXZlbi1yZHAiLCAgICAgICAgICB7TlVMTH0sIDM1MzMsICJ0Y3AifSwKK3sicmF2ZW4tcmRwIiwgICAgICAgICAge05VTEx9LCAzNTMzLCAidWRwIn0sCit7InVybGQtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMzUzNCwgInRjcCJ9LAoreyJ1cmxkLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM1MzQsICJ1ZHAifSwKK3sibXMtbGEiLCAgICAgICAgICAgICAge05VTEx9LCAzNTM1LCAidGNwIn0sCit7Im1zLWxhIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzUzNSwgInVkcCJ9LAoreyJzbmFjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM1MzYsICJ0Y3AifSwKK3sic25hYyIsICAgICAgICAgICAgICAge05VTEx9LCAzNTM2LCAidWRwIn0sCit7Im5pLXZpc2EtcmVtb3RlIiwgICAgIHtOVUxMfSwgMzUzNywgInRjcCJ9LAoreyJuaS12aXNhLXJlbW90ZSIsICAgICB7TlVMTH0sIDM1MzcsICJ1ZHAifSwKK3siaWJtLWRpcmFkbSIsICAgICAgICAge05VTEx9LCAzNTM4LCAidGNwIn0sCit7ImlibS1kaXJhZG0iLCAgICAgICAgIHtOVUxMfSwgMzUzOCwgInVkcCJ9LAoreyJpYm0tZGlyYWRtLXNzbCIsICAgICB7TlVMTH0sIDM1MzksICJ0Y3AifSwKK3siaWJtLWRpcmFkbS1zc2wiLCAgICAge05VTEx9LCAzNTM5LCAidWRwIn0sCit7InBucnAtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMzU0MCwgInRjcCJ9LAoreyJwbnJwLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM1NDAsICJ1ZHAifSwKK3sidm9pc3BlZWQtcG9ydCIsICAgICAge05VTEx9LCAzNTQxLCAidGNwIn0sCit7InZvaXNwZWVkLXBvcnQiLCAgICAgIHtOVUxMfSwgMzU0MSwgInVkcCJ9LAoreyJoYWNsLW1vbml0b3IiLCAgICAgICB7TlVMTH0sIDM1NDIsICJ0Y3AifSwKK3siaGFjbC1tb25pdG9yIiwgICAgICAge05VTEx9LCAzNTQyLCAidWRwIn0sCit7InFmdGVzdC1sb29rdXAiLCAgICAgIHtOVUxMfSwgMzU0MywgInRjcCJ9LAoreyJxZnRlc3QtbG9va3VwIiwgICAgICB7TlVMTH0sIDM1NDMsICJ1ZHAifSwKK3sidGVyZWRvIiwgICAgICAgICAgICAge05VTEx9LCAzNTQ0LCAidGNwIn0sCit7InRlcmVkbyIsICAgICAgICAgICAgIHtOVUxMfSwgMzU0NCwgInVkcCJ9LAoreyJjYW1hYyIsICAgICAgICAgICAgICB7TlVMTH0sIDM1NDUsICJ0Y3AifSwKK3siY2FtYWMiLCAgICAgICAgICAgICAge05VTEx9LCAzNTQ1LCAidWRwIn0sCit7InN5bWFudGVjLXNpbSIsICAgICAgIHtOVUxMfSwgMzU0NywgInRjcCJ9LAoreyJzeW1hbnRlYy1zaW0iLCAgICAgICB7TlVMTH0sIDM1NDcsICJ1ZHAifSwKK3siaW50ZXJ3b3JsZCIsICAgICAgICAge05VTEx9LCAzNTQ4LCAidGNwIn0sCit7ImludGVyd29ybGQiLCAgICAgICAgIHtOVUxMfSwgMzU0OCwgInVkcCJ9LAoreyJ0ZWxsdW1hdC1ubXMiLCAgICAgICB7TlVMTH0sIDM1NDksICJ0Y3AifSwKK3sidGVsbHVtYXQtbm1zIiwgICAgICAge05VTEx9LCAzNTQ5LCAidWRwIn0sCit7InNzbXBwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzU1MCwgInRjcCJ9LAoreyJzc21wcCIsICAgICAgICAgICAgICB7TlVMTH0sIDM1NTAsICJ1ZHAifSwKK3siYXBjdXBzZCIsICAgICAgICAgICAge05VTEx9LCAzNTUxLCAidGNwIn0sCit7ImFwY3Vwc2QiLCAgICAgICAgICAgIHtOVUxMfSwgMzU1MSwgInVkcCJ9LAoreyJ0YXNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDM1NTIsICJ0Y3AifSwKK3sidGFzZXJ2ZXIiLCAgICAgICAgICAge05VTEx9LCAzNTUyLCAidWRwIn0sCit7InJici1kaXNjb3ZlcnkiLCAgICAgIHtOVUxMfSwgMzU1MywgInRjcCJ9LAoreyJyYnItZGlzY292ZXJ5IiwgICAgICB7TlVMTH0sIDM1NTMsICJ1ZHAifSwKK3sicXVlc3Rub3RpZnkiLCAgICAgICAge05VTEx9LCAzNTU0LCAidGNwIn0sCit7InF1ZXN0bm90aWZ5IiwgICAgICAgIHtOVUxMfSwgMzU1NCwgInVkcCJ9LAoreyJyYXpvciIsICAgICAgICAgICAgICB7TlVMTH0sIDM1NTUsICJ0Y3AifSwKK3sicmF6b3IiLCAgICAgICAgICAgICAge05VTEx9LCAzNTU1LCAidWRwIn0sCit7InNreS10cmFuc3BvcnQiLCAgICAgIHtOVUxMfSwgMzU1NiwgInRjcCJ9LAoreyJza3ktdHJhbnNwb3J0IiwgICAgICB7TlVMTH0sIDM1NTYsICJ1ZHAifSwKK3sicGVyc29uYWxvcy0wMDEiLCAgICAge05VTEx9LCAzNTU3LCAidGNwIn0sCit7InBlcnNvbmFsb3MtMDAxIiwgICAgIHtOVUxMfSwgMzU1NywgInVkcCJ9LAoreyJtY3AtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM1NTgsICJ0Y3AifSwKK3sibWNwLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNTU4LCAidWRwIn0sCit7ImNjdHYtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMzU1OSwgInRjcCJ9LAoreyJjY3R2LXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM1NTksICJ1ZHAifSwKK3siaW5pc2VydmUtcG9ydCIsICAgICAge05VTEx9LCAzNTYwLCAidGNwIn0sCit7ImluaXNlcnZlLXBvcnQiLCAgICAgIHtOVUxMfSwgMzU2MCwgInVkcCJ9LAoreyJibWMtb25la2V5IiwgICAgICAgICB7TlVMTH0sIDM1NjEsICJ0Y3AifSwKK3siYm1jLW9uZWtleSIsICAgICAgICAge05VTEx9LCAzNTYxLCAidWRwIn0sCit7InNkYnByb3h5IiwgICAgICAgICAgIHtOVUxMfSwgMzU2MiwgInRjcCJ9LAoreyJzZGJwcm94eSIsICAgICAgICAgICB7TlVMTH0sIDM1NjIsICJ1ZHAifSwKK3sid2F0Y29tZGVidWciLCAgICAgICAge05VTEx9LCAzNTYzLCAidGNwIn0sCit7IndhdGNvbWRlYnVnIiwgICAgICAgIHtOVUxMfSwgMzU2MywgInVkcCJ9LAoreyJlc2ltcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM1NjQsICJ0Y3AifSwKK3siZXNpbXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNTY0LCAidWRwIn0sCit7Im0ycGEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzU2NSwgInRjcCJ9LAoreyJtMnBhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM1NjUsICJzY3RwIn0sCit7InF1ZXN0LWRhdGEtaHViIiwgICAgIHtOVUxMfSwgMzU2NiwgInRjcCJ9LAoreyJvYXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM1NjcsICJ0Y3AifSwKK3sib2FwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzNTY3LCAidWRwIn0sCit7Im9hcC1zIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzU2OCwgInRjcCJ9LAoreyJvYXAtcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM1NjgsICJ1ZHAifSwKK3sibWJnLWN0cmwiLCAgICAgICAgICAge05VTEx9LCAzNTY5LCAidGNwIn0sCit7Im1iZy1jdHJsIiwgICAgICAgICAgIHtOVUxMfSwgMzU2OSwgInVkcCJ9LAoreyJtY2N3ZWJzdnItcG9ydCIsICAgICB7TlVMTH0sIDM1NzAsICJ0Y3AifSwKK3sibWNjd2Vic3ZyLXBvcnQiLCAgICAge05VTEx9LCAzNTcwLCAidWRwIn0sCit7Im1lZ2FyZHN2ci1wb3J0IiwgICAgIHtOVUxMfSwgMzU3MSwgInRjcCJ9LAoreyJtZWdhcmRzdnItcG9ydCIsICAgICB7TlVMTH0sIDM1NzEsICJ1ZHAifSwKK3sibWVnYXJlZ3N2cnBvcnQiLCAgICAge05VTEx9LCAzNTcyLCAidGNwIn0sCit7Im1lZ2FyZWdzdnJwb3J0IiwgICAgIHtOVUxMfSwgMzU3MiwgInVkcCJ9LAoreyJ0YWctdXBzLTEiLCAgICAgICAgICB7TlVMTH0sIDM1NzMsICJ0Y3AifSwKK3sidGFnLXVwcy0xIiwgICAgICAgICAge05VTEx9LCAzNTczLCAidWRwIn0sCit7ImRtYWYtc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzU3NCwgInRjcCJ9LAoreyJkbWFmLWNhc3RlciIsICAgICAgICB7TlVMTH0sIDM1NzQsICJ1ZHAifSwKK3siY2NtLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNTc1LCAidGNwIn0sCit7ImNjbS1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzU3NSwgInVkcCJ9LAoreyJjbWMtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM1NzYsICJ0Y3AifSwKK3siY21jLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNTc2LCAidWRwIn0sCit7ImNvbmZpZy1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzU3NywgInRjcCJ9LAoreyJjb25maWctcG9ydCIsICAgICAgICB7TlVMTH0sIDM1NzcsICJ1ZHAifSwKK3siZGF0YS1wb3J0IiwgICAgICAgICAge05VTEx9LCAzNTc4LCAidGNwIn0sCit7ImRhdGEtcG9ydCIsICAgICAgICAgIHtOVUxMfSwgMzU3OCwgInVkcCJ9LAoreyJ0dGF0M2xiIiwgICAgICAgICAgICB7TlVMTH0sIDM1NzksICJ0Y3AifSwKK3sidHRhdDNsYiIsICAgICAgICAgICAge05VTEx9LCAzNTc5LCAidWRwIn0sCit7Im5hdGktc3ZybG9jIiwgICAgICAgIHtOVUxMfSwgMzU4MCwgInRjcCJ9LAoreyJuYXRpLXN2cmxvYyIsICAgICAgICB7TlVMTH0sIDM1ODAsICJ1ZHAifSwKK3sia2Z4YWNsaWNlbnNpbmciLCAgICAge05VTEx9LCAzNTgxLCAidGNwIn0sCit7ImtmeGFjbGljZW5zaW5nIiwgICAgIHtOVUxMfSwgMzU4MSwgInVkcCJ9LAoreyJwcmVzcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM1ODIsICJ0Y3AifSwKK3sicHJlc3MiLCAgICAgICAgICAgICAge05VTEx9LCAzNTgyLCAidWRwIn0sCit7ImNhbmV4LXdhdGNoIiwgICAgICAgIHtOVUxMfSwgMzU4MywgInRjcCJ9LAoreyJjYW5leC13YXRjaCIsICAgICAgICB7TlVMTH0sIDM1ODMsICJ1ZHAifSwKK3sidS1kYmFwIiwgICAgICAgICAgICAge05VTEx9LCAzNTg0LCAidGNwIn0sCit7InUtZGJhcCIsICAgICAgICAgICAgIHtOVUxMfSwgMzU4NCwgInVkcCJ9LAoreyJlbXByaXNlLWxscyIsICAgICAgICB7TlVMTH0sIDM1ODUsICJ0Y3AifSwKK3siZW1wcmlzZS1sbHMiLCAgICAgICAge05VTEx9LCAzNTg1LCAidWRwIn0sCit7ImVtcHJpc2UtbHNjIiwgICAgICAgIHtOVUxMfSwgMzU4NiwgInRjcCJ9LAoreyJlbXByaXNlLWxzYyIsICAgICAgICB7TlVMTH0sIDM1ODYsICJ1ZHAifSwKK3sicDJwZ3JvdXAiLCAgICAgICAgICAge05VTEx9LCAzNTg3LCAidGNwIn0sCit7InAycGdyb3VwIiwgICAgICAgICAgIHtOVUxMfSwgMzU4NywgInVkcCJ9LAoreyJzZW50aW5lbCIsICAgICAgICAgICB7TlVMTH0sIDM1ODgsICJ0Y3AifSwKK3sic2VudGluZWwiLCAgICAgICAgICAge05VTEx9LCAzNTg4LCAidWRwIn0sCit7Imlzb21haXIiLCAgICAgICAgICAgIHtOVUxMfSwgMzU4OSwgInRjcCJ9LAoreyJpc29tYWlyIiwgICAgICAgICAgICB7TlVMTH0sIDM1ODksICJ1ZHAifSwKK3sid3YtY3NwLXNtcyIsICAgICAgICAge05VTEx9LCAzNTkwLCAidGNwIn0sCit7Ind2LWNzcC1zbXMiLCAgICAgICAgIHtOVUxMfSwgMzU5MCwgInVkcCJ9LAoreyJndHJhY2stc2VydmVyIiwgICAgICB7TlVMTH0sIDM1OTEsICJ0Y3AifSwKK3siZ3RyYWNrLXNlcnZlciIsICAgICAge05VTEx9LCAzNTkxLCAidWRwIn0sCit7Imd0cmFjay1uZSIsICAgICAgICAgIHtOVUxMfSwgMzU5MiwgInRjcCJ9LAoreyJndHJhY2stbmUiLCAgICAgICAgICB7TlVMTH0sIDM1OTIsICJ1ZHAifSwKK3siYnBtZCIsICAgICAgICAgICAgICAge05VTEx9LCAzNTkzLCAidGNwIn0sCit7ImJwbWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzU5MywgInVkcCJ9LAoreyJtZWRpYXNwYWNlIiwgICAgICAgICB7TlVMTH0sIDM1OTQsICJ0Y3AifSwKK3sibWVkaWFzcGFjZSIsICAgICAgICAge05VTEx9LCAzNTk0LCAidWRwIn0sCit7InNoYXJlYXBwIiwgICAgICAgICAgIHtOVUxMfSwgMzU5NSwgInRjcCJ9LAoreyJzaGFyZWFwcCIsICAgICAgICAgICB7TlVMTH0sIDM1OTUsICJ1ZHAifSwKK3siaXctbW1vZ2FtZSIsICAgICAgICAge05VTEx9LCAzNTk2LCAidGNwIn0sCit7Iml3LW1tb2dhbWUiLCAgICAgICAgIHtOVUxMfSwgMzU5NiwgInVkcCJ9LAoreyJhMTQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM1OTcsICJ0Y3AifSwKK3siYTE0IiwgICAgICAgICAgICAgICAge05VTEx9LCAzNTk3LCAidWRwIn0sCit7ImExNSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzU5OCwgInRjcCJ9LAoreyJhMTUiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM1OTgsICJ1ZHAifSwKK3sicXVhc2FyLXNlcnZlciIsICAgICAge05VTEx9LCAzNTk5LCAidGNwIn0sCit7InF1YXNhci1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzU5OSwgInVkcCJ9LAoreyJ0cmFwLWRhZW1vbiIsICAgICAgICB7TlVMTH0sIDM2MDAsICJ0Y3AifSwKK3sidHJhcC1kYWVtb24iLCAgICAgICAge05VTEx9LCAzNjAwLCAidWRwIn0sCit7InZpc2luZXQtZ3VpIiwgICAgICAgIHtOVUxMfSwgMzYwMSwgInRjcCJ9LAoreyJ2aXNpbmV0LWd1aSIsICAgICAgICB7TlVMTH0sIDM2MDEsICJ1ZHAifSwKK3siaW5maW5pc3dpdGNoY2wiLCAgICAge05VTEx9LCAzNjAyLCAidGNwIn0sCit7ImluZmluaXN3aXRjaGNsIiwgICAgIHtOVUxMfSwgMzYwMiwgInVkcCJ9LAoreyJpbnQtcmN2LWNudHJsIiwgICAgICB7TlVMTH0sIDM2MDMsICJ0Y3AifSwKK3siaW50LXJjdi1jbnRybCIsICAgICAge05VTEx9LCAzNjAzLCAidWRwIn0sCit7ImJtYy1qbXgtcG9ydCIsICAgICAgIHtOVUxMfSwgMzYwNCwgInRjcCJ9LAoreyJibWMtam14LXBvcnQiLCAgICAgICB7TlVMTH0sIDM2MDQsICJ1ZHAifSwKK3siY29tY2FtLWlvIiwgICAgICAgICAge05VTEx9LCAzNjA1LCAidGNwIn0sCit7ImNvbWNhbS1pbyIsICAgICAgICAgIHtOVUxMfSwgMzYwNSwgInVkcCJ9LAoreyJzcGxpdGxvY2siLCAgICAgICAgICB7TlVMTH0sIDM2MDYsICJ0Y3AifSwKK3sic3BsaXRsb2NrIiwgICAgICAgICAge05VTEx9LCAzNjA2LCAidWRwIn0sCit7InByZWNpc2UtaTMiLCAgICAgICAgIHtOVUxMfSwgMzYwNywgInRjcCJ9LAoreyJwcmVjaXNlLWkzIiwgICAgICAgICB7TlVMTH0sIDM2MDcsICJ1ZHAifSwKK3sidHJlbmRjaGlwLWRjcCIsICAgICAge05VTEx9LCAzNjA4LCAidGNwIn0sCit7InRyZW5kY2hpcC1kY3AiLCAgICAgIHtOVUxMfSwgMzYwOCwgInVkcCJ9LAoreyJjcGRpLXBpZGFzLWNtIiwgICAgICB7TlVMTH0sIDM2MDksICJ0Y3AifSwKK3siY3BkaS1waWRhcy1jbSIsICAgICAge05VTEx9LCAzNjA5LCAidWRwIn0sCit7ImVjaG9uZXQiLCAgICAgICAgICAgIHtOVUxMfSwgMzYxMCwgInRjcCJ9LAoreyJlY2hvbmV0IiwgICAgICAgICAgICB7TlVMTH0sIDM2MTAsICJ1ZHAifSwKK3sic2l4LWRlZ3JlZXMiLCAgICAgICAge05VTEx9LCAzNjExLCAidGNwIn0sCit7InNpeC1kZWdyZWVzIiwgICAgICAgIHtOVUxMfSwgMzYxMSwgInVkcCJ9LAoreyJocC1kYXRhcHJvdGVjdCIsICAgICB7TlVMTH0sIDM2MTIsICJ0Y3AifSwKK3siaHAtZGF0YXByb3RlY3QiLCAgICAge05VTEx9LCAzNjEyLCAidWRwIn0sCit7ImFsYXJpcy1kaXNjIiwgICAgICAgIHtOVUxMfSwgMzYxMywgInRjcCJ9LAoreyJhbGFyaXMtZGlzYyIsICAgICAgICB7TlVMTH0sIDM2MTMsICJ1ZHAifSwKK3sic2lnbWEtcG9ydCIsICAgICAgICAge05VTEx9LCAzNjE0LCAidGNwIn0sCit7InNpZ21hLXBvcnQiLCAgICAgICAgIHtOVUxMfSwgMzYxNCwgInVkcCJ9LAoreyJzdGFydC1uZXR3b3JrIiwgICAgICB7TlVMTH0sIDM2MTUsICJ0Y3AifSwKK3sic3RhcnQtbmV0d29yayIsICAgICAge05VTEx9LCAzNjE1LCAidWRwIn0sCit7ImNkM28tcHJvdG9jb2wiLCAgICAgIHtOVUxMfSwgMzYxNiwgInRjcCJ9LAoreyJjZDNvLXByb3RvY29sIiwgICAgICB7TlVMTH0sIDM2MTYsICJ1ZHAifSwKK3sic2hhcnAtc2VydmVyIiwgICAgICAge05VTEx9LCAzNjE3LCAidGNwIn0sCit7InNoYXJwLXNlcnZlciIsICAgICAgIHtOVUxMfSwgMzYxNywgInVkcCJ9LAoreyJhYWlybmV0LTEiLCAgICAgICAgICB7TlVMTH0sIDM2MTgsICJ0Y3AifSwKK3siYWFpcm5ldC0xIiwgICAgICAgICAge05VTEx9LCAzNjE4LCAidWRwIn0sCit7ImFhaXJuZXQtMiIsICAgICAgICAgIHtOVUxMfSwgMzYxOSwgInRjcCJ9LAoreyJhYWlybmV0LTIiLCAgICAgICAgICB7TlVMTH0sIDM2MTksICJ1ZHAifSwKK3siZXAtcGNwIiwgICAgICAgICAgICAge05VTEx9LCAzNjIwLCAidGNwIn0sCit7ImVwLXBjcCIsICAgICAgICAgICAgIHtOVUxMfSwgMzYyMCwgInVkcCJ9LAoreyJlcC1uc3AiLCAgICAgICAgICAgICB7TlVMTH0sIDM2MjEsICJ0Y3AifSwKK3siZXAtbnNwIiwgICAgICAgICAgICAge05VTEx9LCAzNjIxLCAidWRwIn0sCit7ImZmLWxyLXBvcnQiLCAgICAgICAgIHtOVUxMfSwgMzYyMiwgInRjcCJ9LAoreyJmZi1sci1wb3J0IiwgICAgICAgICB7TlVMTH0sIDM2MjIsICJ1ZHAifSwKK3siaGFpcGUtZGlzY292ZXIiLCAgICAge05VTEx9LCAzNjIzLCAidGNwIn0sCit7ImhhaXBlLWRpc2NvdmVyIiwgICAgIHtOVUxMfSwgMzYyMywgInVkcCJ9LAoreyJkaXN0LXVwZ3JhZGUiLCAgICAgICB7TlVMTH0sIDM2MjQsICJ0Y3AifSwKK3siZGlzdC11cGdyYWRlIiwgICAgICAge05VTEx9LCAzNjI0LCAidWRwIn0sCit7InZvbGxleSIsICAgICAgICAgICAgIHtOVUxMfSwgMzYyNSwgInRjcCJ9LAoreyJ2b2xsZXkiLCAgICAgICAgICAgICB7TlVMTH0sIDM2MjUsICJ1ZHAifSwKK3siYnZjZGFlbW9uLXBvcnQiLCAgICAge05VTEx9LCAzNjI2LCAidGNwIn0sCit7ImJ2Y2RhZW1vbi1wb3J0IiwgICAgIHtOVUxMfSwgMzYyNiwgInVkcCJ9LAoreyJqYW1zZXJ2ZXJwb3J0IiwgICAgICB7TlVMTH0sIDM2MjcsICJ0Y3AifSwKK3siamFtc2VydmVycG9ydCIsICAgICAge05VTEx9LCAzNjI3LCAidWRwIn0sCit7ImVwdC1tYWNoaW5lIiwgICAgICAgIHtOVUxMfSwgMzYyOCwgInRjcCJ9LAoreyJlcHQtbWFjaGluZSIsICAgICAgICB7TlVMTH0sIDM2MjgsICJ1ZHAifSwKK3siZXNjdnBuZXQiLCAgICAgICAgICAge05VTEx9LCAzNjI5LCAidGNwIn0sCit7ImVzY3ZwbmV0IiwgICAgICAgICAgIHtOVUxMfSwgMzYyOSwgInVkcCJ9LAoreyJjcy1yZW1vdGUtZGIiLCAgICAgICB7TlVMTH0sIDM2MzAsICJ0Y3AifSwKK3siY3MtcmVtb3RlLWRiIiwgICAgICAge05VTEx9LCAzNjMwLCAidWRwIn0sCit7ImNzLXNlcnZpY2VzIiwgICAgICAgIHtOVUxMfSwgMzYzMSwgInRjcCJ9LAoreyJjcy1zZXJ2aWNlcyIsICAgICAgICB7TlVMTH0sIDM2MzEsICJ1ZHAifSwKK3siZGlzdGNjIiwgICAgICAgICAgICAge05VTEx9LCAzNjMyLCAidGNwIn0sCit7ImRpc3RjYyIsICAgICAgICAgICAgIHtOVUxMfSwgMzYzMiwgInVkcCJ9LAoreyJ3YWNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM2MzMsICJ0Y3AifSwKK3sid2FjcCIsICAgICAgICAgICAgICAge05VTEx9LCAzNjMzLCAidWRwIn0sCit7ImhsaWJtZ3IiLCAgICAgICAgICAgIHtOVUxMfSwgMzYzNCwgInRjcCJ9LAoreyJobGlibWdyIiwgICAgICAgICAgICB7TlVMTH0sIDM2MzQsICJ1ZHAifSwKK3sic2RvIiwgICAgICAgICAgICAgICAge05VTEx9LCAzNjM1LCAidGNwIn0sCit7InNkbyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzYzNSwgInVkcCJ9LAoreyJzZXJ2aXN0YWl0c20iLCAgICAgICB7TlVMTH0sIDM2MzYsICJ0Y3AifSwKK3sic2VydmlzdGFpdHNtIiwgICAgICAge05VTEx9LCAzNjM2LCAidWRwIn0sCit7InNjc2VydnAiLCAgICAgICAgICAgIHtOVUxMfSwgMzYzNywgInRjcCJ9LAoreyJzY3NlcnZwIiwgICAgICAgICAgICB7TlVMTH0sIDM2MzcsICJ1ZHAifSwKK3siZWhwLWJhY2t1cCIsICAgICAgICAge05VTEx9LCAzNjM4LCAidGNwIn0sCit7ImVocC1iYWNrdXAiLCAgICAgICAgIHtOVUxMfSwgMzYzOCwgInVkcCJ9LAoreyJ4YXAtaGEiLCAgICAgICAgICAgICB7TlVMTH0sIDM2MzksICJ0Y3AifSwKK3sieGFwLWhhIiwgICAgICAgICAgICAge05VTEx9LCAzNjM5LCAidWRwIn0sCit7Im5ldHBsYXktcG9ydDEiLCAgICAgIHtOVUxMfSwgMzY0MCwgInRjcCJ9LAoreyJuZXRwbGF5LXBvcnQxIiwgICAgICB7TlVMTH0sIDM2NDAsICJ1ZHAifSwKK3sibmV0cGxheS1wb3J0MiIsICAgICAge05VTEx9LCAzNjQxLCAidGNwIn0sCit7Im5ldHBsYXktcG9ydDIiLCAgICAgIHtOVUxMfSwgMzY0MSwgInVkcCJ9LAoreyJqdXhtbC1wb3J0IiwgICAgICAgICB7TlVMTH0sIDM2NDIsICJ0Y3AifSwKK3sianV4bWwtcG9ydCIsICAgICAgICAge05VTEx9LCAzNjQyLCAidWRwIn0sCit7ImF1ZGlvanVnZ2xlciIsICAgICAgIHtOVUxMfSwgMzY0MywgInRjcCJ9LAoreyJhdWRpb2p1Z2dsZXIiLCAgICAgICB7TlVMTH0sIDM2NDMsICJ1ZHAifSwKK3sic3Nvd2F0Y2giLCAgICAgICAgICAge05VTEx9LCAzNjQ0LCAidGNwIn0sCit7InNzb3dhdGNoIiwgICAgICAgICAgIHtOVUxMfSwgMzY0NCwgInVkcCJ9LAoreyJjeWMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM2NDUsICJ0Y3AifSwKK3siY3ljIiwgICAgICAgICAgICAgICAge05VTEx9LCAzNjQ1LCAidWRwIn0sCit7Inhzcy1zcnYtcG9ydCIsICAgICAgIHtOVUxMfSwgMzY0NiwgInRjcCJ9LAoreyJ4c3Mtc3J2LXBvcnQiLCAgICAgICB7TlVMTH0sIDM2NDYsICJ1ZHAifSwKK3sic3BsaXRsb2NrLWd3IiwgICAgICAge05VTEx9LCAzNjQ3LCAidGNwIn0sCit7InNwbGl0bG9jay1ndyIsICAgICAgIHtOVUxMfSwgMzY0NywgInVkcCJ9LAoreyJmamNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM2NDgsICJ0Y3AifSwKK3siZmpjcCIsICAgICAgICAgICAgICAge05VTEx9LCAzNjQ4LCAidWRwIn0sCit7Im5tbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzY0OSwgInRjcCJ9LAoreyJubW1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM2NDksICJ1ZHAifSwKK3sicHJpc21pcS1wbHVnaW4iLCAgICAge05VTEx9LCAzNjUwLCAidGNwIn0sCit7InByaXNtaXEtcGx1Z2luIiwgICAgIHtOVUxMfSwgMzY1MCwgInVkcCJ9LAoreyJ4cnBjLXJlZ2lzdHJ5IiwgICAgICB7TlVMTH0sIDM2NTEsICJ0Y3AifSwKK3sieHJwYy1yZWdpc3RyeSIsICAgICAge05VTEx9LCAzNjUxLCAidWRwIn0sCit7InZ4Y3JuYnVwb3J0IiwgICAgICAgIHtOVUxMfSwgMzY1MiwgInRjcCJ9LAoreyJ2eGNybmJ1cG9ydCIsICAgICAgICB7TlVMTH0sIDM2NTIsICJ1ZHAifSwKK3sidHNwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzNjUzLCAidGNwIn0sCit7InRzcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzY1MywgInVkcCJ9LAoreyJ2YXBydG0iLCAgICAgICAgICAgICB7TlVMTH0sIDM2NTQsICJ0Y3AifSwKK3sidmFwcnRtIiwgICAgICAgICAgICAge05VTEx9LCAzNjU0LCAidWRwIn0sCit7ImFiYXRlbWdyIiwgICAgICAgICAgIHtOVUxMfSwgMzY1NSwgInRjcCJ9LAoreyJhYmF0ZW1nciIsICAgICAgICAgICB7TlVMTH0sIDM2NTUsICJ1ZHAifSwKK3siYWJhdGpzcyIsICAgICAgICAgICAge05VTEx9LCAzNjU2LCAidGNwIn0sCit7ImFiYXRqc3MiLCAgICAgICAgICAgIHtOVUxMfSwgMzY1NiwgInVkcCJ9LAoreyJpbW1lZGlhbmV0LWJjbiIsICAgICB7TlVMTH0sIDM2NTcsICJ0Y3AifSwKK3siaW1tZWRpYW5ldC1iY24iLCAgICAge05VTEx9LCAzNjU3LCAidWRwIn0sCit7InBzLWFtcyIsICAgICAgICAgICAgIHtOVUxMfSwgMzY1OCwgInRjcCJ9LAoreyJwcy1hbXMiLCAgICAgICAgICAgICB7TlVMTH0sIDM2NTgsICJ1ZHAifSwKK3siYXBwbGUtc2FzbCIsICAgICAgICAge05VTEx9LCAzNjU5LCAidGNwIn0sCit7ImFwcGxlLXNhc2wiLCAgICAgICAgIHtOVUxMfSwgMzY1OSwgInVkcCJ9LAoreyJjYW4tbmRzLXNzbCIsICAgICAgICB7TlVMTH0sIDM2NjAsICJ0Y3AifSwKK3siY2FuLW5kcy1zc2wiLCAgICAgICAge05VTEx9LCAzNjYwLCAidWRwIn0sCit7ImNhbi1mZXJyZXQtc3NsIiwgICAgIHtOVUxMfSwgMzY2MSwgInRjcCJ9LAoreyJjYW4tZmVycmV0LXNzbCIsICAgICB7TlVMTH0sIDM2NjEsICJ1ZHAifSwKK3sicHNlcnZlciIsICAgICAgICAgICAge05VTEx9LCAzNjYyLCAidGNwIn0sCit7InBzZXJ2ZXIiLCAgICAgICAgICAgIHtOVUxMfSwgMzY2MiwgInVkcCJ9LAoreyJkdHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM2NjMsICJ0Y3AifSwKK3siZHRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzNjYzLCAidWRwIn0sCit7InVwcy1lbmdpbmUiLCAgICAgICAgIHtOVUxMfSwgMzY2NCwgInRjcCJ9LAoreyJ1cHMtZW5naW5lIiwgICAgICAgICB7TlVMTH0sIDM2NjQsICJ1ZHAifSwKK3siZW50LWVuZ2luZSIsICAgICAgICAge05VTEx9LCAzNjY1LCAidGNwIn0sCit7ImVudC1lbmdpbmUiLCAgICAgICAgIHtOVUxMfSwgMzY2NSwgInVkcCJ9LAoreyJlc2VydmVyLXBhcCIsICAgICAgICB7TlVMTH0sIDM2NjYsICJ0Y3AifSwKK3siZXNlcnZlci1wYXAiLCAgICAgICAge05VTEx9LCAzNjY2LCAidWRwIn0sCit7ImluZm9leGNoIiwgICAgICAgICAgIHtOVUxMfSwgMzY2NywgInRjcCJ9LAoreyJpbmZvZXhjaCIsICAgICAgICAgICB7TlVMTH0sIDM2NjcsICJ1ZHAifSwKK3siZGVsbC1ybS1wb3J0IiwgICAgICAge05VTEx9LCAzNjY4LCAidGNwIn0sCit7ImRlbGwtcm0tcG9ydCIsICAgICAgIHtOVUxMfSwgMzY2OCwgInVkcCJ9LAoreyJjYXNhbnN3bWdtdCIsICAgICAgICB7TlVMTH0sIDM2NjksICJ0Y3AifSwKK3siY2FzYW5zd21nbXQiLCAgICAgICAge05VTEx9LCAzNjY5LCAidWRwIn0sCit7InNtaWxlIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzY3MCwgInRjcCJ9LAoreyJzbWlsZSIsICAgICAgICAgICAgICB7TlVMTH0sIDM2NzAsICJ1ZHAifSwKK3siZWZjcCIsICAgICAgICAgICAgICAge05VTEx9LCAzNjcxLCAidGNwIn0sCit7ImVmY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzY3MSwgInVkcCJ9LAoreyJsaXNwd29ya3Mtb3JiIiwgICAgICB7TlVMTH0sIDM2NzIsICJ0Y3AifSwKK3sibGlzcHdvcmtzLW9yYiIsICAgICAge05VTEx9LCAzNjcyLCAidWRwIn0sCit7Im1lZGlhdmF1bHQtZ3VpIiwgICAgIHtOVUxMfSwgMzY3MywgInRjcCJ9LAoreyJtZWRpYXZhdWx0LWd1aSIsICAgICB7TlVMTH0sIDM2NzMsICJ1ZHAifSwKK3sid2luaW5zdGFsbC1pcGMiLCAgICAge05VTEx9LCAzNjc0LCAidGNwIn0sCit7Indpbmluc3RhbGwtaXBjIiwgICAgIHtOVUxMfSwgMzY3NCwgInVkcCJ9LAoreyJjYWxsdHJheCIsICAgICAgICAgICB7TlVMTH0sIDM2NzUsICJ0Y3AifSwKK3siY2FsbHRyYXgiLCAgICAgICAgICAge05VTEx9LCAzNjc1LCAidWRwIn0sCit7InZhLXBhY2Jhc2UiLCAgICAgICAgIHtOVUxMfSwgMzY3NiwgInRjcCJ9LAoreyJ2YS1wYWNiYXNlIiwgICAgICAgICB7TlVMTH0sIDM2NzYsICJ1ZHAifSwKK3sicm92ZXJsb2ciLCAgICAgICAgICAge05VTEx9LCAzNjc3LCAidGNwIn0sCit7InJvdmVybG9nIiwgICAgICAgICAgIHtOVUxMfSwgMzY3NywgInVkcCJ9LAoreyJpcHItZGdsdCIsICAgICAgICAgICB7TlVMTH0sIDM2NzgsICJ0Y3AifSwKK3siaXByLWRnbHQiLCAgICAgICAgICAge05VTEx9LCAzNjc4LCAidWRwIn0sCit7Im5ld3Rvbi1kb2NrIiwgICAgICAgIHtOVUxMfSwgMzY3OSwgInRjcCJ9LAoreyJuZXd0b24tZG9jayIsICAgICAgICB7TlVMTH0sIDM2NzksICJ1ZHAifSwKK3sibnBkcy10cmFja2VyIiwgICAgICAge05VTEx9LCAzNjgwLCAidGNwIn0sCit7Im5wZHMtdHJhY2tlciIsICAgICAgIHtOVUxMfSwgMzY4MCwgInVkcCJ9LAoreyJidHMteDczIiwgICAgICAgICAgICB7TlVMTH0sIDM2ODEsICJ0Y3AifSwKK3siYnRzLXg3MyIsICAgICAgICAgICAge05VTEx9LCAzNjgxLCAidWRwIn0sCit7ImNhcy1tYXBpIiwgICAgICAgICAgIHtOVUxMfSwgMzY4MiwgInRjcCJ9LAoreyJjYXMtbWFwaSIsICAgICAgICAgICB7TlVMTH0sIDM2ODIsICJ1ZHAifSwKK3siYm1jLWVhIiwgICAgICAgICAgICAge05VTEx9LCAzNjgzLCAidGNwIn0sCit7ImJtYy1lYSIsICAgICAgICAgICAgIHtOVUxMfSwgMzY4MywgInVkcCJ9LAoreyJmYXhzdGZ4LXBvcnQiLCAgICAgICB7TlVMTH0sIDM2ODQsICJ0Y3AifSwKK3siZmF4c3RmeC1wb3J0IiwgICAgICAge05VTEx9LCAzNjg0LCAidWRwIn0sCit7ImRzeC1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgMzY4NSwgInRjcCJ9LAoreyJkc3gtYWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDM2ODUsICJ1ZHAifSwKK3sidG5tcHYyIiwgICAgICAgICAgICAge05VTEx9LCAzNjg2LCAidGNwIn0sCit7InRubXB2MiIsICAgICAgICAgICAgIHtOVUxMfSwgMzY4NiwgInVkcCJ9LAoreyJzaW1wbGUtcHVzaCIsICAgICAgICB7TlVMTH0sIDM2ODcsICJ0Y3AifSwKK3sic2ltcGxlLXB1c2giLCAgICAgICAge05VTEx9LCAzNjg3LCAidWRwIn0sCit7InNpbXBsZS1wdXNoLXMiLCAgICAgIHtOVUxMfSwgMzY4OCwgInRjcCJ9LAoreyJzaW1wbGUtcHVzaC1zIiwgICAgICB7TlVMTH0sIDM2ODgsICJ1ZHAifSwKK3siZGFhcCIsICAgICAgICAgICAgICAge05VTEx9LCAzNjg5LCAidGNwIn0sCit7ImRhYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzY4OSwgInVkcCJ9LAoreyJzdm4iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM2OTAsICJ0Y3AifSwKK3sic3ZuIiwgICAgICAgICAgICAgICAge05VTEx9LCAzNjkwLCAidWRwIn0sCit7Im1hZ2F5YS1uZXR3b3JrIiwgICAgIHtOVUxMfSwgMzY5MSwgInRjcCJ9LAoreyJtYWdheWEtbmV0d29yayIsICAgICB7TlVMTH0sIDM2OTEsICJ1ZHAifSwKK3siaW50ZWxzeW5jIiwgICAgICAgICAge05VTEx9LCAzNjkyLCAidGNwIn0sCit7ImludGVsc3luYyIsICAgICAgICAgIHtOVUxMfSwgMzY5MiwgInVkcCJ9LAoreyJibWMtZGF0YS1jb2xsIiwgICAgICB7TlVMTH0sIDM2OTUsICJ0Y3AifSwKK3siYm1jLWRhdGEtY29sbCIsICAgICAge05VTEx9LCAzNjk1LCAidWRwIn0sCit7InRlbG5ldGNwY2QiLCAgICAgICAgIHtOVUxMfSwgMzY5NiwgInRjcCJ9LAoreyJ0ZWxuZXRjcGNkIiwgICAgICAgICB7TlVMTH0sIDM2OTYsICJ1ZHAifSwKK3sibnctbGljZW5zZSIsICAgICAgICAge05VTEx9LCAzNjk3LCAidGNwIn0sCit7Im53LWxpY2Vuc2UiLCAgICAgICAgIHtOVUxMfSwgMzY5NywgInVkcCJ9LAoreyJzYWdlY3RscGFuZWwiLCAgICAgICB7TlVMTH0sIDM2OTgsICJ0Y3AifSwKK3sic2FnZWN0bHBhbmVsIiwgICAgICAge05VTEx9LCAzNjk4LCAidWRwIn0sCit7Imtwbi1pY3ciLCAgICAgICAgICAgIHtOVUxMfSwgMzY5OSwgInRjcCJ9LAoreyJrcG4taWN3IiwgICAgICAgICAgICB7TlVMTH0sIDM2OTksICJ1ZHAifSwKK3sibHJzLXBhZ2luZyIsICAgICAgICAge05VTEx9LCAzNzAwLCAidGNwIn0sCit7Imxycy1wYWdpbmciLCAgICAgICAgIHtOVUxMfSwgMzcwMCwgInVkcCJ9LAoreyJuZXRjZWxlcmEiLCAgICAgICAgICB7TlVMTH0sIDM3MDEsICJ0Y3AifSwKK3sibmV0Y2VsZXJhIiwgICAgICAgICAge05VTEx9LCAzNzAxLCAidWRwIn0sCit7IndzLWRpc2NvdmVyeSIsICAgICAgIHtOVUxMfSwgMzcwMiwgInRjcCJ9LAoreyJ3cy1kaXNjb3ZlcnkiLCAgICAgICB7TlVMTH0sIDM3MDIsICJ1ZHAifSwKK3siYWRvYmVzZXJ2ZXItMyIsICAgICAge05VTEx9LCAzNzAzLCAidGNwIn0sCit7ImFkb2Jlc2VydmVyLTMiLCAgICAgIHtOVUxMfSwgMzcwMywgInVkcCJ9LAoreyJhZG9iZXNlcnZlci00IiwgICAgICB7TlVMTH0sIDM3MDQsICJ0Y3AifSwKK3siYWRvYmVzZXJ2ZXItNCIsICAgICAge05VTEx9LCAzNzA0LCAidWRwIn0sCit7ImFkb2Jlc2VydmVyLTUiLCAgICAgIHtOVUxMfSwgMzcwNSwgInRjcCJ9LAoreyJhZG9iZXNlcnZlci01IiwgICAgICB7TlVMTH0sIDM3MDUsICJ1ZHAifSwKK3sicnQtZXZlbnQiLCAgICAgICAgICAge05VTEx9LCAzNzA2LCAidGNwIn0sCit7InJ0LWV2ZW50IiwgICAgICAgICAgIHtOVUxMfSwgMzcwNiwgInVkcCJ9LAoreyJydC1ldmVudC1zIiwgICAgICAgICB7TlVMTH0sIDM3MDcsICJ0Y3AifSwKK3sicnQtZXZlbnQtcyIsICAgICAgICAge05VTEx9LCAzNzA3LCAidWRwIn0sCit7InN1bi1hcy1paW9wcyIsICAgICAgIHtOVUxMfSwgMzcwOCwgInRjcCJ9LAoreyJzdW4tYXMtaWlvcHMiLCAgICAgICB7TlVMTH0sIDM3MDgsICJ1ZHAifSwKK3siY2EtaWRtcyIsICAgICAgICAgICAge05VTEx9LCAzNzA5LCAidGNwIn0sCit7ImNhLWlkbXMiLCAgICAgICAgICAgIHtOVUxMfSwgMzcwOSwgInVkcCJ9LAoreyJwb3J0Z2F0ZS1hdXRoIiwgICAgICB7TlVMTH0sIDM3MTAsICJ0Y3AifSwKK3sicG9ydGdhdGUtYXV0aCIsICAgICAge05VTEx9LCAzNzEwLCAidWRwIn0sCit7ImVkYi1zZXJ2ZXIyIiwgICAgICAgIHtOVUxMfSwgMzcxMSwgInRjcCJ9LAoreyJlZGItc2VydmVyMiIsICAgICAgICB7TlVMTH0sIDM3MTEsICJ1ZHAifSwKK3sic2VudGluZWwtZW50IiwgICAgICAge05VTEx9LCAzNzEyLCAidGNwIn0sCit7InNlbnRpbmVsLWVudCIsICAgICAgIHtOVUxMfSwgMzcxMiwgInVkcCJ9LAoreyJ0ZnRwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM3MTMsICJ0Y3AifSwKK3sidGZ0cHMiLCAgICAgICAgICAgICAge05VTEx9LCAzNzEzLCAidWRwIn0sCit7ImRlbG9zLWRtcyIsICAgICAgICAgIHtOVUxMfSwgMzcxNCwgInRjcCJ9LAoreyJkZWxvcy1kbXMiLCAgICAgICAgICB7TlVMTH0sIDM3MTQsICJ1ZHAifSwKK3siYW5vdG8tcmVuZGV6diIsICAgICAge05VTEx9LCAzNzE1LCAidGNwIn0sCit7ImFub3RvLXJlbmRlenYiLCAgICAgIHtOVUxMfSwgMzcxNSwgInVkcCJ9LAoreyJ3di1jc3Atc21zLWNpciIsICAgICB7TlVMTH0sIDM3MTYsICJ0Y3AifSwKK3sid3YtY3NwLXNtcy1jaXIiLCAgICAge05VTEx9LCAzNzE2LCAidWRwIn0sCit7Ind2LWNzcC11ZHAtY2lyIiwgICAgIHtOVUxMfSwgMzcxNywgInRjcCJ9LAoreyJ3di1jc3AtdWRwLWNpciIsICAgICB7TlVMTH0sIDM3MTcsICJ1ZHAifSwKK3sib3B1cy1zZXJ2aWNlcyIsICAgICAge05VTEx9LCAzNzE4LCAidGNwIn0sCit7Im9wdXMtc2VydmljZXMiLCAgICAgIHtOVUxMfSwgMzcxOCwgInVkcCJ9LAoreyJpdGVsc2VydmVycG9ydCIsICAgICB7TlVMTH0sIDM3MTksICJ0Y3AifSwKK3siaXRlbHNlcnZlcnBvcnQiLCAgICAge05VTEx9LCAzNzE5LCAidWRwIn0sCit7InVmYXN0cm8taW5zdHIiLCAgICAgIHtOVUxMfSwgMzcyMCwgInRjcCJ9LAoreyJ1ZmFzdHJvLWluc3RyIiwgICAgICB7TlVMTH0sIDM3MjAsICJ1ZHAifSwKK3sieHN5bmMiLCAgICAgICAgICAgICAge05VTEx9LCAzNzIxLCAidGNwIn0sCit7InhzeW5jIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzcyMSwgInVkcCJ9LAoreyJ4c2VydmVyYWlkIiwgICAgICAgICB7TlVMTH0sIDM3MjIsICJ0Y3AifSwKK3sieHNlcnZlcmFpZCIsICAgICAgICAge05VTEx9LCAzNzIyLCAidWRwIn0sCit7InN5Y2hyb25kIiwgICAgICAgICAgIHtOVUxMfSwgMzcyMywgInRjcCJ9LAoreyJzeWNocm9uZCIsICAgICAgICAgICB7TlVMTH0sIDM3MjMsICJ1ZHAifSwKK3siYmxpendvdyIsICAgICAgICAgICAge05VTEx9LCAzNzI0LCAidGNwIn0sCit7ImJsaXp3b3ciLCAgICAgICAgICAgIHtOVUxMfSwgMzcyNCwgInVkcCJ9LAoreyJuYS1lci10aXAiLCAgICAgICAgICB7TlVMTH0sIDM3MjUsICJ0Y3AifSwKK3sibmEtZXItdGlwIiwgICAgICAgICAge05VTEx9LCAzNzI1LCAidWRwIn0sCit7ImFycmF5LW1hbmFnZXIiLCAgICAgIHtOVUxMfSwgMzcyNiwgInRjcCJ9LAoreyJhcnJheS1tYW5hZ2VyIiwgICAgICB7TlVMTH0sIDM3MjYsICJ1ZHAifSwKK3siZS1tZHUiLCAgICAgICAgICAgICAge05VTEx9LCAzNzI3LCAidGNwIn0sCit7ImUtbWR1IiwgICAgICAgICAgICAgIHtOVUxMfSwgMzcyNywgInVkcCJ9LAoreyJlLXdvYSIsICAgICAgICAgICAgICB7TlVMTH0sIDM3MjgsICJ0Y3AifSwKK3siZS13b2EiLCAgICAgICAgICAgICAge05VTEx9LCAzNzI4LCAidWRwIn0sCit7ImZrc3AtYXVkaXQiLCAgICAgICAgIHtOVUxMfSwgMzcyOSwgInRjcCJ9LAoreyJma3NwLWF1ZGl0IiwgICAgICAgICB7TlVMTH0sIDM3MjksICJ1ZHAifSwKK3siY2xpZW50LWN0cmwiLCAgICAgICAge05VTEx9LCAzNzMwLCAidGNwIn0sCit7ImNsaWVudC1jdHJsIiwgICAgICAgIHtOVUxMfSwgMzczMCwgInVkcCJ9LAoreyJzbWFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM3MzEsICJ0Y3AifSwKK3sic21hcCIsICAgICAgICAgICAgICAge05VTEx9LCAzNzMxLCAidWRwIn0sCit7Im0td25uIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzczMiwgInRjcCJ9LAoreyJtLXdubiIsICAgICAgICAgICAgICB7TlVMTH0sIDM3MzIsICJ1ZHAifSwKK3sibXVsdGlwLW1zZyIsICAgICAgICAge05VTEx9LCAzNzMzLCAidGNwIn0sCit7Im11bHRpcC1tc2ciLCAgICAgICAgIHtOVUxMfSwgMzczMywgInVkcCJ9LAoreyJzeW5lbC1kYXRhIiwgICAgICAgICB7TlVMTH0sIDM3MzQsICJ0Y3AifSwKK3sic3luZWwtZGF0YSIsICAgICAgICAge05VTEx9LCAzNzM0LCAidWRwIn0sCit7InB3ZGlzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzczNSwgInRjcCJ9LAoreyJwd2RpcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM3MzUsICJ1ZHAifSwKK3sicnMtcm1pIiwgICAgICAgICAgICAge05VTEx9LCAzNzM2LCAidGNwIn0sCit7InJzLXJtaSIsICAgICAgICAgICAgIHtOVUxMfSwgMzczNiwgInVkcCJ9LAoreyJ4cGFuZWwiLCAgICAgICAgICAgICB7TlVMTH0sIDM3MzcsICJ0Y3AifSwKK3sidmVyc2F0YWxrIiwgICAgICAgICAge05VTEx9LCAzNzM4LCAidGNwIn0sCit7InZlcnNhdGFsayIsICAgICAgICAgIHtOVUxMfSwgMzczOCwgInVkcCJ9LAoreyJsYXVuY2hiaXJkLWxtIiwgICAgICB7TlVMTH0sIDM3MzksICJ0Y3AifSwKK3sibGF1bmNoYmlyZC1sbSIsICAgICAge05VTEx9LCAzNzM5LCAidWRwIn0sCit7ImhlYXJ0YmVhdCIsICAgICAgICAgIHtOVUxMfSwgMzc0MCwgInRjcCJ9LAoreyJoZWFydGJlYXQiLCAgICAgICAgICB7TlVMTH0sIDM3NDAsICJ1ZHAifSwKK3sid3lzZG1hIiwgICAgICAgICAgICAge05VTEx9LCAzNzQxLCAidGNwIn0sCit7Ind5c2RtYSIsICAgICAgICAgICAgIHtOVUxMfSwgMzc0MSwgInVkcCJ9LAoreyJjc3QtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM3NDIsICJ0Y3AifSwKK3siY3N0LXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNzQyLCAidWRwIn0sCit7ImlwY3MtY29tbWFuZCIsICAgICAgIHtOVUxMfSwgMzc0MywgInRjcCJ9LAoreyJpcGNzLWNvbW1hbmQiLCAgICAgICB7TlVMTH0sIDM3NDMsICJ1ZHAifSwKK3sic2FzZyIsICAgICAgICAgICAgICAge05VTEx9LCAzNzQ0LCAidGNwIn0sCit7InNhc2ciLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzc0NCwgInVkcCJ9LAoreyJndy1jYWxsLXBvcnQiLCAgICAgICB7TlVMTH0sIDM3NDUsICJ0Y3AifSwKK3siZ3ctY2FsbC1wb3J0IiwgICAgICAge05VTEx9LCAzNzQ1LCAidWRwIn0sCit7Imxpbmt0ZXN0IiwgICAgICAgICAgIHtOVUxMfSwgMzc0NiwgInRjcCJ9LAoreyJsaW5rdGVzdCIsICAgICAgICAgICB7TlVMTH0sIDM3NDYsICJ1ZHAifSwKK3sibGlua3Rlc3QtcyIsICAgICAgICAge05VTEx9LCAzNzQ3LCAidGNwIn0sCit7Imxpbmt0ZXN0LXMiLCAgICAgICAgIHtOVUxMfSwgMzc0NywgInVkcCJ9LAoreyJ3ZWJkYXRhIiwgICAgICAgICAgICB7TlVMTH0sIDM3NDgsICJ0Y3AifSwKK3sid2ViZGF0YSIsICAgICAgICAgICAge05VTEx9LCAzNzQ4LCAidWRwIn0sCit7ImNpbXRyYWsiLCAgICAgICAgICAgIHtOVUxMfSwgMzc0OSwgInRjcCJ9LAoreyJjaW10cmFrIiwgICAgICAgICAgICB7TlVMTH0sIDM3NDksICJ1ZHAifSwKK3siY2Jvcy1pcC1wb3J0IiwgICAgICAge05VTEx9LCAzNzUwLCAidGNwIn0sCit7ImNib3MtaXAtcG9ydCIsICAgICAgIHtOVUxMfSwgMzc1MCwgInVkcCJ9LAoreyJncHJzLWN1YmUiLCAgICAgICAgICB7TlVMTH0sIDM3NTEsICJ0Y3AifSwKK3siZ3Bycy1jdWJlIiwgICAgICAgICAge05VTEx9LCAzNzUxLCAidWRwIn0sCit7InZpcHJlbW90ZWFnZW50IiwgICAgIHtOVUxMfSwgMzc1MiwgInRjcCJ9LAoreyJ2aXByZW1vdGVhZ2VudCIsICAgICB7TlVMTH0sIDM3NTIsICJ1ZHAifSwKK3sibmF0dHlzZXJ2ZXIiLCAgICAgICAge05VTEx9LCAzNzUzLCAidGNwIn0sCit7Im5hdHR5c2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzc1MywgInVkcCJ9LAoreyJ0aW1lc3RlbmJyb2tlciIsICAgICB7TlVMTH0sIDM3NTQsICJ0Y3AifSwKK3sidGltZXN0ZW5icm9rZXIiLCAgICAge05VTEx9LCAzNzU0LCAidWRwIn0sCit7InNhcy1yZW1vdGUtaGxwIiwgICAgIHtOVUxMfSwgMzc1NSwgInRjcCJ9LAoreyJzYXMtcmVtb3RlLWhscCIsICAgICB7TlVMTH0sIDM3NTUsICJ1ZHAifSwKK3siY2Fub24tY2FwdCIsICAgICAgICAge05VTEx9LCAzNzU2LCAidGNwIn0sCit7ImNhbm9uLWNhcHQiLCAgICAgICAgIHtOVUxMfSwgMzc1NiwgInVkcCJ9LAoreyJncmYtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDM3NTcsICJ0Y3AifSwKK3siZ3JmLXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzNzU3LCAidWRwIn0sCit7ImFwdy1yZWdpc3RyeSIsICAgICAgIHtOVUxMfSwgMzc1OCwgInRjcCJ9LAoreyJhcHctcmVnaXN0cnkiLCAgICAgICB7TlVMTH0sIDM3NTgsICJ1ZHAifSwKK3siZXhhcHQtbG1nciIsICAgICAgICAge05VTEx9LCAzNzU5LCAidGNwIn0sCit7ImV4YXB0LWxtZ3IiLCAgICAgICAgIHtOVUxMfSwgMzc1OSwgInVkcCJ9LAoreyJhZHRlbXB1c2NsaWVudCIsICAgICB7TlVMTH0sIDM3NjAsICJ0Y3AifSwKK3siYWR0ZW1wdXNjbGllbnQiLCAgICAge05VTEx9LCAzNzYwLCAidWRwIn0sCit7ImdzYWttcCIsICAgICAgICAgICAgIHtOVUxMfSwgMzc2MSwgInRjcCJ9LAoreyJnc2FrbXAiLCAgICAgICAgICAgICB7TlVMTH0sIDM3NjEsICJ1ZHAifSwKK3siZ2JzLXNtcCIsICAgICAgICAgICAge05VTEx9LCAzNzYyLCAidGNwIn0sCit7Imdicy1zbXAiLCAgICAgICAgICAgIHtOVUxMfSwgMzc2MiwgInVkcCJ9LAoreyJ4by13YXZlIiwgICAgICAgICAgICB7TlVMTH0sIDM3NjMsICJ0Y3AifSwKK3sieG8td2F2ZSIsICAgICAgICAgICAge05VTEx9LCAzNzYzLCAidWRwIn0sCit7Im1uaS1wcm90LXJvdXQiLCAgICAgIHtOVUxMfSwgMzc2NCwgInRjcCJ9LAoreyJtbmktcHJvdC1yb3V0IiwgICAgICB7TlVMTH0sIDM3NjQsICJ1ZHAifSwKK3sicnRyYWNlcm91dGUiLCAgICAgICAge05VTEx9LCAzNzY1LCAidGNwIn0sCit7InJ0cmFjZXJvdXRlIiwgICAgICAgIHtOVUxMfSwgMzc2NSwgInVkcCJ9LAoreyJsaXN0bWdyLXBvcnQiLCAgICAgICB7TlVMTH0sIDM3NjcsICJ0Y3AifSwKK3sibGlzdG1nci1wb3J0IiwgICAgICAge05VTEx9LCAzNzY3LCAidWRwIn0sCit7InJibGNoZWNrZCIsICAgICAgICAgIHtOVUxMfSwgMzc2OCwgInRjcCJ9LAoreyJyYmxjaGVja2QiLCAgICAgICAgICB7TlVMTH0sIDM3NjgsICJ1ZHAifSwKK3siaGFpcGUtb3RuayIsICAgICAgICAge05VTEx9LCAzNzY5LCAidGNwIn0sCit7ImhhaXBlLW90bmsiLCAgICAgICAgIHtOVUxMfSwgMzc2OSwgInVkcCJ9LAoreyJjaW5keWNvbGxhYiIsICAgICAgICB7TlVMTH0sIDM3NzAsICJ0Y3AifSwKK3siY2luZHljb2xsYWIiLCAgICAgICAge05VTEx9LCAzNzcwLCAidWRwIn0sCit7InBhZ2luZy1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzc3MSwgInRjcCJ9LAoreyJwYWdpbmctcG9ydCIsICAgICAgICB7TlVMTH0sIDM3NzEsICJ1ZHAifSwKK3siY3RwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzNzcyLCAidGNwIn0sCit7ImN0cCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzc3MiwgInVkcCJ9LAoreyJjdGRoZXJjdWxlcyIsICAgICAgICB7TlVMTH0sIDM3NzMsICJ0Y3AifSwKK3siY3RkaGVyY3VsZXMiLCAgICAgICAge05VTEx9LCAzNzczLCAidWRwIn0sCit7InppY29tIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzc3NCwgInRjcCJ9LAoreyJ6aWNvbSIsICAgICAgICAgICAgICB7TlVMTH0sIDM3NzQsICJ1ZHAifSwKK3siaXNwbW1nciIsICAgICAgICAgICAge05VTEx9LCAzNzc1LCAidGNwIn0sCit7ImlzcG1tZ3IiLCAgICAgICAgICAgIHtOVUxMfSwgMzc3NSwgInVkcCJ9LAoreyJkdmNwcm92LXBvcnQiLCAgICAgICB7TlVMTH0sIDM3NzYsICJ0Y3AifSwKK3siZHZjcHJvdi1wb3J0IiwgICAgICAge05VTEx9LCAzNzc2LCAidWRwIn0sCit7ImppYmUtZWIiLCAgICAgICAgICAgIHtOVUxMfSwgMzc3NywgInRjcCJ9LAoreyJqaWJlLWViIiwgICAgICAgICAgICB7TlVMTH0sIDM3NzcsICJ1ZHAifSwKK3siYy1oLWl0LXBvcnQiLCAgICAgICAge05VTEx9LCAzNzc4LCAidGNwIn0sCit7ImMtaC1pdC1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzc3OCwgInVkcCJ9LAoreyJjb2duaW1hIiwgICAgICAgICAgICB7TlVMTH0sIDM3NzksICJ0Y3AifSwKK3siY29nbmltYSIsICAgICAgICAgICAge05VTEx9LCAzNzc5LCAidWRwIn0sCit7Im5ucCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzc4MCwgInRjcCJ9LAoreyJubnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM3ODAsICJ1ZHAifSwKK3siYWJjdm9pY2UtcG9ydCIsICAgICAge05VTEx9LCAzNzgxLCAidGNwIn0sCit7ImFiY3ZvaWNlLXBvcnQiLCAgICAgIHtOVUxMfSwgMzc4MSwgInVkcCJ9LAoreyJpc28tdHAwcyIsICAgICAgICAgICB7TlVMTH0sIDM3ODIsICJ0Y3AifSwKK3siaXNvLXRwMHMiLCAgICAgICAgICAge05VTEx9LCAzNzgyLCAidWRwIn0sCit7ImJpbS1wZW0iLCAgICAgICAgICAgIHtOVUxMfSwgMzc4MywgInRjcCJ9LAoreyJiaW0tcGVtIiwgICAgICAgICAgICB7TlVMTH0sIDM3ODMsICJ1ZHAifSwKK3siYmZkLWNvbnRyb2wiLCAgICAgICAge05VTEx9LCAzNzg0LCAidGNwIn0sCit7ImJmZC1jb250cm9sIiwgICAgICAgIHtOVUxMfSwgMzc4NCwgInVkcCJ9LAoreyJiZmQtZWNobyIsICAgICAgICAgICB7TlVMTH0sIDM3ODUsICJ0Y3AifSwKK3siYmZkLWVjaG8iLCAgICAgICAgICAge05VTEx9LCAzNzg1LCAidWRwIn0sCit7InVwc3RyaWdnZXJ2c3ciLCAgICAgIHtOVUxMfSwgMzc4NiwgInRjcCJ9LAoreyJ1cHN0cmlnZ2VydnN3IiwgICAgICB7TlVMTH0sIDM3ODYsICJ1ZHAifSwKK3siZmludHJ4IiwgICAgICAgICAgICAge05VTEx9LCAzNzg3LCAidGNwIn0sCit7ImZpbnRyeCIsICAgICAgICAgICAgIHtOVUxMfSwgMzc4NywgInVkcCJ9LAoreyJpc3JwLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM3ODgsICJ0Y3AifSwKK3siaXNycC1wb3J0IiwgICAgICAgICAge05VTEx9LCAzNzg4LCAidWRwIn0sCit7InJlbW90ZWRlcGxveSIsICAgICAgIHtOVUxMfSwgMzc4OSwgInRjcCJ9LAoreyJyZW1vdGVkZXBsb3kiLCAgICAgICB7TlVMTH0sIDM3ODksICJ1ZHAifSwKK3sicXVpY2tib29rc3JkcyIsICAgICAge05VTEx9LCAzNzkwLCAidGNwIn0sCit7InF1aWNrYm9va3NyZHMiLCAgICAgIHtOVUxMfSwgMzc5MCwgInVkcCJ9LAoreyJ0dm5ldHdvcmt2aWRlbyIsICAgICB7TlVMTH0sIDM3OTEsICJ0Y3AifSwKK3sidHZuZXR3b3JrdmlkZW8iLCAgICAge05VTEx9LCAzNzkxLCAidWRwIn0sCit7InNpdGV3YXRjaCIsICAgICAgICAgIHtOVUxMfSwgMzc5MiwgInRjcCJ9LAoreyJzaXRld2F0Y2giLCAgICAgICAgICB7TlVMTH0sIDM3OTIsICJ1ZHAifSwKK3siZGNzb2Z0d2FyZSIsICAgICAgICAge05VTEx9LCAzNzkzLCAidGNwIn0sCit7ImRjc29mdHdhcmUiLCAgICAgICAgIHtOVUxMfSwgMzc5MywgInVkcCJ9LAoreyJqYXVzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM3OTQsICJ0Y3AifSwKK3siamF1cyIsICAgICAgICAgICAgICAge05VTEx9LCAzNzk0LCAidWRwIn0sCit7Im15Ymxhc3QiLCAgICAgICAgICAgIHtOVUxMfSwgMzc5NSwgInRjcCJ9LAoreyJteWJsYXN0IiwgICAgICAgICAgICB7TlVMTH0sIDM3OTUsICJ1ZHAifSwKK3sic3B3LWRpYWxlciIsICAgICAgICAge05VTEx9LCAzNzk2LCAidGNwIn0sCit7InNwdy1kaWFsZXIiLCAgICAgICAgIHtOVUxMfSwgMzc5NiwgInVkcCJ9LAoreyJpZHBzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM3OTcsICJ0Y3AifSwKK3siaWRwcyIsICAgICAgICAgICAgICAge05VTEx9LCAzNzk3LCAidWRwIn0sCit7Im1pbmlsb2NrIiwgICAgICAgICAgIHtOVUxMfSwgMzc5OCwgInRjcCJ9LAoreyJtaW5pbG9jayIsICAgICAgICAgICB7TlVMTH0sIDM3OTgsICJ1ZHAifSwKK3sicmFkaXVzLWR5bmF1dGgiLCAgICAge05VTEx9LCAzNzk5LCAidGNwIn0sCit7InJhZGl1cy1keW5hdXRoIiwgICAgIHtOVUxMfSwgMzc5OSwgInVkcCJ9LAoreyJwd2dwc2kiLCAgICAgICAgICAgICB7TlVMTH0sIDM4MDAsICJ0Y3AifSwKK3sicHdncHNpIiwgICAgICAgICAgICAge05VTEx9LCAzODAwLCAidWRwIn0sCit7ImlibS1tZ3IiLCAgICAgICAgICAgIHtOVUxMfSwgMzgwMSwgInRjcCJ9LAoreyJpYm0tbWdyIiwgICAgICAgICAgICB7TlVMTH0sIDM4MDEsICJ1ZHAifSwKK3sidmhkIiwgICAgICAgICAgICAgICAge05VTEx9LCAzODAyLCAidGNwIn0sCit7InZoZCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzgwMiwgInVkcCJ9LAoreyJzb25pcXN5bmMiLCAgICAgICAgICB7TlVMTH0sIDM4MDMsICJ0Y3AifSwKK3sic29uaXFzeW5jIiwgICAgICAgICAge05VTEx9LCAzODAzLCAidWRwIn0sCit7ImlxbmV0LXBvcnQiLCAgICAgICAgIHtOVUxMfSwgMzgwNCwgInRjcCJ9LAoreyJpcW5ldC1wb3J0IiwgICAgICAgICB7TlVMTH0sIDM4MDQsICJ1ZHAifSwKK3sidGNwZGF0YXNlcnZlciIsICAgICAge05VTEx9LCAzODA1LCAidGNwIn0sCit7InRjcGRhdGFzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMzgwNSwgInVkcCJ9LAoreyJ3c21sYiIsICAgICAgICAgICAgICB7TlVMTH0sIDM4MDYsICJ0Y3AifSwKK3sid3NtbGIiLCAgICAgICAgICAgICAge05VTEx9LCAzODA2LCAidWRwIn0sCit7InNwdWduYSIsICAgICAgICAgICAgIHtOVUxMfSwgMzgwNywgInRjcCJ9LAoreyJzcHVnbmEiLCAgICAgICAgICAgICB7TlVMTH0sIDM4MDcsICJ1ZHAifSwKK3sic3VuLWFzLWlpb3BzLWNhIiwgICAge05VTEx9LCAzODA4LCAidGNwIn0sCit7InN1bi1hcy1paW9wcy1jYSIsICAgIHtOVUxMfSwgMzgwOCwgInVkcCJ9LAoreyJhcG9jZCIsICAgICAgICAgICAgICB7TlVMTH0sIDM4MDksICJ0Y3AifSwKK3siYXBvY2QiLCAgICAgICAgICAgICAge05VTEx9LCAzODA5LCAidWRwIn0sCit7IndsYW5hdXRoIiwgICAgICAgICAgIHtOVUxMfSwgMzgxMCwgInRjcCJ9LAoreyJ3bGFuYXV0aCIsICAgICAgICAgICB7TlVMTH0sIDM4MTAsICJ1ZHAifSwKK3siYW1wIiwgICAgICAgICAgICAgICAge05VTEx9LCAzODExLCAidGNwIn0sCit7ImFtcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzgxMSwgInVkcCJ9LAoreyJuZXRvLXdvbC1zZXJ2ZXIiLCAgICB7TlVMTH0sIDM4MTIsICJ0Y3AifSwKK3sibmV0by13b2wtc2VydmVyIiwgICAge05VTEx9LCAzODEyLCAidWRwIn0sCit7InJhcC1pcCIsICAgICAgICAgICAgIHtOVUxMfSwgMzgxMywgInRjcCJ9LAoreyJyYXAtaXAiLCAgICAgICAgICAgICB7TlVMTH0sIDM4MTMsICJ1ZHAifSwKK3sibmV0by1kY3MiLCAgICAgICAgICAge05VTEx9LCAzODE0LCAidGNwIn0sCit7Im5ldG8tZGNzIiwgICAgICAgICAgIHtOVUxMfSwgMzgxNCwgInVkcCJ9LAoreyJsYW5zdXJ2ZXlvcnhtbCIsICAgICB7TlVMTH0sIDM4MTUsICJ0Y3AifSwKK3sibGFuc3VydmV5b3J4bWwiLCAgICAge05VTEx9LCAzODE1LCAidWRwIn0sCit7InN1bmxwcy1odHRwIiwgICAgICAgIHtOVUxMfSwgMzgxNiwgInRjcCJ9LAoreyJzdW5scHMtaHR0cCIsICAgICAgICB7TlVMTH0sIDM4MTYsICJ1ZHAifSwKK3sidGFwZXdhcmUiLCAgICAgICAgICAge05VTEx9LCAzODE3LCAidGNwIn0sCit7InRhcGV3YXJlIiwgICAgICAgICAgIHtOVUxMfSwgMzgxNywgInVkcCJ9LAoreyJjcmluaXMtaGIiLCAgICAgICAgICB7TlVMTH0sIDM4MTgsICJ0Y3AifSwKK3siY3JpbmlzLWhiIiwgICAgICAgICAge05VTEx9LCAzODE4LCAidWRwIn0sCit7ImVwbC1zbHAiLCAgICAgICAgICAgIHtOVUxMfSwgMzgxOSwgInRjcCJ9LAoreyJlcGwtc2xwIiwgICAgICAgICAgICB7TlVMTH0sIDM4MTksICJ1ZHAifSwKK3sic2NwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzODIwLCAidGNwIn0sCit7InNjcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzgyMCwgInVkcCJ9LAoreyJwbWNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM4MjEsICJ0Y3AifSwKK3sicG1jcCIsICAgICAgICAgICAgICAge05VTEx9LCAzODIxLCAidWRwIn0sCit7ImFjcC1kaXNjb3ZlcnkiLCAgICAgIHtOVUxMfSwgMzgyMiwgInRjcCJ9LAoreyJhY3AtZGlzY292ZXJ5IiwgICAgICB7TlVMTH0sIDM4MjIsICJ1ZHAifSwKK3siYWNwLWNvbmR1aXQiLCAgICAgICAge05VTEx9LCAzODIzLCAidGNwIn0sCit7ImFjcC1jb25kdWl0IiwgICAgICAgIHtOVUxMfSwgMzgyMywgInVkcCJ9LAoreyJhY3AtcG9saWN5IiwgICAgICAgICB7TlVMTH0sIDM4MjQsICJ0Y3AifSwKK3siYWNwLXBvbGljeSIsICAgICAgICAge05VTEx9LCAzODI0LCAidWRwIn0sCit7ImZmc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMzgyNSwgInRjcCJ9LAoreyJmZnNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDM4MjUsICJ1ZHAifSwKK3sid29ybXV4IiwgICAgICAgICAgICAge05VTEx9LCAzODI2LCAidGNwIn0sCit7Indvcm11eCIsICAgICAgICAgICAgIHtOVUxMfSwgMzgyNiwgInVkcCJ9LAoreyJuZXRtcGkiLCAgICAgICAgICAgICB7TlVMTH0sIDM4MjcsICJ0Y3AifSwKK3sibmV0bXBpIiwgICAgICAgICAgICAge05VTEx9LCAzODI3LCAidWRwIn0sCit7Im5ldGVoIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzgyOCwgInRjcCJ9LAoreyJuZXRlaCIsICAgICAgICAgICAgICB7TlVMTH0sIDM4MjgsICJ1ZHAifSwKK3sibmV0ZWgtZXh0IiwgICAgICAgICAge05VTEx9LCAzODI5LCAidGNwIn0sCit7Im5ldGVoLWV4dCIsICAgICAgICAgIHtOVUxMfSwgMzgyOSwgInVkcCJ9LAoreyJjZXJuc3lzbWdtdGFndCIsICAgICB7TlVMTH0sIDM4MzAsICJ0Y3AifSwKK3siY2VybnN5c21nbXRhZ3QiLCAgICAge05VTEx9LCAzODMwLCAidWRwIn0sCit7ImR2YXBwcyIsICAgICAgICAgICAgIHtOVUxMfSwgMzgzMSwgInRjcCJ9LAoreyJkdmFwcHMiLCAgICAgICAgICAgICB7TlVMTH0sIDM4MzEsICJ1ZHAifSwKK3sieHhuZXRzZXJ2ZXIiLCAgICAgICAge05VTEx9LCAzODMyLCAidGNwIn0sCit7Inh4bmV0c2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzgzMiwgInVkcCJ9LAoreyJhaXBuLWF1dGgiLCAgICAgICAgICB7TlVMTH0sIDM4MzMsICJ0Y3AifSwKK3siYWlwbi1hdXRoIiwgICAgICAgICAge05VTEx9LCAzODMzLCAidWRwIn0sCit7InNwZWN0YXJkYXRhIiwgICAgICAgIHtOVUxMfSwgMzgzNCwgInRjcCJ9LAoreyJzcGVjdGFyZGF0YSIsICAgICAgICB7TlVMTH0sIDM4MzQsICJ1ZHAifSwKK3sic3BlY3RhcmRiIiwgICAgICAgICAge05VTEx9LCAzODM1LCAidGNwIn0sCit7InNwZWN0YXJkYiIsICAgICAgICAgIHtOVUxMfSwgMzgzNSwgInVkcCJ9LAoreyJtYXJrZW0tZGNwIiwgICAgICAgICB7TlVMTH0sIDM4MzYsICJ0Y3AifSwKK3sibWFya2VtLWRjcCIsICAgICAgICAge05VTEx9LCAzODM2LCAidWRwIn0sCit7Im1rbS1kaXNjb3ZlcnkiLCAgICAgIHtOVUxMfSwgMzgzNywgInRjcCJ9LAoreyJta20tZGlzY292ZXJ5IiwgICAgICB7TlVMTH0sIDM4MzcsICJ1ZHAifSwKK3sic29zIiwgICAgICAgICAgICAgICAge05VTEx9LCAzODM4LCAidGNwIn0sCit7InNvcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzgzOCwgInVkcCJ9LAoreyJhbXgtcm1zIiwgICAgICAgICAgICB7TlVMTH0sIDM4MzksICJ0Y3AifSwKK3siYW14LXJtcyIsICAgICAgICAgICAge05VTEx9LCAzODM5LCAidWRwIn0sCit7ImZsaXJ0bWl0bWlyIiwgICAgICAgIHtOVUxMfSwgMzg0MCwgInRjcCJ9LAoreyJmbGlydG1pdG1pciIsICAgICAgICB7TlVMTH0sIDM4NDAsICJ1ZHAifSwKK3siemZpcm0tc2hpcHJ1c2gzIiwgICAge05VTEx9LCAzODQxLCAidGNwIn0sCit7InpmaXJtLXNoaXBydXNoMyIsICAgIHtOVUxMfSwgMzg0MSwgInVkcCJ9LAoreyJuaGNpIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM4NDIsICJ0Y3AifSwKK3sibmhjaSIsICAgICAgICAgICAgICAge05VTEx9LCAzODQyLCAidWRwIn0sCit7InF1ZXN0LWFnZW50IiwgICAgICAgIHtOVUxMfSwgMzg0MywgInRjcCJ9LAoreyJxdWVzdC1hZ2VudCIsICAgICAgICB7TlVMTH0sIDM4NDMsICJ1ZHAifSwKK3sicm5tIiwgICAgICAgICAgICAgICAge05VTEx9LCAzODQ0LCAidGNwIn0sCit7InJubSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzg0NCwgInVkcCJ9LAoreyJ2LW9uZS1zcHAiLCAgICAgICAgICB7TlVMTH0sIDM4NDUsICJ0Y3AifSwKK3sidi1vbmUtc3BwIiwgICAgICAgICAge05VTEx9LCAzODQ1LCAidWRwIn0sCit7ImFuLXBjcCIsICAgICAgICAgICAgIHtOVUxMfSwgMzg0NiwgInRjcCJ9LAoreyJhbi1wY3AiLCAgICAgICAgICAgICB7TlVMTH0sIDM4NDYsICJ1ZHAifSwKK3sibXNmdy1jb250cm9sIiwgICAgICAge05VTEx9LCAzODQ3LCAidGNwIn0sCit7Im1zZnctY29udHJvbCIsICAgICAgIHtOVUxMfSwgMzg0NywgInVkcCJ9LAoreyJpdGVtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM4NDgsICJ0Y3AifSwKK3siaXRlbSIsICAgICAgICAgICAgICAge05VTEx9LCAzODQ4LCAidWRwIn0sCit7InNwdy1kbnNwcmVsb2FkIiwgICAgIHtOVUxMfSwgMzg0OSwgInRjcCJ9LAoreyJzcHctZG5zcHJlbG9hZCIsICAgICB7TlVMTH0sIDM4NDksICJ1ZHAifSwKK3sicXRtcy1ib290c3RyYXAiLCAgICAge05VTEx9LCAzODUwLCAidGNwIn0sCit7InF0bXMtYm9vdHN0cmFwIiwgICAgIHtOVUxMfSwgMzg1MCwgInVkcCJ9LAoreyJzcGVjdHJhcG9ydCIsICAgICAgICB7TlVMTH0sIDM4NTEsICJ0Y3AifSwKK3sic3BlY3RyYXBvcnQiLCAgICAgICAge05VTEx9LCAzODUxLCAidWRwIn0sCit7InNzZS1hcHAtY29uZmlnIiwgICAgIHtOVUxMfSwgMzg1MiwgInRjcCJ9LAoreyJzc2UtYXBwLWNvbmZpZyIsICAgICB7TlVMTH0sIDM4NTIsICJ1ZHAifSwKK3sic3NjYW4iLCAgICAgICAgICAgICAge05VTEx9LCAzODUzLCAidGNwIn0sCit7InNzY2FuIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzg1MywgInVkcCJ9LAoreyJzdHJ5a2VyLWNvbSIsICAgICAgICB7TlVMTH0sIDM4NTQsICJ0Y3AifSwKK3sic3RyeWtlci1jb20iLCAgICAgICAge05VTEx9LCAzODU0LCAidWRwIn0sCit7Im9wZW50cmFjIiwgICAgICAgICAgIHtOVUxMfSwgMzg1NSwgInRjcCJ9LAoreyJvcGVudHJhYyIsICAgICAgICAgICB7TlVMTH0sIDM4NTUsICJ1ZHAifSwKK3siaW5mb3JtZXIiLCAgICAgICAgICAge05VTEx9LCAzODU2LCAidGNwIn0sCit7ImluZm9ybWVyIiwgICAgICAgICAgIHtOVUxMfSwgMzg1NiwgInVkcCJ9LAoreyJ0cmFwLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDM4NTcsICJ0Y3AifSwKK3sidHJhcC1wb3J0IiwgICAgICAgICAge05VTEx9LCAzODU3LCAidWRwIn0sCit7InRyYXAtcG9ydC1tb20iLCAgICAgIHtOVUxMfSwgMzg1OCwgInRjcCJ9LAoreyJ0cmFwLXBvcnQtbW9tIiwgICAgICB7TlVMTH0sIDM4NTgsICJ1ZHAifSwKK3sibmF2LXBvcnQiLCAgICAgICAgICAge05VTEx9LCAzODU5LCAidGNwIn0sCit7Im5hdi1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgMzg1OSwgInVkcCJ9LAoreyJzYXNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM4NjAsICJ0Y3AifSwKK3sic2FzcCIsICAgICAgICAgICAgICAge05VTEx9LCAzODYwLCAidWRwIn0sCit7IndpbnNoYWRvdy1oZCIsICAgICAgIHtOVUxMfSwgMzg2MSwgInRjcCJ9LAoreyJ3aW5zaGFkb3ctaGQiLCAgICAgICB7TlVMTH0sIDM4NjEsICJ1ZHAifSwKK3siZ2lnYS1wb2NrZXQiLCAgICAgICAge05VTEx9LCAzODYyLCAidGNwIn0sCit7ImdpZ2EtcG9ja2V0IiwgICAgICAgIHtOVUxMfSwgMzg2MiwgInVkcCJ9LAoreyJhc2FwLXRjcCIsICAgICAgICAgICB7TlVMTH0sIDM4NjMsICJ0Y3AifSwKK3siYXNhcC11ZHAiLCAgICAgICAgICAge05VTEx9LCAzODYzLCAidWRwIn0sCit7ImFzYXAtc2N0cCIsICAgICAgICAgIHtOVUxMfSwgMzg2MywgInNjdHAifSwKK3siYXNhcC10Y3AtdGxzIiwgICAgICAge05VTEx9LCAzODY0LCAidGNwIn0sCit7ImFzYXAtc2N0cC10bHMiLCAgICAgIHtOVUxMfSwgMzg2NCwgInNjdHAifSwKK3sieHBsIiwgICAgICAgICAgICAgICAge05VTEx9LCAzODY1LCAidGNwIn0sCit7InhwbCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzg2NSwgInVkcCJ9LAoreyJkemRhZW1vbiIsICAgICAgICAgICB7TlVMTH0sIDM4NjYsICJ0Y3AifSwKK3siZHpkYWVtb24iLCAgICAgICAgICAge05VTEx9LCAzODY2LCAidWRwIn0sCit7ImR6b2dsc2VydmVyIiwgICAgICAgIHtOVUxMfSwgMzg2NywgInRjcCJ9LAoreyJkem9nbHNlcnZlciIsICAgICAgICB7TlVMTH0sIDM4NjcsICJ1ZHAifSwKK3siZGlhbWV0ZXIiLCAgICAgICAgICAge05VTEx9LCAzODY4LCAidGNwIn0sCit7ImRpYW1ldGVyIiwgICAgICAgICAgIHtOVUxMfSwgMzg2OCwgInNjdHAifSwKK3sib3ZzYW0tbWdtdCIsICAgICAgICAge05VTEx9LCAzODY5LCAidGNwIn0sCit7Im92c2FtLW1nbXQiLCAgICAgICAgIHtOVUxMfSwgMzg2OSwgInVkcCJ9LAoreyJvdnNhbS1kLWFnZW50IiwgICAgICB7TlVMTH0sIDM4NzAsICJ0Y3AifSwKK3sib3ZzYW0tZC1hZ2VudCIsICAgICAge05VTEx9LCAzODcwLCAidWRwIn0sCit7ImF2b2NlbnQtYWRzYXAiLCAgICAgIHtOVUxMfSwgMzg3MSwgInRjcCJ9LAoreyJhdm9jZW50LWFkc2FwIiwgICAgICB7TlVMTH0sIDM4NzEsICJ1ZHAifSwKK3sib2VtLWFnZW50IiwgICAgICAgICAge05VTEx9LCAzODcyLCAidGNwIn0sCit7Im9lbS1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgMzg3MiwgInVkcCJ9LAoreyJmYWdvcmRuYyIsICAgICAgICAgICB7TlVMTH0sIDM4NzMsICJ0Y3AifSwKK3siZmFnb3JkbmMiLCAgICAgICAgICAge05VTEx9LCAzODczLCAidWRwIn0sCit7InNpeHhzY29uZmlnIiwgICAgICAgIHtOVUxMfSwgMzg3NCwgInRjcCJ9LAoreyJzaXh4c2NvbmZpZyIsICAgICAgICB7TlVMTH0sIDM4NzQsICJ1ZHAifSwKK3sicG5ic2NhZGEiLCAgICAgICAgICAge05VTEx9LCAzODc1LCAidGNwIn0sCit7InBuYnNjYWRhIiwgICAgICAgICAgIHtOVUxMfSwgMzg3NSwgInVkcCJ9LAoreyJkbF9hZ2VudCIsICAgICAgICAgICB7TlVMTH0sIDM4NzYsICJ0Y3AifSwKK3siZGxfYWdlbnQiLCAgICAgICAgICAge05VTEx9LCAzODc2LCAidWRwIn0sCit7InhtcGNyLWludGVyZmFjZSIsICAgIHtOVUxMfSwgMzg3NywgInRjcCJ9LAoreyJ4bXBjci1pbnRlcmZhY2UiLCAgICB7TlVMTH0sIDM4NzcsICJ1ZHAifSwKK3siZm90b2djYWQiLCAgICAgICAgICAge05VTEx9LCAzODc4LCAidGNwIn0sCit7ImZvdG9nY2FkIiwgICAgICAgICAgIHtOVUxMfSwgMzg3OCwgInVkcCJ9LAoreyJhcHBzcy1sbSIsICAgICAgICAgICB7TlVMTH0sIDM4NzksICJ0Y3AifSwKK3siYXBwc3MtbG0iLCAgICAgICAgICAge05VTEx9LCAzODc5LCAidWRwIn0sCit7ImlncnMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg4MCwgInRjcCJ9LAoreyJpZ3JzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM4ODAsICJ1ZHAifSwKK3siaWRhYyIsICAgICAgICAgICAgICAge05VTEx9LCAzODgxLCAidGNwIn0sCit7ImlkYWMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg4MSwgInVkcCJ9LAoreyJtc2R0czEiLCAgICAgICAgICAgICB7TlVMTH0sIDM4ODIsICJ0Y3AifSwKK3sibXNkdHMxIiwgICAgICAgICAgICAge05VTEx9LCAzODgyLCAidWRwIn0sCit7InZycG4iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzg4MywgInRjcCJ9LAoreyJ2cnBuIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM4ODMsICJ1ZHAifSwKK3sic29mdHJhY2stbWV0ZXIiLCAgICAge05VTEx9LCAzODg0LCAidGNwIn0sCit7InNvZnRyYWNrLW1ldGVyIiwgICAgIHtOVUxMfSwgMzg4NCwgInVkcCJ9LAoreyJ0b3BmbG93LXNzbCIsICAgICAgICB7TlVMTH0sIDM4ODUsICJ0Y3AifSwKK3sidG9wZmxvdy1zc2wiLCAgICAgICAge05VTEx9LCAzODg1LCAidWRwIn0sCit7Im5laS1tYW5hZ2VtZW50IiwgICAgIHtOVUxMfSwgMzg4NiwgInRjcCJ9LAoreyJuZWktbWFuYWdlbWVudCIsICAgICB7TlVMTH0sIDM4ODYsICJ1ZHAifSwKK3siY2lwaGlyZS1kYXRhIiwgICAgICAge05VTEx9LCAzODg3LCAidGNwIn0sCit7ImNpcGhpcmUtZGF0YSIsICAgICAgIHtOVUxMfSwgMzg4NywgInVkcCJ9LAoreyJjaXBoaXJlLXNlcnYiLCAgICAgICB7TlVMTH0sIDM4ODgsICJ0Y3AifSwKK3siY2lwaGlyZS1zZXJ2IiwgICAgICAge05VTEx9LCAzODg4LCAidWRwIn0sCit7ImRhbmR2LXRlc3RlciIsICAgICAgIHtOVUxMfSwgMzg4OSwgInRjcCJ9LAoreyJkYW5kdi10ZXN0ZXIiLCAgICAgICB7TlVMTH0sIDM4ODksICJ1ZHAifSwKK3sibmRzY29ubmVjdCIsICAgICAgICAge05VTEx9LCAzODkwLCAidGNwIn0sCit7Im5kc2Nvbm5lY3QiLCAgICAgICAgIHtOVUxMfSwgMzg5MCwgInVkcCJ9LAoreyJydGMtcG0tcG9ydCIsICAgICAgICB7TlVMTH0sIDM4OTEsICJ0Y3AifSwKK3sicnRjLXBtLXBvcnQiLCAgICAgICAge05VTEx9LCAzODkxLCAidWRwIn0sCit7InBjYy1pbWFnZS1wb3J0IiwgICAgIHtOVUxMfSwgMzg5MiwgInRjcCJ9LAoreyJwY2MtaW1hZ2UtcG9ydCIsICAgICB7TlVMTH0sIDM4OTIsICJ1ZHAifSwKK3siY2dpLXN0YXJhcGkiLCAgICAgICAge05VTEx9LCAzODkzLCAidGNwIn0sCit7ImNnaS1zdGFyYXBpIiwgICAgICAgIHtOVUxMfSwgMzg5MywgInVkcCJ9LAoreyJzeWFtLWFnZW50IiwgICAgICAgICB7TlVMTH0sIDM4OTQsICJ0Y3AifSwKK3sic3lhbS1hZ2VudCIsICAgICAgICAge05VTEx9LCAzODk0LCAidWRwIn0sCit7InN5YW0tc21jIiwgICAgICAgICAgIHtOVUxMfSwgMzg5NSwgInRjcCJ9LAoreyJzeWFtLXNtYyIsICAgICAgICAgICB7TlVMTH0sIDM4OTUsICJ1ZHAifSwKK3sic2RvLXRscyIsICAgICAgICAgICAge05VTEx9LCAzODk2LCAidGNwIn0sCit7InNkby10bHMiLCAgICAgICAgICAgIHtOVUxMfSwgMzg5NiwgInVkcCJ9LAoreyJzZG8tc3NoIiwgICAgICAgICAgICB7TlVMTH0sIDM4OTcsICJ0Y3AifSwKK3sic2RvLXNzaCIsICAgICAgICAgICAge05VTEx9LCAzODk3LCAidWRwIn0sCit7InNlbmlwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzg5OCwgInRjcCJ9LAoreyJzZW5pcCIsICAgICAgICAgICAgICB7TlVMTH0sIDM4OTgsICJ1ZHAifSwKK3siaXR2LWNvbnRyb2wiLCAgICAgICAge05VTEx9LCAzODk5LCAidGNwIn0sCit7Iml0di1jb250cm9sIiwgICAgICAgIHtOVUxMfSwgMzg5OSwgInVkcCJ9LAoreyJ1ZHRfb3MiLCAgICAgICAgICAgICB7TlVMTH0sIDM5MDAsICJ0Y3AifSwKK3sidWR0X29zIiwgICAgICAgICAgICAge05VTEx9LCAzOTAwLCAidWRwIn0sCit7Im5pbXNoIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzkwMSwgInRjcCJ9LAoreyJuaW1zaCIsICAgICAgICAgICAgICB7TlVMTH0sIDM5MDEsICJ1ZHAifSwKK3sibmltYXV4IiwgICAgICAgICAgICAge05VTEx9LCAzOTAyLCAidGNwIn0sCit7Im5pbWF1eCIsICAgICAgICAgICAgIHtOVUxMfSwgMzkwMiwgInVkcCJ9LAoreyJjaGFyc2V0bWdyIiwgICAgICAgICB7TlVMTH0sIDM5MDMsICJ0Y3AifSwKK3siY2hhcnNldG1nciIsICAgICAgICAge05VTEx9LCAzOTAzLCAidWRwIn0sCit7Im9tbmlsaW5rLXBvcnQiLCAgICAgIHtOVUxMfSwgMzkwNCwgInRjcCJ9LAoreyJvbW5pbGluay1wb3J0IiwgICAgICB7TlVMTH0sIDM5MDQsICJ1ZHAifSwKK3sibXVwZGF0ZSIsICAgICAgICAgICAge05VTEx9LCAzOTA1LCAidGNwIn0sCit7Im11cGRhdGUiLCAgICAgICAgICAgIHtOVUxMfSwgMzkwNSwgInVkcCJ9LAoreyJ0b3BvdmlzdGEtZGF0YSIsICAgICB7TlVMTH0sIDM5MDYsICJ0Y3AifSwKK3sidG9wb3Zpc3RhLWRhdGEiLCAgICAge05VTEx9LCAzOTA2LCAidWRwIn0sCit7Imltb2d1aWEtcG9ydCIsICAgICAgIHtOVUxMfSwgMzkwNywgInRjcCJ9LAoreyJpbW9ndWlhLXBvcnQiLCAgICAgICB7TlVMTH0sIDM5MDcsICJ1ZHAifSwKK3siaHBwcm9uZXRtYW4iLCAgICAgICAge05VTEx9LCAzOTA4LCAidGNwIn0sCit7ImhwcHJvbmV0bWFuIiwgICAgICAgIHtOVUxMfSwgMzkwOCwgInVkcCJ9LAoreyJzdXJmY29udHJvbGNwYSIsICAgICB7TlVMTH0sIDM5MDksICJ0Y3AifSwKK3sic3VyZmNvbnRyb2xjcGEiLCAgICAge05VTEx9LCAzOTA5LCAidWRwIn0sCit7InBybnJlcXVlc3QiLCAgICAgICAgIHtOVUxMfSwgMzkxMCwgInRjcCJ9LAoreyJwcm5yZXF1ZXN0IiwgICAgICAgICB7TlVMTH0sIDM5MTAsICJ1ZHAifSwKK3sicHJuc3RhdHVzIiwgICAgICAgICAge05VTEx9LCAzOTExLCAidGNwIn0sCit7InBybnN0YXR1cyIsICAgICAgICAgIHtOVUxMfSwgMzkxMSwgInVkcCJ9LAoreyJnYm10LXN0YXJzIiwgICAgICAgICB7TlVMTH0sIDM5MTIsICJ0Y3AifSwKK3siZ2JtdC1zdGFycyIsICAgICAgICAge05VTEx9LCAzOTEyLCAidWRwIn0sCit7Imxpc3RjcnQtcG9ydCIsICAgICAgIHtOVUxMfSwgMzkxMywgInRjcCJ9LAoreyJsaXN0Y3J0LXBvcnQiLCAgICAgICB7TlVMTH0sIDM5MTMsICJ1ZHAifSwKK3sibGlzdGNydC1wb3J0LTIiLCAgICAge05VTEx9LCAzOTE0LCAidGNwIn0sCit7Imxpc3RjcnQtcG9ydC0yIiwgICAgIHtOVUxMfSwgMzkxNCwgInVkcCJ9LAoreyJhZ2NhdCIsICAgICAgICAgICAgICB7TlVMTH0sIDM5MTUsICJ0Y3AifSwKK3siYWdjYXQiLCAgICAgICAgICAgICAge05VTEx9LCAzOTE1LCAidWRwIn0sCit7Ind5c2RtYyIsICAgICAgICAgICAgIHtOVUxMfSwgMzkxNiwgInRjcCJ9LAoreyJ3eXNkbWMiLCAgICAgICAgICAgICB7TlVMTH0sIDM5MTYsICJ1ZHAifSwKK3siYWZ0bXV4IiwgICAgICAgICAgICAge05VTEx9LCAzOTE3LCAidGNwIn0sCit7ImFmdG11eCIsICAgICAgICAgICAgIHtOVUxMfSwgMzkxNywgInVkcCJ9LAoreyJwa3RjYWJsZW1tY29wcyIsICAgICB7TlVMTH0sIDM5MTgsICJ0Y3AifSwKK3sicGt0Y2FibGVtbWNvcHMiLCAgICAge05VTEx9LCAzOTE4LCAidWRwIn0sCit7Imh5cGVyaXAiLCAgICAgICAgICAgIHtOVUxMfSwgMzkxOSwgInRjcCJ9LAoreyJoeXBlcmlwIiwgICAgICAgICAgICB7TlVMTH0sIDM5MTksICJ1ZHAifSwKK3siZXhhc29mdHBvcnQxIiwgICAgICAge05VTEx9LCAzOTIwLCAidGNwIn0sCit7ImV4YXNvZnRwb3J0MSIsICAgICAgIHtOVUxMfSwgMzkyMCwgInVkcCJ9LAoreyJoZXJvZG90dXMtbmV0IiwgICAgICB7TlVMTH0sIDM5MjEsICJ0Y3AifSwKK3siaGVyb2RvdHVzLW5ldCIsICAgICAge05VTEx9LCAzOTIxLCAidWRwIn0sCit7InNvci11cGRhdGUiLCAgICAgICAgIHtOVUxMfSwgMzkyMiwgInRjcCJ9LAoreyJzb3ItdXBkYXRlIiwgICAgICAgICB7TlVMTH0sIDM5MjIsICJ1ZHAifSwKK3sic3ltYi1zYi1wb3J0IiwgICAgICAge05VTEx9LCAzOTIzLCAidGNwIn0sCit7InN5bWItc2ItcG9ydCIsICAgICAgIHtOVUxMfSwgMzkyMywgInVkcCJ9LAoreyJtcGwtZ3Bycy1wb3J0IiwgICAgICB7TlVMTH0sIDM5MjQsICJ0Y3AifSwKK3sibXBsLWdwcnMtcG9ydCIsICAgICAge05VTEx9LCAzOTI0LCAidWRwIn0sCit7InptcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzkyNSwgInRjcCJ9LAoreyJ6bXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM5MjUsICJ1ZHAifSwKK3sid2lucG9ydCIsICAgICAgICAgICAge05VTEx9LCAzOTI2LCAidGNwIn0sCit7IndpbnBvcnQiLCAgICAgICAgICAgIHtOVUxMfSwgMzkyNiwgInVkcCJ9LAoreyJuYXRkYXRhc2VydmljZSIsICAgICB7TlVMTH0sIDM5MjcsICJ0Y3AifSwKK3sibmF0ZGF0YXNlcnZpY2UiLCAgICAge05VTEx9LCAzOTI3LCAidWRwIn0sCit7Im5ldGJvb3QtcHhlIiwgICAgICAgIHtOVUxMfSwgMzkyOCwgInRjcCJ9LAoreyJuZXRib290LXB4ZSIsICAgICAgICB7TlVMTH0sIDM5MjgsICJ1ZHAifSwKK3sic21hdXRoLXBvcnQiLCAgICAgICAge05VTEx9LCAzOTI5LCAidGNwIn0sCit7InNtYXV0aC1wb3J0IiwgICAgICAgIHtOVUxMfSwgMzkyOSwgInVkcCJ9LAoreyJzeWFtLXdlYnNlcnZlciIsICAgICB7TlVMTH0sIDM5MzAsICJ0Y3AifSwKK3sic3lhbS13ZWJzZXJ2ZXIiLCAgICAge05VTEx9LCAzOTMwLCAidWRwIn0sCit7Im1zci1wbHVnaW4tcG9ydCIsICAgIHtOVUxMfSwgMzkzMSwgInRjcCJ9LAoreyJtc3ItcGx1Z2luLXBvcnQiLCAgICB7TlVMTH0sIDM5MzEsICJ1ZHAifSwKK3siZHluLXNpdGUiLCAgICAgICAgICAge05VTEx9LCAzOTMyLCAidGNwIn0sCit7ImR5bi1zaXRlIiwgICAgICAgICAgIHtOVUxMfSwgMzkzMiwgInVkcCJ9LAoreyJwbGJzZXJ2ZS1wb3J0IiwgICAgICB7TlVMTH0sIDM5MzMsICJ0Y3AifSwKK3sicGxic2VydmUtcG9ydCIsICAgICAge05VTEx9LCAzOTMzLCAidWRwIn0sCit7InN1bmZtLXBvcnQiLCAgICAgICAgIHtOVUxMfSwgMzkzNCwgInRjcCJ9LAoreyJzdW5mbS1wb3J0IiwgICAgICAgICB7TlVMTH0sIDM5MzQsICJ1ZHAifSwKK3sic2RwLXBvcnRtYXBwZXIiLCAgICAge05VTEx9LCAzOTM1LCAidGNwIn0sCit7InNkcC1wb3J0bWFwcGVyIiwgICAgIHtOVUxMfSwgMzkzNSwgInVkcCJ9LAoreyJtYWlscHJveCIsICAgICAgICAgICB7TlVMTH0sIDM5MzYsICJ0Y3AifSwKK3sibWFpbHByb3giLCAgICAgICAgICAge05VTEx9LCAzOTM2LCAidWRwIn0sCit7ImR2YnNlcnZkc2MiLCAgICAgICAgIHtOVUxMfSwgMzkzNywgInRjcCJ9LAoreyJkdmJzZXJ2ZHNjIiwgICAgICAgICB7TlVMTH0sIDM5MzcsICJ1ZHAifSwKK3siZGJjb250cm9sX2FnZW50IiwgICAge05VTEx9LCAzOTM4LCAidGNwIn0sCit7ImRiY29udHJvbF9hZ2VudCIsICAgIHtOVUxMfSwgMzkzOCwgInVkcCJ9LAoreyJhYW1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM5MzksICJ0Y3AifSwKK3siYWFtcCIsICAgICAgICAgICAgICAge05VTEx9LCAzOTM5LCAidWRwIn0sCit7InhlY3Atbm9kZSIsICAgICAgICAgIHtOVUxMfSwgMzk0MCwgInRjcCJ9LAoreyJ4ZWNwLW5vZGUiLCAgICAgICAgICB7TlVMTH0sIDM5NDAsICJ1ZHAifSwKK3siaG9tZXBvcnRhbC13ZWIiLCAgICAge05VTEx9LCAzOTQxLCAidGNwIn0sCit7ImhvbWVwb3J0YWwtd2ViIiwgICAgIHtOVUxMfSwgMzk0MSwgInVkcCJ9LAoreyJzcmRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM5NDIsICJ0Y3AifSwKK3sic3JkcCIsICAgICAgICAgICAgICAge05VTEx9LCAzOTQyLCAidWRwIn0sCit7InRpZyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzk0MywgInRjcCJ9LAoreyJ0aWciLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM5NDMsICJ1ZHAifSwKK3sic29wcyIsICAgICAgICAgICAgICAge05VTEx9LCAzOTQ0LCAidGNwIn0sCit7InNvcHMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzk0NCwgInVkcCJ9LAoreyJlbWNhZHMiLCAgICAgICAgICAgICB7TlVMTH0sIDM5NDUsICJ0Y3AifSwKK3siZW1jYWRzIiwgICAgICAgICAgICAge05VTEx9LCAzOTQ1LCAidWRwIn0sCit7ImJhY2t1cGVkZ2UiLCAgICAgICAgIHtOVUxMfSwgMzk0NiwgInRjcCJ9LAoreyJiYWNrdXBlZGdlIiwgICAgICAgICB7TlVMTH0sIDM5NDYsICJ1ZHAifSwKK3siY2NwIiwgICAgICAgICAgICAgICAge05VTEx9LCAzOTQ3LCAidGNwIn0sCit7ImNjcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzk0NywgInVkcCJ9LAoreyJhcGRhcCIsICAgICAgICAgICAgICB7TlVMTH0sIDM5NDgsICJ0Y3AifSwKK3siYXBkYXAiLCAgICAgICAgICAgICAge05VTEx9LCAzOTQ4LCAidWRwIn0sCit7ImRyaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzk0OSwgInRjcCJ9LAoreyJkcmlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM5NDksICJ1ZHAifSwKK3sibmFtZW11bmdlIiwgICAgICAgICAge05VTEx9LCAzOTUwLCAidGNwIn0sCit7Im5hbWVtdW5nZSIsICAgICAgICAgIHtOVUxMfSwgMzk1MCwgInVkcCJ9LAoreyJwd2dpcHBmYXgiLCAgICAgICAgICB7TlVMTH0sIDM5NTEsICJ0Y3AifSwKK3sicHdnaXBwZmF4IiwgICAgICAgICAge05VTEx9LCAzOTUxLCAidWRwIn0sCit7ImkzLXNlc3Npb25tZ3IiLCAgICAgIHtOVUxMfSwgMzk1MiwgInRjcCJ9LAoreyJpMy1zZXNzaW9ubWdyIiwgICAgICB7TlVMTH0sIDM5NTIsICJ1ZHAifSwKK3sieG1saW5rLWNvbm5lY3QiLCAgICAge05VTEx9LCAzOTUzLCAidGNwIn0sCit7InhtbGluay1jb25uZWN0IiwgICAgIHtOVUxMfSwgMzk1MywgInVkcCJ9LAoreyJhZHJlcCIsICAgICAgICAgICAgICB7TlVMTH0sIDM5NTQsICJ0Y3AifSwKK3siYWRyZXAiLCAgICAgICAgICAgICAge05VTEx9LCAzOTU0LCAidWRwIn0sCit7InAycGNvbW11bml0eSIsICAgICAgIHtOVUxMfSwgMzk1NSwgInRjcCJ9LAoreyJwMnBjb21tdW5pdHkiLCAgICAgICB7TlVMTH0sIDM5NTUsICJ1ZHAifSwKK3siZ3ZjcCIsICAgICAgICAgICAgICAge05VTEx9LCAzOTU2LCAidGNwIn0sCit7Imd2Y3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzk1NiwgInVkcCJ9LAoreyJtcWUtYnJva2VyIiwgICAgICAgICB7TlVMTH0sIDM5NTcsICJ0Y3AifSwKK3sibXFlLWJyb2tlciIsICAgICAgICAge05VTEx9LCAzOTU3LCAidWRwIn0sCit7Im1xZS1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgMzk1OCwgInRjcCJ9LAoreyJtcWUtYWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDM5NTgsICJ1ZHAifSwKK3sidHJlZWhvcHBlciIsICAgICAgICAge05VTEx9LCAzOTU5LCAidGNwIn0sCit7InRyZWVob3BwZXIiLCAgICAgICAgIHtOVUxMfSwgMzk1OSwgInVkcCJ9LAoreyJiZXNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM5NjAsICJ0Y3AifSwKK3siYmVzcyIsICAgICAgICAgICAgICAge05VTEx9LCAzOTYwLCAidWRwIn0sCit7InByb2F4ZXNzIiwgICAgICAgICAgIHtOVUxMfSwgMzk2MSwgInRjcCJ9LAoreyJwcm9heGVzcyIsICAgICAgICAgICB7TlVMTH0sIDM5NjEsICJ1ZHAifSwKK3sic2JpLWFnZW50IiwgICAgICAgICAge05VTEx9LCAzOTYyLCAidGNwIn0sCit7InNiaS1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgMzk2MiwgInVkcCJ9LAoreyJ0aHJwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDM5NjMsICJ0Y3AifSwKK3sidGhycCIsICAgICAgICAgICAgICAge05VTEx9LCAzOTYzLCAidWRwIn0sCit7InNhc2dncHJzIiwgICAgICAgICAgIHtOVUxMfSwgMzk2NCwgInRjcCJ9LAoreyJzYXNnZ3BycyIsICAgICAgICAgICB7TlVMTH0sIDM5NjQsICJ1ZHAifSwKK3siYXRpLWlwLXRvLW5jcGUiLCAgICAge05VTEx9LCAzOTY1LCAidGNwIn0sCit7ImF0aS1pcC10by1uY3BlIiwgICAgIHtOVUxMfSwgMzk2NSwgInVkcCJ9LAoreyJiZmxja21nciIsICAgICAgICAgICB7TlVMTH0sIDM5NjYsICJ0Y3AifSwKK3siYmZsY2ttZ3IiLCAgICAgICAgICAge05VTEx9LCAzOTY2LCAidWRwIn0sCit7InBwc21zIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzk2NywgInRjcCJ9LAoreyJwcHNtcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM5NjcsICJ1ZHAifSwKK3siaWFueXdoZXJlLWRibnMiLCAgICAge05VTEx9LCAzOTY4LCAidGNwIn0sCit7Imlhbnl3aGVyZS1kYm5zIiwgICAgIHtOVUxMfSwgMzk2OCwgInVkcCJ9LAoreyJsYW5kbWFya3MiLCAgICAgICAgICB7TlVMTH0sIDM5NjksICJ0Y3AifSwKK3sibGFuZG1hcmtzIiwgICAgICAgICAge05VTEx9LCAzOTY5LCAidWRwIn0sCit7ImxhbnJldmFnZW50IiwgICAgICAgIHtOVUxMfSwgMzk3MCwgInRjcCJ9LAoreyJsYW5yZXZhZ2VudCIsICAgICAgICB7TlVMTH0sIDM5NzAsICJ1ZHAifSwKK3sibGFucmV2c2VydmVyIiwgICAgICAge05VTEx9LCAzOTcxLCAidGNwIn0sCit7ImxhbnJldnNlcnZlciIsICAgICAgIHtOVUxMfSwgMzk3MSwgInVkcCJ9LAoreyJpY29ucCIsICAgICAgICAgICAgICB7TlVMTH0sIDM5NzIsICJ0Y3AifSwKK3siaWNvbnAiLCAgICAgICAgICAgICAge05VTEx9LCAzOTcyLCAidWRwIn0sCit7InByb2dpc3RpY3MiLCAgICAgICAgIHtOVUxMfSwgMzk3MywgInRjcCJ9LAoreyJwcm9naXN0aWNzIiwgICAgICAgICB7TlVMTH0sIDM5NzMsICJ1ZHAifSwKK3siY2l0eXNlYXJjaCIsICAgICAgICAge05VTEx9LCAzOTc0LCAidGNwIn0sCit7ImNpdHlzZWFyY2giLCAgICAgICAgIHtOVUxMfSwgMzk3NCwgInVkcCJ9LAoreyJhaXJzaG90IiwgICAgICAgICAgICB7TlVMTH0sIDM5NzUsICJ0Y3AifSwKK3siYWlyc2hvdCIsICAgICAgICAgICAge05VTEx9LCAzOTc1LCAidWRwIn0sCit7Im9wc3dhZ2VudCIsICAgICAgICAgIHtOVUxMfSwgMzk3NiwgInRjcCJ9LAoreyJvcHN3YWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDM5NzYsICJ1ZHAifSwKK3sib3Bzd21hbmFnZXIiLCAgICAgICAge05VTEx9LCAzOTc3LCAidGNwIn0sCit7Im9wc3dtYW5hZ2VyIiwgICAgICAgIHtOVUxMfSwgMzk3NywgInVkcCJ9LAoreyJzZWN1cmUtY2ZnLXN2ciIsICAgICB7TlVMTH0sIDM5NzgsICJ0Y3AifSwKK3sic2VjdXJlLWNmZy1zdnIiLCAgICAge05VTEx9LCAzOTc4LCAidWRwIn0sCit7InNtd2FuIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzk3OSwgInRjcCJ9LAoreyJzbXdhbiIsICAgICAgICAgICAgICB7TlVMTH0sIDM5NzksICJ1ZHAifSwKK3siYWNtcyIsICAgICAgICAgICAgICAge05VTEx9LCAzOTgwLCAidGNwIn0sCit7ImFjbXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzk4MCwgInVkcCJ9LAoreyJzdGFyZmlzaCIsICAgICAgICAgICB7TlVMTH0sIDM5ODEsICJ0Y3AifSwKK3sic3RhcmZpc2giLCAgICAgICAgICAge05VTEx9LCAzOTgxLCAidWRwIn0sCit7ImVpcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzk4MiwgInRjcCJ9LAoreyJlaXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM5ODIsICJ1ZHAifSwKK3siZWlzcCIsICAgICAgICAgICAgICAge05VTEx9LCAzOTgzLCAidGNwIn0sCit7ImVpc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzk4MywgInVkcCJ9LAoreyJtYXBwZXItbm9kZW1nciIsICAgICB7TlVMTH0sIDM5ODQsICJ0Y3AifSwKK3sibWFwcGVyLW5vZGVtZ3IiLCAgICAge05VTEx9LCAzOTg0LCAidWRwIn0sCit7Im1hcHBlci1tYXBldGhkIiwgICAgIHtOVUxMfSwgMzk4NSwgInRjcCJ9LAoreyJtYXBwZXItbWFwZXRoZCIsICAgICB7TlVMTH0sIDM5ODUsICJ1ZHAifSwKK3sibWFwcGVyLXdzX2V0aGQiLCAgICAge05VTEx9LCAzOTg2LCAidGNwIn0sCit7Im1hcHBlci13c19ldGhkIiwgICAgIHtOVUxMfSwgMzk4NiwgInVkcCJ9LAoreyJjZW50ZXJsaW5lIiwgICAgICAgICB7TlVMTH0sIDM5ODcsICJ0Y3AifSwKK3siY2VudGVybGluZSIsICAgICAgICAge05VTEx9LCAzOTg3LCAidWRwIn0sCit7ImRjcy1jb25maWciLCAgICAgICAgIHtOVUxMfSwgMzk4OCwgInRjcCJ9LAoreyJkY3MtY29uZmlnIiwgICAgICAgICB7TlVMTH0sIDM5ODgsICJ1ZHAifSwKK3siYnYtcXVlcnllbmdpbmUiLCAgICAge05VTEx9LCAzOTg5LCAidGNwIn0sCit7ImJ2LXF1ZXJ5ZW5naW5lIiwgICAgIHtOVUxMfSwgMzk4OSwgInVkcCJ9LAoreyJidi1pcyIsICAgICAgICAgICAgICB7TlVMTH0sIDM5OTAsICJ0Y3AifSwKK3siYnYtaXMiLCAgICAgICAgICAgICAge05VTEx9LCAzOTkwLCAidWRwIn0sCit7ImJ2LXNtY3NydiIsICAgICAgICAgIHtOVUxMfSwgMzk5MSwgInRjcCJ9LAoreyJidi1zbWNzcnYiLCAgICAgICAgICB7TlVMTH0sIDM5OTEsICJ1ZHAifSwKK3siYnYtZHMiLCAgICAgICAgICAgICAge05VTEx9LCAzOTkyLCAidGNwIn0sCit7ImJ2LWRzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzk5MiwgInVkcCJ9LAoreyJidi1hZ2VudCIsICAgICAgICAgICB7TlVMTH0sIDM5OTMsICJ0Y3AifSwKK3siYnYtYWdlbnQiLCAgICAgICAgICAge05VTEx9LCAzOTkzLCAidWRwIn0sCit7Imlzcy1tZ210LXNzbCIsICAgICAgIHtOVUxMfSwgMzk5NSwgInRjcCJ9LAoreyJpc3MtbWdtdC1zc2wiLCAgICAgICB7TlVMTH0sIDM5OTUsICJ1ZHAifSwKK3siYWJjc29mdHdhcmUiLCAgICAgICAge05VTEx9LCAzOTk2LCAidGNwIn0sCit7ImFiY3NvZnR3YXJlIiwgICAgICAgIHtOVUxMfSwgMzk5NiwgInVkcCJ9LAoreyJhZ2VudHNlYXNlLWRiIiwgICAgICB7TlVMTH0sIDM5OTcsICJ0Y3AifSwKK3siYWdlbnRzZWFzZS1kYiIsICAgICAge05VTEx9LCAzOTk3LCAidWRwIn0sCit7ImRueCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMzk5OCwgInRjcCJ9LAoreyJkbngiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDM5OTgsICJ1ZHAifSwKK3sibnZjbmV0IiwgICAgICAgICAgICAge05VTEx9LCAzOTk5LCAidGNwIn0sCit7Im52Y25ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMzk5OSwgInVkcCJ9LAoreyJ0ZXJhYmFzZSIsICAgICAgICAgICB7TlVMTH0sIDQwMDAsICJ0Y3AifSwKK3sidGVyYWJhc2UiLCAgICAgICAgICAge05VTEx9LCA0MDAwLCAidWRwIn0sCit7Im5ld29hayIsICAgICAgICAgICAgIHtOVUxMfSwgNDAwMSwgInRjcCJ9LAoreyJuZXdvYWsiLCAgICAgICAgICAgICB7TlVMTH0sIDQwMDEsICJ1ZHAifSwKK3sicHhjLXNwdnItZnQiLCAgICAgICAge05VTEx9LCA0MDAyLCAidGNwIn0sCit7InB4Yy1zcHZyLWZ0IiwgICAgICAgIHtOVUxMfSwgNDAwMiwgInVkcCJ9LAoreyJweGMtc3Bsci1mdCIsICAgICAgICB7TlVMTH0sIDQwMDMsICJ0Y3AifSwKK3sicHhjLXNwbHItZnQiLCAgICAgICAge05VTEx9LCA0MDAzLCAidWRwIn0sCit7InB4Yy1yb2lkIiwgICAgICAgICAgIHtOVUxMfSwgNDAwNCwgInRjcCJ9LAoreyJweGMtcm9pZCIsICAgICAgICAgICB7TlVMTH0sIDQwMDQsICJ1ZHAifSwKK3sicHhjLXBpbiIsICAgICAgICAgICAge05VTEx9LCA0MDA1LCAidGNwIn0sCit7InB4Yy1waW4iLCAgICAgICAgICAgIHtOVUxMfSwgNDAwNSwgInVkcCJ9LAoreyJweGMtc3B2ciIsICAgICAgICAgICB7TlVMTH0sIDQwMDYsICJ0Y3AifSwKK3sicHhjLXNwdnIiLCAgICAgICAgICAge05VTEx9LCA0MDA2LCAidWRwIn0sCit7InB4Yy1zcGxyIiwgICAgICAgICAgIHtOVUxMfSwgNDAwNywgInRjcCJ9LAoreyJweGMtc3BsciIsICAgICAgICAgICB7TlVMTH0sIDQwMDcsICJ1ZHAifSwKK3sibmV0Y2hlcXVlIiwgICAgICAgICAge05VTEx9LCA0MDA4LCAidGNwIn0sCit7Im5ldGNoZXF1ZSIsICAgICAgICAgIHtOVUxMfSwgNDAwOCwgInVkcCJ9LAoreyJjaGltZXJhLWh3bSIsICAgICAgICB7TlVMTH0sIDQwMDksICJ0Y3AifSwKK3siY2hpbWVyYS1od20iLCAgICAgICAge05VTEx9LCA0MDA5LCAidWRwIn0sCit7InNhbXN1bmctdW5pZGV4IiwgICAgIHtOVUxMfSwgNDAxMCwgInRjcCJ9LAoreyJzYW1zdW5nLXVuaWRleCIsICAgICB7TlVMTH0sIDQwMTAsICJ1ZHAifSwKK3siYWx0c2VydmljZWJvb3QiLCAgICAge05VTEx9LCA0MDExLCAidGNwIn0sCit7ImFsdHNlcnZpY2Vib290IiwgICAgIHtOVUxMfSwgNDAxMSwgInVkcCJ9LAoreyJwZGEtZ2F0ZSIsICAgICAgICAgICB7TlVMTH0sIDQwMTIsICJ0Y3AifSwKK3sicGRhLWdhdGUiLCAgICAgICAgICAge05VTEx9LCA0MDEyLCAidWRwIn0sCit7ImFjbC1tYW5hZ2VyIiwgICAgICAgIHtOVUxMfSwgNDAxMywgInRjcCJ9LAoreyJhY2wtbWFuYWdlciIsICAgICAgICB7TlVMTH0sIDQwMTMsICJ1ZHAifSwKK3sidGFpY2xvY2siLCAgICAgICAgICAge05VTEx9LCA0MDE0LCAidGNwIn0sCit7InRhaWNsb2NrIiwgICAgICAgICAgIHtOVUxMfSwgNDAxNCwgInVkcCJ9LAoreyJ0YWxhcmlhbi1tY2FzdDEiLCAgICB7TlVMTH0sIDQwMTUsICJ0Y3AifSwKK3sidGFsYXJpYW4tbWNhc3QxIiwgICAge05VTEx9LCA0MDE1LCAidWRwIn0sCit7InRhbGFyaWFuLW1jYXN0MiIsICAgIHtOVUxMfSwgNDAxNiwgInRjcCJ9LAoreyJ0YWxhcmlhbi1tY2FzdDIiLCAgICB7TlVMTH0sIDQwMTYsICJ1ZHAifSwKK3sidGFsYXJpYW4tbWNhc3QzIiwgICAge05VTEx9LCA0MDE3LCAidGNwIn0sCit7InRhbGFyaWFuLW1jYXN0MyIsICAgIHtOVUxMfSwgNDAxNywgInVkcCJ9LAoreyJ0YWxhcmlhbi1tY2FzdDQiLCAgICB7TlVMTH0sIDQwMTgsICJ0Y3AifSwKK3sidGFsYXJpYW4tbWNhc3Q0IiwgICAge05VTEx9LCA0MDE4LCAidWRwIn0sCit7InRhbGFyaWFuLW1jYXN0NSIsICAgIHtOVUxMfSwgNDAxOSwgInRjcCJ9LAoreyJ0YWxhcmlhbi1tY2FzdDUiLCAgICB7TlVMTH0sIDQwMTksICJ1ZHAifSwKK3sidHJhcCIsICAgICAgICAgICAgICAge05VTEx9LCA0MDIwLCAidGNwIn0sCit7InRyYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDAyMCwgInVkcCJ9LAoreyJuZXh1cy1wb3J0YWwiLCAgICAgICB7TlVMTH0sIDQwMjEsICJ0Y3AifSwKK3sibmV4dXMtcG9ydGFsIiwgICAgICAge05VTEx9LCA0MDIxLCAidWRwIn0sCit7ImRub3giLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDAyMiwgInRjcCJ9LAoreyJkbm94IiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwMjIsICJ1ZHAifSwKK3siZXNubS16b25pbmciLCAgICAgICAge05VTEx9LCA0MDIzLCAidGNwIn0sCit7ImVzbm0tem9uaW5nIiwgICAgICAgIHtOVUxMfSwgNDAyMywgInVkcCJ9LAoreyJ0bnAxLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDQwMjQsICJ0Y3AifSwKK3sidG5wMS1wb3J0IiwgICAgICAgICAge05VTEx9LCA0MDI0LCAidWRwIn0sCit7InBhcnRpbWFnZSIsICAgICAgICAgIHtOVUxMfSwgNDAyNSwgInRjcCJ9LAoreyJwYXJ0aW1hZ2UiLCAgICAgICAgICB7TlVMTH0sIDQwMjUsICJ1ZHAifSwKK3siYXMtZGVidWciLCAgICAgICAgICAge05VTEx9LCA0MDI2LCAidGNwIn0sCit7ImFzLWRlYnVnIiwgICAgICAgICAgIHtOVUxMfSwgNDAyNiwgInVkcCJ9LAoreyJieHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQwMjcsICJ0Y3AifSwKK3siYnhwIiwgICAgICAgICAgICAgICAge05VTEx9LCA0MDI3LCAidWRwIn0sCit7ImR0c2VydmVyLXBvcnQiLCAgICAgIHtOVUxMfSwgNDAyOCwgInRjcCJ9LAoreyJkdHNlcnZlci1wb3J0IiwgICAgICB7TlVMTH0sIDQwMjgsICJ1ZHAifSwKK3siaXAtcXNpZyIsICAgICAgICAgICAge05VTEx9LCA0MDI5LCAidGNwIn0sCit7ImlwLXFzaWciLCAgICAgICAgICAgIHtOVUxMfSwgNDAyOSwgInVkcCJ9LAoreyJqZG1uLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDQwMzAsICJ0Y3AifSwKK3siamRtbi1wb3J0IiwgICAgICAgICAge05VTEx9LCA0MDMwLCAidWRwIn0sCit7InN1dWNwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDAzMSwgInRjcCJ9LAoreyJzdXVjcCIsICAgICAgICAgICAgICB7TlVMTH0sIDQwMzEsICJ1ZHAifSwKK3sidnJ0cy1hdXRoLXBvcnQiLCAgICAge05VTEx9LCA0MDMyLCAidGNwIn0sCit7InZydHMtYXV0aC1wb3J0IiwgICAgIHtOVUxMfSwgNDAzMiwgInVkcCJ9LAoreyJzYW5hdmlnYXRvciIsICAgICAgICB7TlVMTH0sIDQwMzMsICJ0Y3AifSwKK3sic2FuYXZpZ2F0b3IiLCAgICAgICAge05VTEx9LCA0MDMzLCAidWRwIn0sCit7InVieGQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDAzNCwgInRjcCJ9LAoreyJ1YnhkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwMzQsICJ1ZHAifSwKK3sid2FwLXB1c2gtaHR0cCIsICAgICAge05VTEx9LCA0MDM1LCAidGNwIn0sCit7IndhcC1wdXNoLWh0dHAiLCAgICAgIHtOVUxMfSwgNDAzNSwgInVkcCJ9LAoreyJ3YXAtcHVzaC1odHRwcyIsICAgICB7TlVMTH0sIDQwMzYsICJ0Y3AifSwKK3sid2FwLXB1c2gtaHR0cHMiLCAgICAge05VTEx9LCA0MDM2LCAidWRwIn0sCit7InJhdmVoZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDAzNywgInRjcCJ9LAoreyJyYXZlaGQiLCAgICAgICAgICAgICB7TlVMTH0sIDQwMzcsICJ1ZHAifSwKK3siZmF6enQtcHRwIiwgICAgICAgICAge05VTEx9LCA0MDM4LCAidGNwIn0sCit7ImZhenp0LXB0cCIsICAgICAgICAgIHtOVUxMfSwgNDAzOCwgInVkcCJ9LAoreyJmYXp6dC1hZG1pbiIsICAgICAgICB7TlVMTH0sIDQwMzksICJ0Y3AifSwKK3siZmF6enQtYWRtaW4iLCAgICAgICAge05VTEx9LCA0MDM5LCAidWRwIn0sCit7InlvLW1haW4iLCAgICAgICAgICAgIHtOVUxMfSwgNDA0MCwgInRjcCJ9LAoreyJ5by1tYWluIiwgICAgICAgICAgICB7TlVMTH0sIDQwNDAsICJ1ZHAifSwKK3siaG91c3RvbiIsICAgICAgICAgICAge05VTEx9LCA0MDQxLCAidGNwIn0sCit7ImhvdXN0b24iLCAgICAgICAgICAgIHtOVUxMfSwgNDA0MSwgInVkcCJ9LAoreyJsZHhwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwNDIsICJ0Y3AifSwKK3sibGR4cCIsICAgICAgICAgICAgICAge05VTEx9LCA0MDQyLCAidWRwIn0sCit7Im5pcnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA0MywgInRjcCJ9LAoreyJuaXJwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwNDMsICJ1ZHAifSwKK3sibHRwIiwgICAgICAgICAgICAgICAge05VTEx9LCA0MDQ0LCAidGNwIn0sCit7Imx0cCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDA0NCwgInVkcCJ9LAoreyJucHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQwNDUsICJ0Y3AifSwKK3sibnBwIiwgICAgICAgICAgICAgICAge05VTEx9LCA0MDQ1LCAidWRwIn0sCit7ImFjcC1wcm90byIsICAgICAgICAgIHtOVUxMfSwgNDA0NiwgInRjcCJ9LAoreyJhY3AtcHJvdG8iLCAgICAgICAgICB7TlVMTH0sIDQwNDYsICJ1ZHAifSwKK3siY3RwLXN0YXRlIiwgICAgICAgICAge05VTEx9LCA0MDQ3LCAidGNwIn0sCit7ImN0cC1zdGF0ZSIsICAgICAgICAgIHtOVUxMfSwgNDA0NywgInVkcCJ9LAoreyJ3YWZzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwNDksICJ0Y3AifSwKK3sid2FmcyIsICAgICAgICAgICAgICAge05VTEx9LCA0MDQ5LCAidWRwIn0sCit7ImNpc2NvLXdhZnMiLCAgICAgICAgIHtOVUxMfSwgNDA1MCwgInRjcCJ9LAoreyJjaXNjby13YWZzIiwgICAgICAgICB7TlVMTH0sIDQwNTAsICJ1ZHAifSwKK3siY3BwZHAiLCAgICAgICAgICAgICAge05VTEx9LCA0MDUxLCAidGNwIn0sCit7ImNwcGRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDA1MSwgInVkcCJ9LAoreyJpbnRlcmFjdCIsICAgICAgICAgICB7TlVMTH0sIDQwNTIsICJ0Y3AifSwKK3siaW50ZXJhY3QiLCAgICAgICAgICAge05VTEx9LCA0MDUyLCAidWRwIn0sCit7ImNjdS1jb21tLTEiLCAgICAgICAgIHtOVUxMfSwgNDA1MywgInRjcCJ9LAoreyJjY3UtY29tbS0xIiwgICAgICAgICB7TlVMTH0sIDQwNTMsICJ1ZHAifSwKK3siY2N1LWNvbW0tMiIsICAgICAgICAge05VTEx9LCA0MDU0LCAidGNwIn0sCit7ImNjdS1jb21tLTIiLCAgICAgICAgIHtOVUxMfSwgNDA1NCwgInVkcCJ9LAoreyJjY3UtY29tbS0zIiwgICAgICAgICB7TlVMTH0sIDQwNTUsICJ0Y3AifSwKK3siY2N1LWNvbW0tMyIsICAgICAgICAge05VTEx9LCA0MDU1LCAidWRwIn0sCit7ImxtcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDA1NiwgInRjcCJ9LAoreyJsbXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQwNTYsICJ1ZHAifSwKK3sid2ZtIiwgICAgICAgICAgICAgICAge05VTEx9LCA0MDU3LCAidGNwIn0sCit7IndmbSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDA1NywgInVkcCJ9LAoreyJraW5nZmlzaGVyIiwgICAgICAgICB7TlVMTH0sIDQwNTgsICJ0Y3AifSwKK3sia2luZ2Zpc2hlciIsICAgICAgICAge05VTEx9LCA0MDU4LCAidWRwIn0sCit7ImRsbXMtY29zZW0iLCAgICAgICAgIHtOVUxMfSwgNDA1OSwgInRjcCJ9LAoreyJkbG1zLWNvc2VtIiwgICAgICAgICB7TlVMTH0sIDQwNTksICJ1ZHAifSwKK3siZHNtZXRlcl9pYXRjIiwgICAgICAge05VTEx9LCA0MDYwLCAidGNwIn0sCit7ImRzbWV0ZXJfaWF0YyIsICAgICAgIHtOVUxMfSwgNDA2MCwgInVkcCJ9LAoreyJpY2UtbG9jYXRpb24iLCAgICAgICB7TlVMTH0sIDQwNjEsICJ0Y3AifSwKK3siaWNlLWxvY2F0aW9uIiwgICAgICAge05VTEx9LCA0MDYxLCAidWRwIn0sCit7ImljZS1zbG9jYXRpb24iLCAgICAgIHtOVUxMfSwgNDA2MiwgInRjcCJ9LAoreyJpY2Utc2xvY2F0aW9uIiwgICAgICB7TlVMTH0sIDQwNjIsICJ1ZHAifSwKK3siaWNlLXJvdXRlciIsICAgICAgICAge05VTEx9LCA0MDYzLCAidGNwIn0sCit7ImljZS1yb3V0ZXIiLCAgICAgICAgIHtOVUxMfSwgNDA2MywgInVkcCJ9LAoreyJpY2Utc3JvdXRlciIsICAgICAgICB7TlVMTH0sIDQwNjQsICJ0Y3AifSwKK3siaWNlLXNyb3V0ZXIiLCAgICAgICAge05VTEx9LCA0MDY0LCAidWRwIn0sCit7ImF2YW50aV9jZHAiLCAgICAgICAgIHtOVUxMfSwgNDA2NSwgInRjcCJ9LAoreyJhdmFudGlfY2RwIiwgICAgICAgICB7TlVMTH0sIDQwNjUsICJ1ZHAifSwKK3sicG1hcyIsICAgICAgICAgICAgICAge05VTEx9LCA0MDY2LCAidGNwIn0sCit7InBtYXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDA2NiwgInVkcCJ9LAoreyJpZHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQwNjcsICJ0Y3AifSwKK3siaWRwIiwgICAgICAgICAgICAgICAge05VTEx9LCA0MDY3LCAidWRwIn0sCit7ImlwZmx0YmNzdCIsICAgICAgICAgIHtOVUxMfSwgNDA2OCwgInRjcCJ9LAoreyJpcGZsdGJjc3QiLCAgICAgICAgICB7TlVMTH0sIDQwNjgsICJ1ZHAifSwKK3sibWluZ2VyIiwgICAgICAgICAgICAge05VTEx9LCA0MDY5LCAidGNwIn0sCit7Im1pbmdlciIsICAgICAgICAgICAgIHtOVUxMfSwgNDA2OSwgInVkcCJ9LAoreyJ0cmlwZSIsICAgICAgICAgICAgICB7TlVMTH0sIDQwNzAsICJ0Y3AifSwKK3sidHJpcGUiLCAgICAgICAgICAgICAge05VTEx9LCA0MDcwLCAidWRwIn0sCit7ImFpYmt1cCIsICAgICAgICAgICAgIHtOVUxMfSwgNDA3MSwgInRjcCJ9LAoreyJhaWJrdXAiLCAgICAgICAgICAgICB7TlVMTH0sIDQwNzEsICJ1ZHAifSwKK3siemlldG8tc29jayIsICAgICAgICAge05VTEx9LCA0MDcyLCAidGNwIn0sCit7InppZXRvLXNvY2siLCAgICAgICAgIHtOVUxMfSwgNDA3MiwgInVkcCJ9LAoreyJpUkFQUCIsICAgICAgICAgICAgICB7TlVMTH0sIDQwNzMsICJ0Y3AifSwKK3siaVJBUFAiLCAgICAgICAgICAgICAge05VTEx9LCA0MDczLCAidWRwIn0sCit7ImNlcXVpbnQtY2l0eWlkIiwgICAgIHtOVUxMfSwgNDA3NCwgInRjcCJ9LAoreyJjZXF1aW50LWNpdHlpZCIsICAgICB7TlVMTH0sIDQwNzQsICJ1ZHAifSwKK3sicGVyaW1sYW4iLCAgICAgICAgICAge05VTEx9LCA0MDc1LCAidGNwIn0sCit7InBlcmltbGFuIiwgICAgICAgICAgIHtOVUxMfSwgNDA3NSwgInVkcCJ9LAoreyJzZXJhcGgiLCAgICAgICAgICAgICB7TlVMTH0sIDQwNzYsICJ0Y3AifSwKK3sic2VyYXBoIiwgICAgICAgICAgICAge05VTEx9LCA0MDc2LCAidWRwIn0sCit7ImFzY29tYWxhcm0iLCAgICAgICAgIHtOVUxMfSwgNDA3NywgInVkcCJ9LAoreyJjc3NwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwNzgsICJ0Y3AifSwKK3sic2FudG9vbHMiLCAgICAgICAgICAge05VTEx9LCA0MDc5LCAidGNwIn0sCit7InNhbnRvb2xzIiwgICAgICAgICAgIHtOVUxMfSwgNDA3OSwgInVkcCJ9LAoreyJsb3JpY2EtaW4iLCAgICAgICAgICB7TlVMTH0sIDQwODAsICJ0Y3AifSwKK3sibG9yaWNhLWluIiwgICAgICAgICAge05VTEx9LCA0MDgwLCAidWRwIn0sCit7ImxvcmljYS1pbi1zZWMiLCAgICAgIHtOVUxMfSwgNDA4MSwgInRjcCJ9LAoreyJsb3JpY2EtaW4tc2VjIiwgICAgICB7TlVMTH0sIDQwODEsICJ1ZHAifSwKK3sibG9yaWNhLW91dCIsICAgICAgICAge05VTEx9LCA0MDgyLCAidGNwIn0sCit7ImxvcmljYS1vdXQiLCAgICAgICAgIHtOVUxMfSwgNDA4MiwgInVkcCJ9LAoreyJsb3JpY2Etb3V0LXNlYyIsICAgICB7TlVMTH0sIDQwODMsICJ0Y3AifSwKK3sibG9yaWNhLW91dC1zZWMiLCAgICAge05VTEx9LCA0MDgzLCAidWRwIn0sCit7ImZvcnRpc3BoZXJlLXZtIiwgICAgIHtOVUxMfSwgNDA4NCwgInVkcCJ9LAoreyJlem1lc3NhZ2VzcnYiLCAgICAgICB7TlVMTH0sIDQwODUsICJ0Y3AifSwKK3siZnRzeW5jIiwgICAgICAgICAgICAge05VTEx9LCA0MDg2LCAidWRwIn0sCit7ImFwcGx1c3NlcnZpY2UiLCAgICAgIHtOVUxMfSwgNDA4NywgInRjcCJ9LAoreyJucHNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwODgsICJ0Y3AifSwKK3sib3BlbmNvcmUiLCAgICAgICAgICAge05VTEx9LCA0MDg5LCAidGNwIn0sCit7Im9wZW5jb3JlIiwgICAgICAgICAgIHtOVUxMfSwgNDA4OSwgInVkcCJ9LAoreyJvbWFzZ3BvcnQiLCAgICAgICAgICB7TlVMTH0sIDQwOTAsICJ0Y3AifSwKK3sib21hc2dwb3J0IiwgICAgICAgICAge05VTEx9LCA0MDkwLCAidWRwIn0sCit7ImV3aW5zdGFsbGVyIiwgICAgICAgIHtOVUxMfSwgNDA5MSwgInRjcCJ9LAoreyJld2luc3RhbGxlciIsICAgICAgICB7TlVMTH0sIDQwOTEsICJ1ZHAifSwKK3siZXdkZ3MiLCAgICAgICAgICAgICAge05VTEx9LCA0MDkyLCAidGNwIn0sCit7ImV3ZGdzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDA5MiwgInVkcCJ9LAoreyJwdnhwbHVzY3MiLCAgICAgICAgICB7TlVMTH0sIDQwOTMsICJ0Y3AifSwKK3sicHZ4cGx1c2NzIiwgICAgICAgICAge05VTEx9LCA0MDkzLCAidWRwIn0sCit7InN5c3JxZCIsICAgICAgICAgICAgIHtOVUxMfSwgNDA5NCwgInRjcCJ9LAoreyJzeXNycWQiLCAgICAgICAgICAgICB7TlVMTH0sIDQwOTQsICJ1ZHAifSwKK3sieHRndWkiLCAgICAgICAgICAgICAge05VTEx9LCA0MDk1LCAidGNwIn0sCit7Inh0Z3VpIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDA5NSwgInVkcCJ9LAoreyJicmUiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQwOTYsICJ0Y3AifSwKK3siYnJlIiwgICAgICAgICAgICAgICAge05VTEx9LCA0MDk2LCAidWRwIn0sCit7InBhdHJvbHZpZXciLCAgICAgICAgIHtOVUxMfSwgNDA5NywgInRjcCJ9LAoreyJwYXRyb2x2aWV3IiwgICAgICAgICB7TlVMTH0sIDQwOTcsICJ1ZHAifSwKK3siZHJtc2ZzZCIsICAgICAgICAgICAge05VTEx9LCA0MDk4LCAidGNwIn0sCit7ImRybXNmc2QiLCAgICAgICAgICAgIHtOVUxMfSwgNDA5OCwgInVkcCJ9LAoreyJkcGNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwOTksICJ0Y3AifSwKK3siZHBjcCIsICAgICAgICAgICAgICAge05VTEx9LCA0MDk5LCAidWRwIn0sCit7Imlnby1pbmNvZ25pdG8iLCAgICAgIHtOVUxMfSwgNDEwMCwgInRjcCJ9LAoreyJpZ28taW5jb2duaXRvIiwgICAgICB7TlVMTH0sIDQxMDAsICJ1ZHAifSwKK3siYnJscC0wIiwgICAgICAgICAgICAge05VTEx9LCA0MTAxLCAidGNwIn0sCit7ImJybHAtMCIsICAgICAgICAgICAgIHtOVUxMfSwgNDEwMSwgInVkcCJ9LAoreyJicmxwLTEiLCAgICAgICAgICAgICB7TlVMTH0sIDQxMDIsICJ0Y3AifSwKK3siYnJscC0xIiwgICAgICAgICAgICAge05VTEx9LCA0MTAyLCAidWRwIn0sCit7ImJybHAtMiIsICAgICAgICAgICAgIHtOVUxMfSwgNDEwMywgInRjcCJ9LAoreyJicmxwLTIiLCAgICAgICAgICAgICB7TlVMTH0sIDQxMDMsICJ1ZHAifSwKK3siYnJscC0zIiwgICAgICAgICAgICAge05VTEx9LCA0MTA0LCAidGNwIn0sCit7ImJybHAtMyIsICAgICAgICAgICAgIHtOVUxMfSwgNDEwNCwgInVkcCJ9LAoreyJzaG9mYXJwbGF5ZXIiLCAgICAgICB7TlVMTH0sIDQxMDUsICJ0Y3AifSwKK3sic2hvZmFycGxheWVyIiwgICAgICAge05VTEx9LCA0MTA1LCAidWRwIn0sCit7InN5bmNocm9uaXRlIiwgICAgICAgIHtOVUxMfSwgNDEwNiwgInRjcCJ9LAoreyJzeW5jaHJvbml0ZSIsICAgICAgICB7TlVMTH0sIDQxMDYsICJ1ZHAifSwKK3siai1hYyIsICAgICAgICAgICAgICAge05VTEx9LCA0MTA3LCAidGNwIn0sCit7ImotYWMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDEwNywgInVkcCJ9LAoreyJhY2NlbCIsICAgICAgICAgICAgICB7TlVMTH0sIDQxMDgsICJ0Y3AifSwKK3siYWNjZWwiLCAgICAgICAgICAgICAge05VTEx9LCA0MTA4LCAidWRwIn0sCit7Iml6bSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDEwOSwgInRjcCJ9LAoreyJpem0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQxMDksICJ1ZHAifSwKK3siZzJ0YWciLCAgICAgICAgICAgICAge05VTEx9LCA0MTEwLCAidGNwIn0sCit7ImcydGFnIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDExMCwgInVkcCJ9LAoreyJ4Z3JpZCIsICAgICAgICAgICAgICB7TlVMTH0sIDQxMTEsICJ0Y3AifSwKK3sieGdyaWQiLCAgICAgICAgICAgICAge05VTEx9LCA0MTExLCAidWRwIn0sCit7ImFwcGxlLXZwbnMtcnAiLCAgICAgIHtOVUxMfSwgNDExMiwgInRjcCJ9LAoreyJhcHBsZS12cG5zLXJwIiwgICAgICB7TlVMTH0sIDQxMTIsICJ1ZHAifSwKK3siYWlwbi1yZWciLCAgICAgICAgICAge05VTEx9LCA0MTEzLCAidGNwIn0sCit7ImFpcG4tcmVnIiwgICAgICAgICAgIHtOVUxMfSwgNDExMywgInVkcCJ9LAoreyJqb21hbXFtb25pdG9yIiwgICAgICB7TlVMTH0sIDQxMTQsICJ0Y3AifSwKK3siam9tYW1xbW9uaXRvciIsICAgICAge05VTEx9LCA0MTE0LCAidWRwIn0sCit7ImNkcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDExNSwgInRjcCJ9LAoreyJjZHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQxMTUsICJ1ZHAifSwKK3sic21hcnRjYXJkLXRscyIsICAgICAge05VTEx9LCA0MTE2LCAidGNwIn0sCit7InNtYXJ0Y2FyZC10bHMiLCAgICAgIHtOVUxMfSwgNDExNiwgInVkcCJ9LAoreyJoaWxscnNlcnYiLCAgICAgICAgICB7TlVMTH0sIDQxMTcsICJ0Y3AifSwKK3siaGlsbHJzZXJ2IiwgICAgICAgICAge05VTEx9LCA0MTE3LCAidWRwIn0sCit7Im5ldHNjcmlwdCIsICAgICAgICAgIHtOVUxMfSwgNDExOCwgInRjcCJ9LAoreyJuZXRzY3JpcHQiLCAgICAgICAgICB7TlVMTH0sIDQxMTgsICJ1ZHAifSwKK3siYXNzdXJpYS1zbG0iLCAgICAgICAge05VTEx9LCA0MTE5LCAidGNwIn0sCit7ImFzc3VyaWEtc2xtIiwgICAgICAgIHtOVUxMfSwgNDExOSwgInVkcCJ9LAoreyJlLWJ1aWxkZXIiLCAgICAgICAgICB7TlVMTH0sIDQxMjEsICJ0Y3AifSwKK3siZS1idWlsZGVyIiwgICAgICAgICAge05VTEx9LCA0MTIxLCAidWRwIn0sCit7ImZwcmFtcyIsICAgICAgICAgICAgIHtOVUxMfSwgNDEyMiwgInRjcCJ9LAoreyJmcHJhbXMiLCAgICAgICAgICAgICB7TlVMTH0sIDQxMjIsICJ1ZHAifSwKK3siei13YXZlIiwgICAgICAgICAgICAge05VTEx9LCA0MTIzLCAidGNwIn0sCit7Inotd2F2ZSIsICAgICAgICAgICAgIHtOVUxMfSwgNDEyMywgInVkcCJ9LAoreyJ0aWd2MiIsICAgICAgICAgICAgICB7TlVMTH0sIDQxMjQsICJ0Y3AifSwKK3sidGlndjIiLCAgICAgICAgICAgICAge05VTEx9LCA0MTI0LCAidWRwIn0sCit7Im9wc3ZpZXctZW52b3kiLCAgICAgIHtOVUxMfSwgNDEyNSwgInRjcCJ9LAoreyJvcHN2aWV3LWVudm95IiwgICAgICB7TlVMTH0sIDQxMjUsICJ1ZHAifSwKK3siZGRyZXBsIiwgICAgICAgICAgICAge05VTEx9LCA0MTI2LCAidGNwIn0sCit7ImRkcmVwbCIsICAgICAgICAgICAgIHtOVUxMfSwgNDEyNiwgInVkcCJ9LAoreyJ1bmlrZXlwcm8iLCAgICAgICAgICB7TlVMTH0sIDQxMjcsICJ0Y3AifSwKK3sidW5pa2V5cHJvIiwgICAgICAgICAge05VTEx9LCA0MTI3LCAidWRwIn0sCit7Im51ZnciLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDEyOCwgInRjcCJ9LAoreyJudWZ3IiwgICAgICAgICAgICAgICB7TlVMTH0sIDQxMjgsICJ1ZHAifSwKK3sibnVhdXRoIiwgICAgICAgICAgICAge05VTEx9LCA0MTI5LCAidGNwIn0sCit7Im51YXV0aCIsICAgICAgICAgICAgIHtOVUxMfSwgNDEyOSwgInVkcCJ9LAoreyJmcm9uZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDQxMzAsICJ0Y3AifSwKK3siZnJvbmV0IiwgICAgICAgICAgICAge05VTEx9LCA0MTMwLCAidWRwIn0sCit7InN0YXJzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDEzMSwgInRjcCJ9LAoreyJzdGFycyIsICAgICAgICAgICAgICB7TlVMTH0sIDQxMzEsICJ1ZHAifSwKK3sibnV0c19kZW0iLCAgICAgICAgICAge05VTEx9LCA0MTMyLCAidGNwIn0sCit7Im51dHNfZGVtIiwgICAgICAgICAgIHtOVUxMfSwgNDEzMiwgInVkcCJ9LAoreyJudXRzX2Jvb3RwIiwgICAgICAgICB7TlVMTH0sIDQxMzMsICJ0Y3AifSwKK3sibnV0c19ib290cCIsICAgICAgICAge05VTEx9LCA0MTMzLCAidWRwIn0sCit7Im5pZnR5LWhtaSIsICAgICAgICAgIHtOVUxMfSwgNDEzNCwgInRjcCJ9LAoreyJuaWZ0eS1obWkiLCAgICAgICAgICB7TlVMTH0sIDQxMzQsICJ1ZHAifSwKK3siY2wtZGItYXR0YWNoIiwgICAgICAge05VTEx9LCA0MTM1LCAidGNwIn0sCit7ImNsLWRiLWF0dGFjaCIsICAgICAgIHtOVUxMfSwgNDEzNSwgInVkcCJ9LAoreyJjbC1kYi1yZXF1ZXN0IiwgICAgICB7TlVMTH0sIDQxMzYsICJ0Y3AifSwKK3siY2wtZGItcmVxdWVzdCIsICAgICAge05VTEx9LCA0MTM2LCAidWRwIn0sCit7ImNsLWRiLXJlbW90ZSIsICAgICAgIHtOVUxMfSwgNDEzNywgInRjcCJ9LAoreyJjbC1kYi1yZW1vdGUiLCAgICAgICB7TlVMTH0sIDQxMzcsICJ1ZHAifSwKK3sibmV0dGVzdCIsICAgICAgICAgICAge05VTEx9LCA0MTM4LCAidGNwIn0sCit7Im5ldHRlc3QiLCAgICAgICAgICAgIHtOVUxMfSwgNDEzOCwgInVkcCJ9LAoreyJ0aHJ0eCIsICAgICAgICAgICAgICB7TlVMTH0sIDQxMzksICJ0Y3AifSwKK3sidGhydHgiLCAgICAgICAgICAgICAge05VTEx9LCA0MTM5LCAidWRwIn0sCit7ImNlZHJvc19mZHMiLCAgICAgICAgIHtOVUxMfSwgNDE0MCwgInRjcCJ9LAoreyJjZWRyb3NfZmRzIiwgICAgICAgICB7TlVMTH0sIDQxNDAsICJ1ZHAifSwKK3sib2lydGdzdmMiLCAgICAgICAgICAge05VTEx9LCA0MTQxLCAidGNwIn0sCit7Im9pcnRnc3ZjIiwgICAgICAgICAgIHtOVUxMfSwgNDE0MSwgInVkcCJ9LAoreyJvaWRvY3N2YyIsICAgICAgICAgICB7TlVMTH0sIDQxNDIsICJ0Y3AifSwKK3sib2lkb2NzdmMiLCAgICAgICAgICAge05VTEx9LCA0MTQyLCAidWRwIn0sCit7Im9pZHNyIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE0MywgInRjcCJ9LAoreyJvaWRzciIsICAgICAgICAgICAgICB7TlVMTH0sIDQxNDMsICJ1ZHAifSwKK3sidnZyLWNvbnRyb2wiLCAgICAgICAge05VTEx9LCA0MTQ1LCAidGNwIn0sCit7InZ2ci1jb250cm9sIiwgICAgICAgIHtOVUxMfSwgNDE0NSwgInVkcCJ9LAoreyJ0Z2Njb25uZWN0IiwgICAgICAgICB7TlVMTH0sIDQxNDYsICJ0Y3AifSwKK3sidGdjY29ubmVjdCIsICAgICAgICAge05VTEx9LCA0MTQ2LCAidWRwIn0sCit7InZyeHBzZXJ2bWFuIiwgICAgICAgIHtOVUxMfSwgNDE0NywgInRjcCJ9LAoreyJ2cnhwc2Vydm1hbiIsICAgICAgICB7TlVMTH0sIDQxNDcsICJ1ZHAifSwKK3siaGhiLWhhbmRoZWxkIiwgICAgICAge05VTEx9LCA0MTQ4LCAidGNwIn0sCit7ImhoYi1oYW5kaGVsZCIsICAgICAgIHtOVUxMfSwgNDE0OCwgInVkcCJ9LAoreyJhZ3NsYiIsICAgICAgICAgICAgICB7TlVMTH0sIDQxNDksICJ0Y3AifSwKK3siYWdzbGIiLCAgICAgICAgICAgICAge05VTEx9LCA0MTQ5LCAidWRwIn0sCit7IlBvd2VyQWxlcnQtbnNhIiwgICAgIHtOVUxMfSwgNDE1MCwgInRjcCJ9LAoreyJQb3dlckFsZXJ0LW5zYSIsICAgICB7TlVMTH0sIDQxNTAsICJ1ZHAifSwKK3sibWVuYW5kbWljZV9ub2giLCAgICAge05VTEx9LCA0MTUxLCAidGNwIn0sCit7Im1lbmFuZG1pY2Vfbm9oIiwgICAgIHtOVUxMfSwgNDE1MSwgInVkcCJ9LAoreyJpZGlnX211eCIsICAgICAgICAgICB7TlVMTH0sIDQxNTIsICJ0Y3AifSwKK3siaWRpZ19tdXgiLCAgICAgICAgICAge05VTEx9LCA0MTUyLCAidWRwIn0sCit7Im1ibC1iYXR0ZCIsICAgICAgICAgIHtOVUxMfSwgNDE1MywgInRjcCJ9LAoreyJtYmwtYmF0dGQiLCAgICAgICAgICB7TlVMTH0sIDQxNTMsICJ1ZHAifSwKK3siYXRsaW5rcyIsICAgICAgICAgICAge05VTEx9LCA0MTU0LCAidGNwIn0sCit7ImF0bGlua3MiLCAgICAgICAgICAgIHtOVUxMfSwgNDE1NCwgInVkcCJ9LAoreyJienIiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQxNTUsICJ0Y3AifSwKK3siYnpyIiwgICAgICAgICAgICAgICAge05VTEx9LCA0MTU1LCAidWRwIn0sCit7InN0YXQtcmVzdWx0cyIsICAgICAgIHtOVUxMfSwgNDE1NiwgInRjcCJ9LAoreyJzdGF0LXJlc3VsdHMiLCAgICAgICB7TlVMTH0sIDQxNTYsICJ1ZHAifSwKK3sic3RhdC1zY2FubmVyIiwgICAgICAge05VTEx9LCA0MTU3LCAidGNwIn0sCit7InN0YXQtc2Nhbm5lciIsICAgICAgIHtOVUxMfSwgNDE1NywgInVkcCJ9LAoreyJzdGF0LWNjIiwgICAgICAgICAgICB7TlVMTH0sIDQxNTgsICJ0Y3AifSwKK3sic3RhdC1jYyIsICAgICAgICAgICAge05VTEx9LCA0MTU4LCAidWRwIn0sCit7Im5zcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDE1OSwgInRjcCJ9LAoreyJuc3MiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQxNTksICJ1ZHAifSwKK3siamluaS1kaXNjb3ZlcnkiLCAgICAge05VTEx9LCA0MTYwLCAidGNwIn0sCit7ImppbmktZGlzY292ZXJ5IiwgICAgIHtOVUxMfSwgNDE2MCwgInVkcCJ9LAoreyJvbXNjb250YWN0IiwgICAgICAgICB7TlVMTH0sIDQxNjEsICJ0Y3AifSwKK3sib21zY29udGFjdCIsICAgICAgICAge05VTEx9LCA0MTYxLCAidWRwIn0sCit7Im9tc3RvcG9sb2d5IiwgICAgICAgIHtOVUxMfSwgNDE2MiwgInRjcCJ9LAoreyJvbXN0b3BvbG9neSIsICAgICAgICB7TlVMTH0sIDQxNjIsICJ1ZHAifSwKK3sic2lsdmVycGVha3BlZXIiLCAgICAge05VTEx9LCA0MTYzLCAidGNwIn0sCit7InNpbHZlcnBlYWtwZWVyIiwgICAgIHtOVUxMfSwgNDE2MywgInVkcCJ9LAoreyJzaWx2ZXJwZWFrY29tbSIsICAgICB7TlVMTH0sIDQxNjQsICJ0Y3AifSwKK3sic2lsdmVycGVha2NvbW0iLCAgICAge05VTEx9LCA0MTY0LCAidWRwIn0sCit7ImFsdGNwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE2NSwgInRjcCJ9LAoreyJhbHRjcCIsICAgICAgICAgICAgICB7TlVMTH0sIDQxNjUsICJ1ZHAifSwKK3siam9vc3QiLCAgICAgICAgICAgICAge05VTEx9LCA0MTY2LCAidGNwIn0sCit7Impvb3N0IiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE2NiwgInVkcCJ9LAoreyJkZGduIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQxNjcsICJ0Y3AifSwKK3siZGRnbiIsICAgICAgICAgICAgICAge05VTEx9LCA0MTY3LCAidWRwIn0sCit7InBzbGljc2VyIiwgICAgICAgICAgIHtOVUxMfSwgNDE2OCwgInRjcCJ9LAoreyJwc2xpY3NlciIsICAgICAgICAgICB7TlVMTH0sIDQxNjgsICJ1ZHAifSwKK3siaWFkdCIsICAgICAgICAgICAgICAge05VTEx9LCA0MTY5LCAidGNwIn0sCit7ImlhZHQtZGlzYyIsICAgICAgICAgIHtOVUxMfSwgNDE2OSwgInVkcCJ9LAoreyJkLWNpbmVtYS1jc3AiLCAgICAgICB7TlVMTH0sIDQxNzAsICJ0Y3AifSwKK3sibWwtc3ZuZXQiLCAgICAgICAgICAge05VTEx9LCA0MTcxLCAidGNwIn0sCit7InBjb2lwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE3MiwgInRjcCJ9LAoreyJwY29pcCIsICAgICAgICAgICAgICB7TlVMTH0sIDQxNzIsICJ1ZHAifSwKK3sic21jbHVzdGVyIiwgICAgICAgICAge05VTEx9LCA0MTc0LCAidGNwIn0sCit7ImJjY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDE3NSwgInRjcCJ9LAoreyJ0bC1pcGNwcm94eSIsICAgICAgICB7TlVMTH0sIDQxNzYsICJ0Y3AifSwKK3sid2VsbG8iLCAgICAgICAgICAgICAge05VTEx9LCA0MTc3LCAidGNwIn0sCit7IndlbGxvIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE3NywgInVkcCJ9LAoreyJzdG9ybWFuIiwgICAgICAgICAgICB7TlVMTH0sIDQxNzgsICJ0Y3AifSwKK3sic3Rvcm1hbiIsICAgICAgICAgICAge05VTEx9LCA0MTc4LCAidWRwIn0sCit7Ik1heHVtU1AiLCAgICAgICAgICAgIHtOVUxMfSwgNDE3OSwgInRjcCJ9LAoreyJNYXh1bVNQIiwgICAgICAgICAgICB7TlVMTH0sIDQxNzksICJ1ZHAifSwKK3siaHR0cHgiLCAgICAgICAgICAgICAge05VTEx9LCA0MTgwLCAidGNwIn0sCit7Imh0dHB4IiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE4MCwgInVkcCJ9LAoreyJtYWNiYWsiLCAgICAgICAgICAgICB7TlVMTH0sIDQxODEsICJ0Y3AifSwKK3sibWFjYmFrIiwgICAgICAgICAgICAge05VTEx9LCA0MTgxLCAidWRwIn0sCit7InBjcHRjcHNlcnZpY2UiLCAgICAgIHtOVUxMfSwgNDE4MiwgInRjcCJ9LAoreyJwY3B0Y3BzZXJ2aWNlIiwgICAgICB7TlVMTH0sIDQxODIsICJ1ZHAifSwKK3siZ21tcCIsICAgICAgICAgICAgICAge05VTEx9LCA0MTgzLCAidGNwIn0sCit7ImdtbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDE4MywgInVkcCJ9LAoreyJ1bml2ZXJzZV9zdWl0ZSIsICAgICB7TlVMTH0sIDQxODQsICJ0Y3AifSwKK3sidW5pdmVyc2Vfc3VpdGUiLCAgICAge05VTEx9LCA0MTg0LCAidWRwIn0sCit7IndjcHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDE4NSwgInRjcCJ9LAoreyJ3Y3BwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQxODUsICJ1ZHAifSwKK3siYm94YmFja3Vwc3RvcmUiLCAgICAge05VTEx9LCA0MTg2LCAidGNwIn0sCit7ImNzY19wcm94eSIsICAgICAgICAgIHtOVUxMfSwgNDE4NywgInRjcCJ9LAoreyJ2YXRhdGEiLCAgICAgICAgICAgICB7TlVMTH0sIDQxODgsICJ0Y3AifSwKK3sidmF0YXRhIiwgICAgICAgICAgICAge05VTEx9LCA0MTg4LCAidWRwIn0sCit7InBjZXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDE4OSwgInRjcCJ9LAoreyJzaWV2ZSIsICAgICAgICAgICAgICB7TlVMTH0sIDQxOTAsICJ0Y3AifSwKK3siZHNtaXB2NiIsICAgICAgICAgICAge05VTEx9LCA0MTkxLCAidWRwIn0sCit7ImF6ZXRpIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDE5MiwgInRjcCJ9LAoreyJhemV0aS1iZCIsICAgICAgICAgICB7TlVMTH0sIDQxOTIsICJ1ZHAifSwKK3sicHZ4cGx1c2lvIiwgICAgICAgICAge05VTEx9LCA0MTkzLCAidGNwIn0sCit7ImVpbXMtYWRtaW4iLCAgICAgICAgIHtOVUxMfSwgNDE5OSwgInRjcCJ9LAoreyJlaW1zLWFkbWluIiwgICAgICAgICB7TlVMTH0sIDQxOTksICJ1ZHAifSwKK3siY29yZWxjY2FtIiwgICAgICAgICAge05VTEx9LCA0MzAwLCAidGNwIn0sCit7ImNvcmVsY2NhbSIsICAgICAgICAgIHtOVUxMfSwgNDMwMCwgInVkcCJ9LAoreyJkLWRhdGEiLCAgICAgICAgICAgICB7TlVMTH0sIDQzMDEsICJ0Y3AifSwKK3siZC1kYXRhIiwgICAgICAgICAgICAge05VTEx9LCA0MzAxLCAidWRwIn0sCit7ImQtZGF0YS1jb250cm9sIiwgICAgIHtOVUxMfSwgNDMwMiwgInRjcCJ9LAoreyJkLWRhdGEtY29udHJvbCIsICAgICB7TlVMTH0sIDQzMDIsICJ1ZHAifSwKK3sic3JjcCIsICAgICAgICAgICAgICAge05VTEx9LCA0MzAzLCAidGNwIn0sCit7InNyY3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDMwMywgInVkcCJ9LAoreyJvd3NlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDQzMDQsICJ0Y3AifSwKK3sib3dzZXJ2ZXIiLCAgICAgICAgICAge05VTEx9LCA0MzA0LCAidWRwIn0sCit7ImJhdG1hbiIsICAgICAgICAgICAgIHtOVUxMfSwgNDMwNSwgInRjcCJ9LAoreyJiYXRtYW4iLCAgICAgICAgICAgICB7TlVMTH0sIDQzMDUsICJ1ZHAifSwKK3sicGluZ2hnbCIsICAgICAgICAgICAge05VTEx9LCA0MzA2LCAidGNwIn0sCit7InBpbmdoZ2wiLCAgICAgICAgICAgIHtOVUxMfSwgNDMwNiwgInVkcCJ9LAoreyJ2aXNpY3Jvbi12cyIsICAgICAgICB7TlVMTH0sIDQzMDcsICJ0Y3AifSwKK3sidmlzaWNyb24tdnMiLCAgICAgICAge05VTEx9LCA0MzA3LCAidWRwIn0sCit7ImNvbXB4LWxvY2t2aWV3IiwgICAgIHtOVUxMfSwgNDMwOCwgInRjcCJ9LAoreyJjb21weC1sb2NrdmlldyIsICAgICB7TlVMTH0sIDQzMDgsICJ1ZHAifSwKK3siZHNlcnZlciIsICAgICAgICAgICAge05VTEx9LCA0MzA5LCAidGNwIn0sCit7ImRzZXJ2ZXIiLCAgICAgICAgICAgIHtOVUxMfSwgNDMwOSwgInVkcCJ9LAoreyJtaXJydGV4IiwgICAgICAgICAgICB7TlVMTH0sIDQzMTAsICJ0Y3AifSwKK3sibWlycnRleCIsICAgICAgICAgICAge05VTEx9LCA0MzEwLCAidWRwIn0sCit7InA2c3NtYyIsICAgICAgICAgICAgIHtOVUxMfSwgNDMxMSwgInRjcCJ9LAoreyJwc2NsLW1ndCIsICAgICAgICAgICB7TlVMTH0sIDQzMTIsICJ0Y3AifSwKK3sicGVycmxhIiwgICAgICAgICAgICAge05VTEx9LCA0MzEzLCAidGNwIn0sCit7ImZkdC1yY2F0cCIsICAgICAgICAgIHtOVUxMfSwgNDMyMCwgInRjcCJ9LAoreyJmZHQtcmNhdHAiLCAgICAgICAgICB7TlVMTH0sIDQzMjAsICJ1ZHAifSwKK3sicndob2lzIiwgICAgICAgICAgICAge05VTEx9LCA0MzIxLCAidGNwIn0sCit7InJ3aG9pcyIsICAgICAgICAgICAgIHtOVUxMfSwgNDMyMSwgInVkcCJ9LAoreyJ0cmltLWV2ZW50IiwgICAgICAgICB7TlVMTH0sIDQzMjIsICJ0Y3AifSwKK3sidHJpbS1ldmVudCIsICAgICAgICAge05VTEx9LCA0MzIyLCAidWRwIn0sCit7InRyaW0taWNlIiwgICAgICAgICAgIHtOVUxMfSwgNDMyMywgInRjcCJ9LAoreyJ0cmltLWljZSIsICAgICAgICAgICB7TlVMTH0sIDQzMjMsICJ1ZHAifSwKK3siYmFsb3VyIiwgICAgICAgICAgICAge05VTEx9LCA0MzI0LCAidGNwIn0sCit7ImJhbG91ciIsICAgICAgICAgICAgIHtOVUxMfSwgNDMyNCwgInVkcCJ9LAoreyJnZW9nbm9zaXNtYW4iLCAgICAgICB7TlVMTH0sIDQzMjUsICJ0Y3AifSwKK3siZ2VvZ25vc2lzbWFuIiwgICAgICAge05VTEx9LCA0MzI1LCAidWRwIn0sCit7Imdlb2dub3NpcyIsICAgICAgICAgIHtOVUxMfSwgNDMyNiwgInRjcCJ9LAoreyJnZW9nbm9zaXMiLCAgICAgICAgICB7TlVMTH0sIDQzMjYsICJ1ZHAifSwKK3siamF4ZXItd2ViIiwgICAgICAgICAge05VTEx9LCA0MzI3LCAidGNwIn0sCit7ImpheGVyLXdlYiIsICAgICAgICAgIHtOVUxMfSwgNDMyNywgInVkcCJ9LAoreyJqYXhlci1tYW5hZ2VyIiwgICAgICB7TlVMTH0sIDQzMjgsICJ0Y3AifSwKK3siamF4ZXItbWFuYWdlciIsICAgICAge05VTEx9LCA0MzI4LCAidWRwIn0sCit7InB1YmxpcWFyZS1zeW5jIiwgICAgIHtOVUxMfSwgNDMyOSwgInRjcCJ9LAoreyJnYWlhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQzNDAsICJ0Y3AifSwKK3siZ2FpYSIsICAgICAgICAgICAgICAge05VTEx9LCA0MzQwLCAidWRwIn0sCit7Imxpc3AtZGF0YSIsICAgICAgICAgIHtOVUxMfSwgNDM0MSwgInRjcCJ9LAoreyJsaXNwLWRhdGEiLCAgICAgICAgICB7TlVMTH0sIDQzNDEsICJ1ZHAifSwKK3sibGlzcC1jb25zIiwgICAgICAgICAge05VTEx9LCA0MzQyLCAidGNwIn0sCit7Imxpc3AtY29udHJvbCIsICAgICAgIHtOVUxMfSwgNDM0MiwgInVkcCJ9LAoreyJ1bmljYWxsIiwgICAgICAgICAgICB7TlVMTH0sIDQzNDMsICJ0Y3AifSwKK3sidW5pY2FsbCIsICAgICAgICAgICAge05VTEx9LCA0MzQzLCAidWRwIn0sCit7InZpbmFpbnN0YWxsIiwgICAgICAgIHtOVUxMfSwgNDM0NCwgInRjcCJ9LAoreyJ2aW5haW5zdGFsbCIsICAgICAgICB7TlVMTH0sIDQzNDQsICJ1ZHAifSwKK3sibTQtbmV0d29yay1hcyIsICAgICAge05VTEx9LCA0MzQ1LCAidGNwIn0sCit7Im00LW5ldHdvcmstYXMiLCAgICAgIHtOVUxMfSwgNDM0NSwgInVkcCJ9LAoreyJlbGFubG0iLCAgICAgICAgICAgICB7TlVMTH0sIDQzNDYsICJ0Y3AifSwKK3siZWxhbmxtIiwgICAgICAgICAgICAge05VTEx9LCA0MzQ2LCAidWRwIn0sCit7ImxhbnN1cnZleW9yIiwgICAgICAgIHtOVUxMfSwgNDM0NywgInRjcCJ9LAoreyJsYW5zdXJ2ZXlvciIsICAgICAgICB7TlVMTH0sIDQzNDcsICJ1ZHAifSwKK3siaXRvc2UiLCAgICAgICAgICAgICAge05VTEx9LCA0MzQ4LCAidGNwIn0sCit7Iml0b3NlIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDM0OCwgInVkcCJ9LAoreyJmc3BvcnRtYXAiLCAgICAgICAgICB7TlVMTH0sIDQzNDksICJ0Y3AifSwKK3siZnNwb3J0bWFwIiwgICAgICAgICAge05VTEx9LCA0MzQ5LCAidWRwIn0sCit7Im5ldC1kZXZpY2UiLCAgICAgICAgIHtOVUxMfSwgNDM1MCwgInRjcCJ9LAoreyJuZXQtZGV2aWNlIiwgICAgICAgICB7TlVMTH0sIDQzNTAsICJ1ZHAifSwKK3sicGxjeS1uZXQtc3ZjcyIsICAgICAge05VTEx9LCA0MzUxLCAidGNwIn0sCit7InBsY3ktbmV0LXN2Y3MiLCAgICAgIHtOVUxMfSwgNDM1MSwgInVkcCJ9LAoreyJwamxpbmsiLCAgICAgICAgICAgICB7TlVMTH0sIDQzNTIsICJ0Y3AifSwKK3sicGpsaW5rIiwgICAgICAgICAgICAge05VTEx9LCA0MzUyLCAidWRwIn0sCit7ImY1LWlxdWVyeSIsICAgICAgICAgIHtOVUxMfSwgNDM1MywgInRjcCJ9LAoreyJmNS1pcXVlcnkiLCAgICAgICAgICB7TlVMTH0sIDQzNTMsICJ1ZHAifSwKK3sicXNuZXQtdHJhbnMiLCAgICAgICAge05VTEx9LCA0MzU0LCAidGNwIn0sCit7InFzbmV0LXRyYW5zIiwgICAgICAgIHtOVUxMfSwgNDM1NCwgInVkcCJ9LAoreyJxc25ldC13b3Jrc3QiLCAgICAgICB7TlVMTH0sIDQzNTUsICJ0Y3AifSwKK3sicXNuZXQtd29ya3N0IiwgICAgICAge05VTEx9LCA0MzU1LCAidWRwIn0sCit7InFzbmV0LWFzc2lzdCIsICAgICAgIHtOVUxMfSwgNDM1NiwgInRjcCJ9LAoreyJxc25ldC1hc3Npc3QiLCAgICAgICB7TlVMTH0sIDQzNTYsICJ1ZHAifSwKK3sicXNuZXQtY29uZCIsICAgICAgICAge05VTEx9LCA0MzU3LCAidGNwIn0sCit7InFzbmV0LWNvbmQiLCAgICAgICAgIHtOVUxMfSwgNDM1NywgInVkcCJ9LAoreyJxc25ldC1udWNsIiwgICAgICAgICB7TlVMTH0sIDQzNTgsICJ0Y3AifSwKK3sicXNuZXQtbnVjbCIsICAgICAgICAge05VTEx9LCA0MzU4LCAidWRwIn0sCit7Im9tYWJjYXN0bHRrbSIsICAgICAgIHtOVUxMfSwgNDM1OSwgInRjcCJ9LAoreyJvbWFiY2FzdGx0a20iLCAgICAgICB7TlVMTH0sIDQzNTksICJ1ZHAifSwKK3sibWF0cml4X3ZuZXQiLCAgICAgICAge05VTEx9LCA0MzYwLCAidGNwIn0sCit7Im5hY25sIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDM2MSwgInVkcCJ9LAoreyJhZm9yZS12ZHAtZGlzYyIsICAgICB7TlVMTH0sIDQzNjIsICJ1ZHAifSwKK3sid3hicmllZiIsICAgICAgICAgICAge05VTEx9LCA0MzY4LCAidGNwIn0sCit7Ind4YnJpZWYiLCAgICAgICAgICAgIHtOVUxMfSwgNDM2OCwgInVkcCJ9LAoreyJlcG1kIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQzNjksICJ0Y3AifSwKK3siZXBtZCIsICAgICAgICAgICAgICAge05VTEx9LCA0MzY5LCAidWRwIn0sCit7ImVscHJvX3R1bm5lbCIsICAgICAgIHtOVUxMfSwgNDM3MCwgInRjcCJ9LAoreyJlbHByb190dW5uZWwiLCAgICAgICB7TlVMTH0sIDQzNzAsICJ1ZHAifSwKK3sibDJjLWNvbnRyb2wiLCAgICAgICAge05VTEx9LCA0MzcxLCAidGNwIn0sCit7ImwyYy1kaXNjIiwgICAgICAgICAgIHtOVUxMfSwgNDM3MSwgInVkcCJ9LAoreyJsMmMtZGF0YSIsICAgICAgICAgICB7TlVMTH0sIDQzNzIsICJ0Y3AifSwKK3sibDJjLWRhdGEiLCAgICAgICAgICAge05VTEx9LCA0MzcyLCAidWRwIn0sCit7InJlbWN0bCIsICAgICAgICAgICAgIHtOVUxMfSwgNDM3MywgInRjcCJ9LAoreyJyZW1jdGwiLCAgICAgICAgICAgICB7TlVMTH0sIDQzNzMsICJ1ZHAifSwKK3sicHNpLXB0dCIsICAgICAgICAgICAge05VTEx9LCA0Mzc0LCAidGNwIn0sCit7InRvbHRlY2VzIiwgICAgICAgICAgIHtOVUxMfSwgNDM3NSwgInRjcCJ9LAoreyJ0b2x0ZWNlcyIsICAgICAgICAgICB7TlVMTH0sIDQzNzUsICJ1ZHAifSwKK3siYmlwIiwgICAgICAgICAgICAgICAge05VTEx9LCA0Mzc2LCAidGNwIn0sCit7ImJpcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDM3NiwgInVkcCJ9LAoreyJjcC1zcHhzdnIiLCAgICAgICAgICB7TlVMTH0sIDQzNzcsICJ0Y3AifSwKK3siY3Atc3B4c3ZyIiwgICAgICAgICAge05VTEx9LCA0Mzc3LCAidWRwIn0sCit7ImNwLXNweGRweSIsICAgICAgICAgIHtOVUxMfSwgNDM3OCwgInRjcCJ9LAoreyJjcC1zcHhkcHkiLCAgICAgICAgICB7TlVMTH0sIDQzNzgsICJ1ZHAifSwKK3siY3RkYiIsICAgICAgICAgICAgICAge05VTEx9LCA0Mzc5LCAidGNwIn0sCit7ImN0ZGIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDM3OSwgInVkcCJ9LAoreyJ4YW5kcm9zLWNtcyIsICAgICAgICB7TlVMTH0sIDQzODksICJ0Y3AifSwKK3sieGFuZHJvcy1jbXMiLCAgICAgICAge05VTEx9LCA0Mzg5LCAidWRwIn0sCit7IndpZWdhbmQiLCAgICAgICAgICAgIHtOVUxMfSwgNDM5MCwgInRjcCJ9LAoreyJ3aWVnYW5kIiwgICAgICAgICAgICB7TlVMTH0sIDQzOTAsICJ1ZHAifSwKK3siYXB3aS1pbXNlcnZlciIsICAgICAge05VTEx9LCA0MzkxLCAidGNwIn0sCit7ImFwd2ktcnhzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgNDM5MiwgInRjcCJ9LAoreyJhcHdpLXJ4c3Bvb2xlciIsICAgICB7TlVMTH0sIDQzOTMsICJ0Y3AifSwKK3siYXB3aS1kaXNjIiwgICAgICAgICAge05VTEx9LCA0Mzk0LCAidWRwIn0sCit7Im9tbml2aXNpb25lc3giLCAgICAgIHtOVUxMfSwgNDM5NSwgInRjcCJ9LAoreyJvbW5pdmlzaW9uZXN4IiwgICAgICB7TlVMTH0sIDQzOTUsICJ1ZHAifSwKK3siZmx5IiwgICAgICAgICAgICAgICAge05VTEx9LCA0Mzk2LCAidGNwIn0sCit7ImRzLXNydiIsICAgICAgICAgICAgIHtOVUxMfSwgNDQwMCwgInRjcCJ9LAoreyJkcy1zcnYiLCAgICAgICAgICAgICB7TlVMTH0sIDQ0MDAsICJ1ZHAifSwKK3siZHMtc3J2ciIsICAgICAgICAgICAge05VTEx9LCA0NDAxLCAidGNwIn0sCit7ImRzLXNydnIiLCAgICAgICAgICAgIHtOVUxMfSwgNDQwMSwgInVkcCJ9LAoreyJkcy1jbG50IiwgICAgICAgICAgICB7TlVMTH0sIDQ0MDIsICJ0Y3AifSwKK3siZHMtY2xudCIsICAgICAgICAgICAge05VTEx9LCA0NDAyLCAidWRwIn0sCit7ImRzLXVzZXIiLCAgICAgICAgICAgIHtOVUxMfSwgNDQwMywgInRjcCJ9LAoreyJkcy11c2VyIiwgICAgICAgICAgICB7TlVMTH0sIDQ0MDMsICJ1ZHAifSwKK3siZHMtYWRtaW4iLCAgICAgICAgICAge05VTEx9LCA0NDA0LCAidGNwIn0sCit7ImRzLWFkbWluIiwgICAgICAgICAgIHtOVUxMfSwgNDQwNCwgInVkcCJ9LAoreyJkcy1tYWlsIiwgICAgICAgICAgICB7TlVMTH0sIDQ0MDUsICJ0Y3AifSwKK3siZHMtbWFpbCIsICAgICAgICAgICAge05VTEx9LCA0NDA1LCAidWRwIn0sCit7ImRzLXNscCIsICAgICAgICAgICAgIHtOVUxMfSwgNDQwNiwgInRjcCJ9LAoreyJkcy1zbHAiLCAgICAgICAgICAgICB7TlVMTH0sIDQ0MDYsICJ1ZHAifSwKK3sibmFjYWdlbnQiLCAgICAgICAgICAge05VTEx9LCA0NDA3LCAidGNwIn0sCit7InNsc2NjIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDQwOCwgInRjcCJ9LAoreyJuZXRjYWJpbmV0LWNvbSIsICAgICB7TlVMTH0sIDQ0MDksICJ0Y3AifSwKK3siaXR3by1zZXJ2ZXIiLCAgICAgICAge05VTEx9LCA0NDEwLCAidGNwIn0sCit7Im5ldHJvY2tleTYiLCAgICAgICAgIHtOVUxMfSwgNDQyNSwgInRjcCJ9LAoreyJuZXRyb2NrZXk2IiwgICAgICAgICB7TlVMTH0sIDQ0MjUsICJ1ZHAifSwKK3siYmVhY29uLXBvcnQtMiIsICAgICAge05VTEx9LCA0NDI2LCAidGNwIn0sCit7ImJlYWNvbi1wb3J0LTIiLCAgICAgIHtOVUxMfSwgNDQyNiwgInVkcCJ9LAoreyJkcml6emxlIiwgICAgICAgICAgICB7TlVMTH0sIDQ0MjcsICJ0Y3AifSwKK3sib212aXNlcnZlciIsICAgICAgICAge05VTEx9LCA0NDI4LCAidGNwIn0sCit7Im9tdmlhZ2VudCIsICAgICAgICAgIHtOVUxMfSwgNDQyOSwgInRjcCJ9LAoreyJyc3Fsc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDQ0MzAsICJ0Y3AifSwKK3sicnNxbHNlcnZlciIsICAgICAgICAge05VTEx9LCA0NDMwLCAidWRwIn0sCit7IndzcGlwZSIsICAgICAgICAgICAgIHtOVUxMfSwgNDQzMSwgInRjcCJ9LAoreyJuZXRibG94IiwgICAgICAgICAgICB7TlVMTH0sIDQ0NDEsICJ1ZHAifSwKK3sic2FyaXMiLCAgICAgICAgICAgICAge05VTEx9LCA0NDQyLCAidGNwIn0sCit7InNhcmlzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDQ0MiwgInVkcCJ9LAoreyJwaGFyb3MiLCAgICAgICAgICAgICB7TlVMTH0sIDQ0NDMsICJ0Y3AifSwKK3sicGhhcm9zIiwgICAgICAgICAgICAge05VTEx9LCA0NDQzLCAidWRwIn0sCit7ImtyYjUyNCIsICAgICAgICAgICAgIHtOVUxMfSwgNDQ0NCwgInRjcCJ9LAoreyJrcmI1MjQiLCAgICAgICAgICAgICB7TlVMTH0sIDQ0NDQsICJ1ZHAifSwKK3sibnYtdmlkZW8iLCAgICAgICAgICAge05VTEx9LCA0NDQ0LCAidGNwIn0sCit7Im52LXZpZGVvIiwgICAgICAgICAgIHtOVUxMfSwgNDQ0NCwgInVkcCJ9LAoreyJ1cG5vdGlmeXAiLCAgICAgICAgICB7TlVMTH0sIDQ0NDUsICJ0Y3AifSwKK3sidXBub3RpZnlwIiwgICAgICAgICAge05VTEx9LCA0NDQ1LCAidWRwIn0sCit7Im4xLWZ3cCIsICAgICAgICAgICAgIHtOVUxMfSwgNDQ0NiwgInRjcCJ9LAoreyJuMS1md3AiLCAgICAgICAgICAgICB7TlVMTH0sIDQ0NDYsICJ1ZHAifSwKK3sibjEtcm1nbXQiLCAgICAgICAgICAge05VTEx9LCA0NDQ3LCAidGNwIn0sCit7Im4xLXJtZ210IiwgICAgICAgICAgIHtOVUxMfSwgNDQ0NywgInVkcCJ9LAoreyJhc2Mtc2xtZCIsICAgICAgICAgICB7TlVMTH0sIDQ0NDgsICJ0Y3AifSwKK3siYXNjLXNsbWQiLCAgICAgICAgICAge05VTEx9LCA0NDQ4LCAidWRwIn0sCit7InByaXZhdGV3aXJlIiwgICAgICAgIHtOVUxMfSwgNDQ0OSwgInRjcCJ9LAoreyJwcml2YXRld2lyZSIsICAgICAgICB7TlVMTH0sIDQ0NDksICJ1ZHAifSwKK3siY2FtcCIsICAgICAgICAgICAgICAge05VTEx9LCA0NDUwLCAidGNwIn0sCit7ImNhbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDQ1MCwgInVkcCJ9LAoreyJjdGlzeXN0ZW1tc2ciLCAgICAgICB7TlVMTH0sIDQ0NTEsICJ0Y3AifSwKK3siY3Rpc3lzdGVtbXNnIiwgICAgICAge05VTEx9LCA0NDUxLCAidWRwIn0sCit7ImN0aXByb2dyYW1sb2FkIiwgICAgIHtOVUxMfSwgNDQ1MiwgInRjcCJ9LAoreyJjdGlwcm9ncmFtbG9hZCIsICAgICB7TlVMTH0sIDQ0NTIsICJ1ZHAifSwKK3sibnNzYWxlcnRtZ3IiLCAgICAgICAge05VTEx9LCA0NDUzLCAidGNwIn0sCit7Im5zc2FsZXJ0bWdyIiwgICAgICAgIHtOVUxMfSwgNDQ1MywgInVkcCJ9LAoreyJuc3NhZ2VudG1nciIsICAgICAgICB7TlVMTH0sIDQ0NTQsICJ0Y3AifSwKK3sibnNzYWdlbnRtZ3IiLCAgICAgICAge05VTEx9LCA0NDU0LCAidWRwIn0sCit7InByY2hhdC11c2VyIiwgICAgICAgIHtOVUxMfSwgNDQ1NSwgInRjcCJ9LAoreyJwcmNoYXQtdXNlciIsICAgICAgICB7TlVMTH0sIDQ0NTUsICJ1ZHAifSwKK3sicHJjaGF0LXNlcnZlciIsICAgICAge05VTEx9LCA0NDU2LCAidGNwIn0sCit7InByY2hhdC1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgNDQ1NiwgInVkcCJ9LAoreyJwclJlZ2lzdGVyIiwgICAgICAgICB7TlVMTH0sIDQ0NTcsICJ0Y3AifSwKK3sicHJSZWdpc3RlciIsICAgICAgICAge05VTEx9LCA0NDU3LCAidWRwIn0sCit7Im1jcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDQ1OCwgInRjcCJ9LAoreyJtY3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ0NTgsICJ1ZHAifSwKK3siaHBzc21nbXQiLCAgICAgICAgICAge05VTEx9LCA0NDg0LCAidGNwIn0sCit7Imhwc3NtZ210IiwgICAgICAgICAgIHtOVUxMfSwgNDQ4NCwgInVkcCJ9LAoreyJhc3N5c3QtZHIiLCAgICAgICAgICB7TlVMTH0sIDQ0ODUsICJ0Y3AifSwKK3siaWNtcyIsICAgICAgICAgICAgICAge05VTEx9LCA0NDg2LCAidGNwIn0sCit7ImljbXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDQ4NiwgInVkcCJ9LAoreyJwcmV4LXRjcCIsICAgICAgICAgICB7TlVMTH0sIDQ0ODcsICJ0Y3AifSwKK3siYXdhY3MtaWNlIiwgICAgICAgICAge05VTEx9LCA0NDg4LCAidGNwIn0sCit7ImF3YWNzLWljZSIsICAgICAgICAgIHtOVUxMfSwgNDQ4OCwgInVkcCJ9LAoreyJpcHNlYy1uYXQtdCIsICAgICAgICB7TlVMTH0sIDQ1MDAsICJ0Y3AifSwKK3siaXBzZWMtbmF0LXQiLCAgICAgICAge05VTEx9LCA0NTAwLCAidWRwIn0sCit7ImVocyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDUzNSwgInRjcCJ9LAoreyJlaHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ1MzUsICJ1ZHAifSwKK3siZWhzLXNzbCIsICAgICAgICAgICAge05VTEx9LCA0NTM2LCAidGNwIn0sCit7ImVocy1zc2wiLCAgICAgICAgICAgIHtOVUxMfSwgNDUzNiwgInVkcCJ9LAoreyJ3c3NhdXRoc3ZjIiwgICAgICAgICB7TlVMTH0sIDQ1MzcsICJ0Y3AifSwKK3sid3NzYXV0aHN2YyIsICAgICAgICAge05VTEx9LCA0NTM3LCAidWRwIn0sCit7InN3eC1nYXRlIiwgICAgICAgICAgIHtOVUxMfSwgNDUzOCwgInRjcCJ9LAoreyJzd3gtZ2F0ZSIsICAgICAgICAgICB7TlVMTH0sIDQ1MzgsICJ1ZHAifSwKK3sid29ybGRzY29yZXMiLCAgICAgICAge05VTEx9LCA0NTQ1LCAidGNwIn0sCit7Indvcmxkc2NvcmVzIiwgICAgICAgIHtOVUxMfSwgNDU0NSwgInVkcCJ9LAoreyJzZi1sbSIsICAgICAgICAgICAgICB7TlVMTH0sIDQ1NDYsICJ0Y3AifSwKK3sic2YtbG0iLCAgICAgICAgICAgICAge05VTEx9LCA0NTQ2LCAidWRwIn0sCit7Imxhbm5lci1sbSIsICAgICAgICAgIHtOVUxMfSwgNDU0NywgInRjcCJ9LAoreyJsYW5uZXItbG0iLCAgICAgICAgICB7TlVMTH0sIDQ1NDcsICJ1ZHAifSwKK3sic3luY2hyb21lc2giLCAgICAgICAge05VTEx9LCA0NTQ4LCAidGNwIn0sCit7InN5bmNocm9tZXNoIiwgICAgICAgIHtOVUxMfSwgNDU0OCwgInVkcCJ9LAoreyJhZWdhdGUiLCAgICAgICAgICAgICB7TlVMTH0sIDQ1NDksICJ0Y3AifSwKK3siYWVnYXRlIiwgICAgICAgICAgICAge05VTEx9LCA0NTQ5LCAidWRwIn0sCit7Imdkcy1hZHBwaXctZGIiLCAgICAgIHtOVUxMfSwgNDU1MCwgInRjcCJ9LAoreyJnZHMtYWRwcGl3LWRiIiwgICAgICB7TlVMTH0sIDQ1NTAsICJ1ZHAifSwKK3siaWVlZS1taWgiLCAgICAgICAgICAge05VTEx9LCA0NTUxLCAidGNwIn0sCit7ImllZWUtbWloIiwgICAgICAgICAgIHtOVUxMfSwgNDU1MSwgInVkcCJ9LAoreyJtZW5hbmRtaWNlLW1vbiIsICAgICB7TlVMTH0sIDQ1NTIsICJ0Y3AifSwKK3sibWVuYW5kbWljZS1tb24iLCAgICAge05VTEx9LCA0NTUyLCAidWRwIn0sCit7Imljc2hvc3RzdmMiLCAgICAgICAgIHtOVUxMfSwgNDU1MywgInRjcCJ9LAoreyJtc2ZycyIsICAgICAgICAgICAgICB7TlVMTH0sIDQ1NTQsICJ0Y3AifSwKK3sibXNmcnMiLCAgICAgICAgICAgICAge05VTEx9LCA0NTU0LCAidWRwIn0sCit7InJzaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDU1NSwgInRjcCJ9LAoreyJyc2lwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ1NTUsICJ1ZHAifSwKK3siZHRuLWJ1bmRsZS10Y3AiLCAgICAge05VTEx9LCA0NTU2LCAidGNwIn0sCit7ImR0bi1idW5kbGUtdWRwIiwgICAgIHtOVUxMfSwgNDU1NiwgInVkcCJ9LAoreyJtdGNldnJ1bnFzcyIsICAgICAgICB7TlVMTH0sIDQ1NTcsICJ1ZHAifSwKK3sibXRjZXZydW5xbWFuIiwgICAgICAge05VTEx9LCA0NTU4LCAidWRwIn0sCit7Imh5bGFmYXgiLCAgICAgICAgICAgIHtOVUxMfSwgNDU1OSwgInRjcCJ9LAoreyJoeWxhZmF4IiwgICAgICAgICAgICB7TlVMTH0sIDQ1NTksICJ1ZHAifSwKK3sia3d0YyIsICAgICAgICAgICAgICAge05VTEx9LCA0NTY2LCAidGNwIn0sCit7Imt3dGMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDU2NiwgInVkcCJ9LAoreyJ0cmFtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ1NjcsICJ0Y3AifSwKK3sidHJhbSIsICAgICAgICAgICAgICAge05VTEx9LCA0NTY3LCAidWRwIn0sCit7ImJtYy1yZXBvcnRpbmciLCAgICAgIHtOVUxMfSwgNDU2OCwgInRjcCJ9LAoreyJibWMtcmVwb3J0aW5nIiwgICAgICB7TlVMTH0sIDQ1NjgsICJ1ZHAifSwKK3siaWF4IiwgICAgICAgICAgICAgICAge05VTEx9LCA0NTY5LCAidGNwIn0sCit7ImlheCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDU2OSwgInVkcCJ9LAoreyJyaWQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ1OTAsICJ0Y3AifSwKK3sibDN0LWF0LWFuIiwgICAgICAgICAge05VTEx9LCA0NTkxLCAidGNwIn0sCit7ImwzdC1hdC1hbiIsICAgICAgICAgIHtOVUxMfSwgNDU5MSwgInVkcCJ9LAoreyJocnBkLWl0aC1hdC1hbiIsICAgICB7TlVMTH0sIDQ1OTIsICJ1ZHAifSwKK3siaXB0LWFucmktYW5yaSIsICAgICAge05VTEx9LCA0NTkzLCAidGNwIn0sCit7ImlwdC1hbnJpLWFucmkiLCAgICAgIHtOVUxMfSwgNDU5MywgInVkcCJ9LAoreyJpYXMtc2Vzc2lvbiIsICAgICAgICB7TlVMTH0sIDQ1OTQsICJ0Y3AifSwKK3siaWFzLXNlc3Npb24iLCAgICAgICAge05VTEx9LCA0NTk0LCAidWRwIn0sCit7Imlhcy1wYWdpbmciLCAgICAgICAgIHtOVUxMfSwgNDU5NSwgInRjcCJ9LAoreyJpYXMtcGFnaW5nIiwgICAgICAgICB7TlVMTH0sIDQ1OTUsICJ1ZHAifSwKK3siaWFzLW5laWdoYm9yIiwgICAgICAge05VTEx9LCA0NTk2LCAidGNwIn0sCit7Imlhcy1uZWlnaGJvciIsICAgICAgIHtOVUxMfSwgNDU5NiwgInVkcCJ9LAoreyJhMjEtYW4tMXhicyIsICAgICAgICB7TlVMTH0sIDQ1OTcsICJ0Y3AifSwKK3siYTIxLWFuLTF4YnMiLCAgICAgICAge05VTEx9LCA0NTk3LCAidWRwIn0sCit7ImExNi1hbi1hbiIsICAgICAgICAgIHtOVUxMfSwgNDU5OCwgInRjcCJ9LAoreyJhMTYtYW4tYW4iLCAgICAgICAgICB7TlVMTH0sIDQ1OTgsICJ1ZHAifSwKK3siYTE3LWFuLWFuIiwgICAgICAgICAge05VTEx9LCA0NTk5LCAidGNwIn0sCit7ImExNy1hbi1hbiIsICAgICAgICAgIHtOVUxMfSwgNDU5OSwgInVkcCJ9LAoreyJwaXJhbmhhMSIsICAgICAgICAgICB7TlVMTH0sIDQ2MDAsICJ0Y3AifSwKK3sicGlyYW5oYTEiLCAgICAgICAgICAge05VTEx9LCA0NjAwLCAidWRwIn0sCit7InBpcmFuaGEyIiwgICAgICAgICAgIHtOVUxMfSwgNDYwMSwgInRjcCJ9LAoreyJwaXJhbmhhMiIsICAgICAgICAgICB7TlVMTH0sIDQ2MDEsICJ1ZHAifSwKK3sibXRzc2VydmVyIiwgICAgICAgICAge05VTEx9LCA0NjAyLCAidGNwIn0sCit7Im1lbmFuZG1pY2UtdXBnIiwgICAgIHtOVUxMfSwgNDYwMywgInRjcCJ9LAoreyJwbGF5c3RhMi1hcHAiLCAgICAgICB7TlVMTH0sIDQ2NTgsICJ0Y3AifSwKK3sicGxheXN0YTItYXBwIiwgICAgICAge05VTEx9LCA0NjU4LCAidWRwIn0sCit7InBsYXlzdGEyLWxvYiIsICAgICAgIHtOVUxMfSwgNDY1OSwgInRjcCJ9LAoreyJwbGF5c3RhMi1sb2IiLCAgICAgICB7TlVMTH0sIDQ2NTksICJ1ZHAifSwKK3sic21hY2xtZ3IiLCAgICAgICAgICAge05VTEx9LCA0NjYwLCAidGNwIn0sCit7InNtYWNsbWdyIiwgICAgICAgICAgIHtOVUxMfSwgNDY2MCwgInVkcCJ9LAoreyJrYXIyb3VjaGUiLCAgICAgICAgICB7TlVMTH0sIDQ2NjEsICJ0Y3AifSwKK3sia2FyMm91Y2hlIiwgICAgICAgICAge05VTEx9LCA0NjYxLCAidWRwIn0sCit7Im9tcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDY2MiwgInRjcCJ9LAoreyJvbXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ2NjIsICJ1ZHAifSwKK3sibm90ZWl0IiwgICAgICAgICAgICAge05VTEx9LCA0NjYzLCAidGNwIn0sCit7Im5vdGVpdCIsICAgICAgICAgICAgIHtOVUxMfSwgNDY2MywgInVkcCJ9LAoreyJlbXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ2NjQsICJ0Y3AifSwKK3siZW1zIiwgICAgICAgICAgICAgICAge05VTEx9LCA0NjY0LCAidWRwIn0sCit7ImNvbnRjbGllbnRtcyIsICAgICAgIHtOVUxMfSwgNDY2NSwgInRjcCJ9LAoreyJjb250Y2xpZW50bXMiLCAgICAgICB7TlVMTH0sIDQ2NjUsICJ1ZHAifSwKK3siZXBvcnRjb21tIiwgICAgICAgICAge05VTEx9LCA0NjY2LCAidGNwIn0sCit7ImVwb3J0Y29tbSIsICAgICAgICAgIHtOVUxMfSwgNDY2NiwgInVkcCJ9LAoreyJtbWFjb21tIiwgICAgICAgICAgICB7TlVMTH0sIDQ2NjcsICJ0Y3AifSwKK3sibW1hY29tbSIsICAgICAgICAgICAge05VTEx9LCA0NjY3LCAidWRwIn0sCit7Im1tYWVkcyIsICAgICAgICAgICAgIHtOVUxMfSwgNDY2OCwgInRjcCJ9LAoreyJtbWFlZHMiLCAgICAgICAgICAgICB7TlVMTH0sIDQ2NjgsICJ1ZHAifSwKK3siZXBvcnRjb21tZGF0YSIsICAgICAge05VTEx9LCA0NjY5LCAidGNwIn0sCit7ImVwb3J0Y29tbWRhdGEiLCAgICAgIHtOVUxMfSwgNDY2OSwgInVkcCJ9LAoreyJsaWdodCIsICAgICAgICAgICAgICB7TlVMTH0sIDQ2NzAsICJ0Y3AifSwKK3sibGlnaHQiLCAgICAgICAgICAgICAge05VTEx9LCA0NjcwLCAidWRwIn0sCit7ImFjdGVyIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDY3MSwgInRjcCJ9LAoreyJhY3RlciIsICAgICAgICAgICAgICB7TlVMTH0sIDQ2NzEsICJ1ZHAifSwKK3sicmZhIiwgICAgICAgICAgICAgICAge05VTEx9LCA0NjcyLCAidGNwIn0sCit7InJmYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDY3MiwgInVkcCJ9LAoreyJjeHdzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ2NzMsICJ0Y3AifSwKK3siY3h3cyIsICAgICAgICAgICAgICAge05VTEx9LCA0NjczLCAidWRwIn0sCit7ImFwcGlxLW1nbXQiLCAgICAgICAgIHtOVUxMfSwgNDY3NCwgInRjcCJ9LAoreyJhcHBpcS1tZ210IiwgICAgICAgICB7TlVMTH0sIDQ2NzQsICJ1ZHAifSwKK3siZGhjdC1zdGF0dXMiLCAgICAgICAge05VTEx9LCA0Njc1LCAidGNwIn0sCit7ImRoY3Qtc3RhdHVzIiwgICAgICAgIHtOVUxMfSwgNDY3NSwgInVkcCJ9LAoreyJkaGN0LWFsZXJ0cyIsICAgICAgICB7TlVMTH0sIDQ2NzYsICJ0Y3AifSwKK3siZGhjdC1hbGVydHMiLCAgICAgICAge05VTEx9LCA0Njc2LCAidWRwIn0sCit7ImJjcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDY3NywgInRjcCJ9LAoreyJiY3MiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ2NzcsICJ1ZHAifSwKK3sidHJhdmVyc2FsIiwgICAgICAgICAge05VTEx9LCA0Njc4LCAidGNwIn0sCit7InRyYXZlcnNhbCIsICAgICAgICAgIHtOVUxMfSwgNDY3OCwgInVkcCJ9LAoreyJtZ2VzdXBlcnZpc2lvbiIsICAgICB7TlVMTH0sIDQ2NzksICJ0Y3AifSwKK3sibWdlc3VwZXJ2aXNpb24iLCAgICAge05VTEx9LCA0Njc5LCAidWRwIn0sCit7Im1nZW1hbmFnZW1lbnQiLCAgICAgIHtOVUxMfSwgNDY4MCwgInRjcCJ9LAoreyJtZ2VtYW5hZ2VtZW50IiwgICAgICB7TlVMTH0sIDQ2ODAsICJ1ZHAifSwKK3sicGFybGlhbnQiLCAgICAgICAgICAge05VTEx9LCA0NjgxLCAidGNwIn0sCit7InBhcmxpYW50IiwgICAgICAgICAgIHtOVUxMfSwgNDY4MSwgInVkcCJ9LAoreyJmaW5pc2FyIiwgICAgICAgICAgICB7TlVMTH0sIDQ2ODIsICJ0Y3AifSwKK3siZmluaXNhciIsICAgICAgICAgICAge05VTEx9LCA0NjgyLCAidWRwIn0sCit7InNwaWtlIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDY4MywgInRjcCJ9LAoreyJzcGlrZSIsICAgICAgICAgICAgICB7TlVMTH0sIDQ2ODMsICJ1ZHAifSwKK3sicmZpZC1ycDEiLCAgICAgICAgICAge05VTEx9LCA0Njg0LCAidGNwIn0sCit7InJmaWQtcnAxIiwgICAgICAgICAgIHtOVUxMfSwgNDY4NCwgInVkcCJ9LAoreyJhdXRvcGFjIiwgICAgICAgICAgICB7TlVMTH0sIDQ2ODUsICJ0Y3AifSwKK3siYXV0b3BhYyIsICAgICAgICAgICAge05VTEx9LCA0Njg1LCAidWRwIn0sCit7Im1zcC1vcyIsICAgICAgICAgICAgIHtOVUxMfSwgNDY4NiwgInRjcCJ9LAoreyJtc3Atb3MiLCAgICAgICAgICAgICB7TlVMTH0sIDQ2ODYsICJ1ZHAifSwKK3sibnN0IiwgICAgICAgICAgICAgICAge05VTEx9LCA0Njg3LCAidGNwIn0sCit7Im5zdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDY4NywgInVkcCJ9LAoreyJtb2JpbGUtcDJwIiwgICAgICAgICB7TlVMTH0sIDQ2ODgsICJ0Y3AifSwKK3sibW9iaWxlLXAycCIsICAgICAgICAge05VTEx9LCA0Njg4LCAidWRwIn0sCit7ImFsdG92YWNlbnRyYWwiLCAgICAgIHtOVUxMfSwgNDY4OSwgInRjcCJ9LAoreyJhbHRvdmFjZW50cmFsIiwgICAgICB7TlVMTH0sIDQ2ODksICJ1ZHAifSwKK3sicHJlbHVkZSIsICAgICAgICAgICAge05VTEx9LCA0NjkwLCAidGNwIn0sCit7InByZWx1ZGUiLCAgICAgICAgICAgIHtOVUxMfSwgNDY5MCwgInVkcCJ9LAoreyJtdG4iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ2OTEsICJ0Y3AifSwKK3sibXRuIiwgICAgICAgICAgICAgICAge05VTEx9LCA0NjkxLCAidWRwIn0sCit7ImNvbnNwaXJhY3kiLCAgICAgICAgIHtOVUxMfSwgNDY5MiwgInRjcCJ9LAoreyJjb25zcGlyYWN5IiwgICAgICAgICB7TlVMTH0sIDQ2OTIsICJ1ZHAifSwKK3sibmV0eG1zLWFnZW50IiwgICAgICAge05VTEx9LCA0NzAwLCAidGNwIn0sCit7Im5ldHhtcy1hZ2VudCIsICAgICAgIHtOVUxMfSwgNDcwMCwgInVkcCJ9LAoreyJuZXR4bXMtbWdtdCIsICAgICAgICB7TlVMTH0sIDQ3MDEsICJ0Y3AifSwKK3sibmV0eG1zLW1nbXQiLCAgICAgICAge05VTEx9LCA0NzAxLCAidWRwIn0sCit7Im5ldHhtcy1zeW5jIiwgICAgICAgIHtOVUxMfSwgNDcwMiwgInRjcCJ9LAoreyJuZXR4bXMtc3luYyIsICAgICAgICB7TlVMTH0sIDQ3MDIsICJ1ZHAifSwKK3sibnBxZXMtdGVzdCIsICAgICAgICAge05VTEx9LCA0NzAzLCAidGNwIn0sCit7ImFzc3VyaWEtaW5zIiwgICAgICAgIHtOVUxMfSwgNDcwNCwgInRjcCJ9LAoreyJ0cnVja3N0YXIiLCAgICAgICAgICB7TlVMTH0sIDQ3MjUsICJ0Y3AifSwKK3sidHJ1Y2tzdGFyIiwgICAgICAgICAge05VTEx9LCA0NzI1LCAidWRwIn0sCit7ImEyNi1mYXAtZmd3IiwgICAgICAgIHtOVUxMfSwgNDcyNiwgInVkcCJ9LAoreyJmY2lzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ3MjcsICJ0Y3AifSwKK3siZmNpcy1kaXNjIiwgICAgICAgICAge05VTEx9LCA0NzI3LCAidWRwIn0sCit7ImNhcG11eCIsICAgICAgICAgICAgIHtOVUxMfSwgNDcyOCwgInRjcCJ9LAoreyJjYXBtdXgiLCAgICAgICAgICAgICB7TlVMTH0sIDQ3MjgsICJ1ZHAifSwKK3siZ3NtdGFwIiwgICAgICAgICAgICAge05VTEx9LCA0NzI5LCAidWRwIn0sCit7ImdlYXJtYW4iLCAgICAgICAgICAgIHtOVUxMfSwgNDczMCwgInRjcCJ9LAoreyJnZWFybWFuIiwgICAgICAgICAgICB7TlVMTH0sIDQ3MzAsICJ1ZHAifSwKK3sicmVtY2FwIiwgICAgICAgICAgICAge05VTEx9LCA0NzMxLCAidGNwIn0sCit7Im9obXRyaWdnZXIiLCAgICAgICAgIHtOVUxMfSwgNDczMiwgInVkcCJ9LAoreyJyZXNvcmNzIiwgICAgICAgICAgICB7TlVMTH0sIDQ3MzMsICJ0Y3AifSwKK3siaXBkci1zcCIsICAgICAgICAgICAge05VTEx9LCA0NzM3LCAidGNwIn0sCit7ImlwZHItc3AiLCAgICAgICAgICAgIHtOVUxMfSwgNDczNywgInVkcCJ9LAoreyJzb2xlcmEtbHBuIiwgICAgICAgICB7TlVMTH0sIDQ3MzgsICJ0Y3AifSwKK3sic29sZXJhLWxwbiIsICAgICAgICAge05VTEx9LCA0NzM4LCAidWRwIn0sCit7ImlwZml4IiwgICAgICAgICAgICAgIHtOVUxMfSwgNDczOSwgInRjcCJ9LAoreyJpcGZpeCIsICAgICAgICAgICAgICB7TlVMTH0sIDQ3MzksICJ1ZHAifSwKK3siaXBmaXgiLCAgICAgICAgICAgICAge05VTEx9LCA0NzM5LCAic2N0cCJ9LAoreyJpcGZpeHMiLCAgICAgICAgICAgICB7TlVMTH0sIDQ3NDAsICJ0Y3AifSwKK3siaXBmaXhzIiwgICAgICAgICAgICAge05VTEx9LCA0NzQwLCAic2N0cCJ9LAoreyJpcGZpeHMiLCAgICAgICAgICAgICB7TlVMTH0sIDQ3NDAsICJ1ZHAifSwKK3sibHVtaW1ncmQiLCAgICAgICAgICAge05VTEx9LCA0NzQxLCAidGNwIn0sCit7Imx1bWltZ3JkIiwgICAgICAgICAgIHtOVUxMfSwgNDc0MSwgInVkcCJ9LAoreyJzaWNjdCIsICAgICAgICAgICAgICB7TlVMTH0sIDQ3NDIsICJ0Y3AifSwKK3sic2ljY3Qtc2RwIiwgICAgICAgICAge05VTEx9LCA0NzQyLCAidWRwIn0sCit7Im9wZW5ocGlkIiwgICAgICAgICAgIHtOVUxMfSwgNDc0MywgInRjcCJ9LAoreyJvcGVuaHBpZCIsICAgICAgICAgICB7TlVMTH0sIDQ3NDMsICJ1ZHAifSwKK3siaWZzcCIsICAgICAgICAgICAgICAge05VTEx9LCA0NzQ0LCAidGNwIn0sCit7Imlmc3AiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDc0NCwgInVkcCJ9LAoreyJmbXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ3NDUsICJ0Y3AifSwKK3siZm1wIiwgICAgICAgICAgICAgICAge05VTEx9LCA0NzQ1LCAidWRwIn0sCit7InByb2ZpbGVtYWMiLCAgICAgICAgIHtOVUxMfSwgNDc0OSwgInRjcCJ9LAoreyJwcm9maWxlbWFjIiwgICAgICAgICB7TlVMTH0sIDQ3NDksICJ1ZHAifSwKK3sic3NhZCIsICAgICAgICAgICAgICAge05VTEx9LCA0NzUwLCAidGNwIn0sCit7InNzYWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDc1MCwgInVkcCJ9LAoreyJzcG9jcCIsICAgICAgICAgICAgICB7TlVMTH0sIDQ3NTEsICJ0Y3AifSwKK3sic3BvY3AiLCAgICAgICAgICAgICAge05VTEx9LCA0NzUxLCAidWRwIn0sCit7InNuYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDc1MiwgInRjcCJ9LAoreyJzbmFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ3NTIsICJ1ZHAifSwKK3siYmZkLW11bHRpLWN0bCIsICAgICAge05VTEx9LCA0Nzg0LCAidGNwIn0sCit7ImJmZC1tdWx0aS1jdGwiLCAgICAgIHtOVUxMfSwgNDc4NCwgInVkcCJ9LAoreyJjbmNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ3ODUsICJ1ZHAifSwKK3sic21hcnQtaW5zdGFsbCIsICAgICAge05VTEx9LCA0Nzg2LCAidGNwIn0sCit7InNpYS1jdHJsLXBsYW5lIiwgICAgIHtOVUxMfSwgNDc4NywgInRjcCJ9LAoreyJpaW1zIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ4MDAsICJ0Y3AifSwKK3siaWltcyIsICAgICAgICAgICAgICAge05VTEx9LCA0ODAwLCAidWRwIn0sCit7Iml3ZWMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDgwMSwgInRjcCJ9LAoreyJpd2VjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ4MDEsICJ1ZHAifSwKK3siaWxzcyIsICAgICAgICAgICAgICAge05VTEx9LCA0ODAyLCAidGNwIn0sCit7Imlsc3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDgwMiwgInVkcCJ9LAoreyJub3RhdGVpdCIsICAgICAgICAgICB7TlVMTH0sIDQ4MDMsICJ0Y3AifSwKK3sibm90YXRlaXQtZGlzYyIsICAgICAge05VTEx9LCA0ODAzLCAidWRwIn0sCit7ImFqYS1udHY0LWRpc2MiLCAgICAgIHtOVUxMfSwgNDgwNCwgInVkcCJ9LAoreyJodGNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ4MjcsICJ0Y3AifSwKK3siaHRjcCIsICAgICAgICAgICAgICAge05VTEx9LCA0ODI3LCAidWRwIn0sCit7InZhcmFkZXJvLTAiLCAgICAgICAgIHtOVUxMfSwgNDgzNywgInRjcCJ9LAoreyJ2YXJhZGVyby0wIiwgICAgICAgICB7TlVMTH0sIDQ4MzcsICJ1ZHAifSwKK3sidmFyYWRlcm8tMSIsICAgICAgICAge05VTEx9LCA0ODM4LCAidGNwIn0sCit7InZhcmFkZXJvLTEiLCAgICAgICAgIHtOVUxMfSwgNDgzOCwgInVkcCJ9LAoreyJ2YXJhZGVyby0yIiwgICAgICAgICB7TlVMTH0sIDQ4MzksICJ0Y3AifSwKK3sidmFyYWRlcm8tMiIsICAgICAgICAge05VTEx9LCA0ODM5LCAidWRwIn0sCit7Im9wY3VhLXRjcCIsICAgICAgICAgIHtOVUxMfSwgNDg0MCwgInRjcCJ9LAoreyJvcGN1YS11ZHAiLCAgICAgICAgICB7TlVMTH0sIDQ4NDAsICJ1ZHAifSwKK3sicXVvc2EiLCAgICAgICAgICAgICAge05VTEx9LCA0ODQxLCAidGNwIn0sCit7InF1b3NhIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDg0MSwgInVkcCJ9LAoreyJndy1hc3YiLCAgICAgICAgICAgICB7TlVMTH0sIDQ4NDIsICJ0Y3AifSwKK3siZ3ctYXN2IiwgICAgICAgICAgICAge05VTEx9LCA0ODQyLCAidWRwIn0sCit7Im9wY3VhLXRscyIsICAgICAgICAgIHtOVUxMfSwgNDg0MywgInRjcCJ9LAoreyJvcGN1YS10bHMiLCAgICAgICAgICB7TlVMTH0sIDQ4NDMsICJ1ZHAifSwKK3siZ3ctbG9nIiwgICAgICAgICAgICAge05VTEx9LCA0ODQ0LCAidGNwIn0sCit7Imd3LWxvZyIsICAgICAgICAgICAgIHtOVUxMfSwgNDg0NCwgInVkcCJ9LAoreyJ3Y3ItcmVtbGliIiwgICAgICAgICB7TlVMTH0sIDQ4NDUsICJ0Y3AifSwKK3sid2NyLXJlbWxpYiIsICAgICAgICAge05VTEx9LCA0ODQ1LCAidWRwIn0sCit7ImNvbnRhbWFjX2ljbSIsICAgICAgIHtOVUxMfSwgNDg0NiwgInRjcCJ9LAoreyJjb250YW1hY19pY20iLCAgICAgICB7TlVMTH0sIDQ4NDYsICJ1ZHAifSwKK3sid2ZjIiwgICAgICAgICAgICAgICAge05VTEx9LCA0ODQ3LCAidGNwIn0sCit7IndmYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDg0NywgInVkcCJ9LAoreyJhcHBzZXJ2LWh0dHAiLCAgICAgICB7TlVMTH0sIDQ4NDgsICJ0Y3AifSwKK3siYXBwc2Vydi1odHRwIiwgICAgICAge05VTEx9LCA0ODQ4LCAidWRwIn0sCit7ImFwcHNlcnYtaHR0cHMiLCAgICAgIHtOVUxMfSwgNDg0OSwgInRjcCJ9LAoreyJhcHBzZXJ2LWh0dHBzIiwgICAgICB7TlVMTH0sIDQ4NDksICJ1ZHAifSwKK3sic3VuLWFzLW5vZGVhZ3QiLCAgICAge05VTEx9LCA0ODUwLCAidGNwIn0sCit7InN1bi1hcy1ub2RlYWd0IiwgICAgIHtOVUxMfSwgNDg1MCwgInVkcCJ9LAoreyJkZXJieS1yZXBsaSIsICAgICAgICB7TlVMTH0sIDQ4NTEsICJ0Y3AifSwKK3siZGVyYnktcmVwbGkiLCAgICAgICAge05VTEx9LCA0ODUxLCAidWRwIn0sCit7InVuaWZ5LWRlYnVnIiwgICAgICAgIHtOVUxMfSwgNDg2NywgInRjcCJ9LAoreyJ1bmlmeS1kZWJ1ZyIsICAgICAgICB7TlVMTH0sIDQ4NjcsICJ1ZHAifSwKK3sicGhyZWxheSIsICAgICAgICAgICAge05VTEx9LCA0ODY4LCAidGNwIn0sCit7InBocmVsYXkiLCAgICAgICAgICAgIHtOVUxMfSwgNDg2OCwgInVkcCJ9LAoreyJwaHJlbGF5ZGJnIiwgICAgICAgICB7TlVMTH0sIDQ4NjksICJ0Y3AifSwKK3sicGhyZWxheWRiZyIsICAgICAgICAge05VTEx9LCA0ODY5LCAidWRwIn0sCit7ImNjLXRyYWNraW5nIiwgICAgICAgIHtOVUxMfSwgNDg3MCwgInRjcCJ9LAoreyJjYy10cmFja2luZyIsICAgICAgICB7TlVMTH0sIDQ4NzAsICJ1ZHAifSwKK3sid2lyZWQiLCAgICAgICAgICAgICAge05VTEx9LCA0ODcxLCAidGNwIn0sCit7IndpcmVkIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDg3MSwgInVkcCJ9LAoreyJ0cml0aXVtLWNhbiIsICAgICAgICB7TlVMTH0sIDQ4NzYsICJ0Y3AifSwKK3sidHJpdGl1bS1jYW4iLCAgICAgICAge05VTEx9LCA0ODc2LCAidWRwIn0sCit7ImxtY3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDg3NywgInRjcCJ9LAoreyJsbWNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ4NzcsICJ1ZHAifSwKK3siaW5zdC1kaXNjb3ZlcnkiLCAgICAge05VTEx9LCA0ODc4LCAidWRwIn0sCit7IndzZGwtZXZlbnQiLCAgICAgICAgIHtOVUxMfSwgNDg3OSwgInRjcCJ9LAoreyJoaXNsaXAiLCAgICAgICAgICAgICB7TlVMTH0sIDQ4ODAsICJ0Y3AifSwKK3sic29jcC10IiwgICAgICAgICAgICAge05VTEx9LCA0ODgxLCAidWRwIn0sCit7InNvY3AtYyIsICAgICAgICAgICAgIHtOVUxMfSwgNDg4MiwgInVkcCJ9LAoreyJ3bWxzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDQ4ODMsICJ0Y3AifSwKK3siaGl2ZXN0b3IiLCAgICAgICAgICAge05VTEx9LCA0ODg0LCAidGNwIn0sCit7ImhpdmVzdG9yIiwgICAgICAgICAgIHtOVUxMfSwgNDg4NCwgInVkcCJ9LAoreyJhYmJzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ4ODUsICJ0Y3AifSwKK3siYWJicyIsICAgICAgICAgICAgICAge05VTEx9LCA0ODg1LCAidWRwIn0sCit7Imx5c2tvbSIsICAgICAgICAgICAgIHtOVUxMfSwgNDg5NCwgInRjcCJ9LAoreyJseXNrb20iLCAgICAgICAgICAgICB7TlVMTH0sIDQ4OTQsICJ1ZHAifSwKK3sicmFkbWluLXBvcnQiLCAgICAgICAge05VTEx9LCA0ODk5LCAidGNwIn0sCit7InJhZG1pbi1wb3J0IiwgICAgICAgIHtOVUxMfSwgNDg5OSwgInVkcCJ9LAoreyJoZmNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ5MDAsICJ0Y3AifSwKK3siaGZjcyIsICAgICAgICAgICAgICAge05VTEx9LCA0OTAwLCAidWRwIn0sCit7ImZscl9hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgNDkwMSwgInRjcCJ9LAoreyJtYWdpY2NvbnRyb2wiLCAgICAgICB7TlVMTH0sIDQ5MDIsICJ0Y3AifSwKK3sibHV0YXAiLCAgICAgICAgICAgICAge05VTEx9LCA0OTEyLCAidGNwIn0sCit7Imx1dGNwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDkxMywgInRjcCJ9LAoreyJib25lcyIsICAgICAgICAgICAgICB7TlVMTH0sIDQ5MTQsICJ0Y3AifSwKK3siYm9uZXMiLCAgICAgICAgICAgICAge05VTEx9LCA0OTE0LCAidWRwIn0sCit7ImZyY3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDkxNSwgInRjcCJ9LAoreyJhdHNjLW1oLXNzYyIsICAgICAgICB7TlVMTH0sIDQ5MzcsICJ1ZHAifSwKK3siZXEtb2ZmaWNlLTQ5NDAiLCAgICAge05VTEx9LCA0OTQwLCAidGNwIn0sCit7ImVxLW9mZmljZS00OTQwIiwgICAgIHtOVUxMfSwgNDk0MCwgInVkcCJ9LAoreyJlcS1vZmZpY2UtNDk0MSIsICAgICB7TlVMTH0sIDQ5NDEsICJ0Y3AifSwKK3siZXEtb2ZmaWNlLTQ5NDEiLCAgICAge05VTEx9LCA0OTQxLCAidWRwIn0sCit7ImVxLW9mZmljZS00OTQyIiwgICAgIHtOVUxMfSwgNDk0MiwgInRjcCJ9LAoreyJlcS1vZmZpY2UtNDk0MiIsICAgICB7TlVMTH0sIDQ5NDIsICJ1ZHAifSwKK3sibXVuaW4iLCAgICAgICAgICAgICAge05VTEx9LCA0OTQ5LCAidGNwIn0sCit7Im11bmluIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDk0OSwgInVkcCJ9LAoreyJzeWJhc2VzcnZtb24iLCAgICAgICB7TlVMTH0sIDQ5NTAsICJ0Y3AifSwKK3sic3liYXNlc3J2bW9uIiwgICAgICAge05VTEx9LCA0OTUwLCAidWRwIn0sCit7InB3Z3dpbXMiLCAgICAgICAgICAgIHtOVUxMfSwgNDk1MSwgInRjcCJ9LAoreyJwd2d3aW1zIiwgICAgICAgICAgICB7TlVMTH0sIDQ5NTEsICJ1ZHAifSwKK3sic2FneHRzZHMiLCAgICAgICAgICAge05VTEx9LCA0OTUyLCAidGNwIn0sCit7InNhZ3h0c2RzIiwgICAgICAgICAgIHtOVUxMfSwgNDk1MiwgInVkcCJ9LAoreyJkYnN5bmNhcmJpdGVyIiwgICAgICB7TlVMTH0sIDQ5NTMsICJ0Y3AifSwKK3siY2Nzcy1xbW0iLCAgICAgICAgICAge05VTEx9LCA0OTY5LCAidGNwIn0sCit7ImNjc3MtcW1tIiwgICAgICAgICAgIHtOVUxMfSwgNDk2OSwgInVkcCJ9LAoreyJjY3NzLXFzbSIsICAgICAgICAgICB7TlVMTH0sIDQ5NzAsICJ0Y3AifSwKK3siY2Nzcy1xc20iLCAgICAgICAgICAge05VTEx9LCA0OTcwLCAidWRwIn0sCit7IndlYnlhc3QiLCAgICAgICAgICAgIHtOVUxMfSwgNDk4NCwgInRjcCJ9LAoreyJnZXJoY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDQ5ODUsICJ0Y3AifSwKK3sibXJpcCIsICAgICAgICAgICAgICAge05VTEx9LCA0OTg2LCAidGNwIn0sCit7Im1yaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDk4NiwgInVkcCJ9LAoreyJzbWFyLXNlLXBvcnQxIiwgICAgICB7TlVMTH0sIDQ5ODcsICJ0Y3AifSwKK3sic21hci1zZS1wb3J0MSIsICAgICAge05VTEx9LCA0OTg3LCAidWRwIn0sCit7InNtYXItc2UtcG9ydDIiLCAgICAgIHtOVUxMfSwgNDk4OCwgInRjcCJ9LAoreyJzbWFyLXNlLXBvcnQyIiwgICAgICB7TlVMTH0sIDQ5ODgsICJ1ZHAifSwKK3sicGFyYWxsZWwiLCAgICAgICAgICAge05VTEx9LCA0OTg5LCAidGNwIn0sCit7InBhcmFsbGVsIiwgICAgICAgICAgIHtOVUxMfSwgNDk4OSwgInVkcCJ9LAoreyJidXN5Y2FsIiwgICAgICAgICAgICB7TlVMTH0sIDQ5OTAsICJ0Y3AifSwKK3siYnVzeWNhbCIsICAgICAgICAgICAge05VTEx9LCA0OTkwLCAidWRwIn0sCit7InZydCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDk5MSwgInRjcCJ9LAoreyJ2cnQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ5OTEsICJ1ZHAifSwKK3siaGZjcy1tYW5hZ2VyIiwgICAgICAge05VTEx9LCA0OTk5LCAidGNwIn0sCit7ImhmY3MtbWFuYWdlciIsICAgICAgIHtOVUxMfSwgNDk5OSwgInVkcCJ9LAoreyJjb21tcGxleC1tYWluIiwgICAgICB7TlVMTH0sIDUwMDAsICJ0Y3AifSwKK3siY29tbXBsZXgtbWFpbiIsICAgICAge05VTEx9LCA1MDAwLCAidWRwIn0sCit7ImNvbW1wbGV4LWxpbmsiLCAgICAgIHtOVUxMfSwgNTAwMSwgInRjcCJ9LAoreyJjb21tcGxleC1saW5rIiwgICAgICB7TlVMTH0sIDUwMDEsICJ1ZHAifSwKK3sicmZlIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MDAyLCAidGNwIn0sCit7InJmZSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTAwMiwgInVkcCJ9LAoreyJmbXByby1pbnRlcm5hbCIsICAgICB7TlVMTH0sIDUwMDMsICJ0Y3AifSwKK3siZm1wcm8taW50ZXJuYWwiLCAgICAge05VTEx9LCA1MDAzLCAidWRwIn0sCit7ImF2dC1wcm9maWxlLTEiLCAgICAgIHtOVUxMfSwgNTAwNCwgInRjcCJ9LAoreyJhdnQtcHJvZmlsZS0xIiwgICAgICB7TlVMTH0sIDUwMDQsICJ1ZHAifSwKK3siYXZ0LXByb2ZpbGUtMSIsICAgICAge05VTEx9LCA1MDA0LCAiZGNjcCJ9LAoreyJhdnQtcHJvZmlsZS0yIiwgICAgICB7TlVMTH0sIDUwMDUsICJ0Y3AifSwKK3siYXZ0LXByb2ZpbGUtMiIsICAgICAge05VTEx9LCA1MDA1LCAidWRwIn0sCit7ImF2dC1wcm9maWxlLTIiLCAgICAgIHtOVUxMfSwgNTAwNSwgImRjY3AifSwKK3sid3NtLXNlcnZlciIsICAgICAgICAge05VTEx9LCA1MDA2LCAidGNwIn0sCit7IndzbS1zZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgNTAwNiwgInVkcCJ9LAoreyJ3c20tc2VydmVyLXNzbCIsICAgICB7TlVMTH0sIDUwMDcsICJ0Y3AifSwKK3sid3NtLXNlcnZlci1zc2wiLCAgICAge05VTEx9LCA1MDA3LCAidWRwIn0sCit7InN5bmFwc2lzLWVkZ2UiLCAgICAgIHtOVUxMfSwgNTAwOCwgInRjcCJ9LAoreyJzeW5hcHNpcy1lZGdlIiwgICAgICB7TlVMTH0sIDUwMDgsICJ1ZHAifSwKK3sid2luZnMiLCAgICAgICAgICAgICAge05VTEx9LCA1MDA5LCAidGNwIn0sCit7IndpbmZzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTAwOSwgInVkcCJ9LAoreyJ0ZWxlbHBhdGhzdGFydCIsICAgICB7TlVMTH0sIDUwMTAsICJ0Y3AifSwKK3sidGVsZWxwYXRoc3RhcnQiLCAgICAge05VTEx9LCA1MDEwLCAidWRwIn0sCit7InRlbGVscGF0aGF0dGFjayIsICAgIHtOVUxMfSwgNTAxMSwgInRjcCJ9LAoreyJ0ZWxlbHBhdGhhdHRhY2siLCAgICB7TlVMTH0sIDUwMTEsICJ1ZHAifSwKK3sibnNwIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MDEyLCAidGNwIn0sCit7Im5zcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTAxMiwgInVkcCJ9LAoreyJmbXByby12NiIsICAgICAgICAgICB7TlVMTH0sIDUwMTMsICJ0Y3AifSwKK3siZm1wcm8tdjYiLCAgICAgICAgICAge05VTEx9LCA1MDEzLCAidWRwIn0sCit7Im9ucHNvY2tldCIsICAgICAgICAgIHtOVUxMfSwgNTAxNCwgInVkcCJ9LAoreyJmbXdwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwMTUsICJ0Y3AifSwKK3siemVuZ2lua3lvLTEiLCAgICAgICAge05VTEx9LCA1MDIwLCAidGNwIn0sCit7Inplbmdpbmt5by0xIiwgICAgICAgIHtOVUxMfSwgNTAyMCwgInVkcCJ9LAoreyJ6ZW5naW5reW8tMiIsICAgICAgICB7TlVMTH0sIDUwMjEsICJ0Y3AifSwKK3siemVuZ2lua3lvLTIiLCAgICAgICAge05VTEx9LCA1MDIxLCAidWRwIn0sCit7Im1pY2UiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTAyMiwgInRjcCJ9LAoreyJtaWNlIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwMjIsICJ1ZHAifSwKK3siaHR1aWxzcnYiLCAgICAgICAgICAge05VTEx9LCA1MDIzLCAidGNwIn0sCit7Imh0dWlsc3J2IiwgICAgICAgICAgIHtOVUxMfSwgNTAyMywgInVkcCJ9LAoreyJzY3BpLXRlbG5ldCIsICAgICAgICB7TlVMTH0sIDUwMjQsICJ0Y3AifSwKK3sic2NwaS10ZWxuZXQiLCAgICAgICAge05VTEx9LCA1MDI0LCAidWRwIn0sCit7InNjcGktcmF3IiwgICAgICAgICAgIHtOVUxMfSwgNTAyNSwgInRjcCJ9LAoreyJzY3BpLXJhdyIsICAgICAgICAgICB7TlVMTH0sIDUwMjUsICJ1ZHAifSwKK3sic3RyZXhlYy1kIiwgICAgICAgICAge05VTEx9LCA1MDI2LCAidGNwIn0sCit7InN0cmV4ZWMtZCIsICAgICAgICAgIHtOVUxMfSwgNTAyNiwgInVkcCJ9LAoreyJzdHJleGVjLXMiLCAgICAgICAgICB7TlVMTH0sIDUwMjcsICJ0Y3AifSwKK3sic3RyZXhlYy1zIiwgICAgICAgICAge05VTEx9LCA1MDI3LCAidWRwIn0sCit7InF2ciIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTAyOCwgInRjcCJ9LAoreyJpbmZvYnJpZ2h0IiwgICAgICAgICB7TlVMTH0sIDUwMjksICJ0Y3AifSwKK3siaW5mb2JyaWdodCIsICAgICAgICAge05VTEx9LCA1MDI5LCAidWRwIn0sCit7InN1cmZwYXNzIiwgICAgICAgICAgIHtOVUxMfSwgNTAzMCwgInRjcCJ9LAoreyJzdXJmcGFzcyIsICAgICAgICAgICB7TlVMTH0sIDUwMzAsICJ1ZHAifSwKK3siZG1wIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MDMxLCAidWRwIn0sCit7ImFzbmFhY2NlbGVyOGRiIiwgICAgIHtOVUxMfSwgNTA0MiwgInRjcCJ9LAoreyJhc25hYWNjZWxlcjhkYiIsICAgICB7TlVMTH0sIDUwNDIsICJ1ZHAifSwKK3sic3d4YWRtaW4iLCAgICAgICAgICAge05VTEx9LCA1MDQzLCAidGNwIn0sCit7InN3eGFkbWluIiwgICAgICAgICAgIHtOVUxMfSwgNTA0MywgInVkcCJ9LAoreyJseGktZXZudHN2YyIsICAgICAgICB7TlVMTH0sIDUwNDQsICJ0Y3AifSwKK3sibHhpLWV2bnRzdmMiLCAgICAgICAge05VTEx9LCA1MDQ0LCAidWRwIn0sCit7Im9zcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTA0NSwgInRjcCJ9LAoreyJ2cG0tdWRwIiwgICAgICAgICAgICB7TlVMTH0sIDUwNDYsICJ1ZHAifSwKK3siaXNjYXBlIiwgICAgICAgICAgICAge05VTEx9LCA1MDQ3LCAidWRwIn0sCit7InRleGFpIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTA0OCwgInRjcCJ9LAoreyJpdm9jYWxpemUiLCAgICAgICAgICB7TlVMTH0sIDUwNDksICJ0Y3AifSwKK3siaXZvY2FsaXplIiwgICAgICAgICAge05VTEx9LCA1MDQ5LCAidWRwIn0sCit7Im1tY2MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTA1MCwgInRjcCJ9LAoreyJtbWNjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwNTAsICJ1ZHAifSwKK3siaXRhLWFnZW50IiwgICAgICAgICAge05VTEx9LCA1MDUxLCAidGNwIn0sCit7Iml0YS1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgNTA1MSwgInVkcCJ9LAoreyJpdGEtbWFuYWdlciIsICAgICAgICB7TlVMTH0sIDUwNTIsICJ0Y3AifSwKK3siaXRhLW1hbmFnZXIiLCAgICAgICAge05VTEx9LCA1MDUyLCAidWRwIn0sCit7InJsbSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTA1MywgInRjcCJ9LAoreyJybG0tYWRtaW4iLCAgICAgICAgICB7TlVMTH0sIDUwNTQsICJ0Y3AifSwKK3sidW5vdCIsICAgICAgICAgICAgICAge05VTEx9LCA1MDU1LCAidGNwIn0sCit7InVub3QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTA1NSwgInVkcCJ9LAoreyJpbnRlY29tLXBzMSIsICAgICAgICB7TlVMTH0sIDUwNTYsICJ0Y3AifSwKK3siaW50ZWNvbS1wczEiLCAgICAgICAge05VTEx9LCA1MDU2LCAidWRwIn0sCit7ImludGVjb20tcHMyIiwgICAgICAgIHtOVUxMfSwgNTA1NywgInRjcCJ9LAoreyJpbnRlY29tLXBzMiIsICAgICAgICB7TlVMTH0sIDUwNTcsICJ1ZHAifSwKK3sibG9jdXMtZGlzYyIsICAgICAgICAge05VTEx9LCA1MDU4LCAidWRwIn0sCit7InNkcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTA1OSwgInRjcCJ9LAoreyJzZHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUwNTksICJ1ZHAifSwKK3sic2lwIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MDYwLCAidGNwIn0sCit7InNpcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTA2MCwgInVkcCJ9LAoreyJzaXAtdGxzIiwgICAgICAgICAgICB7TlVMTH0sIDUwNjEsICJ0Y3AifSwKK3sic2lwLXRscyIsICAgICAgICAgICAge05VTEx9LCA1MDYxLCAidWRwIn0sCit7Im5hLWxvY2FsaXNlIiwgICAgICAgIHtOVUxMfSwgNTA2MiwgInRjcCJ9LAoreyJuYS1sb2NhbGlzZSIsICAgICAgICB7TlVMTH0sIDUwNjIsICJ1ZHAifSwKK3siY3NycGMiLCAgICAgICAgICAgICAge05VTEx9LCA1MDYzLCAidGNwIn0sCit7ImNhLTEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTA2NCwgInRjcCJ9LAoreyJjYS0xIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwNjQsICJ1ZHAifSwKK3siY2EtMiIsICAgICAgICAgICAgICAge05VTEx9LCA1MDY1LCAidGNwIn0sCit7ImNhLTIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTA2NSwgInVkcCJ9LAoreyJzdGFuYWctNTA2NiIsICAgICAgICB7TlVMTH0sIDUwNjYsICJ0Y3AifSwKK3sic3RhbmFnLTUwNjYiLCAgICAgICAge05VTEx9LCA1MDY2LCAidWRwIn0sCit7ImF1dGhlbnR4IiwgICAgICAgICAgIHtOVUxMfSwgNTA2NywgInRjcCJ9LAoreyJhdXRoZW50eCIsICAgICAgICAgICB7TlVMTH0sIDUwNjcsICJ1ZHAifSwKK3siYml0Zm9yZXN0c3J2IiwgICAgICAge05VTEx9LCA1MDY4LCAidGNwIn0sCit7ImktbmV0LTIwMDAtbnByIiwgICAgIHtOVUxMfSwgNTA2OSwgInRjcCJ9LAoreyJpLW5ldC0yMDAwLW5wciIsICAgICB7TlVMTH0sIDUwNjksICJ1ZHAifSwKK3sidnRzYXMiLCAgICAgICAgICAgICAge05VTEx9LCA1MDcwLCAidGNwIn0sCit7InZ0c2FzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTA3MCwgInVkcCJ9LAoreyJwb3dlcnNjaG9vbCIsICAgICAgICB7TlVMTH0sIDUwNzEsICJ0Y3AifSwKK3sicG93ZXJzY2hvb2wiLCAgICAgICAge05VTEx9LCA1MDcxLCAidWRwIn0sCit7ImF5aXlhIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTA3MiwgInRjcCJ9LAoreyJheWl5YSIsICAgICAgICAgICAgICB7TlVMTH0sIDUwNzIsICJ1ZHAifSwKK3sidGFnLXBtIiwgICAgICAgICAgICAge05VTEx9LCA1MDczLCAidGNwIn0sCit7InRhZy1wbSIsICAgICAgICAgICAgIHtOVUxMfSwgNTA3MywgInVkcCJ9LAoreyJhbGVzcXVlcnkiLCAgICAgICAgICB7TlVMTH0sIDUwNzQsICJ0Y3AifSwKK3siYWxlc3F1ZXJ5IiwgICAgICAgICAge05VTEx9LCA1MDc0LCAidWRwIn0sCit7ImNwLXNweHJwdHMiLCAgICAgICAgIHtOVUxMfSwgNTA3OSwgInVkcCJ9LAoreyJvbnNjcmVlbiIsICAgICAgICAgICB7TlVMTH0sIDUwODAsICJ0Y3AifSwKK3sib25zY3JlZW4iLCAgICAgICAgICAge05VTEx9LCA1MDgwLCAidWRwIn0sCit7InNkbC1ldHMiLCAgICAgICAgICAgIHtOVUxMfSwgNTA4MSwgInRjcCJ9LAoreyJzZGwtZXRzIiwgICAgICAgICAgICB7TlVMTH0sIDUwODEsICJ1ZHAifSwKK3sicWNwIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MDgyLCAidGNwIn0sCit7InFjcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTA4MiwgInVkcCJ9LAoreyJxZnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUwODMsICJ0Y3AifSwKK3sicWZwIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MDgzLCAidWRwIn0sCit7ImxscnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTA4NCwgInRjcCJ9LAoreyJsbHJwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwODQsICJ1ZHAifSwKK3siZW5jcnlwdGVkLWxscnAiLCAgICAge05VTEx9LCA1MDg1LCAidGNwIn0sCit7ImVuY3J5cHRlZC1sbHJwIiwgICAgIHtOVUxMfSwgNTA4NSwgInVkcCJ9LAoreyJhcHJpZ28tY3MiLCAgICAgICAgICB7TlVMTH0sIDUwODYsICJ0Y3AifSwKK3siY2FyIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MDkwLCAic2N0cCJ9LAoreyJjeHRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUwOTEsICJzY3RwIn0sCit7Im1hZ3BpZSIsICAgICAgICAgICAgIHtOVUxMfSwgNTA5MiwgInVkcCJ9LAoreyJzZW50aW5lbC1sbSIsICAgICAgICB7TlVMTH0sIDUwOTMsICJ0Y3AifSwKK3sic2VudGluZWwtbG0iLCAgICAgICAge05VTEx9LCA1MDkzLCAidWRwIn0sCit7ImhhcnQtaXAiLCAgICAgICAgICAgIHtOVUxMfSwgNTA5NCwgInRjcCJ9LAoreyJoYXJ0LWlwIiwgICAgICAgICAgICB7TlVMTH0sIDUwOTQsICJ1ZHAifSwKK3sic2VudGxtLXNydjJzcnYiLCAgICAge05VTEx9LCA1MDk5LCAidGNwIn0sCit7InNlbnRsbS1zcnYyc3J2IiwgICAgIHtOVUxMfSwgNTA5OSwgInVkcCJ9LAoreyJzb2NhbGlhIiwgICAgICAgICAgICB7TlVMTH0sIDUxMDAsICJ0Y3AifSwKK3sic29jYWxpYSIsICAgICAgICAgICAge05VTEx9LCA1MTAwLCAidWRwIn0sCit7InRhbGFyaWFuLXRjcCIsICAgICAgIHtOVUxMfSwgNTEwMSwgInRjcCJ9LAoreyJ0YWxhcmlhbi11ZHAiLCAgICAgICB7TlVMTH0sIDUxMDEsICJ1ZHAifSwKK3sib21zLW5vbnNlY3VyZSIsICAgICAge05VTEx9LCA1MTAyLCAidGNwIn0sCit7Im9tcy1ub25zZWN1cmUiLCAgICAgIHtOVUxMfSwgNTEwMiwgInVkcCJ9LAoreyJhY3RpZmlvLWMyYyIsICAgICAgICB7TlVMTH0sIDUxMDMsICJ0Y3AifSwKK3sidGlueW1lc3NhZ2UiLCAgICAgICAge05VTEx9LCA1MTA0LCAidWRwIn0sCit7Imh1Z2hlcy1hcCIsICAgICAgICAgIHtOVUxMfSwgNTEwNSwgInVkcCJ9LAoreyJ0YWVwLWFzLXN2YyIsICAgICAgICB7TlVMTH0sIDUxMTEsICJ0Y3AifSwKK3sidGFlcC1hcy1zdmMiLCAgICAgICAge05VTEx9LCA1MTExLCAidWRwIn0sCit7InBtLWNtZHN2ciIsICAgICAgICAgIHtOVUxMfSwgNTExMiwgInRjcCJ9LAoreyJwbS1jbWRzdnIiLCAgICAgICAgICB7TlVMTH0sIDUxMTIsICJ1ZHAifSwKK3siZXYtc2VydmljZXMiLCAgICAgICAge05VTEx9LCA1MTE0LCAidGNwIn0sCit7ImF1dG9idWlsZCIsICAgICAgICAgIHtOVUxMfSwgNTExNSwgInRjcCJ9LAoreyJlbWItcHJvai1jbWQiLCAgICAgICB7TlVMTH0sIDUxMTYsICJ1ZHAifSwKK3siZ3JhZGVjYW0iLCAgICAgICAgICAge05VTEx9LCA1MTE3LCAidGNwIn0sCit7Im5idC1wYyIsICAgICAgICAgICAgIHtOVUxMfSwgNTEzMywgInRjcCJ9LAoreyJuYnQtcGMiLCAgICAgICAgICAgICB7TlVMTH0sIDUxMzMsICJ1ZHAifSwKK3sicHBhY3RpdmF0aW9uIiwgICAgICAge05VTEx9LCA1MTM0LCAidGNwIn0sCit7ImVycC1zY2FsZSIsICAgICAgICAgIHtOVUxMfSwgNTEzNSwgInRjcCJ9LAoreyJtaW5vdGF1ci1zYSIsICAgICAgICB7TlVMTH0sIDUxMzYsICJ1ZHAifSwKK3siY3RzZCIsICAgICAgICAgICAgICAge05VTEx9LCA1MTM3LCAidGNwIn0sCit7ImN0c2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTEzNywgInVkcCJ9LAoreyJybW9uaXRvcl9zZWN1cmUiLCAgICB7TlVMTH0sIDUxNDUsICJ0Y3AifSwKK3sicm1vbml0b3Jfc2VjdXJlIiwgICAge05VTEx9LCA1MTQ1LCAidWRwIn0sCit7InNvY2lhbC1hbGFybSIsICAgICAgIHtOVUxMfSwgNTE0NiwgInRjcCJ9LAoreyJhdG1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUxNTAsICJ0Y3AifSwKK3siYXRtcCIsICAgICAgICAgICAgICAge05VTEx9LCA1MTUwLCAidWRwIn0sCit7ImVzcmlfc2RlIiwgICAgICAgICAgIHtOVUxMfSwgNTE1MSwgInRjcCJ9LAoreyJlc3JpX3NkZSIsICAgICAgICAgICB7TlVMTH0sIDUxNTEsICJ1ZHAifSwKK3sic2RlLWRpc2NvdmVyeSIsICAgICAge05VTEx9LCA1MTUyLCAidGNwIn0sCit7InNkZS1kaXNjb3ZlcnkiLCAgICAgIHtOVUxMfSwgNTE1MiwgInVkcCJ9LAoreyJ0b3J1eHNlcnZlciIsICAgICAgICB7TlVMTH0sIDUxNTMsICJ0Y3AifSwKK3siYnpmbGFnIiwgICAgICAgICAgICAge05VTEx9LCA1MTU0LCAidGNwIn0sCit7ImJ6ZmxhZyIsICAgICAgICAgICAgIHtOVUxMfSwgNTE1NCwgInVkcCJ9LAoreyJhc2N0cmwtYWdlbnQiLCAgICAgICB7TlVMTH0sIDUxNTUsICJ0Y3AifSwKK3siYXNjdHJsLWFnZW50IiwgICAgICAge05VTEx9LCA1MTU1LCAidWRwIn0sCit7InJ1Z2FtZW9ubGluZSIsICAgICAgIHtOVUxMfSwgNTE1NiwgInRjcCJ9LAoreyJtZWRpYXQiLCAgICAgICAgICAgICB7TlVMTH0sIDUxNTcsICJ0Y3AifSwKK3sic25tcHNzaCIsICAgICAgICAgICAge05VTEx9LCA1MTYxLCAidGNwIn0sCit7InNubXBzc2gtdHJhcCIsICAgICAgIHtOVUxMfSwgNTE2MiwgInRjcCJ9LAoreyJzYmFja3VwIiwgICAgICAgICAgICB7TlVMTH0sIDUxNjMsICJ0Y3AifSwKK3sidnBhIiwgICAgICAgICAgICAgICAge05VTEx9LCA1MTY0LCAidGNwIn0sCit7InZwYS1kaXNjIiwgICAgICAgICAgIHtOVUxMfSwgNTE2NCwgInVkcCJ9LAoreyJpZmVfaWNvcnAiLCAgICAgICAgICB7TlVMTH0sIDUxNjUsICJ0Y3AifSwKK3siaWZlX2ljb3JwIiwgICAgICAgICAge05VTEx9LCA1MTY1LCAidWRwIn0sCit7IndpbnBjcyIsICAgICAgICAgICAgIHtOVUxMfSwgNTE2NiwgInRjcCJ9LAoreyJ3aW5wY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDUxNjYsICJ1ZHAifSwKK3sic2N0ZTEwNCIsICAgICAgICAgICAge05VTEx9LCA1MTY3LCAidGNwIn0sCit7InNjdGUxMDQiLCAgICAgICAgICAgIHtOVUxMfSwgNTE2NywgInVkcCJ9LAoreyJzY3RlMzAiLCAgICAgICAgICAgICB7TlVMTH0sIDUxNjgsICJ0Y3AifSwKK3sic2N0ZTMwIiwgICAgICAgICAgICAge05VTEx9LCA1MTY4LCAidWRwIn0sCit7ImFvbCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTE5MCwgInRjcCJ9LAoreyJhb2wiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUxOTAsICJ1ZHAifSwKK3siYW9sLTEiLCAgICAgICAgICAgICAge05VTEx9LCA1MTkxLCAidGNwIn0sCit7ImFvbC0xIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTE5MSwgInVkcCJ9LAoreyJhb2wtMiIsICAgICAgICAgICAgICB7TlVMTH0sIDUxOTIsICJ0Y3AifSwKK3siYW9sLTIiLCAgICAgICAgICAgICAge05VTEx9LCA1MTkyLCAidWRwIn0sCit7ImFvbC0zIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTE5MywgInRjcCJ9LAoreyJhb2wtMyIsICAgICAgICAgICAgICB7TlVMTH0sIDUxOTMsICJ1ZHAifSwKK3siY3BzY29tbSIsICAgICAgICAgICAge05VTEx9LCA1MTk0LCAidGNwIn0sCit7InRhcmd1cy1nZXRkYXRhIiwgICAgIHtOVUxMfSwgNTIwMCwgInRjcCJ9LAoreyJ0YXJndXMtZ2V0ZGF0YSIsICAgICB7TlVMTH0sIDUyMDAsICJ1ZHAifSwKK3sidGFyZ3VzLWdldGRhdGExIiwgICAge05VTEx9LCA1MjAxLCAidGNwIn0sCit7InRhcmd1cy1nZXRkYXRhMSIsICAgIHtOVUxMfSwgNTIwMSwgInVkcCJ9LAoreyJ0YXJndXMtZ2V0ZGF0YTIiLCAgICB7TlVMTH0sIDUyMDIsICJ0Y3AifSwKK3sidGFyZ3VzLWdldGRhdGEyIiwgICAge05VTEx9LCA1MjAyLCAidWRwIn0sCit7InRhcmd1cy1nZXRkYXRhMyIsICAgIHtOVUxMfSwgNTIwMywgInRjcCJ9LAoreyJ0YXJndXMtZ2V0ZGF0YTMiLCAgICB7TlVMTH0sIDUyMDMsICJ1ZHAifSwKK3siM2V4bXAiLCAgICAgICAgICAgICAge05VTEx9LCA1MjIxLCAidGNwIn0sCit7InhtcHAtY2xpZW50IiwgICAgICAgIHtOVUxMfSwgNTIyMiwgInRjcCJ9LAoreyJocHZpcnRncnAiLCAgICAgICAgICB7TlVMTH0sIDUyMjMsICJ0Y3AifSwKK3siaHB2aXJ0Z3JwIiwgICAgICAgICAge05VTEx9LCA1MjIzLCAidWRwIn0sCit7ImhwdmlydGN0cmwiLCAgICAgICAgIHtOVUxMfSwgNTIyNCwgInRjcCJ9LAoreyJocHZpcnRjdHJsIiwgICAgICAgICB7TlVMTH0sIDUyMjQsICJ1ZHAifSwKK3siaHAtc2VydmVyIiwgICAgICAgICAge05VTEx9LCA1MjI1LCAidGNwIn0sCit7ImhwLXNlcnZlciIsICAgICAgICAgIHtOVUxMfSwgNTIyNSwgInVkcCJ9LAoreyJocC1zdGF0dXMiLCAgICAgICAgICB7TlVMTH0sIDUyMjYsICJ0Y3AifSwKK3siaHAtc3RhdHVzIiwgICAgICAgICAge05VTEx9LCA1MjI2LCAidWRwIn0sCit7InBlcmZkIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTIyNywgInRjcCJ9LAoreyJwZXJmZCIsICAgICAgICAgICAgICB7TlVMTH0sIDUyMjcsICJ1ZHAifSwKK3siaHB2cm9vbSIsICAgICAgICAgICAge05VTEx9LCA1MjI4LCAidGNwIn0sCit7ImNzZWRhZW1vbiIsICAgICAgICAgIHtOVUxMfSwgNTIzMiwgInRjcCJ9LAoreyJlbmZzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUyMzMsICJ0Y3AifSwKK3siZWVuZXQiLCAgICAgICAgICAgICAge05VTEx9LCA1MjM0LCAidGNwIn0sCit7ImVlbmV0IiwgICAgICAgICAgICAgIHtOVUxMfSwgNTIzNCwgInVkcCJ9LAoreyJnYWxheHktbmV0d29yayIsICAgICB7TlVMTH0sIDUyMzUsICJ0Y3AifSwKK3siZ2FsYXh5LW5ldHdvcmsiLCAgICAge05VTEx9LCA1MjM1LCAidWRwIn0sCit7InBhZGwyc2ltIiwgICAgICAgICAgIHtOVUxMfSwgNTIzNiwgInRjcCJ9LAoreyJwYWRsMnNpbSIsICAgICAgICAgICB7TlVMTH0sIDUyMzYsICJ1ZHAifSwKK3sibW5ldC1kaXNjb3ZlcnkiLCAgICAge05VTEx9LCA1MjM3LCAidGNwIn0sCit7Im1uZXQtZGlzY292ZXJ5IiwgICAgIHtOVUxMfSwgNTIzNywgInVkcCJ9LAoreyJkb3dudG9vbHMiLCAgICAgICAgICB7TlVMTH0sIDUyNDUsICJ0Y3AifSwKK3siZG93bnRvb2xzLWRpc2MiLCAgICAge05VTEx9LCA1MjQ1LCAidWRwIn0sCit7ImNhcHdhcC1jb250cm9sIiwgICAgIHtOVUxMfSwgNTI0NiwgInVkcCJ9LAoreyJjYXB3YXAtZGF0YSIsICAgICAgICB7TlVMTH0sIDUyNDcsICJ1ZHAifSwKK3siY2FhY3dzIiwgICAgICAgICAgICAge05VTEx9LCA1MjQ4LCAidGNwIn0sCit7ImNhYWN3cyIsICAgICAgICAgICAgIHtOVUxMfSwgNTI0OCwgInVkcCJ9LAoreyJjYWFjbGFuZzIiLCAgICAgICAgICB7TlVMTH0sIDUyNDksICJ0Y3AifSwKK3siY2FhY2xhbmcyIiwgICAgICAgICAge05VTEx9LCA1MjQ5LCAidWRwIn0sCit7InNvYWdhdGV3YXkiLCAgICAgICAgIHtOVUxMfSwgNTI1MCwgInRjcCJ9LAoreyJzb2FnYXRld2F5IiwgICAgICAgICB7TlVMTH0sIDUyNTAsICJ1ZHAifSwKK3siY2Fldm1zIiwgICAgICAgICAgICAge05VTEx9LCA1MjUxLCAidGNwIn0sCit7ImNhZXZtcyIsICAgICAgICAgICAgIHtOVUxMfSwgNTI1MSwgInVkcCJ9LAoreyJtb3Zhei1zc2MiLCAgICAgICAgICB7TlVMTH0sIDUyNTIsICJ0Y3AifSwKK3sibW92YXotc3NjIiwgICAgICAgICAge05VTEx9LCA1MjUyLCAidWRwIn0sCit7ImtwZHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTI1MywgInRjcCJ9LAoreyIzY29tLW5qYWNrLTEiLCAgICAgICB7TlVMTH0sIDUyNjQsICJ0Y3AifSwKK3siM2NvbS1uamFjay0xIiwgICAgICAge05VTEx9LCA1MjY0LCAidWRwIn0sCit7IjNjb20tbmphY2stMiIsICAgICAgIHtOVUxMfSwgNTI2NSwgInRjcCJ9LAoreyIzY29tLW5qYWNrLTIiLCAgICAgICB7TlVMTH0sIDUyNjUsICJ1ZHAifSwKK3sieG1wcC1zZXJ2ZXIiLCAgICAgICAge05VTEx9LCA1MjY5LCAidGNwIn0sCit7InhtcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTI3MCwgInRjcCJ9LAoreyJ4bXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDUyNzAsICJ1ZHAifSwKK3siY3VlbGluayIsICAgICAgICAgICAge05VTEx9LCA1MjcxLCAidGNwIn0sCit7ImN1ZWxpbmstZGlzYyIsICAgICAgIHtOVUxMfSwgNTI3MSwgInVkcCJ9LAoreyJwayIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDUyNzIsICJ0Y3AifSwKK3sicGsiLCAgICAgICAgICAgICAgICAge05VTEx9LCA1MjcyLCAidWRwIn0sCit7InhtcHAtYm9zaCIsICAgICAgICAgIHtOVUxMfSwgNTI4MCwgInRjcCJ9LAoreyJ1bmRvLWxtIiwgICAgICAgICAgICB7TlVMTH0sIDUyODEsICJ0Y3AifSwKK3sidHJhbnNtaXQtcG9ydCIsICAgICAge05VTEx9LCA1MjgyLCAidGNwIn0sCit7InRyYW5zbWl0LXBvcnQiLCAgICAgIHtOVUxMfSwgNTI4MiwgInVkcCJ9LAoreyJwcmVzZW5jZSIsICAgICAgICAgICB7TlVMTH0sIDUyOTgsICJ0Y3AifSwKK3sicHJlc2VuY2UiLCAgICAgICAgICAge05VTEx9LCA1Mjk4LCAidWRwIn0sCit7Im5sZy1kYXRhIiwgICAgICAgICAgIHtOVUxMfSwgNTI5OSwgInRjcCJ9LAoreyJubGctZGF0YSIsICAgICAgICAgICB7TlVMTH0sIDUyOTksICJ1ZHAifSwKK3siaGFjbC1oYiIsICAgICAgICAgICAge05VTEx9LCA1MzAwLCAidGNwIn0sCit7ImhhY2wtaGIiLCAgICAgICAgICAgIHtOVUxMfSwgNTMwMCwgInVkcCJ9LAoreyJoYWNsLWdzIiwgICAgICAgICAgICB7TlVMTH0sIDUzMDEsICJ0Y3AifSwKK3siaGFjbC1ncyIsICAgICAgICAgICAge05VTEx9LCA1MzAxLCAidWRwIn0sCit7ImhhY2wtY2ZnIiwgICAgICAgICAgIHtOVUxMfSwgNTMwMiwgInRjcCJ9LAoreyJoYWNsLWNmZyIsICAgICAgICAgICB7TlVMTH0sIDUzMDIsICJ1ZHAifSwKK3siaGFjbC1wcm9iZSIsICAgICAgICAge05VTEx9LCA1MzAzLCAidGNwIn0sCit7ImhhY2wtcHJvYmUiLCAgICAgICAgIHtOVUxMfSwgNTMwMywgInVkcCJ9LAoreyJoYWNsLWxvY2FsIiwgICAgICAgICB7TlVMTH0sIDUzMDQsICJ0Y3AifSwKK3siaGFjbC1sb2NhbCIsICAgICAgICAge05VTEx9LCA1MzA0LCAidWRwIn0sCit7ImhhY2wtdGVzdCIsICAgICAgICAgIHtOVUxMfSwgNTMwNSwgInRjcCJ9LAoreyJoYWNsLXRlc3QiLCAgICAgICAgICB7TlVMTH0sIDUzMDUsICJ1ZHAifSwKK3sic3VuLW1jLWdycCIsICAgICAgICAge05VTEx9LCA1MzA2LCAidGNwIn0sCit7InN1bi1tYy1ncnAiLCAgICAgICAgIHtOVUxMfSwgNTMwNiwgInVkcCJ9LAoreyJzY28tYWlwIiwgICAgICAgICAgICB7TlVMTH0sIDUzMDcsICJ0Y3AifSwKK3sic2NvLWFpcCIsICAgICAgICAgICAge05VTEx9LCA1MzA3LCAidWRwIn0sCit7ImNmZW5naW5lIiwgICAgICAgICAgIHtOVUxMfSwgNTMwOCwgInRjcCJ9LAoreyJjZmVuZ2luZSIsICAgICAgICAgICB7TlVMTH0sIDUzMDgsICJ1ZHAifSwKK3sianByaW50ZXIiLCAgICAgICAgICAge05VTEx9LCA1MzA5LCAidGNwIn0sCit7ImpwcmludGVyIiwgICAgICAgICAgIHtOVUxMfSwgNTMwOSwgInVkcCJ9LAoreyJvdXRsYXdzIiwgICAgICAgICAgICB7TlVMTH0sIDUzMTAsICJ0Y3AifSwKK3sib3V0bGF3cyIsICAgICAgICAgICAge05VTEx9LCA1MzEwLCAidWRwIn0sCit7InBlcm1hYml0LWNzIiwgICAgICAgIHtOVUxMfSwgNTMxMiwgInRjcCJ9LAoreyJwZXJtYWJpdC1jcyIsICAgICAgICB7TlVMTH0sIDUzMTIsICJ1ZHAifSwKK3sicnJkcCIsICAgICAgICAgICAgICAge05VTEx9LCA1MzEzLCAidGNwIn0sCit7InJyZHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTMxMywgInVkcCJ9LAoreyJvcGFsaXMtcmJ0LWlwYyIsICAgICB7TlVMTH0sIDUzMTQsICJ0Y3AifSwKK3sib3BhbGlzLXJidC1pcGMiLCAgICAge05VTEx9LCA1MzE0LCAidWRwIn0sCit7ImhhY2wtcG9sbCIsICAgICAgICAgIHtOVUxMfSwgNTMxNSwgInRjcCJ9LAoreyJoYWNsLXBvbGwiLCAgICAgICAgICB7TlVMTH0sIDUzMTUsICJ1ZHAifSwKK3siaHBkZXZtcyIsICAgICAgICAgICAge05VTEx9LCA1MzE2LCAidGNwIn0sCit7ImhwZGV2bXMiLCAgICAgICAgICAgIHtOVUxMfSwgNTMxNiwgInVkcCJ9LAoreyJic2ZzZXJ2ZXItem4iLCAgICAgICB7TlVMTH0sIDUzMjAsICJ0Y3AifSwKK3siYnNmc3ZyLXpuLXNzbCIsICAgICAge05VTEx9LCA1MzIxLCAidGNwIn0sCit7Imtmc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgNTM0MywgInRjcCJ9LAoreyJrZnNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDUzNDMsICJ1ZHAifSwKK3sieGtvdG9kcmNwIiwgICAgICAgICAge05VTEx9LCA1MzQ0LCAidGNwIn0sCit7Inhrb3RvZHJjcCIsICAgICAgICAgIHtOVUxMfSwgNTM0NCwgInVkcCJ9LAoreyJzdHVucyIsICAgICAgICAgICAgICB7TlVMTH0sIDUzNDksICJ0Y3AifSwKK3sic3R1bnMiLCAgICAgICAgICAgICAge05VTEx9LCA1MzQ5LCAidWRwIn0sCit7InR1cm5zIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTM0OSwgInRjcCJ9LAoreyJ0dXJucyIsICAgICAgICAgICAgICB7TlVMTH0sIDUzNDksICJ1ZHAifSwKK3sic3R1bi1iZWhhdmlvcnMiLCAgICAge05VTEx9LCA1MzQ5LCAidGNwIn0sCit7InN0dW4tYmVoYXZpb3JzIiwgICAgIHtOVUxMfSwgNTM0OSwgInVkcCJ9LAoreyJuYXQtcG1wLXN0YXR1cyIsICAgICB7TlVMTH0sIDUzNTAsICJ0Y3AifSwKK3sibmF0LXBtcC1zdGF0dXMiLCAgICAge05VTEx9LCA1MzUwLCAidWRwIn0sCit7Im5hdC1wbXAiLCAgICAgICAgICAgIHtOVUxMfSwgNTM1MSwgInRjcCJ9LAoreyJuYXQtcG1wIiwgICAgICAgICAgICB7TlVMTH0sIDUzNTEsICJ1ZHAifSwKK3siZG5zLWxscSIsICAgICAgICAgICAge05VTEx9LCA1MzUyLCAidGNwIn0sCit7ImRucy1sbHEiLCAgICAgICAgICAgIHtOVUxMfSwgNTM1MiwgInVkcCJ9LAoreyJtZG5zIiwgICAgICAgICAgICAgICB7TlVMTH0sIDUzNTMsICJ0Y3AifSwKK3sibWRucyIsICAgICAgICAgICAgICAge05VTEx9LCA1MzUzLCAidWRwIn0sCit7Im1kbnNyZXNwb25kZXIiLCAgICAgIHtOVUxMfSwgNTM1NCwgInRjcCJ9LAoreyJtZG5zcmVzcG9uZGVyIiwgICAgICB7TlVMTH0sIDUzNTQsICJ1ZHAifSwKK3sibGxtbnIiLCAgICAgICAgICAgICAge05VTEx9LCA1MzU1LCAidGNwIn0sCit7ImxsbW5yIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTM1NSwgInVkcCJ9LAoreyJtcy1zbWxiaXoiLCAgICAgICAgICB7TlVMTH0sIDUzNTYsICJ0Y3AifSwKK3sibXMtc21sYml6IiwgICAgICAgICAge05VTEx9LCA1MzU2LCAidWRwIn0sCit7IndzZGFwaSIsICAgICAgICAgICAgIHtOVUxMfSwgNTM1NywgInRjcCJ9LAoreyJ3c2RhcGkiLCAgICAgICAgICAgICB7TlVMTH0sIDUzNTcsICJ1ZHAifSwKK3sid3NkYXBpLXMiLCAgICAgICAgICAge05VTEx9LCA1MzU4LCAidGNwIn0sCit7IndzZGFwaS1zIiwgICAgICAgICAgIHtOVUxMfSwgNTM1OCwgInVkcCJ9LAoreyJtcy1hbGVydGVyIiwgICAgICAgICB7TlVMTH0sIDUzNTksICJ0Y3AifSwKK3sibXMtYWxlcnRlciIsICAgICAgICAge05VTEx9LCA1MzU5LCAidWRwIn0sCit7Im1zLXNpZGVzaG93IiwgICAgICAgIHtOVUxMfSwgNTM2MCwgInRjcCJ9LAoreyJtcy1zaWRlc2hvdyIsICAgICAgICB7TlVMTH0sIDUzNjAsICJ1ZHAifSwKK3sibXMtcy1zaWRlc2hvdyIsICAgICAge05VTEx9LCA1MzYxLCAidGNwIn0sCit7Im1zLXMtc2lkZXNob3ciLCAgICAgIHtOVUxMfSwgNTM2MSwgInVkcCJ9LAoreyJzZXJ2ZXJ3c2QyIiwgICAgICAgICB7TlVMTH0sIDUzNjIsICJ0Y3AifSwKK3sic2VydmVyd3NkMiIsICAgICAgICAge05VTEx9LCA1MzYyLCAidWRwIn0sCit7Im5ldC1wcm9qZWN0aW9uIiwgICAgIHtOVUxMfSwgNTM2MywgInRjcCJ9LAoreyJuZXQtcHJvamVjdGlvbiIsICAgICB7TlVMTH0sIDUzNjMsICJ1ZHAifSwKK3sic3RyZXNzdGVzdGVyIiwgICAgICAge05VTEx9LCA1Mzk3LCAidGNwIn0sCit7InN0cmVzc3Rlc3RlciIsICAgICAgIHtOVUxMfSwgNTM5NywgInVkcCJ9LAoreyJlbGVrdHJvbi1hZG1pbiIsICAgICB7TlVMTH0sIDUzOTgsICJ0Y3AifSwKK3siZWxla3Ryb24tYWRtaW4iLCAgICAge05VTEx9LCA1Mzk4LCAidWRwIn0sCit7InNlY3VyaXR5Y2hhc2UiLCAgICAgIHtOVUxMfSwgNTM5OSwgInRjcCJ9LAoreyJzZWN1cml0eWNoYXNlIiwgICAgICB7TlVMTH0sIDUzOTksICJ1ZHAifSwKK3siZXhjZXJwdCIsICAgICAgICAgICAge05VTEx9LCA1NDAwLCAidGNwIn0sCit7ImV4Y2VycHQiLCAgICAgICAgICAgIHtOVUxMfSwgNTQwMCwgInVkcCJ9LAoreyJleGNlcnB0cyIsICAgICAgICAgICB7TlVMTH0sIDU0MDEsICJ0Y3AifSwKK3siZXhjZXJwdHMiLCAgICAgICAgICAge05VTEx9LCA1NDAxLCAidWRwIn0sCit7Im1mdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTQwMiwgInRjcCJ9LAoreyJtZnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU0MDIsICJ1ZHAifSwKK3siaHBvbXMtY2ktbHN0biIsICAgICAge05VTEx9LCA1NDAzLCAidGNwIn0sCit7Imhwb21zLWNpLWxzdG4iLCAgICAgIHtOVUxMfSwgNTQwMywgInVkcCJ9LAoreyJocG9tcy1kcHMtbHN0biIsICAgICB7TlVMTH0sIDU0MDQsICJ0Y3AifSwKK3siaHBvbXMtZHBzLWxzdG4iLCAgICAge05VTEx9LCA1NDA0LCAidWRwIn0sCit7Im5ldHN1cHBvcnQiLCAgICAgICAgIHtOVUxMfSwgNTQwNSwgInRjcCJ9LAoreyJuZXRzdXBwb3J0IiwgICAgICAgICB7TlVMTH0sIDU0MDUsICJ1ZHAifSwKK3sic3lzdGVtaWNzLXNveCIsICAgICAge05VTEx9LCA1NDA2LCAidGNwIn0sCit7InN5c3RlbWljcy1zb3giLCAgICAgIHtOVUxMfSwgNTQwNiwgInVkcCJ9LAoreyJmb3Jlc3l0ZS1jbGVhciIsICAgICB7TlVMTH0sIDU0MDcsICJ0Y3AifSwKK3siZm9yZXN5dGUtY2xlYXIiLCAgICAge05VTEx9LCA1NDA3LCAidWRwIn0sCit7ImZvcmVzeXRlLXNlYyIsICAgICAgIHtOVUxMfSwgNTQwOCwgInRjcCJ9LAoreyJmb3Jlc3l0ZS1zZWMiLCAgICAgICB7TlVMTH0sIDU0MDgsICJ1ZHAifSwKK3sic2FsaWVudC1kdGFzcnYiLCAgICAge05VTEx9LCA1NDA5LCAidGNwIn0sCit7InNhbGllbnQtZHRhc3J2IiwgICAgIHtOVUxMfSwgNTQwOSwgInVkcCJ9LAoreyJzYWxpZW50LXVzcm1nciIsICAgICB7TlVMTH0sIDU0MTAsICJ0Y3AifSwKK3sic2FsaWVudC11c3JtZ3IiLCAgICAge05VTEx9LCA1NDEwLCAidWRwIn0sCit7ImFjdG5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgNTQxMSwgInRjcCJ9LAoreyJhY3RuZXQiLCAgICAgICAgICAgICB7TlVMTH0sIDU0MTEsICJ1ZHAifSwKK3siY29udGludXVzIiwgICAgICAgICAge05VTEx9LCA1NDEyLCAidGNwIn0sCit7ImNvbnRpbnV1cyIsICAgICAgICAgIHtOVUxMfSwgNTQxMiwgInVkcCJ9LAoreyJ3d2lvdGFsayIsICAgICAgICAgICB7TlVMTH0sIDU0MTMsICJ0Y3AifSwKK3sid3dpb3RhbGsiLCAgICAgICAgICAge05VTEx9LCA1NDEzLCAidWRwIn0sCit7InN0YXR1c2QiLCAgICAgICAgICAgIHtOVUxMfSwgNTQxNCwgInRjcCJ9LAoreyJzdGF0dXNkIiwgICAgICAgICAgICB7TlVMTH0sIDU0MTQsICJ1ZHAifSwKK3sibnMtc2VydmVyIiwgICAgICAgICAge05VTEx9LCA1NDE1LCAidGNwIn0sCit7Im5zLXNlcnZlciIsICAgICAgICAgIHtOVUxMfSwgNTQxNSwgInVkcCJ9LAoreyJzbnMtZ2F0ZXdheSIsICAgICAgICB7TlVMTH0sIDU0MTYsICJ0Y3AifSwKK3sic25zLWdhdGV3YXkiLCAgICAgICAge05VTEx9LCA1NDE2LCAidWRwIn0sCit7InNucy1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgNTQxNywgInRjcCJ9LAoreyJzbnMtYWdlbnQiLCAgICAgICAgICB7TlVMTH0sIDU0MTcsICJ1ZHAifSwKK3sibWNudHAiLCAgICAgICAgICAgICAge05VTEx9LCA1NDE4LCAidGNwIn0sCit7Im1jbnRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTQxOCwgInVkcCJ9LAoreyJkai1pY2UiLCAgICAgICAgICAgICB7TlVMTH0sIDU0MTksICJ0Y3AifSwKK3siZGotaWNlIiwgICAgICAgICAgICAge05VTEx9LCA1NDE5LCAidWRwIn0sCit7ImN5bGluay1jIiwgICAgICAgICAgIHtOVUxMfSwgNTQyMCwgInRjcCJ9LAoreyJjeWxpbmstYyIsICAgICAgICAgICB7TlVMTH0sIDU0MjAsICJ1ZHAifSwKK3sibmV0c3VwcG9ydDIiLCAgICAgICAge05VTEx9LCA1NDIxLCAidGNwIn0sCit7Im5ldHN1cHBvcnQyIiwgICAgICAgIHtOVUxMfSwgNTQyMSwgInVkcCJ9LAoreyJzYWxpZW50LW11eCIsICAgICAgICB7TlVMTH0sIDU0MjIsICJ0Y3AifSwKK3sic2FsaWVudC1tdXgiLCAgICAgICAge05VTEx9LCA1NDIyLCAidWRwIn0sCit7InZpcnR1YWx1c2VyIiwgICAgICAgIHtOVUxMfSwgNTQyMywgInRjcCJ9LAoreyJ2aXJ0dWFsdXNlciIsICAgICAgICB7TlVMTH0sIDU0MjMsICJ1ZHAifSwKK3siYmV5b25kLXJlbW90ZSIsICAgICAge05VTEx9LCA1NDI0LCAidGNwIn0sCit7ImJleW9uZC1yZW1vdGUiLCAgICAgIHtOVUxMfSwgNTQyNCwgInVkcCJ9LAoreyJici1jaGFubmVsIiwgICAgICAgICB7TlVMTH0sIDU0MjUsICJ0Y3AifSwKK3siYnItY2hhbm5lbCIsICAgICAgICAge05VTEx9LCA1NDI1LCAidWRwIn0sCit7ImRldmJhc2ljIiwgICAgICAgICAgIHtOVUxMfSwgNTQyNiwgInRjcCJ9LAoreyJkZXZiYXNpYyIsICAgICAgICAgICB7TlVMTH0sIDU0MjYsICJ1ZHAifSwKK3sic2NvLXBlZXItdHRhIiwgICAgICAge05VTEx9LCA1NDI3LCAidGNwIn0sCit7InNjby1wZWVyLXR0YSIsICAgICAgIHtOVUxMfSwgNTQyNywgInVkcCJ9LAoreyJ0ZWxhY29uc29sZSIsICAgICAgICB7TlVMTH0sIDU0MjgsICJ0Y3AifSwKK3sidGVsYWNvbnNvbGUiLCAgICAgICAge05VTEx9LCA1NDI4LCAidWRwIn0sCit7ImJhc2UiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTQyOSwgInRjcCJ9LAoreyJiYXNlIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU0MjksICJ1ZHAifSwKK3sicmFkZWMtY29ycCIsICAgICAgICAge05VTEx9LCA1NDMwLCAidGNwIn0sCit7InJhZGVjLWNvcnAiLCAgICAgICAgIHtOVUxMfSwgNTQzMCwgInVkcCJ9LAoreyJwYXJrLWFnZW50IiwgICAgICAgICB7TlVMTH0sIDU0MzEsICJ0Y3AifSwKK3sicGFyay1hZ2VudCIsICAgICAgICAge05VTEx9LCA1NDMxLCAidWRwIn0sCit7InBvc3RncmVzcWwiLCAgICAgICAgIHtOVUxMfSwgNTQzMiwgInRjcCJ9LAoreyJwb3N0Z3Jlc3FsIiwgICAgICAgICB7TlVMTH0sIDU0MzIsICJ1ZHAifSwKK3sicHlycmhvIiwgICAgICAgICAgICAge05VTEx9LCA1NDMzLCAidGNwIn0sCit7InB5cnJobyIsICAgICAgICAgICAgIHtOVUxMfSwgNTQzMywgInVkcCJ9LAoreyJzZ2ktYXJyYXlkIiwgICAgICAgICB7TlVMTH0sIDU0MzQsICJ0Y3AifSwKK3sic2dpLWFycmF5ZCIsICAgICAgICAge05VTEx9LCA1NDM0LCAidWRwIn0sCit7InNjZWFuaWNzIiwgICAgICAgICAgIHtOVUxMfSwgNTQzNSwgInRjcCJ9LAoreyJzY2VhbmljcyIsICAgICAgICAgICB7TlVMTH0sIDU0MzUsICJ1ZHAifSwKK3sicG1pcDYtY250bCIsICAgICAgICAge05VTEx9LCA1NDM2LCAidWRwIn0sCit7InBtaXA2LWRhdGEiLCAgICAgICAgIHtOVUxMfSwgNTQzNywgInVkcCJ9LAoreyJzcHNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU0NDMsICJ0Y3AifSwKK3sic3BzcyIsICAgICAgICAgICAgICAge05VTEx9LCA1NDQzLCAidWRwIn0sCit7InN1cmVib3giLCAgICAgICAgICAgIHtOVUxMfSwgNTQ1MywgInRjcCJ9LAoreyJzdXJlYm94IiwgICAgICAgICAgICB7TlVMTH0sIDU0NTMsICJ1ZHAifSwKK3siYXBjLTU0NTQiLCAgICAgICAgICAge05VTEx9LCA1NDU0LCAidGNwIn0sCit7ImFwYy01NDU0IiwgICAgICAgICAgIHtOVUxMfSwgNTQ1NCwgInVkcCJ9LAoreyJhcGMtNTQ1NSIsICAgICAgICAgICB7TlVMTH0sIDU0NTUsICJ0Y3AifSwKK3siYXBjLTU0NTUiLCAgICAgICAgICAge05VTEx9LCA1NDU1LCAidWRwIn0sCit7ImFwYy01NDU2IiwgICAgICAgICAgIHtOVUxMfSwgNTQ1NiwgInRjcCJ9LAoreyJhcGMtNTQ1NiIsICAgICAgICAgICB7TlVMTH0sIDU0NTYsICJ1ZHAifSwKK3sic2lsa21ldGVyIiwgICAgICAgICAge05VTEx9LCA1NDYxLCAidGNwIn0sCit7InNpbGttZXRlciIsICAgICAgICAgIHtOVUxMfSwgNTQ2MSwgInVkcCJ9LAoreyJ0dGwtcHVibGlzaGVyIiwgICAgICB7TlVMTH0sIDU0NjIsICJ0Y3AifSwKK3sidHRsLXB1Ymxpc2hlciIsICAgICAge05VTEx9LCA1NDYyLCAidWRwIn0sCit7InR0bHByaWNlcHJveHkiLCAgICAgIHtOVUxMfSwgNTQ2MywgInRjcCJ9LAoreyJ0dGxwcmljZXByb3h5IiwgICAgICB7TlVMTH0sIDU0NjMsICJ1ZHAifSwKK3sicXVhaWxuZXQiLCAgICAgICAgICAge05VTEx9LCA1NDY0LCAidGNwIn0sCit7InF1YWlsbmV0IiwgICAgICAgICAgIHtOVUxMfSwgNTQ2NCwgInVkcCJ9LAoreyJuZXRvcHMtYnJva2VyIiwgICAgICB7TlVMTH0sIDU0NjUsICJ0Y3AifSwKK3sibmV0b3BzLWJyb2tlciIsICAgICAge05VTEx9LCA1NDY1LCAidWRwIn0sCit7ImZjcC1hZGRyLXNydnIxIiwgICAgIHtOVUxMfSwgNTUwMCwgInRjcCJ9LAoreyJmY3AtYWRkci1zcnZyMSIsICAgICB7TlVMTH0sIDU1MDAsICJ1ZHAifSwKK3siZmNwLWFkZHItc3J2cjIiLCAgICAge05VTEx9LCA1NTAxLCAidGNwIn0sCit7ImZjcC1hZGRyLXNydnIyIiwgICAgIHtOVUxMfSwgNTUwMSwgInVkcCJ9LAoreyJmY3Atc3J2ci1pbnN0MSIsICAgICB7TlVMTH0sIDU1MDIsICJ0Y3AifSwKK3siZmNwLXNydnItaW5zdDEiLCAgICAge05VTEx9LCA1NTAyLCAidWRwIn0sCit7ImZjcC1zcnZyLWluc3QyIiwgICAgIHtOVUxMfSwgNTUwMywgInRjcCJ9LAoreyJmY3Atc3J2ci1pbnN0MiIsICAgICB7TlVMTH0sIDU1MDMsICJ1ZHAifSwKK3siZmNwLWNpY3MtZ3cxIiwgICAgICAge05VTEx9LCA1NTA0LCAidGNwIn0sCit7ImZjcC1jaWNzLWd3MSIsICAgICAgIHtOVUxMfSwgNTUwNCwgInVkcCJ9LAoreyJjaGVja291dGRiIiwgICAgICAgICB7TlVMTH0sIDU1MDUsICJ0Y3AifSwKK3siY2hlY2tvdXRkYiIsICAgICAgICAge05VTEx9LCA1NTA1LCAidWRwIn0sCit7ImFtYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTUwNiwgInRjcCJ9LAoreyJhbWMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU1MDYsICJ1ZHAifSwKK3sic2dpLWV2ZW50bW9uZCIsICAgICAge05VTEx9LCA1NTUzLCAidGNwIn0sCit7InNnaS1ldmVudG1vbmQiLCAgICAgIHtOVUxMfSwgNTU1MywgInVkcCJ9LAoreyJzZ2ktZXNwaHR0cCIsICAgICAgICB7TlVMTH0sIDU1NTQsICJ0Y3AifSwKK3sic2dpLWVzcGh0dHAiLCAgICAgICAge05VTEx9LCA1NTU0LCAidWRwIn0sCit7InBlcnNvbmFsLWFnZW50IiwgICAgIHtOVUxMfSwgNTU1NSwgInRjcCJ9LAoreyJwZXJzb25hbC1hZ2VudCIsICAgICB7TlVMTH0sIDU1NTUsICJ1ZHAifSwKK3siZnJlZWNpdiIsICAgICAgICAgICAge05VTEx9LCA1NTU2LCAidGNwIn0sCit7ImZyZWVjaXYiLCAgICAgICAgICAgIHtOVUxMfSwgNTU1NiwgInVkcCJ9LAoreyJmYXJlbmV0IiwgICAgICAgICAgICB7TlVMTH0sIDU1NTcsICJ0Y3AifSwKK3sid2VzdGVjLWNvbm5lY3QiLCAgICAge05VTEx9LCA1NTY2LCAidGNwIn0sCit7Im0tb2FwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTU2NywgInRjcCJ9LAoreyJtLW9hcCIsICAgICAgICAgICAgICB7TlVMTH0sIDU1NjcsICJ1ZHAifSwKK3sic2R0IiwgICAgICAgICAgICAgICAge05VTEx9LCA1NTY4LCAidGNwIn0sCit7InNkdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTU2OCwgInVkcCJ9LAoreyJzZG1tcCIsICAgICAgICAgICAgICB7TlVMTH0sIDU1NzMsICJ0Y3AifSwKK3sic2RtbXAiLCAgICAgICAgICAgICAge05VTEx9LCA1NTczLCAidWRwIn0sCit7ImxzaS1ib2JjYXQiLCAgICAgICAgIHtOVUxMfSwgNTU3NCwgInRjcCJ9LAoreyJvcmEtb2FwIiwgICAgICAgICAgICB7TlVMTH0sIDU1NzUsICJ0Y3AifSwKK3siZmR0cmFja3MiLCAgICAgICAgICAge05VTEx9LCA1NTc5LCAidGNwIn0sCit7InRtb3NtczAiLCAgICAgICAgICAgIHtOVUxMfSwgNTU4MCwgInRjcCJ9LAoreyJ0bW9zbXMwIiwgICAgICAgICAgICB7TlVMTH0sIDU1ODAsICJ1ZHAifSwKK3sidG1vc21zMSIsICAgICAgICAgICAge05VTEx9LCA1NTgxLCAidGNwIn0sCit7InRtb3NtczEiLCAgICAgICAgICAgIHtOVUxMfSwgNTU4MSwgInVkcCJ9LAoreyJmYWMtcmVzdG9yZSIsICAgICAgICB7TlVMTH0sIDU1ODIsICJ0Y3AifSwKK3siZmFjLXJlc3RvcmUiLCAgICAgICAge05VTEx9LCA1NTgyLCAidWRwIn0sCit7InRtby1pY29uLXN5bmMiLCAgICAgIHtOVUxMfSwgNTU4MywgInRjcCJ9LAoreyJ0bW8taWNvbi1zeW5jIiwgICAgICB7TlVMTH0sIDU1ODMsICJ1ZHAifSwKK3siYmlzLXdlYiIsICAgICAgICAgICAge05VTEx9LCA1NTg0LCAidGNwIn0sCit7ImJpcy13ZWIiLCAgICAgICAgICAgIHtOVUxMfSwgNTU4NCwgInVkcCJ9LAoreyJiaXMtc3luYyIsICAgICAgICAgICB7TlVMTH0sIDU1ODUsICJ0Y3AifSwKK3siYmlzLXN5bmMiLCAgICAgICAgICAge05VTEx9LCA1NTg1LCAidWRwIn0sCit7ImluaW5tZXNzYWdpbmciLCAgICAgIHtOVUxMfSwgNTU5NywgInRjcCJ9LAoreyJpbmlubWVzc2FnaW5nIiwgICAgICB7TlVMTH0sIDU1OTcsICJ1ZHAifSwKK3sibWN0ZmVlZCIsICAgICAgICAgICAge05VTEx9LCA1NTk4LCAidGNwIn0sCit7Im1jdGZlZWQiLCAgICAgICAgICAgIHtOVUxMfSwgNTU5OCwgInVkcCJ9LAoreyJlc2luc3RhbGwiLCAgICAgICAgICB7TlVMTH0sIDU1OTksICJ0Y3AifSwKK3siZXNpbnN0YWxsIiwgICAgICAgICAge05VTEx9LCA1NTk5LCAidWRwIn0sCit7ImVzbW1hbmFnZXIiLCAgICAgICAgIHtOVUxMfSwgNTYwMCwgInRjcCJ9LAoreyJlc21tYW5hZ2VyIiwgICAgICAgICB7TlVMTH0sIDU2MDAsICJ1ZHAifSwKK3siZXNtYWdlbnQiLCAgICAgICAgICAge05VTEx9LCA1NjAxLCAidGNwIn0sCit7ImVzbWFnZW50IiwgICAgICAgICAgIHtOVUxMfSwgNTYwMSwgInVkcCJ9LAoreyJhMS1tc2MiLCAgICAgICAgICAgICB7TlVMTH0sIDU2MDIsICJ0Y3AifSwKK3siYTEtbXNjIiwgICAgICAgICAgICAge05VTEx9LCA1NjAyLCAidWRwIn0sCit7ImExLWJzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTYwMywgInRjcCJ9LAoreyJhMS1icyIsICAgICAgICAgICAgICB7TlVMTH0sIDU2MDMsICJ1ZHAifSwKK3siYTMtc2R1bm9kZSIsICAgICAgICAge05VTEx9LCA1NjA0LCAidGNwIn0sCit7ImEzLXNkdW5vZGUiLCAgICAgICAgIHtOVUxMfSwgNTYwNCwgInVkcCJ9LAoreyJhNC1zZHVub2RlIiwgICAgICAgICB7TlVMTH0sIDU2MDUsICJ0Y3AifSwKK3siYTQtc2R1bm9kZSIsICAgICAgICAge05VTEx9LCA1NjA1LCAidWRwIn0sCit7Im5pbmFmIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTYyNywgInRjcCJ9LAoreyJuaW5hZiIsICAgICAgICAgICAgICB7TlVMTH0sIDU2MjcsICJ1ZHAifSwKK3siaHRydXN0IiwgICAgICAgICAgICAge05VTEx9LCA1NjI4LCAidGNwIn0sCit7Imh0cnVzdCIsICAgICAgICAgICAgIHtOVUxMfSwgNTYyOCwgInVkcCJ9LAoreyJzeW1hbnRlYy1zZmRiIiwgICAgICB7TlVMTH0sIDU2MjksICJ0Y3AifSwKK3sic3ltYW50ZWMtc2ZkYiIsICAgICAge05VTEx9LCA1NjI5LCAidWRwIn0sCit7InByZWNpc2UtY29tbSIsICAgICAgIHtOVUxMfSwgNTYzMCwgInRjcCJ9LAoreyJwcmVjaXNlLWNvbW0iLCAgICAgICB7TlVMTH0sIDU2MzAsICJ1ZHAifSwKK3sicGNhbnl3aGVyZWRhdGEiLCAgICAge05VTEx9LCA1NjMxLCAidGNwIn0sCit7InBjYW55d2hlcmVkYXRhIiwgICAgIHtOVUxMfSwgNTYzMSwgInVkcCJ9LAoreyJwY2FueXdoZXJlc3RhdCIsICAgICB7TlVMTH0sIDU2MzIsICJ0Y3AifSwKK3sicGNhbnl3aGVyZXN0YXQiLCAgICAge05VTEx9LCA1NjMyLCAidWRwIn0sCit7ImJlb3JsIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTYzMywgInRjcCJ9LAoreyJiZW9ybCIsICAgICAgICAgICAgICB7TlVMTH0sIDU2MzMsICJ1ZHAifSwKK3sieHBydGxkIiwgICAgICAgICAgICAge05VTEx9LCA1NjM0LCAidGNwIn0sCit7InhwcnRsZCIsICAgICAgICAgICAgIHtOVUxMfSwgNTYzNCwgInVkcCJ9LAoreyJzZm1zc28iLCAgICAgICAgICAgICB7TlVMTH0sIDU2MzUsICJ0Y3AifSwKK3sic2ZtLWRiLXNlcnZlciIsICAgICAge05VTEx9LCA1NjM2LCAidGNwIn0sCit7ImNzc2MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTYzNywgInRjcCJ9LAoreyJhbXFwcyIsICAgICAgICAgICAgICB7TlVMTH0sIDU2NzEsICJ0Y3AifSwKK3siYW1xcHMiLCAgICAgICAgICAgICAge05VTEx9LCA1NjcxLCAidWRwIn0sCit7ImFtcXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTY3MiwgInRjcCJ9LAoreyJhbXFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU2NzIsICJ1ZHAifSwKK3siYW1xcCIsICAgICAgICAgICAgICAge05VTEx9LCA1NjcyLCAic2N0cCJ9LAoreyJqbXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU2NzMsICJ0Y3AifSwKK3siam1zIiwgICAgICAgICAgICAgICAge05VTEx9LCA1NjczLCAidWRwIn0sCit7Imh5cGVyc2NzaS1wb3J0IiwgICAgIHtOVUxMfSwgNTY3NCwgInRjcCJ9LAoreyJoeXBlcnNjc2ktcG9ydCIsICAgICB7TlVMTH0sIDU2NzQsICJ1ZHAifSwKK3sidjV1YSIsICAgICAgICAgICAgICAge05VTEx9LCA1Njc1LCAidGNwIn0sCit7InY1dWEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTY3NSwgInVkcCJ9LAoreyJ2NXVhIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU2NzUsICJzY3RwIn0sCit7InJhYWRtaW4iLCAgICAgICAgICAgIHtOVUxMfSwgNTY3NiwgInRjcCJ9LAoreyJyYWFkbWluIiwgICAgICAgICAgICB7TlVMTH0sIDU2NzYsICJ1ZHAifSwKK3sicXVlc3RkYjItbG5jaHIiLCAgICAge05VTEx9LCA1Njc3LCAidGNwIn0sCit7InF1ZXN0ZGIyLWxuY2hyIiwgICAgIHtOVUxMfSwgNTY3NywgInVkcCJ9LAoreyJycmFjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU2NzgsICJ0Y3AifSwKK3sicnJhYyIsICAgICAgICAgICAgICAge05VTEx9LCA1Njc4LCAidWRwIn0sCit7ImRjY20iLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTY3OSwgInRjcCJ9LAoreyJkY2NtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU2NzksICJ1ZHAifSwKK3siYXVyaWdhLXJvdXRlciIsICAgICAge05VTEx9LCA1NjgwLCAidGNwIn0sCit7ImF1cmlnYS1yb3V0ZXIiLCAgICAgIHtOVUxMfSwgNTY4MCwgInVkcCJ9LAoreyJuY3hjcCIsICAgICAgICAgICAgICB7TlVMTH0sIDU2ODEsICJ0Y3AifSwKK3sibmN4Y3AiLCAgICAgICAgICAgICAge05VTEx9LCA1NjgxLCAidWRwIn0sCit7ImJyaWdodGNvcmUiLCAgICAgICAgIHtOVUxMfSwgNTY4MiwgInVkcCJ9LAoreyJnZ3oiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU2ODgsICJ0Y3AifSwKK3siZ2d6IiwgICAgICAgICAgICAgICAge05VTEx9LCA1Njg4LCAidWRwIn0sCit7InFtdmlkZW8iLCAgICAgICAgICAgIHtOVUxMfSwgNTY4OSwgInRjcCJ9LAoreyJxbXZpZGVvIiwgICAgICAgICAgICB7TlVMTH0sIDU2ODksICJ1ZHAifSwKK3sicHJvc2hhcmVhdWRpbyIsICAgICAge05VTEx9LCA1NzEzLCAidGNwIn0sCit7InByb3NoYXJlYXVkaW8iLCAgICAgIHtOVUxMfSwgNTcxMywgInVkcCJ9LAoreyJwcm9zaGFyZXZpZGVvIiwgICAgICB7TlVMTH0sIDU3MTQsICJ0Y3AifSwKK3sicHJvc2hhcmV2aWRlbyIsICAgICAge05VTEx9LCA1NzE0LCAidWRwIn0sCit7InByb3NoYXJlZGF0YSIsICAgICAgIHtOVUxMfSwgNTcxNSwgInRjcCJ9LAoreyJwcm9zaGFyZWRhdGEiLCAgICAgICB7TlVMTH0sIDU3MTUsICJ1ZHAifSwKK3sicHJvc2hhcmVyZXF1ZXN0IiwgICAge05VTEx9LCA1NzE2LCAidGNwIn0sCit7InByb3NoYXJlcmVxdWVzdCIsICAgIHtOVUxMfSwgNTcxNiwgInVkcCJ9LAoreyJwcm9zaGFyZW5vdGlmeSIsICAgICB7TlVMTH0sIDU3MTcsICJ0Y3AifSwKK3sicHJvc2hhcmVub3RpZnkiLCAgICAge05VTEx9LCA1NzE3LCAidWRwIn0sCit7ImRwbSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNTcxOCwgInRjcCJ9LAoreyJkcG0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU3MTgsICJ1ZHAifSwKK3siZHBtLWFnZW50IiwgICAgICAgICAge05VTEx9LCA1NzE5LCAidGNwIn0sCit7ImRwbS1hZ2VudCIsICAgICAgICAgIHtOVUxMfSwgNTcxOSwgInVkcCJ9LAoreyJtcy1saWNlbnNpbmciLCAgICAgICB7TlVMTH0sIDU3MjAsICJ0Y3AifSwKK3sibXMtbGljZW5zaW5nIiwgICAgICAge05VTEx9LCA1NzIwLCAidWRwIn0sCit7ImR0cHQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTcyMSwgInRjcCJ9LAoreyJkdHB0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3MjEsICJ1ZHAifSwKK3sibXNkZnNyIiwgICAgICAgICAgICAge05VTEx9LCA1NzIyLCAidGNwIn0sCit7Im1zZGZzciIsICAgICAgICAgICAgIHtOVUxMfSwgNTcyMiwgInVkcCJ9LAoreyJvbWhzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3MjMsICJ0Y3AifSwKK3sib21ocyIsICAgICAgICAgICAgICAge05VTEx9LCA1NzIzLCAidWRwIn0sCit7Im9tc2RrIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTcyNCwgInRjcCJ9LAoreyJvbXNkayIsICAgICAgICAgICAgICB7TlVMTH0sIDU3MjQsICJ1ZHAifSwKK3sibXMtaWxtIiwgICAgICAgICAgICAge05VTEx9LCA1NzI1LCAidGNwIn0sCit7Im1zLWlsbS1zdHMiLCAgICAgICAgIHtOVUxMfSwgNTcyNiwgInRjcCJ9LAoreyJhc2dlbmYiLCAgICAgICAgICAgICB7TlVMTH0sIDU3MjcsICJ0Y3AifSwKK3siaW8tZGlzdC1kYXRhIiwgICAgICAge05VTEx9LCA1NzI4LCAidGNwIn0sCit7ImlvLWRpc3QtZ3JvdXAiLCAgICAgIHtOVUxMfSwgNTcyOCwgInVkcCJ9LAoreyJvcGVubWFpbCIsICAgICAgICAgICB7TlVMTH0sIDU3MjksICJ0Y3AifSwKK3sib3Blbm1haWwiLCAgICAgICAgICAge05VTEx9LCA1NzI5LCAidWRwIn0sCit7InVuaWVuZyIsICAgICAgICAgICAgIHtOVUxMfSwgNTczMCwgInRjcCJ9LAoreyJ1bmllbmciLCAgICAgICAgICAgICB7TlVMTH0sIDU3MzAsICJ1ZHAifSwKK3siaWRhLWRpc2NvdmVyMSIsICAgICAge05VTEx9LCA1NzQxLCAidGNwIn0sCit7ImlkYS1kaXNjb3ZlcjEiLCAgICAgIHtOVUxMfSwgNTc0MSwgInVkcCJ9LAoreyJpZGEtZGlzY292ZXIyIiwgICAgICB7TlVMTH0sIDU3NDIsICJ0Y3AifSwKK3siaWRhLWRpc2NvdmVyMiIsICAgICAge05VTEx9LCA1NzQyLCAidWRwIn0sCit7IndhdGNoZG9jLXBvZCIsICAgICAgIHtOVUxMfSwgNTc0MywgInRjcCJ9LAoreyJ3YXRjaGRvYy1wb2QiLCAgICAgICB7TlVMTH0sIDU3NDMsICJ1ZHAifSwKK3sid2F0Y2hkb2MiLCAgICAgICAgICAge05VTEx9LCA1NzQ0LCAidGNwIn0sCit7IndhdGNoZG9jIiwgICAgICAgICAgIHtOVUxMfSwgNTc0NCwgInVkcCJ9LAoreyJmY29weS1zZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDU3NDUsICJ0Y3AifSwKK3siZmNvcHktc2VydmVyIiwgICAgICAge05VTEx9LCA1NzQ1LCAidWRwIn0sCit7ImZjb3B5cy1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgNTc0NiwgInRjcCJ9LAoreyJmY29weXMtc2VydmVyIiwgICAgICB7TlVMTH0sIDU3NDYsICJ1ZHAifSwKK3sidHVuYXRpYyIsICAgICAgICAgICAge05VTEx9LCA1NzQ3LCAidGNwIn0sCit7InR1bmF0aWMiLCAgICAgICAgICAgIHtOVUxMfSwgNTc0NywgInVkcCJ9LAoreyJ0dW5hbHl6ZXIiLCAgICAgICAgICB7TlVMTH0sIDU3NDgsICJ0Y3AifSwKK3sidHVuYWx5emVyIiwgICAgICAgICAge05VTEx9LCA1NzQ4LCAidWRwIn0sCit7InJzY2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTc1MCwgInRjcCJ9LAoreyJyc2NkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3NTAsICJ1ZHAifSwKK3sib3Blbm1haWxnIiwgICAgICAgICAge05VTEx9LCA1NzU1LCAidGNwIn0sCit7Im9wZW5tYWlsZyIsICAgICAgICAgIHtOVUxMfSwgNTc1NSwgInVkcCJ9LAoreyJ4NTAwbXMiLCAgICAgICAgICAgICB7TlVMTH0sIDU3NTcsICJ0Y3AifSwKK3sieDUwMG1zIiwgICAgICAgICAgICAge05VTEx9LCA1NzU3LCAidWRwIn0sCit7Im9wZW5tYWlsbnMiLCAgICAgICAgIHtOVUxMfSwgNTc2NiwgInRjcCJ9LAoreyJvcGVubWFpbG5zIiwgICAgICAgICB7TlVMTH0sIDU3NjYsICJ1ZHAifSwKK3sicy1vcGVubWFpbCIsICAgICAgICAge05VTEx9LCA1NzY3LCAidGNwIn0sCit7InMtb3Blbm1haWwiLCAgICAgICAgIHtOVUxMfSwgNTc2NywgInVkcCJ9LAoreyJvcGVubWFpbHB4eSIsICAgICAgICB7TlVMTH0sIDU3NjgsICJ0Y3AifSwKK3sib3Blbm1haWxweHkiLCAgICAgICAge05VTEx9LCA1NzY4LCAidWRwIn0sCit7InNwcmFtc2NhIiwgICAgICAgICAgIHtOVUxMfSwgNTc2OSwgInRjcCJ9LAoreyJzcHJhbXNjYSIsICAgICAgICAgICB7TlVMTH0sIDU3NjksICJ1ZHAifSwKK3sic3ByYW1zZCIsICAgICAgICAgICAge05VTEx9LCA1NzcwLCAidGNwIn0sCit7InNwcmFtc2QiLCAgICAgICAgICAgIHtOVUxMfSwgNTc3MCwgInVkcCJ9LAoreyJuZXRhZ2VudCIsICAgICAgICAgICB7TlVMTH0sIDU3NzEsICJ0Y3AifSwKK3sibmV0YWdlbnQiLCAgICAgICAgICAge05VTEx9LCA1NzcxLCAidWRwIn0sCit7ImRhbGktcG9ydCIsICAgICAgICAgIHtOVUxMfSwgNTc3NywgInRjcCJ9LAoreyJkYWxpLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDU3NzcsICJ1ZHAifSwKK3sidnRzLXJwYyIsICAgICAgICAgICAge05VTEx9LCA1NzgwLCAidGNwIn0sCit7IjNwYXItZXZ0cyIsICAgICAgICAgIHtOVUxMfSwgNTc4MSwgInRjcCJ9LAoreyIzcGFyLWV2dHMiLCAgICAgICAgICB7TlVMTH0sIDU3ODEsICJ1ZHAifSwKK3siM3Bhci1tZ210IiwgICAgICAgICAge05VTEx9LCA1NzgyLCAidGNwIn0sCit7IjNwYXItbWdtdCIsICAgICAgICAgIHtOVUxMfSwgNTc4MiwgInVkcCJ9LAoreyIzcGFyLW1nbXQtc3NsIiwgICAgICB7TlVMTH0sIDU3ODMsICJ0Y3AifSwKK3siM3Bhci1tZ210LXNzbCIsICAgICAge05VTEx9LCA1NzgzLCAidWRwIn0sCit7ImliYXIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTc4NCwgInVkcCJ9LAoreyIzcGFyLXJjb3B5IiwgICAgICAgICB7TlVMTH0sIDU3ODUsICJ0Y3AifSwKK3siM3Bhci1yY29weSIsICAgICAgICAge05VTEx9LCA1Nzg1LCAidWRwIn0sCit7ImNpc2NvLXJlZHUiLCAgICAgICAgIHtOVUxMfSwgNTc4NiwgInVkcCJ9LAoreyJ3YWFzY2x1c3RlciIsICAgICAgICB7TlVMTH0sIDU3ODcsICJ1ZHAifSwKK3sieHRyZWFteCIsICAgICAgICAgICAge05VTEx9LCA1NzkzLCAidGNwIn0sCit7Inh0cmVhbXgiLCAgICAgICAgICAgIHtOVUxMfSwgNTc5MywgInVkcCJ9LAoreyJzcGRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDU3OTQsICJ1ZHAifSwKK3siaWNtcGQiLCAgICAgICAgICAgICAge05VTEx9LCA1ODEzLCAidGNwIn0sCit7ImljbXBkIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTgxMywgInVkcCJ9LAoreyJzcHQtYXV0b21hdGlvbiIsICAgICB7TlVMTH0sIDU4MTQsICJ0Y3AifSwKK3sic3B0LWF1dG9tYXRpb24iLCAgICAge05VTEx9LCA1ODE0LCAidWRwIn0sCit7IndoZXJlaG9vIiwgICAgICAgICAgIHtOVUxMfSwgNTg1OSwgInRjcCJ9LAoreyJ3aGVyZWhvbyIsICAgICAgICAgICB7TlVMTH0sIDU4NTksICJ1ZHAifSwKK3sicHBzdWl0ZW1zZyIsICAgICAgICAge05VTEx9LCA1ODYzLCAidGNwIn0sCit7InBwc3VpdGVtc2ciLCAgICAgICAgIHtOVUxMfSwgNTg2MywgInVkcCJ9LAoreyJyZmIiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU5MDAsICJ0Y3AifSwKK3sicmZiIiwgICAgICAgICAgICAgICAge05VTEx9LCA1OTAwLCAidWRwIn0sCit7ImNtIiwgICAgICAgICAgICAgICAgIHtOVUxMfSwgNTkxMCwgInRjcCJ9LAoreyJjbSIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDU5MTAsICJ1ZHAifSwKK3siY3BkbGMiLCAgICAgICAgICAgICAge05VTEx9LCA1OTExLCAidGNwIn0sCit7ImNwZGxjIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTkxMSwgInVkcCJ9LAoreyJmaXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDU5MTIsICJ0Y3AifSwKK3siZmlzIiwgICAgICAgICAgICAgICAge05VTEx9LCA1OTEyLCAidWRwIn0sCit7ImFkcy1jIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTkxMywgInRjcCJ9LAoreyJhZHMtYyIsICAgICAgICAgICAgICB7TlVMTH0sIDU5MTMsICJ1ZHAifSwKK3siaW5keSIsICAgICAgICAgICAgICAge05VTEx9LCA1OTYzLCAidGNwIn0sCit7ImluZHkiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNTk2MywgInVkcCJ9LAoreyJtcHBvbGljeS12NSIsICAgICAgICB7TlVMTH0sIDU5NjgsICJ0Y3AifSwKK3sibXBwb2xpY3ktdjUiLCAgICAgICAge05VTEx9LCA1OTY4LCAidWRwIn0sCit7Im1wcG9saWN5LW1nciIsICAgICAgIHtOVUxMfSwgNTk2OSwgInRjcCJ9LAoreyJtcHBvbGljeS1tZ3IiLCAgICAgICB7TlVMTH0sIDU5NjksICJ1ZHAifSwKK3siY291Y2hkYiIsICAgICAgICAgICAge05VTEx9LCA1OTg0LCAidGNwIn0sCit7ImNvdWNoZGIiLCAgICAgICAgICAgIHtOVUxMfSwgNTk4NCwgInVkcCJ9LAoreyJ3c21hbiIsICAgICAgICAgICAgICB7TlVMTH0sIDU5ODUsICJ0Y3AifSwKK3sid3NtYW4iLCAgICAgICAgICAgICAge05VTEx9LCA1OTg1LCAidWRwIn0sCit7IndzbWFucyIsICAgICAgICAgICAgIHtOVUxMfSwgNTk4NiwgInRjcCJ9LAoreyJ3c21hbnMiLCAgICAgICAgICAgICB7TlVMTH0sIDU5ODYsICJ1ZHAifSwKK3sid2JlbS1ybWkiLCAgICAgICAgICAge05VTEx9LCA1OTg3LCAidGNwIn0sCit7IndiZW0tcm1pIiwgICAgICAgICAgIHtOVUxMfSwgNTk4NywgInVkcCJ9LAoreyJ3YmVtLWh0dHAiLCAgICAgICAgICB7TlVMTH0sIDU5ODgsICJ0Y3AifSwKK3sid2JlbS1odHRwIiwgICAgICAgICAge05VTEx9LCA1OTg4LCAidWRwIn0sCit7IndiZW0taHR0cHMiLCAgICAgICAgIHtOVUxMfSwgNTk4OSwgInRjcCJ9LAoreyJ3YmVtLWh0dHBzIiwgICAgICAgICB7TlVMTH0sIDU5ODksICJ1ZHAifSwKK3sid2JlbS1leHAtaHR0cHMiLCAgICAge05VTEx9LCA1OTkwLCAidGNwIn0sCit7IndiZW0tZXhwLWh0dHBzIiwgICAgIHtOVUxMfSwgNTk5MCwgInVkcCJ9LAoreyJudXhzbCIsICAgICAgICAgICAgICB7TlVMTH0sIDU5OTEsICJ0Y3AifSwKK3sibnV4c2wiLCAgICAgICAgICAgICAge05VTEx9LCA1OTkxLCAidWRwIn0sCit7ImNvbnN1bC1pbnNpZ2h0IiwgICAgIHtOVUxMfSwgNTk5MiwgInRjcCJ9LAoreyJjb25zdWwtaW5zaWdodCIsICAgICB7TlVMTH0sIDU5OTIsICJ1ZHAifSwKK3siY3ZzdXAiLCAgICAgICAgICAgICAge05VTEx9LCA1OTk5LCAidGNwIn0sCit7ImN2c3VwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNTk5OSwgInVkcCJ9LAoreyJuZGwtYWhwLXN2YyIsICAgICAgICB7TlVMTH0sIDYwNjQsICJ0Y3AifSwKK3sibmRsLWFocC1zdmMiLCAgICAgICAge05VTEx9LCA2MDY0LCAidWRwIn0sCit7IndpbnBoYXJhb2giLCAgICAgICAgIHtOVUxMfSwgNjA2NSwgInRjcCJ9LAoreyJ3aW5waGFyYW9oIiwgICAgICAgICB7TlVMTH0sIDYwNjUsICJ1ZHAifSwKK3siZXdjdHNwIiwgICAgICAgICAgICAge05VTEx9LCA2MDY2LCAidGNwIn0sCit7ImV3Y3RzcCIsICAgICAgICAgICAgIHtOVUxMfSwgNjA2NiwgInVkcCJ9LAoreyJnc21wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYwNjgsICJ0Y3AifSwKK3siZ3NtcCIsICAgICAgICAgICAgICAge05VTEx9LCA2MDY4LCAidWRwIn0sCit7InRyaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjA2OSwgInRjcCJ9LAoreyJ0cmlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYwNjksICJ1ZHAifSwKK3sibWVzc2FnZWFzYXAiLCAgICAgICAge05VTEx9LCA2MDcwLCAidGNwIn0sCit7Im1lc3NhZ2Vhc2FwIiwgICAgICAgIHtOVUxMfSwgNjA3MCwgInVkcCJ9LAoreyJzc2R0cCIsICAgICAgICAgICAgICB7TlVMTH0sIDYwNzEsICJ0Y3AifSwKK3sic3NkdHAiLCAgICAgICAgICAgICAge05VTEx9LCA2MDcxLCAidWRwIn0sCit7ImRpYWdub3NlLXByb2MiLCAgICAgIHtOVUxMfSwgNjA3MiwgInRjcCJ9LAoreyJkaWFnbm9zZS1wcm9jIiwgICAgICB7TlVMTH0sIDYwNzIsICJ1ZHAifSwKK3siZGlyZWN0cGxheTgiLCAgICAgICAge05VTEx9LCA2MDczLCAidGNwIn0sCit7ImRpcmVjdHBsYXk4IiwgICAgICAgIHtOVUxMfSwgNjA3MywgInVkcCJ9LAoreyJtYXgiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDYwNzQsICJ0Y3AifSwKK3sibWF4IiwgICAgICAgICAgICAgICAge05VTEx9LCA2MDc0LCAidWRwIn0sCit7ImRwbS1hY20iLCAgICAgICAgICAgIHtOVUxMfSwgNjA3NSwgInRjcCJ9LAoreyJtaWFtaS1iY2FzdCIsICAgICAgICB7TlVMTH0sIDYwODMsICJ1ZHAifSwKK3sicDJwLXNpcCIsICAgICAgICAgICAge05VTEx9LCA2MDg0LCAidGNwIn0sCit7ImtvbnNwaXJlMmIiLCAgICAgICAgIHtOVUxMfSwgNjA4NSwgInRjcCJ9LAoreyJrb25zcGlyZTJiIiwgICAgICAgICB7TlVMTH0sIDYwODUsICJ1ZHAifSwKK3sicGR0cCIsICAgICAgICAgICAgICAge05VTEx9LCA2MDg2LCAidGNwIn0sCit7InBkdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjA4NiwgInVkcCJ9LAoreyJsZHNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYwODcsICJ0Y3AifSwKK3sibGRzcyIsICAgICAgICAgICAgICAge05VTEx9LCA2MDg3LCAidWRwIn0sCit7InJheGEtbWdtdCIsICAgICAgICAgIHtOVUxMfSwgNjA5OSwgInRjcCJ9LAoreyJzeW5jaHJvbmV0LWRiIiwgICAgICB7TlVMTH0sIDYxMDAsICJ0Y3AifSwKK3sic3luY2hyb25ldC1kYiIsICAgICAge05VTEx9LCA2MTAwLCAidWRwIn0sCit7InN5bmNocm9uZXQtcnRjIiwgICAgIHtOVUxMfSwgNjEwMSwgInRjcCJ9LAoreyJzeW5jaHJvbmV0LXJ0YyIsICAgICB7TlVMTH0sIDYxMDEsICJ1ZHAifSwKK3sic3luY2hyb25ldC11cGQiLCAgICAge05VTEx9LCA2MTAyLCAidGNwIn0sCit7InN5bmNocm9uZXQtdXBkIiwgICAgIHtOVUxMfSwgNjEwMiwgInVkcCJ9LAoreyJyZXRzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYxMDMsICJ0Y3AifSwKK3sicmV0cyIsICAgICAgICAgICAgICAge05VTEx9LCA2MTAzLCAidWRwIn0sCit7ImRiZGIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjEwNCwgInRjcCJ9LAoreyJkYmRiIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYxMDQsICJ1ZHAifSwKK3sicHJpbWFzZXJ2ZXIiLCAgICAgICAge05VTEx9LCA2MTA1LCAidGNwIn0sCit7InByaW1hc2VydmVyIiwgICAgICAgIHtOVUxMfSwgNjEwNSwgInVkcCJ9LAoreyJtcHNzZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDYxMDYsICJ0Y3AifSwKK3sibXBzc2VydmVyIiwgICAgICAgICAge05VTEx9LCA2MTA2LCAidWRwIn0sCit7ImV0Yy1jb250cm9sIiwgICAgICAgIHtOVUxMfSwgNjEwNywgInRjcCJ9LAoreyJldGMtY29udHJvbCIsICAgICAgICB7TlVMTH0sIDYxMDcsICJ1ZHAifSwKK3sic2VyY29tbS1zY2FkbWluIiwgICAge05VTEx9LCA2MTA4LCAidGNwIn0sCit7InNlcmNvbW0tc2NhZG1pbiIsICAgIHtOVUxMfSwgNjEwOCwgInVkcCJ9LAoreyJnbG9iZWNhc3QtaWQiLCAgICAgICB7TlVMTH0sIDYxMDksICJ0Y3AifSwKK3siZ2xvYmVjYXN0LWlkIiwgICAgICAge05VTEx9LCA2MTA5LCAidWRwIn0sCit7InNvZnRjbSIsICAgICAgICAgICAgIHtOVUxMfSwgNjExMCwgInRjcCJ9LAoreyJzb2Z0Y20iLCAgICAgICAgICAgICB7TlVMTH0sIDYxMTAsICJ1ZHAifSwKK3sic3BjIiwgICAgICAgICAgICAgICAge05VTEx9LCA2MTExLCAidGNwIn0sCit7InNwYyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNjExMSwgInVkcCJ9LAoreyJkdHNwY2QiLCAgICAgICAgICAgICB7TlVMTH0sIDYxMTIsICJ0Y3AifSwKK3siZHRzcGNkIiwgICAgICAgICAgICAge05VTEx9LCA2MTEyLCAidWRwIn0sCit7ImRheWxpdGVzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgNjExMywgInRjcCJ9LAoreyJ3cnNwaWNlIiwgICAgICAgICAgICB7TlVMTH0sIDYxMTQsICJ0Y3AifSwKK3sieGljIiwgICAgICAgICAgICAgICAge05VTEx9LCA2MTE1LCAidGNwIn0sCit7Inh0bHNlcnYiLCAgICAgICAgICAgIHtOVUxMfSwgNjExNiwgInRjcCJ9LAoreyJkYXlsaXRldG91Y2giLCAgICAgICB7TlVMTH0sIDYxMTcsICJ0Y3AifSwKK3sic3BkeSIsICAgICAgICAgICAgICAge05VTEx9LCA2MTIxLCAidGNwIn0sCit7ImJleC13ZWJhZG1pbiIsICAgICAgIHtOVUxMfSwgNjEyMiwgInRjcCJ9LAoreyJiZXgtd2ViYWRtaW4iLCAgICAgICB7TlVMTH0sIDYxMjIsICJ1ZHAifSwKK3siYmFja3VwLWV4cHJlc3MiLCAgICAge05VTEx9LCA2MTIzLCAidGNwIn0sCit7ImJhY2t1cC1leHByZXNzIiwgICAgIHtOVUxMfSwgNjEyMywgInVkcCJ9LAoreyJwbmJzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYxMjQsICJ0Y3AifSwKK3sicG5icyIsICAgICAgICAgICAgICAge05VTEx9LCA2MTI0LCAidWRwIn0sCit7Im5idC13b2wiLCAgICAgICAgICAgIHtOVUxMfSwgNjEzMywgInRjcCJ9LAoreyJuYnQtd29sIiwgICAgICAgICAgICB7TlVMTH0sIDYxMzMsICJ1ZHAifSwKK3sicHVsc29uaXhubHMiLCAgICAgICAge05VTEx9LCA2MTQwLCAidGNwIn0sCit7InB1bHNvbml4bmxzIiwgICAgICAgIHtOVUxMfSwgNjE0MCwgInVkcCJ9LAoreyJtZXRhLWNvcnAiLCAgICAgICAgICB7TlVMTH0sIDYxNDEsICJ0Y3AifSwKK3sibWV0YS1jb3JwIiwgICAgICAgICAge05VTEx9LCA2MTQxLCAidWRwIn0sCit7ImFzcGVudGVjLWxtIiwgICAgICAgIHtOVUxMfSwgNjE0MiwgInRjcCJ9LAoreyJhc3BlbnRlYy1sbSIsICAgICAgICB7TlVMTH0sIDYxNDIsICJ1ZHAifSwKK3sid2F0ZXJzaGVkLWxtIiwgICAgICAge05VTEx9LCA2MTQzLCAidGNwIn0sCit7IndhdGVyc2hlZC1sbSIsICAgICAgIHtOVUxMfSwgNjE0MywgInVkcCJ9LAoreyJzdGF0c2NpMS1sbSIsICAgICAgICB7TlVMTH0sIDYxNDQsICJ0Y3AifSwKK3sic3RhdHNjaTEtbG0iLCAgICAgICAge05VTEx9LCA2MTQ0LCAidWRwIn0sCit7InN0YXRzY2kyLWxtIiwgICAgICAgIHtOVUxMfSwgNjE0NSwgInRjcCJ9LAoreyJzdGF0c2NpMi1sbSIsICAgICAgICB7TlVMTH0sIDYxNDUsICJ1ZHAifSwKK3sibG9uZXdvbGYtbG0iLCAgICAgICAge05VTEx9LCA2MTQ2LCAidGNwIn0sCit7ImxvbmV3b2xmLWxtIiwgICAgICAgIHtOVUxMfSwgNjE0NiwgInVkcCJ9LAoreyJtb250YWdlLWxtIiwgICAgICAgICB7TlVMTH0sIDYxNDcsICJ0Y3AifSwKK3sibW9udGFnZS1sbSIsICAgICAgICAge05VTEx9LCA2MTQ3LCAidWRwIn0sCit7InJpY2FyZG8tbG0iLCAgICAgICAgIHtOVUxMfSwgNjE0OCwgInRjcCJ9LAoreyJyaWNhcmRvLWxtIiwgICAgICAgICB7TlVMTH0sIDYxNDgsICJ1ZHAifSwKK3sidGFsLXBvZCIsICAgICAgICAgICAge05VTEx9LCA2MTQ5LCAidGNwIn0sCit7InRhbC1wb2QiLCAgICAgICAgICAgIHtOVUxMfSwgNjE0OSwgInVkcCJ9LAoreyJlZmItYWNpIiwgICAgICAgICAgICB7TlVMTH0sIDYxNTksICJ0Y3AifSwKK3sicGF0cm9sLWlzbSIsICAgICAgICAge05VTEx9LCA2MTYxLCAidGNwIn0sCit7InBhdHJvbC1pc20iLCAgICAgICAgIHtOVUxMfSwgNjE2MSwgInVkcCJ9LAoreyJwYXRyb2wtY29sbCIsICAgICAgICB7TlVMTH0sIDYxNjIsICJ0Y3AifSwKK3sicGF0cm9sLWNvbGwiLCAgICAgICAge05VTEx9LCA2MTYyLCAidWRwIn0sCit7InBzY3JpYmUiLCAgICAgICAgICAgIHtOVUxMfSwgNjE2MywgInRjcCJ9LAoreyJwc2NyaWJlIiwgICAgICAgICAgICB7TlVMTH0sIDYxNjMsICJ1ZHAifSwKK3sibG0teCIsICAgICAgICAgICAgICAge05VTEx9LCA2MjAwLCAidGNwIn0sCit7ImxtLXgiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjIwMCwgInVkcCJ9LAoreyJyYWRtaW5kIiwgICAgICAgICAgICB7TlVMTH0sIDYyMjIsICJ0Y3AifSwKK3sicmFkbWluZCIsICAgICAgICAgICAge05VTEx9LCA2MjIyLCAidWRwIn0sCit7Implb2wtbnNkdHAtMSIsICAgICAgIHtOVUxMfSwgNjI0MSwgInRjcCJ9LAoreyJqZW9sLW5zZGRwLTEiLCAgICAgICB7TlVMTH0sIDYyNDEsICJ1ZHAifSwKK3siamVvbC1uc2R0cC0yIiwgICAgICAge05VTEx9LCA2MjQyLCAidGNwIn0sCit7Implb2wtbnNkZHAtMiIsICAgICAgIHtOVUxMfSwgNjI0MiwgInVkcCJ9LAoreyJqZW9sLW5zZHRwLTMiLCAgICAgICB7TlVMTH0sIDYyNDMsICJ0Y3AifSwKK3siamVvbC1uc2RkcC0zIiwgICAgICAge05VTEx9LCA2MjQzLCAidWRwIn0sCit7Implb2wtbnNkdHAtNCIsICAgICAgIHtOVUxMfSwgNjI0NCwgInRjcCJ9LAoreyJqZW9sLW5zZGRwLTQiLCAgICAgICB7TlVMTH0sIDYyNDQsICJ1ZHAifSwKK3sidGwxLXJhdy1zc2wiLCAgICAgICAge05VTEx9LCA2MjUxLCAidGNwIn0sCit7InRsMS1yYXctc3NsIiwgICAgICAgIHtOVUxMfSwgNjI1MSwgInVkcCJ9LAoreyJ0bDEtc3NoIiwgICAgICAgICAgICB7TlVMTH0sIDYyNTIsICJ0Y3AifSwKK3sidGwxLXNzaCIsICAgICAgICAgICAge05VTEx9LCA2MjUyLCAidWRwIn0sCit7ImNyaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjI1MywgInRjcCJ9LAoreyJjcmlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYyNTMsICJ1ZHAifSwKK3siZ2xkIiwgICAgICAgICAgICAgICAge05VTEx9LCA2MjY3LCAidGNwIn0sCit7ImdyaWQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjI2OCwgInRjcCJ9LAoreyJncmlkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYyNjgsICJ1ZHAifSwKK3siZ3JpZC1hbHQiLCAgICAgICAgICAge05VTEx9LCA2MjY5LCAidGNwIn0sCit7ImdyaWQtYWx0IiwgICAgICAgICAgIHtOVUxMfSwgNjI2OSwgInVkcCJ9LAoreyJibWMtZ3J4IiwgICAgICAgICAgICB7TlVMTH0sIDYzMDAsICJ0Y3AifSwKK3siYm1jLWdyeCIsICAgICAgICAgICAge05VTEx9LCA2MzAwLCAidWRwIn0sCit7ImJtY19jdGRfbGRhcCIsICAgICAgIHtOVUxMfSwgNjMwMSwgInRjcCJ9LAoreyJibWNfY3RkX2xkYXAiLCAgICAgICB7TlVMTH0sIDYzMDEsICJ1ZHAifSwKK3sidWZtcCIsICAgICAgICAgICAgICAge05VTEx9LCA2MzA2LCAidGNwIn0sCit7InVmbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjMwNiwgInVkcCJ9LAoreyJzY3VwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYzMTUsICJ0Y3AifSwKK3sic2N1cC1kaXNjIiwgICAgICAgICAge05VTEx9LCA2MzE1LCAidWRwIn0sCit7ImFiYi1lc2NwIiwgICAgICAgICAgIHtOVUxMfSwgNjMxNiwgInRjcCJ9LAoreyJhYmItZXNjcCIsICAgICAgICAgICB7TlVMTH0sIDYzMTYsICJ1ZHAifSwKK3sicmVwc3ZjIiwgICAgICAgICAgICAge05VTEx9LCA2MzIwLCAidGNwIn0sCit7InJlcHN2YyIsICAgICAgICAgICAgIHtOVUxMfSwgNjMyMCwgInVkcCJ9LAoreyJlbXAtc2VydmVyMSIsICAgICAgICB7TlVMTH0sIDYzMjEsICJ0Y3AifSwKK3siZW1wLXNlcnZlcjEiLCAgICAgICAge05VTEx9LCA2MzIxLCAidWRwIn0sCit7ImVtcC1zZXJ2ZXIyIiwgICAgICAgIHtOVUxMfSwgNjMyMiwgInRjcCJ9LAoreyJlbXAtc2VydmVyMiIsICAgICAgICB7TlVMTH0sIDYzMjIsICJ1ZHAifSwKK3sic2Zsb3ciLCAgICAgICAgICAgICAge05VTEx9LCA2MzQzLCAidGNwIn0sCit7InNmbG93IiwgICAgICAgICAgICAgIHtOVUxMfSwgNjM0MywgInVkcCJ9LAoreyJnbnV0ZWxsYS1zdmMiLCAgICAgICB7TlVMTH0sIDYzNDYsICJ0Y3AifSwKK3siZ251dGVsbGEtc3ZjIiwgICAgICAge05VTEx9LCA2MzQ2LCAidWRwIn0sCit7ImdudXRlbGxhLXJ0ciIsICAgICAgIHtOVUxMfSwgNjM0NywgInRjcCJ9LAoreyJnbnV0ZWxsYS1ydHIiLCAgICAgICB7TlVMTH0sIDYzNDcsICJ1ZHAifSwKK3siYWRhcCIsICAgICAgICAgICAgICAge05VTEx9LCA2MzUwLCAidGNwIn0sCit7ImFkYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjM1MCwgInVkcCJ9LAoreyJwbWNzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDYzNTUsICJ0Y3AifSwKK3sicG1jcyIsICAgICAgICAgICAgICAge05VTEx9LCA2MzU1LCAidWRwIn0sCit7Im1ldGFlZGl0LW11IiwgICAgICAgIHtOVUxMfSwgNjM2MCwgInRjcCJ9LAoreyJtZXRhZWRpdC1tdSIsICAgICAgICB7TlVMTH0sIDYzNjAsICJ1ZHAifSwKK3sibWV0YWVkaXQtc2UiLCAgICAgICAge05VTEx9LCA2MzcwLCAidGNwIn0sCit7Im1ldGFlZGl0LXNlIiwgICAgICAgIHtOVUxMfSwgNjM3MCwgInVkcCJ9LAoreyJtZXRhdHVkZS1tZHMiLCAgICAgICB7TlVMTH0sIDYzODIsICJ0Y3AifSwKK3sibWV0YXR1ZGUtbWRzIiwgICAgICAge05VTEx9LCA2MzgyLCAidWRwIn0sCit7ImNsYXJpaW9uLWV2cjAxIiwgICAgIHtOVUxMfSwgNjM4OSwgInRjcCJ9LAoreyJjbGFyaWlvbi1ldnIwMSIsICAgICB7TlVMTH0sIDYzODksICJ1ZHAifSwKK3sibWV0YWVkaXQtd3MiLCAgICAgICAge05VTEx9LCA2MzkwLCAidGNwIn0sCit7Im1ldGFlZGl0LXdzIiwgICAgICAgIHtOVUxMfSwgNjM5MCwgInVkcCJ9LAoreyJmYXhjb21zZXJ2aWNlIiwgICAgICB7TlVMTH0sIDY0MTcsICJ0Y3AifSwKK3siZmF4Y29tc2VydmljZSIsICAgICAge05VTEx9LCA2NDE3LCAidWRwIn0sCit7InN5c2VydmVycmVtb3RlIiwgICAgIHtOVUxMfSwgNjQxOCwgInRjcCJ9LAoreyJzdmRycCIsICAgICAgICAgICAgICB7TlVMTH0sIDY0MTksICJ0Y3AifSwKK3sibmltLXZkcnNoZWxsIiwgICAgICAge05VTEx9LCA2NDIwLCAidGNwIn0sCit7Im5pbS12ZHJzaGVsbCIsICAgICAgIHtOVUxMfSwgNjQyMCwgInVkcCJ9LAoreyJuaW0td2FuIiwgICAgICAgICAgICB7TlVMTH0sIDY0MjEsICJ0Y3AifSwKK3sibmltLXdhbiIsICAgICAgICAgICAge05VTEx9LCA2NDIxLCAidWRwIn0sCit7InBnYm91bmNlciIsICAgICAgICAgIHtOVUxMfSwgNjQzMiwgInRjcCJ9LAoreyJzdW4tc3ItaHR0cHMiLCAgICAgICB7TlVMTH0sIDY0NDMsICJ0Y3AifSwKK3sic3VuLXNyLWh0dHBzIiwgICAgICAge05VTEx9LCA2NDQzLCAidWRwIn0sCit7InNnZV9xbWFzdGVyIiwgICAgICAgIHtOVUxMfSwgNjQ0NCwgInRjcCJ9LAoreyJzZ2VfcW1hc3RlciIsICAgICAgICB7TlVMTH0sIDY0NDQsICJ1ZHAifSwKK3sic2dlX2V4ZWNkIiwgICAgICAgICAge05VTEx9LCA2NDQ1LCAidGNwIn0sCit7InNnZV9leGVjZCIsICAgICAgICAgIHtOVUxMfSwgNjQ0NSwgInVkcCJ9LAoreyJteXNxbC1wcm94eSIsICAgICAgICB7TlVMTH0sIDY0NDYsICJ0Y3AifSwKK3sibXlzcWwtcHJveHkiLCAgICAgICAge05VTEx9LCA2NDQ2LCAidWRwIn0sCit7InNraXAtY2VydC1yZWN2IiwgICAgIHtOVUxMfSwgNjQ1NSwgInRjcCJ9LAoreyJza2lwLWNlcnQtc2VuZCIsICAgICB7TlVMTH0sIDY0NTYsICJ1ZHAifSwKK3sibHZpc2lvbi1sbSIsICAgICAgICAge05VTEx9LCA2NDcxLCAidGNwIn0sCit7Imx2aXNpb24tbG0iLCAgICAgICAgIHtOVUxMfSwgNjQ3MSwgInVkcCJ9LAoreyJzdW4tc3ItaHR0cCIsICAgICAgICB7TlVMTH0sIDY0ODAsICJ0Y3AifSwKK3sic3VuLXNyLWh0dHAiLCAgICAgICAge05VTEx9LCA2NDgwLCAidWRwIn0sCit7InNlcnZpY2V0YWdzIiwgICAgICAgIHtOVUxMfSwgNjQ4MSwgInRjcCJ9LAoreyJzZXJ2aWNldGFncyIsICAgICAgICB7TlVMTH0sIDY0ODEsICJ1ZHAifSwKK3sibGRvbXMtbWdtdCIsICAgICAgICAge05VTEx9LCA2NDgyLCAidGNwIn0sCit7Imxkb21zLW1nbXQiLCAgICAgICAgIHtOVUxMfSwgNjQ4MiwgInVkcCJ9LAoreyJTdW5WVFMtUk1JIiwgICAgICAgICB7TlVMTH0sIDY0ODMsICJ0Y3AifSwKK3siU3VuVlRTLVJNSSIsICAgICAgICAge05VTEx9LCA2NDgzLCAidWRwIn0sCit7InN1bi1zci1qbXMiLCAgICAgICAgIHtOVUxMfSwgNjQ4NCwgInRjcCJ9LAoreyJzdW4tc3Itam1zIiwgICAgICAgICB7TlVMTH0sIDY0ODQsICJ1ZHAifSwKK3sic3VuLXNyLWlpb3AiLCAgICAgICAge05VTEx9LCA2NDg1LCAidGNwIn0sCit7InN1bi1zci1paW9wIiwgICAgICAgIHtOVUxMfSwgNjQ4NSwgInVkcCJ9LAoreyJzdW4tc3ItaWlvcHMiLCAgICAgICB7TlVMTH0sIDY0ODYsICJ0Y3AifSwKK3sic3VuLXNyLWlpb3BzIiwgICAgICAge05VTEx9LCA2NDg2LCAidWRwIn0sCit7InN1bi1zci1paW9wLWF1dCIsICAgIHtOVUxMfSwgNjQ4NywgInRjcCJ9LAoreyJzdW4tc3ItaWlvcC1hdXQiLCAgICB7TlVMTH0sIDY0ODcsICJ1ZHAifSwKK3sic3VuLXNyLWpteCIsICAgICAgICAge05VTEx9LCA2NDg4LCAidGNwIn0sCit7InN1bi1zci1qbXgiLCAgICAgICAgIHtOVUxMfSwgNjQ4OCwgInVkcCJ9LAoreyJzdW4tc3ItYWRtaW4iLCAgICAgICB7TlVMTH0sIDY0ODksICJ0Y3AifSwKK3sic3VuLXNyLWFkbWluIiwgICAgICAge05VTEx9LCA2NDg5LCAidWRwIn0sCit7ImJva3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjUwMCwgInRjcCJ9LAoreyJib2tzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY1MDAsICJ1ZHAifSwKK3siYm9rc19zZXJ2YyIsICAgICAgICAge05VTEx9LCA2NTAxLCAidGNwIn0sCit7ImJva3Nfc2VydmMiLCAgICAgICAgIHtOVUxMfSwgNjUwMSwgInVkcCJ9LAoreyJib2tzX3NlcnZtIiwgICAgICAgICB7TlVMTH0sIDY1MDIsICJ0Y3AifSwKK3siYm9rc19zZXJ2bSIsICAgICAgICAge05VTEx9LCA2NTAyLCAidWRwIn0sCit7ImJva3NfY2xudGQiLCAgICAgICAgIHtOVUxMfSwgNjUwMywgInRjcCJ9LAoreyJib2tzX2NsbnRkIiwgICAgICAgICB7TlVMTH0sIDY1MDMsICJ1ZHAifSwKK3siYmFkbV9wcml2IiwgICAgICAgICAge05VTEx9LCA2NTA1LCAidGNwIn0sCit7ImJhZG1fcHJpdiIsICAgICAgICAgIHtOVUxMfSwgNjUwNSwgInVkcCJ9LAoreyJiYWRtX3B1YiIsICAgICAgICAgICB7TlVMTH0sIDY1MDYsICJ0Y3AifSwKK3siYmFkbV9wdWIiLCAgICAgICAgICAge05VTEx9LCA2NTA2LCAidWRwIn0sCit7ImJkaXJfcHJpdiIsICAgICAgICAgIHtOVUxMfSwgNjUwNywgInRjcCJ9LAoreyJiZGlyX3ByaXYiLCAgICAgICAgICB7TlVMTH0sIDY1MDcsICJ1ZHAifSwKK3siYmRpcl9wdWIiLCAgICAgICAgICAge05VTEx9LCA2NTA4LCAidGNwIn0sCit7ImJkaXJfcHViIiwgICAgICAgICAgIHtOVUxMfSwgNjUwOCwgInVkcCJ9LAoreyJtZ2NzLW1mcC1wb3J0IiwgICAgICB7TlVMTH0sIDY1MDksICJ0Y3AifSwKK3sibWdjcy1tZnAtcG9ydCIsICAgICAge05VTEx9LCA2NTA5LCAidWRwIn0sCit7Im1jZXItcG9ydCIsICAgICAgICAgIHtOVUxMfSwgNjUxMCwgInRjcCJ9LAoreyJtY2VyLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDY1MTAsICJ1ZHAifSwKK3sibmV0Y29uZi10bHMiLCAgICAgICAge05VTEx9LCA2NTEzLCAidGNwIn0sCit7InN5c2xvZy10bHMiLCAgICAgICAgIHtOVUxMfSwgNjUxNCwgInRjcCJ9LAoreyJzeXNsb2ctdGxzIiwgICAgICAgICB7TlVMTH0sIDY1MTQsICJ1ZHAifSwKK3sic3lzbG9nLXRscyIsICAgICAgICAge05VTEx9LCA2NTE0LCAiZGNjcCJ9LAoreyJlbGlwc2UtcmVjIiwgICAgICAgICB7TlVMTH0sIDY1MTUsICJ0Y3AifSwKK3siZWxpcHNlLXJlYyIsICAgICAgICAge05VTEx9LCA2NTE1LCAidWRwIn0sCit7Imxkcy1kaXN0cmliIiwgICAgICAgIHtOVUxMfSwgNjU0MywgInRjcCJ9LAoreyJsZHMtZGlzdHJpYiIsICAgICAgICB7TlVMTH0sIDY1NDMsICJ1ZHAifSwKK3sibGRzLWR1bXAiLCAgICAgICAgICAge05VTEx9LCA2NTQ0LCAidGNwIn0sCit7Imxkcy1kdW1wIiwgICAgICAgICAgIHtOVUxMfSwgNjU0NCwgInVkcCJ9LAoreyJhcGMtNjU0NyIsICAgICAgICAgICB7TlVMTH0sIDY1NDcsICJ0Y3AifSwKK3siYXBjLTY1NDciLCAgICAgICAgICAge05VTEx9LCA2NTQ3LCAidWRwIn0sCit7ImFwYy02NTQ4IiwgICAgICAgICAgIHtOVUxMfSwgNjU0OCwgInRjcCJ9LAoreyJhcGMtNjU0OCIsICAgICAgICAgICB7TlVMTH0sIDY1NDgsICJ1ZHAifSwKK3siYXBjLTY1NDkiLCAgICAgICAgICAge05VTEx9LCA2NTQ5LCAidGNwIn0sCit7ImFwYy02NTQ5IiwgICAgICAgICAgIHtOVUxMfSwgNjU0OSwgInVkcCJ9LAoreyJmZy1zeXN1cGRhdGUiLCAgICAgICB7TlVMTH0sIDY1NTAsICJ0Y3AifSwKK3siZmctc3lzdXBkYXRlIiwgICAgICAge05VTEx9LCA2NTUwLCAidWRwIn0sCit7InN1bSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNjU1MSwgInRjcCJ9LAoreyJzdW0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY1NTEsICJ1ZHAifSwKK3sieGRzeGRtIiwgICAgICAgICAgICAge05VTEx9LCA2NTU4LCAidGNwIn0sCit7Inhkc3hkbSIsICAgICAgICAgICAgIHtOVUxMfSwgNjU1OCwgInVkcCJ9LAoreyJzYW5lLXBvcnQiLCAgICAgICAgICB7TlVMTH0sIDY1NjYsICJ0Y3AifSwKK3sic2FuZS1wb3J0IiwgICAgICAgICAge05VTEx9LCA2NTY2LCAidWRwIn0sCit7ImVzcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNjU2NywgInRjcCJ9LAoreyJlc3AiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY1NjcsICJ1ZHAifSwKK3siY2FuaXRfc3RvcmUiLCAgICAgICAge05VTEx9LCA2NTY4LCAidGNwIn0sCit7InJwLXJlcHV0YXRpb24iLCAgICAgIHtOVUxMfSwgNjU2OCwgInVkcCJ9LAoreyJhZmZpbGlhdGUiLCAgICAgICAgICB7TlVMTH0sIDY1NzksICJ0Y3AifSwKK3siYWZmaWxpYXRlIiwgICAgICAgICAge05VTEx9LCA2NTc5LCAidWRwIn0sCit7InBhcnNlYy1tYXN0ZXIiLCAgICAgIHtOVUxMfSwgNjU4MCwgInRjcCJ9LAoreyJwYXJzZWMtbWFzdGVyIiwgICAgICB7TlVMTH0sIDY1ODAsICJ1ZHAifSwKK3sicGFyc2VjLXBlZXIiLCAgICAgICAge05VTEx9LCA2NTgxLCAidGNwIn0sCit7InBhcnNlYy1wZWVyIiwgICAgICAgIHtOVUxMfSwgNjU4MSwgInVkcCJ9LAoreyJwYXJzZWMtZ2FtZSIsICAgICAgICB7TlVMTH0sIDY1ODIsICJ0Y3AifSwKK3sicGFyc2VjLWdhbWUiLCAgICAgICAge05VTEx9LCA2NTgyLCAidWRwIn0sCit7ImpvYUpld2VsU3VpdGUiLCAgICAgIHtOVUxMfSwgNjU4MywgInRjcCJ9LAoreyJqb2FKZXdlbFN1aXRlIiwgICAgICB7TlVMTH0sIDY1ODMsICJ1ZHAifSwKK3sibXNodmxtIiwgICAgICAgICAgICAge05VTEx9LCA2NjAwLCAidGNwIn0sCit7Im1zdG1nLXNzdHAiLCAgICAgICAgIHtOVUxMfSwgNjYwMSwgInRjcCJ9LAoreyJ3c3Njb21mcm13ayIsICAgICAgICB7TlVMTH0sIDY2MDIsICJ0Y3AifSwKK3sib2RldHRlLWZ0cHMiLCAgICAgICAge05VTEx9LCA2NjE5LCAidGNwIn0sCit7Im9kZXR0ZS1mdHBzIiwgICAgICAgIHtOVUxMfSwgNjYxOSwgInVkcCJ9LAoreyJrZnRwLWRhdGEiLCAgICAgICAgICB7TlVMTH0sIDY2MjAsICJ0Y3AifSwKK3sia2Z0cC1kYXRhIiwgICAgICAgICAge05VTEx9LCA2NjIwLCAidWRwIn0sCit7ImtmdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjYyMSwgInRjcCJ9LAoreyJrZnRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY2MjEsICJ1ZHAifSwKK3sibWNmdHAiLCAgICAgICAgICAgICAge05VTEx9LCA2NjIyLCAidGNwIn0sCit7Im1jZnRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNjYyMiwgInVkcCJ9LAoreyJrdGVsbmV0IiwgICAgICAgICAgICB7TlVMTH0sIDY2MjMsICJ0Y3AifSwKK3sia3RlbG5ldCIsICAgICAgICAgICAge05VTEx9LCA2NjIzLCAidWRwIn0sCit7ImRhdGFzY2FsZXItZGIiLCAgICAgIHtOVUxMfSwgNjYyNCwgInRjcCJ9LAoreyJkYXRhc2NhbGVyLWN0bCIsICAgICB7TlVMTH0sIDY2MjUsICJ0Y3AifSwKK3sid2Fnby1zZXJ2aWNlIiwgICAgICAge05VTEx9LCA2NjI2LCAidGNwIn0sCit7IndhZ28tc2VydmljZSIsICAgICAgIHtOVUxMfSwgNjYyNiwgInVkcCJ9LAoreyJuZXhnZW4iLCAgICAgICAgICAgICB7TlVMTH0sIDY2MjcsICJ0Y3AifSwKK3sibmV4Z2VuIiwgICAgICAgICAgICAge05VTEx9LCA2NjI3LCAidWRwIn0sCit7ImFmZXNjLW1jIiwgICAgICAgICAgIHtOVUxMfSwgNjYyOCwgInRjcCJ9LAoreyJhZmVzYy1tYyIsICAgICAgICAgICB7TlVMTH0sIDY2MjgsICJ1ZHAifSwKK3sibXhvZGJjLWNvbm5lY3QiLCAgICAge05VTEx9LCA2NjMyLCAidGNwIn0sCit7InBjcy1zZi11aS1tYW4iLCAgICAgIHtOVUxMfSwgNjY1NSwgInRjcCJ9LAoreyJlbWdtc2ciLCAgICAgICAgICAgICB7TlVMTH0sIDY2NTYsICJ0Y3AifSwKK3sicGFsY29tLWRpc2MiLCAgICAgICAge05VTEx9LCA2NjU3LCAidWRwIn0sCit7InZvY2FsdGVjLWdvbGQiLCAgICAgIHtOVUxMfSwgNjY3MCwgInRjcCJ9LAoreyJ2b2NhbHRlYy1nb2xkIiwgICAgICB7TlVMTH0sIDY2NzAsICJ1ZHAifSwKK3sicDRwLXBvcnRhbCIsICAgICAgICAge05VTEx9LCA2NjcxLCAidGNwIn0sCit7InA0cC1wb3J0YWwiLCAgICAgICAgIHtOVUxMfSwgNjY3MSwgInVkcCJ9LAoreyJ2aXNpb25fc2VydmVyIiwgICAgICB7TlVMTH0sIDY2NzIsICJ0Y3AifSwKK3sidmlzaW9uX3NlcnZlciIsICAgICAge05VTEx9LCA2NjcyLCAidWRwIn0sCit7InZpc2lvbl9lbG1kIiwgICAgICAgIHtOVUxMfSwgNjY3MywgInRjcCJ9LAoreyJ2aXNpb25fZWxtZCIsICAgICAgICB7TlVMTH0sIDY2NzMsICJ1ZHAifSwKK3sidmZicCIsICAgICAgICAgICAgICAge05VTEx9LCA2Njc4LCAidGNwIn0sCit7InZmYnAtZGlzYyIsICAgICAgICAgIHtOVUxMfSwgNjY3OCwgInVkcCJ9LAoreyJvc2F1dCIsICAgICAgICAgICAgICB7TlVMTH0sIDY2NzksICJ0Y3AifSwKK3sib3NhdXQiLCAgICAgICAgICAgICAge05VTEx9LCA2Njc5LCAidWRwIn0sCit7ImNsZXZlci1jdHJhY2UiLCAgICAgIHtOVUxMfSwgNjY4NywgInRjcCJ9LAoreyJjbGV2ZXItdGNwaXAiLCAgICAgICB7TlVMTH0sIDY2ODgsICJ0Y3AifSwKK3sidHNhIiwgICAgICAgICAgICAgICAge05VTEx9LCA2Njg5LCAidGNwIn0sCit7InRzYSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNjY4OSwgInVkcCJ9LAoreyJiYWJlbCIsICAgICAgICAgICAgICB7TlVMTH0sIDY2OTcsICJ1ZHAifSwKK3sia3RpLWljYWQtc3J2ciIsICAgICAge05VTEx9LCA2NzAxLCAidGNwIn0sCit7Imt0aS1pY2FkLXNydnIiLCAgICAgIHtOVUxMfSwgNjcwMSwgInVkcCJ9LAoreyJlLWRlc2lnbi1uZXQiLCAgICAgICB7TlVMTH0sIDY3MDIsICJ0Y3AifSwKK3siZS1kZXNpZ24tbmV0IiwgICAgICAge05VTEx9LCA2NzAyLCAidWRwIn0sCit7ImUtZGVzaWduLXdlYiIsICAgICAgIHtOVUxMfSwgNjcwMywgInRjcCJ9LAoreyJlLWRlc2lnbi13ZWIiLCAgICAgICB7TlVMTH0sIDY3MDMsICJ1ZHAifSwKK3siZnJjLWhwIiwgICAgICAgICAgICAge05VTEx9LCA2NzA0LCAic2N0cCJ9LAoreyJmcmMtbXAiLCAgICAgICAgICAgICB7TlVMTH0sIDY3MDUsICJzY3RwIn0sCit7ImZyYy1scCIsICAgICAgICAgICAgIHtOVUxMfSwgNjcwNiwgInNjdHAifSwKK3siaWJwcm90b2NvbCIsICAgICAgICAge05VTEx9LCA2NzE0LCAidGNwIn0sCit7ImlicHJvdG9jb2wiLCAgICAgICAgIHtOVUxMfSwgNjcxNCwgInVkcCJ9LAoreyJmaWJvdHJhZGVyLWNvbSIsICAgICB7TlVMTH0sIDY3MTUsICJ0Y3AifSwKK3siZmlib3RyYWRlci1jb20iLCAgICAge05VTEx9LCA2NzE1LCAidWRwIn0sCit7ImJtYy1wZXJmLWFnZW50IiwgICAgIHtOVUxMfSwgNjc2NywgInRjcCJ9LAoreyJibWMtcGVyZi1hZ2VudCIsICAgICB7TlVMTH0sIDY3NjcsICJ1ZHAifSwKK3siYm1jLXBlcmYtbWdyZCIsICAgICAge05VTEx9LCA2NzY4LCAidGNwIn0sCit7ImJtYy1wZXJmLW1ncmQiLCAgICAgIHtOVUxMfSwgNjc2OCwgInVkcCJ9LAoreyJhZGktZ3hwLXNydnBydCIsICAgICB7TlVMTH0sIDY3NjksICJ0Y3AifSwKK3siYWRpLWd4cC1zcnZwcnQiLCAgICAge05VTEx9LCA2NzY5LCAidWRwIn0sCit7InBseXNydi1odHRwIiwgICAgICAgIHtOVUxMfSwgNjc3MCwgInRjcCJ9LAoreyJwbHlzcnYtaHR0cCIsICAgICAgICB7TlVMTH0sIDY3NzAsICJ1ZHAifSwKK3sicGx5c3J2LWh0dHBzIiwgICAgICAge05VTEx9LCA2NzcxLCAidGNwIn0sCit7InBseXNydi1odHRwcyIsICAgICAgIHtOVUxMfSwgNjc3MSwgInVkcCJ9LAoreyJkZ3BmLWV4Y2hnIiwgICAgICAgICB7TlVMTH0sIDY3ODUsICJ0Y3AifSwKK3siZGdwZi1leGNoZyIsICAgICAgICAge05VTEx9LCA2Nzg1LCAidWRwIn0sCit7InNtYy1qbXgiLCAgICAgICAgICAgIHtOVUxMfSwgNjc4NiwgInRjcCJ9LAoreyJzbWMtam14IiwgICAgICAgICAgICB7TlVMTH0sIDY3ODYsICJ1ZHAifSwKK3sic21jLWFkbWluIiwgICAgICAgICAge05VTEx9LCA2Nzg3LCAidGNwIn0sCit7InNtYy1hZG1pbiIsICAgICAgICAgIHtOVUxMfSwgNjc4NywgInVkcCJ9LAoreyJzbWMtaHR0cCIsICAgICAgICAgICB7TlVMTH0sIDY3ODgsICJ0Y3AifSwKK3sic21jLWh0dHAiLCAgICAgICAgICAge05VTEx9LCA2Nzg4LCAidWRwIn0sCit7InNtYy1odHRwcyIsICAgICAgICAgIHtOVUxMfSwgNjc4OSwgInRjcCJ9LAoreyJzbWMtaHR0cHMiLCAgICAgICAgICB7TlVMTH0sIDY3ODksICJ1ZHAifSwKK3siaG5tcCIsICAgICAgICAgICAgICAge05VTEx9LCA2NzkwLCAidGNwIn0sCit7ImhubXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjc5MCwgInVkcCJ9LAoreyJobm0iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDY3OTEsICJ0Y3AifSwKK3siaG5tIiwgICAgICAgICAgICAgICAge05VTEx9LCA2NzkxLCAidWRwIn0sCit7ImFjbmV0IiwgICAgICAgICAgICAgIHtOVUxMfSwgNjgwMSwgInRjcCJ9LAoreyJhY25ldCIsICAgICAgICAgICAgICB7TlVMTH0sIDY4MDEsICJ1ZHAifSwKK3sicGVudGJveC1zaW0iLCAgICAgICAge05VTEx9LCA2ODE3LCAidGNwIn0sCit7ImFtYml0LWxtIiwgICAgICAgICAgIHtOVUxMfSwgNjgzMSwgInRjcCJ9LAoreyJhbWJpdC1sbSIsICAgICAgICAgICB7TlVMTH0sIDY4MzEsICJ1ZHAifSwKK3sibmV0bW8tZGVmYXVsdCIsICAgICAge05VTEx9LCA2ODQxLCAidGNwIn0sCit7Im5ldG1vLWRlZmF1bHQiLCAgICAgIHtOVUxMfSwgNjg0MSwgInVkcCJ9LAoreyJuZXRtby1odHRwIiwgICAgICAgICB7TlVMTH0sIDY4NDIsICJ0Y3AifSwKK3sibmV0bW8taHR0cCIsICAgICAgICAge05VTEx9LCA2ODQyLCAidWRwIn0sCit7ImljY3J1c2htb3JlIiwgICAgICAgIHtOVUxMfSwgNjg1MCwgInRjcCJ9LAoreyJpY2NydXNobW9yZSIsICAgICAgICB7TlVMTH0sIDY4NTAsICJ1ZHAifSwKK3siYWNjdG9wdXMtY2MiLCAgICAgICAge05VTEx9LCA2ODY4LCAidGNwIn0sCit7ImFjY3RvcHVzLXN0IiwgICAgICAgIHtOVUxMfSwgNjg2OCwgInVkcCJ9LAoreyJtdXNlIiwgICAgICAgICAgICAgICB7TlVMTH0sIDY4ODgsICJ0Y3AifSwKK3sibXVzZSIsICAgICAgICAgICAgICAge05VTEx9LCA2ODg4LCAidWRwIn0sCit7ImpldHN0cmVhbSIsICAgICAgICAgIHtOVUxMfSwgNjkwMSwgInRjcCJ9LAoreyJ4c21zdmMiLCAgICAgICAgICAgICB7TlVMTH0sIDY5MzYsICJ0Y3AifSwKK3sieHNtc3ZjIiwgICAgICAgICAgICAge05VTEx9LCA2OTM2LCAidWRwIn0sCit7ImJpb3NlcnZlciIsICAgICAgICAgIHtOVUxMfSwgNjk0NiwgInRjcCJ9LAoreyJiaW9zZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDY5NDYsICJ1ZHAifSwKK3sib3RscCIsICAgICAgICAgICAgICAge05VTEx9LCA2OTUxLCAidGNwIn0sCit7Im90bHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNjk1MSwgInVkcCJ9LAoreyJqbWFjdDMiLCAgICAgICAgICAgICB7TlVMTH0sIDY5NjEsICJ0Y3AifSwKK3siam1hY3QzIiwgICAgICAgICAgICAge05VTEx9LCA2OTYxLCAidWRwIn0sCit7ImptZXZ0MiIsICAgICAgICAgICAgIHtOVUxMfSwgNjk2MiwgInRjcCJ9LAoreyJqbWV2dDIiLCAgICAgICAgICAgICB7TlVMTH0sIDY5NjIsICJ1ZHAifSwKK3sic3dpc21ncjEiLCAgICAgICAgICAge05VTEx9LCA2OTYzLCAidGNwIn0sCit7InN3aXNtZ3IxIiwgICAgICAgICAgIHtOVUxMfSwgNjk2MywgInVkcCJ9LAoreyJzd2lzbWdyMiIsICAgICAgICAgICB7TlVMTH0sIDY5NjQsICJ0Y3AifSwKK3sic3dpc21ncjIiLCAgICAgICAgICAge05VTEx9LCA2OTY0LCAidWRwIn0sCit7InN3aXN0cmFwIiwgICAgICAgICAgIHtOVUxMfSwgNjk2NSwgInRjcCJ9LAoreyJzd2lzdHJhcCIsICAgICAgICAgICB7TlVMTH0sIDY5NjUsICJ1ZHAifSwKK3sic3dpc3BvbCIsICAgICAgICAgICAge05VTEx9LCA2OTY2LCAidGNwIn0sCit7InN3aXNwb2wiLCAgICAgICAgICAgIHtOVUxMfSwgNjk2NiwgInVkcCJ9LAoreyJhY21zb2RhIiwgICAgICAgICAgICB7TlVMTH0sIDY5NjksICJ0Y3AifSwKK3siYWNtc29kYSIsICAgICAgICAgICAge05VTEx9LCA2OTY5LCAidWRwIn0sCit7Ik1vYmlsaXR5U3J2IiwgICAgICAgIHtOVUxMfSwgNjk5NywgInRjcCJ9LAoreyJNb2JpbGl0eVNydiIsICAgICAgICB7TlVMTH0sIDY5OTcsICJ1ZHAifSwKK3siaWF0cC1oaWdocHJpIiwgICAgICAge05VTEx9LCA2OTk4LCAidGNwIn0sCit7ImlhdHAtaGlnaHByaSIsICAgICAgIHtOVUxMfSwgNjk5OCwgInVkcCJ9LAoreyJpYXRwLW5vcm1hbHByaSIsICAgICB7TlVMTH0sIDY5OTksICJ0Y3AifSwKK3siaWF0cC1ub3JtYWxwcmkiLCAgICAge05VTEx9LCA2OTk5LCAidWRwIn0sCit7ImFmczMtZmlsZXNlcnZlciIsICAgIHtOVUxMfSwgNzAwMCwgInRjcCJ9LAoreyJhZnMzLWZpbGVzZXJ2ZXIiLCAgICB7TlVMTH0sIDcwMDAsICJ1ZHAifSwKK3siYWZzMy1jYWxsYmFjayIsICAgICAge05VTEx9LCA3MDAxLCAidGNwIn0sCit7ImFmczMtY2FsbGJhY2siLCAgICAgIHtOVUxMfSwgNzAwMSwgInVkcCJ9LAoreyJhZnMzLXByc2VydmVyIiwgICAgICB7TlVMTH0sIDcwMDIsICJ0Y3AifSwKK3siYWZzMy1wcnNlcnZlciIsICAgICAge05VTEx9LCA3MDAyLCAidWRwIn0sCit7ImFmczMtdmxzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgNzAwMywgInRjcCJ9LAoreyJhZnMzLXZsc2VydmVyIiwgICAgICB7TlVMTH0sIDcwMDMsICJ1ZHAifSwKK3siYWZzMy1rYXNlcnZlciIsICAgICAge05VTEx9LCA3MDA0LCAidGNwIn0sCit7ImFmczMta2FzZXJ2ZXIiLCAgICAgIHtOVUxMfSwgNzAwNCwgInVkcCJ9LAoreyJhZnMzLXZvbHNlciIsICAgICAgICB7TlVMTH0sIDcwMDUsICJ0Y3AifSwKK3siYWZzMy12b2xzZXIiLCAgICAgICAge05VTEx9LCA3MDA1LCAidWRwIn0sCit7ImFmczMtZXJyb3JzIiwgICAgICAgIHtOVUxMfSwgNzAwNiwgInRjcCJ9LAoreyJhZnMzLWVycm9ycyIsICAgICAgICB7TlVMTH0sIDcwMDYsICJ1ZHAifSwKK3siYWZzMy1ib3MiLCAgICAgICAgICAge05VTEx9LCA3MDA3LCAidGNwIn0sCit7ImFmczMtYm9zIiwgICAgICAgICAgIHtOVUxMfSwgNzAwNywgInVkcCJ9LAoreyJhZnMzLXVwZGF0ZSIsICAgICAgICB7TlVMTH0sIDcwMDgsICJ0Y3AifSwKK3siYWZzMy11cGRhdGUiLCAgICAgICAge05VTEx9LCA3MDA4LCAidWRwIn0sCit7ImFmczMtcm10c3lzIiwgICAgICAgIHtOVUxMfSwgNzAwOSwgInRjcCJ9LAoreyJhZnMzLXJtdHN5cyIsICAgICAgICB7TlVMTH0sIDcwMDksICJ1ZHAifSwKK3sidXBzLW9ubGluZXQiLCAgICAgICAge05VTEx9LCA3MDEwLCAidGNwIn0sCit7InVwcy1vbmxpbmV0IiwgICAgICAgIHtOVUxMfSwgNzAxMCwgInVkcCJ9LAoreyJ0YWxvbi1kaXNjIiwgICAgICAgICB7TlVMTH0sIDcwMTEsICJ0Y3AifSwKK3sidGFsb24tZGlzYyIsICAgICAgICAge05VTEx9LCA3MDExLCAidWRwIn0sCit7InRhbG9uLWVuZ2luZSIsICAgICAgIHtOVUxMfSwgNzAxMiwgInRjcCJ9LAoreyJ0YWxvbi1lbmdpbmUiLCAgICAgICB7TlVMTH0sIDcwMTIsICJ1ZHAifSwKK3sibWljcm90YWxvbi1kaXMiLCAgICAge05VTEx9LCA3MDEzLCAidGNwIn0sCit7Im1pY3JvdGFsb24tZGlzIiwgICAgIHtOVUxMfSwgNzAxMywgInVkcCJ9LAoreyJtaWNyb3RhbG9uLWNvbSIsICAgICB7TlVMTH0sIDcwMTQsICJ0Y3AifSwKK3sibWljcm90YWxvbi1jb20iLCAgICAge05VTEx9LCA3MDE0LCAidWRwIn0sCit7InRhbG9uLXdlYnNlcnZlciIsICAgIHtOVUxMfSwgNzAxNSwgInRjcCJ9LAoreyJ0YWxvbi13ZWJzZXJ2ZXIiLCAgICB7TlVMTH0sIDcwMTUsICJ1ZHAifSwKK3siZHBzZXJ2ZSIsICAgICAgICAgICAge05VTEx9LCA3MDIwLCAidGNwIn0sCit7ImRwc2VydmUiLCAgICAgICAgICAgIHtOVUxMfSwgNzAyMCwgInVkcCJ9LAoreyJkcHNlcnZlYWRtaW4iLCAgICAgICB7TlVMTH0sIDcwMjEsICJ0Y3AifSwKK3siZHBzZXJ2ZWFkbWluIiwgICAgICAge05VTEx9LCA3MDIxLCAidWRwIn0sCit7ImN0ZHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzAyMiwgInRjcCJ9LAoreyJjdGRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcwMjIsICJ1ZHAifSwKK3siY3Qybm1jcyIsICAgICAgICAgICAge05VTEx9LCA3MDIzLCAidGNwIn0sCit7ImN0Mm5tY3MiLCAgICAgICAgICAgIHtOVUxMfSwgNzAyMywgInVkcCJ9LAoreyJ2bXN2YyIsICAgICAgICAgICAgICB7TlVMTH0sIDcwMjQsICJ0Y3AifSwKK3sidm1zdmMiLCAgICAgICAgICAgICAge05VTEx9LCA3MDI0LCAidWRwIn0sCit7InZtc3ZjLTIiLCAgICAgICAgICAgIHtOVUxMfSwgNzAyNSwgInRjcCJ9LAoreyJ2bXN2Yy0yIiwgICAgICAgICAgICB7TlVMTH0sIDcwMjUsICJ1ZHAifSwKK3sib3AtcHJvYmUiLCAgICAgICAgICAge05VTEx9LCA3MDMwLCAidGNwIn0sCit7Im9wLXByb2JlIiwgICAgICAgICAgIHtOVUxMfSwgNzAzMCwgInVkcCJ9LAoreyJhcmNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcwNzAsICJ0Y3AifSwKK3siYXJjcCIsICAgICAgICAgICAgICAge05VTEx9LCA3MDcwLCAidWRwIn0sCit7Iml3ZzEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzA3MSwgInRjcCJ9LAoreyJpd2cxIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcwNzEsICJ1ZHAifSwKK3siZW1wb3dlcmlkIiwgICAgICAgICAge05VTEx9LCA3MDgwLCAidGNwIn0sCit7ImVtcG93ZXJpZCIsICAgICAgICAgIHtOVUxMfSwgNzA4MCwgInVkcCJ9LAoreyJsYXp5LXB0b3AiLCAgICAgICAgICB7TlVMTH0sIDcwOTksICJ0Y3AifSwKK3sibGF6eS1wdG9wIiwgICAgICAgICAge05VTEx9LCA3MDk5LCAidWRwIn0sCit7ImZvbnQtc2VydmljZSIsICAgICAgIHtOVUxMfSwgNzEwMCwgInRjcCJ9LAoreyJmb250LXNlcnZpY2UiLCAgICAgICB7TlVMTH0sIDcxMDAsICJ1ZHAifSwKK3siZWxjbiIsICAgICAgICAgICAgICAge05VTEx9LCA3MTAxLCAidGNwIn0sCit7ImVsY24iLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzEwMSwgInVkcCJ9LAoreyJhZXMteDE3MCIsICAgICAgICAgICB7TlVMTH0sIDcxMDcsICJ1ZHAifSwKK3sidmlycHJvdC1sbSIsICAgICAgICAge05VTEx9LCA3MTIxLCAidGNwIn0sCit7InZpcnByb3QtbG0iLCAgICAgICAgIHtOVUxMfSwgNzEyMSwgInVkcCJ9LAoreyJzY2VuaWRtIiwgICAgICAgICAgICB7TlVMTH0sIDcxMjgsICJ0Y3AifSwKK3sic2NlbmlkbSIsICAgICAgICAgICAge05VTEx9LCA3MTI4LCAidWRwIn0sCit7InNjZW5jY3MiLCAgICAgICAgICAgIHtOVUxMfSwgNzEyOSwgInRjcCJ9LAoreyJzY2VuY2NzIiwgICAgICAgICAgICB7TlVMTH0sIDcxMjksICJ1ZHAifSwKK3siY2Fic20tY29tbSIsICAgICAgICAge05VTEx9LCA3MTYxLCAidGNwIn0sCit7ImNhYnNtLWNvbW0iLCAgICAgICAgIHtOVUxMfSwgNzE2MSwgInVkcCJ9LAoreyJjYWlzdG9yYWdlbWdyIiwgICAgICB7TlVMTH0sIDcxNjIsICJ0Y3AifSwKK3siY2Fpc3RvcmFnZW1nciIsICAgICAge05VTEx9LCA3MTYyLCAidWRwIn0sCit7ImNhY3NhbWJyb2tlciIsICAgICAgIHtOVUxMfSwgNzE2MywgInRjcCJ9LAoreyJjYWNzYW1icm9rZXIiLCAgICAgICB7TlVMTH0sIDcxNjMsICJ1ZHAifSwKK3siZnNyIiwgICAgICAgICAgICAgICAge05VTEx9LCA3MTY0LCAidGNwIn0sCit7ImZzciIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNzE2NCwgInVkcCJ9LAoreyJkb2Mtc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDcxNjUsICJ0Y3AifSwKK3siZG9jLXNlcnZlciIsICAgICAgICAge05VTEx9LCA3MTY1LCAidWRwIn0sCit7ImFydWJhLXNlcnZlciIsICAgICAgIHtOVUxMfSwgNzE2NiwgInRjcCJ9LAoreyJhcnViYS1zZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDcxNjYsICJ1ZHAifSwKK3siY2Fzcm1hZ2VudCIsICAgICAgICAge05VTEx9LCA3MTY3LCAidGNwIn0sCit7ImNuY2thZHNlcnZlciIsICAgICAgIHtOVUxMfSwgNzE2OCwgInRjcCJ9LAoreyJjY2FnLXBpYiIsICAgICAgICAgICB7TlVMTH0sIDcxNjksICJ0Y3AifSwKK3siY2NhZy1waWIiLCAgICAgICAgICAge05VTEx9LCA3MTY5LCAidWRwIn0sCit7Im5zcnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzE3MCwgInRjcCJ9LAoreyJuc3JwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcxNzAsICJ1ZHAifSwKK3siZHJtLXByb2R1Y3Rpb24iLCAgICAge05VTEx9LCA3MTcxLCAidGNwIn0sCit7ImRybS1wcm9kdWN0aW9uIiwgICAgIHtOVUxMfSwgNzE3MSwgInVkcCJ9LAoreyJ6c2VjdXJlIiwgICAgICAgICAgICB7TlVMTH0sIDcxNzMsICJ0Y3AifSwKK3siY2x1dGlsZCIsICAgICAgICAgICAge05VTEx9LCA3MTc0LCAidGNwIn0sCit7ImNsdXRpbGQiLCAgICAgICAgICAgIHtOVUxMfSwgNzE3NCwgInVkcCJ9LAoreyJmb2RtcyIsICAgICAgICAgICAgICB7TlVMTH0sIDcyMDAsICJ0Y3AifSwKK3siZm9kbXMiLCAgICAgICAgICAgICAge05VTEx9LCA3MjAwLCAidWRwIn0sCit7ImRsaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzIwMSwgInRjcCJ9LAoreyJkbGlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcyMDEsICJ1ZHAifSwKK3sicmFtcCIsICAgICAgICAgICAgICAge05VTEx9LCA3MjI3LCAidGNwIn0sCit7InJhbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzIyNywgInVkcCJ9LAoreyJjaXRyaXh1cHAiLCAgICAgICAgICB7TlVMTH0sIDcyMjgsICJ0Y3AifSwKK3siY2l0cml4dXBwZyIsICAgICAgICAge05VTEx9LCA3MjI5LCAidGNwIn0sCit7InBhZHMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzIzNywgInRjcCJ9LAoreyJjbmFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDcyNjIsICJ0Y3AifSwKK3siY25hcCIsICAgICAgICAgICAgICAge05VTEx9LCA3MjYyLCAidWRwIn0sCit7IndhdGNobWUtNzI3MiIsICAgICAgIHtOVUxMfSwgNzI3MiwgInRjcCJ9LAoreyJ3YXRjaG1lLTcyNzIiLCAgICAgICB7TlVMTH0sIDcyNzIsICJ1ZHAifSwKK3sib21hLXJscCIsICAgICAgICAgICAge05VTEx9LCA3MjczLCAidGNwIn0sCit7Im9tYS1ybHAiLCAgICAgICAgICAgIHtOVUxMfSwgNzI3MywgInVkcCJ9LAoreyJvbWEtcmxwLXMiLCAgICAgICAgICB7TlVMTH0sIDcyNzQsICJ0Y3AifSwKK3sib21hLXJscC1zIiwgICAgICAgICAge05VTEx9LCA3Mjc0LCAidWRwIn0sCit7Im9tYS11bHAiLCAgICAgICAgICAgIHtOVUxMfSwgNzI3NSwgInRjcCJ9LAoreyJvbWEtdWxwIiwgICAgICAgICAgICB7TlVMTH0sIDcyNzUsICJ1ZHAifSwKK3sib21hLWlscCIsICAgICAgICAgICAge05VTEx9LCA3Mjc2LCAidGNwIn0sCit7Im9tYS1pbHAiLCAgICAgICAgICAgIHtOVUxMfSwgNzI3NiwgInVkcCJ9LAoreyJvbWEtaWxwLXMiLCAgICAgICAgICB7TlVMTH0sIDcyNzcsICJ0Y3AifSwKK3sib21hLWlscC1zIiwgICAgICAgICAge05VTEx9LCA3Mjc3LCAidWRwIn0sCit7Im9tYS1kY2RvY2JzIiwgICAgICAgIHtOVUxMfSwgNzI3OCwgInRjcCJ9LAoreyJvbWEtZGNkb2NicyIsICAgICAgICB7TlVMTH0sIDcyNzgsICJ1ZHAifSwKK3siY3R4bGljIiwgICAgICAgICAgICAge05VTEx9LCA3Mjc5LCAidGNwIn0sCit7ImN0eGxpYyIsICAgICAgICAgICAgIHtOVUxMfSwgNzI3OSwgInVkcCJ9LAoreyJpdGFjdGlvbnNlcnZlcjEiLCAgICB7TlVMTH0sIDcyODAsICJ0Y3AifSwKK3siaXRhY3Rpb25zZXJ2ZXIxIiwgICAge05VTEx9LCA3MjgwLCAidWRwIn0sCit7Iml0YWN0aW9uc2VydmVyMiIsICAgIHtOVUxMfSwgNzI4MSwgInRjcCJ9LAoreyJpdGFjdGlvbnNlcnZlcjIiLCAgICB7TlVMTH0sIDcyODEsICJ1ZHAifSwKK3sibXpjYS1hY3Rpb24iLCAgICAgICAge05VTEx9LCA3MjgyLCAidGNwIn0sCit7Im16Y2EtYWxlcnQiLCAgICAgICAgIHtOVUxMfSwgNzI4MiwgInVkcCJ9LAoreyJsY20tc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDczNjUsICJ0Y3AifSwKK3sibGNtLXNlcnZlciIsICAgICAgICAge05VTEx9LCA3MzY1LCAidWRwIn0sCit7Im1pbmRmaWxlc3lzIiwgICAgICAgIHtOVUxMfSwgNzM5MSwgInRjcCJ9LAoreyJtaW5kZmlsZXN5cyIsICAgICAgICB7TlVMTH0sIDczOTEsICJ1ZHAifSwKK3sibXJzc3JlbmRlenZvdXMiLCAgICAge05VTEx9LCA3MzkyLCAidGNwIn0sCit7Im1yc3NyZW5kZXp2b3VzIiwgICAgIHtOVUxMfSwgNzM5MiwgInVkcCJ9LAoreyJuZm9sZG1hbiIsICAgICAgICAgICB7TlVMTH0sIDczOTMsICJ0Y3AifSwKK3sibmZvbGRtYW4iLCAgICAgICAgICAge05VTEx9LCA3MzkzLCAidWRwIn0sCit7ImZzZSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNzM5NCwgInRjcCJ9LAoreyJmc2UiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDczOTQsICJ1ZHAifSwKK3sid2lucWVkaXQiLCAgICAgICAgICAge05VTEx9LCA3Mzk1LCAidGNwIn0sCit7IndpbnFlZGl0IiwgICAgICAgICAgIHtOVUxMfSwgNzM5NSwgInVkcCJ9LAoreyJoZXhhcmMiLCAgICAgICAgICAgICB7TlVMTH0sIDczOTcsICJ0Y3AifSwKK3siaGV4YXJjIiwgICAgICAgICAgICAge05VTEx9LCA3Mzk3LCAidWRwIn0sCit7InJ0cHMtZGlzY292ZXJ5IiwgICAgIHtOVUxMfSwgNzQwMCwgInRjcCJ9LAoreyJydHBzLWRpc2NvdmVyeSIsICAgICB7TlVMTH0sIDc0MDAsICJ1ZHAifSwKK3sicnRwcy1kZC11dCIsICAgICAgICAge05VTEx9LCA3NDAxLCAidGNwIn0sCit7InJ0cHMtZGQtdXQiLCAgICAgICAgIHtOVUxMfSwgNzQwMSwgInVkcCJ9LAoreyJydHBzLWRkLW10IiwgICAgICAgICB7TlVMTH0sIDc0MDIsICJ0Y3AifSwKK3sicnRwcy1kZC1tdCIsICAgICAgICAge05VTEx9LCA3NDAyLCAidWRwIn0sCit7Imlvbml4bmV0bW9uIiwgICAgICAgIHtOVUxMfSwgNzQxMCwgInRjcCJ9LAoreyJpb25peG5ldG1vbiIsICAgICAgICB7TlVMTH0sIDc0MTAsICJ1ZHAifSwKK3sibXRwb3J0bW9uIiwgICAgICAgICAge05VTEx9LCA3NDIxLCAidGNwIn0sCit7Im10cG9ydG1vbiIsICAgICAgICAgIHtOVUxMfSwgNzQyMSwgInVkcCJ9LAoreyJwbWRtZ3IiLCAgICAgICAgICAgICB7TlVMTH0sIDc0MjYsICJ0Y3AifSwKK3sicG1kbWdyIiwgICAgICAgICAgICAge05VTEx9LCA3NDI2LCAidWRwIn0sCit7Im92ZWFkbWdyIiwgICAgICAgICAgIHtOVUxMfSwgNzQyNywgInRjcCJ9LAoreyJvdmVhZG1nciIsICAgICAgICAgICB7TlVMTH0sIDc0MjcsICJ1ZHAifSwKK3sib3ZsYWRtZ3IiLCAgICAgICAgICAge05VTEx9LCA3NDI4LCAidGNwIn0sCit7Im92bGFkbWdyIiwgICAgICAgICAgIHtOVUxMfSwgNzQyOCwgInVkcCJ9LAoreyJvcGktc29jayIsICAgICAgICAgICB7TlVMTH0sIDc0MjksICJ0Y3AifSwKK3sib3BpLXNvY2siLCAgICAgICAgICAge05VTEx9LCA3NDI5LCAidWRwIn0sCit7InhtcHY3IiwgICAgICAgICAgICAgIHtOVUxMfSwgNzQzMCwgInRjcCJ9LAoreyJ4bXB2NyIsICAgICAgICAgICAgICB7TlVMTH0sIDc0MzAsICJ1ZHAifSwKK3sicG1kIiwgICAgICAgICAgICAgICAge05VTEx9LCA3NDMxLCAidGNwIn0sCit7InBtZCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNzQzMSwgInVkcCJ9LAoreyJmYXhpbXVtIiwgICAgICAgICAgICB7TlVMTH0sIDc0MzcsICJ0Y3AifSwKK3siZmF4aW11bSIsICAgICAgICAgICAge05VTEx9LCA3NDM3LCAidWRwIn0sCit7Im9yYWNsZWFzLWh0dHBzIiwgICAgIHtOVUxMfSwgNzQ0MywgInRjcCJ9LAoreyJvcmFjbGVhcy1odHRwcyIsICAgICB7TlVMTH0sIDc0NDMsICJ1ZHAifSwKK3sicmlzZSIsICAgICAgICAgICAgICAge05VTEx9LCA3NDczLCAidGNwIn0sCit7InJpc2UiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzQ3MywgInVkcCJ9LAoreyJ0ZWxvcHMtbG1kIiwgICAgICAgICB7TlVMTH0sIDc0OTEsICJ0Y3AifSwKK3sidGVsb3BzLWxtZCIsICAgICAgICAge05VTEx9LCA3NDkxLCAidWRwIn0sCit7InNpbGhvdWV0dGUiLCAgICAgICAgIHtOVUxMfSwgNzUwMCwgInRjcCJ9LAoreyJzaWxob3VldHRlIiwgICAgICAgICB7TlVMTH0sIDc1MDAsICJ1ZHAifSwKK3sib3ZidXMiLCAgICAgICAgICAgICAge05VTEx9LCA3NTAxLCAidGNwIn0sCit7Im92YnVzIiwgICAgICAgICAgICAgIHtOVUxMfSwgNzUwMSwgInVkcCJ9LAoreyJhY3BsdCIsICAgICAgICAgICAgICB7TlVMTH0sIDc1MDksICJ0Y3AifSwKK3sib3ZocGFzIiwgICAgICAgICAgICAge05VTEx9LCA3NTEwLCAidGNwIn0sCit7Im92aHBhcyIsICAgICAgICAgICAgIHtOVUxMfSwgNzUxMCwgInVkcCJ9LAoreyJwYWZlYy1sbSIsICAgICAgICAgICB7TlVMTH0sIDc1MTEsICJ0Y3AifSwKK3sicGFmZWMtbG0iLCAgICAgICAgICAge05VTEx9LCA3NTExLCAidWRwIn0sCit7InNhcmF0b2dhIiwgICAgICAgICAgIHtOVUxMfSwgNzU0MiwgInRjcCJ9LAoreyJzYXJhdG9nYSIsICAgICAgICAgICB7TlVMTH0sIDc1NDIsICJ1ZHAifSwKK3siYXR1bCIsICAgICAgICAgICAgICAge05VTEx9LCA3NTQzLCAidGNwIn0sCit7ImF0dWwiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzU0MywgInVkcCJ9LAoreyJudGEtZHMiLCAgICAgICAgICAgICB7TlVMTH0sIDc1NDQsICJ0Y3AifSwKK3sibnRhLWRzIiwgICAgICAgICAgICAge05VTEx9LCA3NTQ0LCAidWRwIn0sCit7Im50YS11cyIsICAgICAgICAgICAgIHtOVUxMfSwgNzU0NSwgInRjcCJ9LAoreyJudGEtdXMiLCAgICAgICAgICAgICB7TlVMTH0sIDc1NDUsICJ1ZHAifSwKK3siY2ZzIiwgICAgICAgICAgICAgICAge05VTEx9LCA3NTQ2LCAidGNwIn0sCit7ImNmcyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNzU0NiwgInVkcCJ9LAoreyJjd21wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc1NDcsICJ0Y3AifSwKK3siY3dtcCIsICAgICAgICAgICAgICAge05VTEx9LCA3NTQ3LCAidWRwIn0sCit7InRpZHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzU0OCwgInRjcCJ9LAoreyJ0aWRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc1NDgsICJ1ZHAifSwKK3sibmxzLXRsIiwgICAgICAgICAgICAge05VTEx9LCA3NTQ5LCAidGNwIn0sCit7Im5scy10bCIsICAgICAgICAgICAgIHtOVUxMfSwgNzU0OSwgInVkcCJ9LAoreyJzbmNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc1NjAsICJ0Y3AifSwKK3sic25jcCIsICAgICAgICAgICAgICAge05VTEx9LCA3NTYwLCAidWRwIn0sCit7ImNmdyIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNzU2MywgInRjcCJ9LAoreyJ2c2ktb21lZ2EiLCAgICAgICAgICB7TlVMTH0sIDc1NjYsICJ0Y3AifSwKK3sidnNpLW9tZWdhIiwgICAgICAgICAge05VTEx9LCA3NTY2LCAidWRwIn0sCit7ImRlbGwtZXFsLWFzbSIsICAgICAgIHtOVUxMfSwgNzU2OSwgInRjcCJ9LAoreyJhcmllcy1rZmluZGVyIiwgICAgICB7TlVMTH0sIDc1NzAsICJ0Y3AifSwKK3siYXJpZXMta2ZpbmRlciIsICAgICAge05VTEx9LCA3NTcwLCAidWRwIn0sCit7InN1bi1sbSIsICAgICAgICAgICAgIHtOVUxMfSwgNzU4OCwgInRjcCJ9LAoreyJzdW4tbG0iLCAgICAgICAgICAgICB7TlVMTH0sIDc1ODgsICJ1ZHAifSwKK3siaW5kaSIsICAgICAgICAgICAgICAge05VTEx9LCA3NjI0LCAidGNwIn0sCit7ImluZGkiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzYyNCwgInVkcCJ9LAoreyJzaW1jbyIsICAgICAgICAgICAgICB7TlVMTH0sIDc2MjYsICJ0Y3AifSwKK3sic2ltY28iLCAgICAgICAgICAgICAge05VTEx9LCA3NjI2LCAic2N0cCJ9LAoreyJzb2FwLWh0dHAiLCAgICAgICAgICB7TlVMTH0sIDc2MjcsICJ0Y3AifSwKK3sic29hcC1odHRwIiwgICAgICAgICAge05VTEx9LCA3NjI3LCAidWRwIn0sCit7Inplbi1wYXduIiwgICAgICAgICAgIHtOVUxMfSwgNzYyOCwgInRjcCJ9LAoreyJ6ZW4tcGF3biIsICAgICAgICAgICB7TlVMTH0sIDc2MjgsICJ1ZHAifSwKK3sieGRhcyIsICAgICAgICAgICAgICAge05VTEx9LCA3NjI5LCAidGNwIn0sCit7InhkYXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzYyOSwgInVkcCJ9LAoreyJoYXdrIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc2MzAsICJ0Y3AifSwKK3sidGVzbGEtc3lzLW1zZyIsICAgICAge05VTEx9LCA3NjMxLCAidGNwIn0sCit7InBtZGZtZ3QiLCAgICAgICAgICAgIHtOVUxMfSwgNzYzMywgInRjcCJ9LAoreyJwbWRmbWd0IiwgICAgICAgICAgICB7TlVMTH0sIDc2MzMsICJ1ZHAifSwKK3siY3VzZWVtZSIsICAgICAgICAgICAge05VTEx9LCA3NjQ4LCAidGNwIn0sCit7ImN1c2VlbWUiLCAgICAgICAgICAgIHtOVUxMfSwgNzY0OCwgInVkcCJ9LAoreyJpbXFzdG9tcCIsICAgICAgICAgICB7TlVMTH0sIDc2NzIsICJ0Y3AifSwKK3siaW1xc3RvbXBzIiwgICAgICAgICAge05VTEx9LCA3NjczLCAidGNwIn0sCit7ImltcXR1bm5lbHMiLCAgICAgICAgIHtOVUxMfSwgNzY3NCwgInRjcCJ9LAoreyJpbXF0dW5uZWxzIiwgICAgICAgICB7TlVMTH0sIDc2NzQsICJ1ZHAifSwKK3siaW1xdHVubmVsIiwgICAgICAgICAge05VTEx9LCA3Njc1LCAidGNwIn0sCit7ImltcXR1bm5lbCIsICAgICAgICAgIHtOVUxMfSwgNzY3NSwgInVkcCJ9LAoreyJpbXFicm9rZXJkIiwgICAgICAgICB7TlVMTH0sIDc2NzYsICJ0Y3AifSwKK3siaW1xYnJva2VyZCIsICAgICAgICAge05VTEx9LCA3Njc2LCAidWRwIn0sCit7InN1bi11c2VyLWh0dHBzIiwgICAgIHtOVUxMfSwgNzY3NywgInRjcCJ9LAoreyJzdW4tdXNlci1odHRwcyIsICAgICB7TlVMTH0sIDc2NzcsICJ1ZHAifSwKK3sicGFuZG8tcHViIiwgICAgICAgICAge05VTEx9LCA3NjgwLCAidGNwIn0sCit7InBhbmRvLXB1YiIsICAgICAgICAgIHtOVUxMfSwgNzY4MCwgInVkcCJ9LAoreyJjb2xsYWJlciIsICAgICAgICAgICB7TlVMTH0sIDc2ODksICJ0Y3AifSwKK3siY29sbGFiZXIiLCAgICAgICAgICAge05VTEx9LCA3Njg5LCAidWRwIn0sCit7ImtsaW8iLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzY5NywgInRjcCJ9LAoreyJrbGlvIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc2OTcsICJ1ZHAifSwKK3siZW03LXNlY29tIiwgICAgICAgICAge05VTEx9LCA3NzAwLCAidGNwIn0sCit7InN5bmMtZW03IiwgICAgICAgICAgIHtOVUxMfSwgNzcwNywgInRjcCJ9LAoreyJzeW5jLWVtNyIsICAgICAgICAgICB7TlVMTH0sIDc3MDcsICJ1ZHAifSwKK3sic2NpbmV0IiwgICAgICAgICAgICAge05VTEx9LCA3NzA4LCAidGNwIn0sCit7InNjaW5ldCIsICAgICAgICAgICAgIHtOVUxMfSwgNzcwOCwgInVkcCJ9LAoreyJtZWRpbWFnZXBvcnRhbCIsICAgICB7TlVMTH0sIDc3MjAsICJ0Y3AifSwKK3sibWVkaW1hZ2Vwb3J0YWwiLCAgICAge05VTEx9LCA3NzIwLCAidWRwIn0sCit7Im5zZGVlcGZyZWV6ZWN0bCIsICAgIHtOVUxMfSwgNzcyNCwgInRjcCJ9LAoreyJuc2RlZXBmcmVlemVjdGwiLCAgICB7TlVMTH0sIDc3MjQsICJ1ZHAifSwKK3sibml0cm9nZW4iLCAgICAgICAgICAge05VTEx9LCA3NzI1LCAidGNwIn0sCit7Im5pdHJvZ2VuIiwgICAgICAgICAgIHtOVUxMfSwgNzcyNSwgInVkcCJ9LAoreyJmcmVlemV4c2VydmljZSIsICAgICB7TlVMTH0sIDc3MjYsICJ0Y3AifSwKK3siZnJlZXpleHNlcnZpY2UiLCAgICAge05VTEx9LCA3NzI2LCAidWRwIn0sCit7InRyaWRlbnQtZGF0YSIsICAgICAgIHtOVUxMfSwgNzcyNywgInRjcCJ9LAoreyJ0cmlkZW50LWRhdGEiLCAgICAgICB7TlVMTH0sIDc3MjcsICJ1ZHAifSwKK3sic21pcCIsICAgICAgICAgICAgICAge05VTEx9LCA3NzM0LCAidGNwIn0sCit7InNtaXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNzczNCwgInVkcCJ9LAoreyJhaWFnZW50IiwgICAgICAgICAgICB7TlVMTH0sIDc3MzgsICJ0Y3AifSwKK3siYWlhZ2VudCIsICAgICAgICAgICAge05VTEx9LCA3NzM4LCAidWRwIn0sCit7InNjcmlwdHZpZXciLCAgICAgICAgIHtOVUxMfSwgNzc0MSwgInRjcCJ9LAoreyJzY3JpcHR2aWV3IiwgICAgICAgICB7TlVMTH0sIDc3NDEsICJ1ZHAifSwKK3sibXNzcyIsICAgICAgICAgICAgICAge05VTEx9LCA3NzQyLCAidGNwIn0sCit7InNzdHAtMSIsICAgICAgICAgICAgIHtOVUxMfSwgNzc0MywgInRjcCJ9LAoreyJzc3RwLTEiLCAgICAgICAgICAgICB7TlVMTH0sIDc3NDMsICJ1ZHAifSwKK3sicmFxbW9uLXBkdSIsICAgICAgICAge05VTEx9LCA3NzQ0LCAidGNwIn0sCit7InJhcW1vbi1wZHUiLCAgICAgICAgIHtOVUxMfSwgNzc0NCwgInVkcCJ9LAoreyJwcmdwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDc3NDcsICJ0Y3AifSwKK3sicHJncCIsICAgICAgICAgICAgICAge05VTEx9LCA3NzQ3LCAidWRwIn0sCit7ImNidCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNzc3NywgInRjcCJ9LAoreyJjYnQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc3NzcsICJ1ZHAifSwKK3siaW50ZXJ3aXNlIiwgICAgICAgICAge05VTEx9LCA3Nzc4LCAidGNwIn0sCit7ImludGVyd2lzZSIsICAgICAgICAgIHtOVUxMfSwgNzc3OCwgInVkcCJ9LAoreyJ2c3RhdCIsICAgICAgICAgICAgICB7TlVMTH0sIDc3NzksICJ0Y3AifSwKK3sidnN0YXQiLCAgICAgICAgICAgICAge05VTEx9LCA3Nzc5LCAidWRwIn0sCit7ImFjY3UtbG1nciIsICAgICAgICAgIHtOVUxMfSwgNzc4MSwgInRjcCJ9LAoreyJhY2N1LWxtZ3IiLCAgICAgICAgICB7TlVMTH0sIDc3ODEsICJ1ZHAifSwKK3sibWluaXZlbmQiLCAgICAgICAgICAge05VTEx9LCA3Nzg2LCAidGNwIn0sCit7Im1pbml2ZW5kIiwgICAgICAgICAgIHtOVUxMfSwgNzc4NiwgInVkcCJ9LAoreyJwb3B1cC1yZW1pbmRlcnMiLCAgICB7TlVMTH0sIDc3ODcsICJ0Y3AifSwKK3sicG9wdXAtcmVtaW5kZXJzIiwgICAge05VTEx9LCA3Nzg3LCAidWRwIn0sCit7Im9mZmljZS10b29scyIsICAgICAgIHtOVUxMfSwgNzc4OSwgInRjcCJ9LAoreyJvZmZpY2UtdG9vbHMiLCAgICAgICB7TlVMTH0sIDc3ODksICJ1ZHAifSwKK3sicTNhZGUiLCAgICAgICAgICAgICAge05VTEx9LCA3Nzk0LCAidGNwIn0sCit7InEzYWRlIiwgICAgICAgICAgICAgIHtOVUxMfSwgNzc5NCwgInVkcCJ9LAoreyJwbmV0LWNvbm4iLCAgICAgICAgICB7TlVMTH0sIDc3OTcsICJ0Y3AifSwKK3sicG5ldC1jb25uIiwgICAgICAgICAge05VTEx9LCA3Nzk3LCAidWRwIn0sCit7InBuZXQtZW5jIiwgICAgICAgICAgIHtOVUxMfSwgNzc5OCwgInRjcCJ9LAoreyJwbmV0LWVuYyIsICAgICAgICAgICB7TlVMTH0sIDc3OTgsICJ1ZHAifSwKK3siYWx0YnNkcCIsICAgICAgICAgICAge05VTEx9LCA3Nzk5LCAidGNwIn0sCit7ImFsdGJzZHAiLCAgICAgICAgICAgIHtOVUxMfSwgNzc5OSwgInVkcCJ9LAoreyJhc3IiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc4MDAsICJ0Y3AifSwKK3siYXNyIiwgICAgICAgICAgICAgICAge05VTEx9LCA3ODAwLCAidWRwIn0sCit7InNzcC1jbGllbnQiLCAgICAgICAgIHtOVUxMfSwgNzgwMSwgInRjcCJ9LAoreyJzc3AtY2xpZW50IiwgICAgICAgICB7TlVMTH0sIDc4MDEsICJ1ZHAifSwKK3sicmJ0LXdhbm9wdCIsICAgICAgICAge05VTEx9LCA3ODEwLCAidGNwIn0sCit7InJidC13YW5vcHQiLCAgICAgICAgIHtOVUxMfSwgNzgxMCwgInVkcCJ9LAoreyJhcGMtNzg0NSIsICAgICAgICAgICB7TlVMTH0sIDc4NDUsICJ0Y3AifSwKK3siYXBjLTc4NDUiLCAgICAgICAgICAge05VTEx9LCA3ODQ1LCAidWRwIn0sCit7ImFwYy03ODQ2IiwgICAgICAgICAgIHtOVUxMfSwgNzg0NiwgInRjcCJ9LAoreyJhcGMtNzg0NiIsICAgICAgICAgICB7TlVMTH0sIDc4NDYsICJ1ZHAifSwKK3sibW9iaWxlYW5hbHl6ZXIiLCAgICAge05VTEx9LCA3ODY5LCAidGNwIn0sCit7InJidC1zbWMiLCAgICAgICAgICAgIHtOVUxMfSwgNzg3MCwgInRjcCJ9LAoreyJwc3MiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDc4ODAsICJ0Y3AifSwKK3sicHNzIiwgICAgICAgICAgICAgICAge05VTEx9LCA3ODgwLCAidWRwIn0sCit7InVicm9rZXIiLCAgICAgICAgICAgIHtOVUxMfSwgNzg4NywgInRjcCJ9LAoreyJ1YnJva2VyIiwgICAgICAgICAgICB7TlVMTH0sIDc4ODcsICJ1ZHAifSwKK3sibWV2ZW50IiwgICAgICAgICAgICAge05VTEx9LCA3OTAwLCAidGNwIn0sCit7Im1ldmVudCIsICAgICAgICAgICAgIHtOVUxMfSwgNzkwMCwgInVkcCJ9LAoreyJ0bm9zLXNwIiwgICAgICAgICAgICB7TlVMTH0sIDc5MDEsICJ0Y3AifSwKK3sidG5vcy1zcCIsICAgICAgICAgICAge05VTEx9LCA3OTAxLCAidWRwIn0sCit7InRub3MtZHAiLCAgICAgICAgICAgIHtOVUxMfSwgNzkwMiwgInRjcCJ9LAoreyJ0bm9zLWRwIiwgICAgICAgICAgICB7TlVMTH0sIDc5MDIsICJ1ZHAifSwKK3sidG5vcy1kcHMiLCAgICAgICAgICAge05VTEx9LCA3OTAzLCAidGNwIn0sCit7InRub3MtZHBzIiwgICAgICAgICAgIHtOVUxMfSwgNzkwMywgInVkcCJ9LAoreyJxby1zZWN1cmUiLCAgICAgICAgICB7TlVMTH0sIDc5MTMsICJ0Y3AifSwKK3sicW8tc2VjdXJlIiwgICAgICAgICAge05VTEx9LCA3OTEzLCAidWRwIn0sCit7InQyLWRybSIsICAgICAgICAgICAgIHtOVUxMfSwgNzkzMiwgInRjcCJ9LAoreyJ0Mi1kcm0iLCAgICAgICAgICAgICB7TlVMTH0sIDc5MzIsICJ1ZHAifSwKK3sidDItYnJtIiwgICAgICAgICAgICAge05VTEx9LCA3OTMzLCAidGNwIn0sCit7InQyLWJybSIsICAgICAgICAgICAgIHtOVUxMfSwgNzkzMywgInVkcCJ9LAoreyJzdXBlcmNlbGwiLCAgICAgICAgICB7TlVMTH0sIDc5NjcsICJ0Y3AifSwKK3sic3VwZXJjZWxsIiwgICAgICAgICAge05VTEx9LCA3OTY3LCAidWRwIn0sCit7Im1pY3JvbXVzZS1uY3BzIiwgICAgIHtOVUxMfSwgNzk3OSwgInRjcCJ9LAoreyJtaWNyb211c2UtbmNwcyIsICAgICB7TlVMTH0sIDc5NzksICJ1ZHAifSwKK3sicXVlc3QtdmlzdGEiLCAgICAgICAge05VTEx9LCA3OTgwLCAidGNwIn0sCit7InF1ZXN0LXZpc3RhIiwgICAgICAgIHtOVUxMfSwgNzk4MCwgInVkcCJ9LAoreyJzb3NzZC1jb2xsZWN0IiwgICAgICB7TlVMTH0sIDc5ODEsICJ0Y3AifSwKK3sic29zc2QtYWdlbnQiLCAgICAgICAge05VTEx9LCA3OTgyLCAidGNwIn0sCit7InNvc3NkLWRpc2MiLCAgICAgICAgIHtOVUxMfSwgNzk4MiwgInVkcCJ9LAoreyJwdXNobnMiLCAgICAgICAgICAgICB7TlVMTH0sIDc5OTcsICJ0Y3AifSwKK3sidXNpY29udGVudHB1c2giLCAgICAge05VTEx9LCA3OTk4LCAidWRwIn0sCit7ImlyZG1pMiIsICAgICAgICAgICAgIHtOVUxMfSwgNzk5OSwgInRjcCJ9LAoreyJpcmRtaTIiLCAgICAgICAgICAgICB7TlVMTH0sIDc5OTksICJ1ZHAifSwKK3siaXJkbWkiLCAgICAgICAgICAgICAge05VTEx9LCA4MDAwLCAidGNwIn0sCit7ImlyZG1pIiwgICAgICAgICAgICAgIHtOVUxMfSwgODAwMCwgInVkcCJ9LAoreyJ2Y29tLXR1bm5lbCIsICAgICAgICB7TlVMTH0sIDgwMDEsICJ0Y3AifSwKK3sidmNvbS10dW5uZWwiLCAgICAgICAge05VTEx9LCA4MDAxLCAidWRwIn0sCit7InRlcmFkYXRhb3JkYm1zIiwgICAgIHtOVUxMfSwgODAwMiwgInRjcCJ9LAoreyJ0ZXJhZGF0YW9yZGJtcyIsICAgICB7TlVMTH0sIDgwMDIsICJ1ZHAifSwKK3sibWNyZXBvcnQiLCAgICAgICAgICAge05VTEx9LCA4MDAzLCAidGNwIn0sCit7Im1jcmVwb3J0IiwgICAgICAgICAgIHtOVUxMfSwgODAwMywgInVkcCJ9LAoreyJteGkiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDgwMDUsICJ0Y3AifSwKK3sibXhpIiwgICAgICAgICAgICAgICAge05VTEx9LCA4MDA1LCAidWRwIn0sCit7Imh0dHAtYWx0IiwgICAgICAgICAgIHtOVUxMfSwgODAwOCwgInRjcCJ9LAoreyJodHRwLWFsdCIsICAgICAgICAgICB7TlVMTH0sIDgwMDgsICJ1ZHAifSwKK3sicWJkYiIsICAgICAgICAgICAgICAge05VTEx9LCA4MDE5LCAidGNwIn0sCit7InFiZGIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODAxOSwgInVkcCJ9LAoreyJpbnR1LWVjLXN2Y2Rpc2MiLCAgICB7TlVMTH0sIDgwMjAsICJ0Y3AifSwKK3siaW50dS1lYy1zdmNkaXNjIiwgICAge05VTEx9LCA4MDIwLCAidWRwIn0sCit7ImludHUtZWMtY2xpZW50IiwgICAgIHtOVUxMfSwgODAyMSwgInRjcCJ9LAoreyJpbnR1LWVjLWNsaWVudCIsICAgICB7TlVMTH0sIDgwMjEsICJ1ZHAifSwKK3sib2Etc3lzdGVtIiwgICAgICAgICAge05VTEx9LCA4MDIyLCAidGNwIn0sCit7Im9hLXN5c3RlbSIsICAgICAgICAgIHtOVUxMfSwgODAyMiwgInVkcCJ9LAoreyJjYS1hdWRpdC1kYSIsICAgICAgICB7TlVMTH0sIDgwMjUsICJ0Y3AifSwKK3siY2EtYXVkaXQtZGEiLCAgICAgICAge05VTEx9LCA4MDI1LCAidWRwIn0sCit7ImNhLWF1ZGl0LWRzIiwgICAgICAgIHtOVUxMfSwgODAyNiwgInRjcCJ9LAoreyJjYS1hdWRpdC1kcyIsICAgICAgICB7TlVMTH0sIDgwMjYsICJ1ZHAifSwKK3sicHJvLWVkIiwgICAgICAgICAgICAge05VTEx9LCA4MDMyLCAidGNwIn0sCit7InByby1lZCIsICAgICAgICAgICAgIHtOVUxMfSwgODAzMiwgInVkcCJ9LAoreyJtaW5kcHJpbnQiLCAgICAgICAgICB7TlVMTH0sIDgwMzMsICJ0Y3AifSwKK3sibWluZHByaW50IiwgICAgICAgICAge05VTEx9LCA4MDMzLCAidWRwIn0sCit7InZhbnRyb25peC1tZ210IiwgICAgIHtOVUxMfSwgODAzNCwgInRjcCJ9LAoreyJ2YW50cm9uaXgtbWdtdCIsICAgICB7TlVMTH0sIDgwMzQsICJ1ZHAifSwKK3siYW1waWZ5IiwgICAgICAgICAgICAge05VTEx9LCA4MDQwLCAidGNwIn0sCit7ImFtcGlmeSIsICAgICAgICAgICAgIHtOVUxMfSwgODA0MCwgInVkcCJ9LAoreyJmcy1hZ2VudCIsICAgICAgICAgICB7TlVMTH0sIDgwNDIsICJ0Y3AifSwKK3siZnMtc2VydmVyIiwgICAgICAgICAge05VTEx9LCA4MDQzLCAidGNwIn0sCit7ImZzLW1nbXQiLCAgICAgICAgICAgIHtOVUxMfSwgODA0NCwgInRjcCJ9LAoreyJzZW5vbWl4MDEiLCAgICAgICAgICB7TlVMTH0sIDgwNTIsICJ0Y3AifSwKK3sic2Vub21peDAxIiwgICAgICAgICAge05VTEx9LCA4MDUyLCAidWRwIn0sCit7InNlbm9taXgwMiIsICAgICAgICAgIHtOVUxMfSwgODA1MywgInRjcCJ9LAoreyJzZW5vbWl4MDIiLCAgICAgICAgICB7TlVMTH0sIDgwNTMsICJ1ZHAifSwKK3sic2Vub21peDAzIiwgICAgICAgICAge05VTEx9LCA4MDU0LCAidGNwIn0sCit7InNlbm9taXgwMyIsICAgICAgICAgIHtOVUxMfSwgODA1NCwgInVkcCJ9LAoreyJzZW5vbWl4MDQiLCAgICAgICAgICB7TlVMTH0sIDgwNTUsICJ0Y3AifSwKK3sic2Vub21peDA0IiwgICAgICAgICAge05VTEx9LCA4MDU1LCAidWRwIn0sCit7InNlbm9taXgwNSIsICAgICAgICAgIHtOVUxMfSwgODA1NiwgInRjcCJ9LAoreyJzZW5vbWl4MDUiLCAgICAgICAgICB7TlVMTH0sIDgwNTYsICJ1ZHAifSwKK3sic2Vub21peDA2IiwgICAgICAgICAge05VTEx9LCA4MDU3LCAidGNwIn0sCit7InNlbm9taXgwNiIsICAgICAgICAgIHtOVUxMfSwgODA1NywgInVkcCJ9LAoreyJzZW5vbWl4MDciLCAgICAgICAgICB7TlVMTH0sIDgwNTgsICJ0Y3AifSwKK3sic2Vub21peDA3IiwgICAgICAgICAge05VTEx9LCA4MDU4LCAidWRwIn0sCit7InNlbm9taXgwOCIsICAgICAgICAgIHtOVUxMfSwgODA1OSwgInRjcCJ9LAoreyJzZW5vbWl4MDgiLCAgICAgICAgICB7TlVMTH0sIDgwNTksICJ1ZHAifSwKK3siZ2FkdWdhZHUiLCAgICAgICAgICAge05VTEx9LCA4MDc0LCAidGNwIn0sCit7ImdhZHVnYWR1IiwgICAgICAgICAgIHtOVUxMfSwgODA3NCwgInVkcCJ9LAoreyJodHRwLWFsdCIsICAgICAgICAgICB7TlVMTH0sIDgwODAsICJ0Y3AifSwKK3siaHR0cC1hbHQiLCAgICAgICAgICAge05VTEx9LCA4MDgwLCAidWRwIn0sCit7InN1bnByb3h5YWRtaW4iLCAgICAgIHtOVUxMfSwgODA4MSwgInRjcCJ9LAoreyJzdW5wcm94eWFkbWluIiwgICAgICB7TlVMTH0sIDgwODEsICJ1ZHAifSwKK3sidXMtY2xpIiwgICAgICAgICAgICAge05VTEx9LCA4MDgyLCAidGNwIn0sCit7InVzLWNsaSIsICAgICAgICAgICAgIHtOVUxMfSwgODA4MiwgInVkcCJ9LAoreyJ1cy1zcnYiLCAgICAgICAgICAgICB7TlVMTH0sIDgwODMsICJ0Y3AifSwKK3sidXMtc3J2IiwgICAgICAgICAgICAge05VTEx9LCA4MDgzLCAidWRwIn0sCit7ImQtcy1uIiwgICAgICAgICAgICAgIHtOVUxMfSwgODA4NiwgInRjcCJ9LAoreyJkLXMtbiIsICAgICAgICAgICAgICB7TlVMTH0sIDgwODYsICJ1ZHAifSwKK3sic2ltcGxpZnltZWRpYSIsICAgICAge05VTEx9LCA4MDg3LCAidGNwIn0sCit7InNpbXBsaWZ5bWVkaWEiLCAgICAgIHtOVUxMfSwgODA4NywgInVkcCJ9LAoreyJyYWRhbi1odHRwIiwgICAgICAgICB7TlVMTH0sIDgwODgsICJ0Y3AifSwKK3sicmFkYW4taHR0cCIsICAgICAgICAge05VTEx9LCA4MDg4LCAidWRwIn0sCit7ImphbWxpbmsiLCAgICAgICAgICAgIHtOVUxMfSwgODA5MSwgInRjcCJ9LAoreyJzYWMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDgwOTcsICJ0Y3AifSwKK3sic2FjIiwgICAgICAgICAgICAgICAge05VTEx9LCA4MDk3LCAidWRwIn0sCit7InhwcmludC1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgODEwMCwgInRjcCJ9LAoreyJ4cHJpbnQtc2VydmVyIiwgICAgICB7TlVMTH0sIDgxMDAsICJ1ZHAifSwKK3sibGRvbXMtbWlnciIsICAgICAgICAge05VTEx9LCA4MTAxLCAidGNwIn0sCit7Im10bDgwMDAtbWF0cml4IiwgICAgIHtOVUxMfSwgODExNSwgInRjcCJ9LAoreyJtdGw4MDAwLW1hdHJpeCIsICAgICB7TlVMTH0sIDgxMTUsICJ1ZHAifSwKK3siY3AtY2x1c3RlciIsICAgICAgICAge05VTEx9LCA4MTE2LCAidGNwIn0sCit7ImNwLWNsdXN0ZXIiLCAgICAgICAgIHtOVUxMfSwgODExNiwgInVkcCJ9LAoreyJwcml2b3h5IiwgICAgICAgICAgICB7TlVMTH0sIDgxMTgsICJ0Y3AifSwKK3sicHJpdm94eSIsICAgICAgICAgICAge05VTEx9LCA4MTE4LCAidWRwIn0sCit7ImFwb2xsby1kYXRhIiwgICAgICAgIHtOVUxMfSwgODEyMSwgInRjcCJ9LAoreyJhcG9sbG8tZGF0YSIsICAgICAgICB7TlVMTH0sIDgxMjEsICJ1ZHAifSwKK3siYXBvbGxvLWFkbWluIiwgICAgICAge05VTEx9LCA4MTIyLCAidGNwIn0sCit7ImFwb2xsby1hZG1pbiIsICAgICAgIHtOVUxMfSwgODEyMiwgInVkcCJ9LAoreyJwYXljYXNoLW9ubGluZSIsICAgICB7TlVMTH0sIDgxMjgsICJ0Y3AifSwKK3sicGF5Y2FzaC1vbmxpbmUiLCAgICAge05VTEx9LCA4MTI4LCAidWRwIn0sCit7InBheWNhc2gtd2JwIiwgICAgICAgIHtOVUxMfSwgODEyOSwgInRjcCJ9LAoreyJwYXljYXNoLXdicCIsICAgICAgICB7TlVMTH0sIDgxMjksICJ1ZHAifSwKK3siaW5kaWdvLXZybWkiLCAgICAgICAge05VTEx9LCA4MTMwLCAidGNwIn0sCit7ImluZGlnby12cm1pIiwgICAgICAgIHtOVUxMfSwgODEzMCwgInVkcCJ9LAoreyJpbmRpZ28tdmJjcCIsICAgICAgICB7TlVMTH0sIDgxMzEsICJ0Y3AifSwKK3siaW5kaWdvLXZiY3AiLCAgICAgICAge05VTEx9LCA4MTMxLCAidWRwIn0sCit7ImRiYWJibGUiLCAgICAgICAgICAgIHtOVUxMfSwgODEzMiwgInRjcCJ9LAoreyJkYmFiYmxlIiwgICAgICAgICAgICB7TlVMTH0sIDgxMzIsICJ1ZHAifSwKK3siaXNkZCIsICAgICAgICAgICAgICAge05VTEx9LCA4MTQ4LCAidGNwIn0sCit7ImlzZGQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODE0OCwgInVkcCJ9LAoreyJwYXRyb2wiLCAgICAgICAgICAgICB7TlVMTH0sIDgxNjAsICJ0Y3AifSwKK3sicGF0cm9sIiwgICAgICAgICAgICAge05VTEx9LCA4MTYwLCAidWRwIn0sCit7InBhdHJvbC1zbm1wIiwgICAgICAgIHtOVUxMfSwgODE2MSwgInRjcCJ9LAoreyJwYXRyb2wtc25tcCIsICAgICAgICB7TlVMTH0sIDgxNjEsICJ1ZHAifSwKK3sidm13YXJlLWZkbSIsICAgICAgICAge05VTEx9LCA4MTgyLCAidGNwIn0sCit7InZtd2FyZS1mZG0iLCAgICAgICAgIHtOVUxMfSwgODE4MiwgInVkcCJ9LAoreyJwcm9yZW1vdGUiLCAgICAgICAgICB7TlVMTH0sIDgxODMsICJ0Y3AifSwKK3siaXRhY2giLCAgICAgICAgICAgICAge05VTEx9LCA4MTg0LCAidGNwIn0sCit7Iml0YWNoIiwgICAgICAgICAgICAgIHtOVUxMfSwgODE4NCwgInVkcCJ9LAoreyJzcHl0ZWNocGhvbmUiLCAgICAgICB7TlVMTH0sIDgxOTIsICJ0Y3AifSwKK3sic3B5dGVjaHBob25lIiwgICAgICAge05VTEx9LCA4MTkyLCAidWRwIn0sCit7ImJscDEiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODE5NCwgInRjcCJ9LAoreyJibHAxIiwgICAgICAgICAgICAgICB7TlVMTH0sIDgxOTQsICJ1ZHAifSwKK3siYmxwMiIsICAgICAgICAgICAgICAge05VTEx9LCA4MTk1LCAidGNwIn0sCit7ImJscDIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODE5NSwgInVkcCJ9LAoreyJ2dnItZGF0YSIsICAgICAgICAgICB7TlVMTH0sIDgxOTksICJ0Y3AifSwKK3sidnZyLWRhdGEiLCAgICAgICAgICAge05VTEx9LCA4MTk5LCAidWRwIn0sCit7InRyaXZuZXQxIiwgICAgICAgICAgIHtOVUxMfSwgODIwMCwgInRjcCJ9LAoreyJ0cml2bmV0MSIsICAgICAgICAgICB7TlVMTH0sIDgyMDAsICJ1ZHAifSwKK3sidHJpdm5ldDIiLCAgICAgICAgICAge05VTEx9LCA4MjAxLCAidGNwIn0sCit7InRyaXZuZXQyIiwgICAgICAgICAgIHtOVUxMfSwgODIwMSwgInVkcCJ9LAoreyJsbS1wZXJmd29ya3MiLCAgICAgICB7TlVMTH0sIDgyMDQsICJ0Y3AifSwKK3sibG0tcGVyZndvcmtzIiwgICAgICAge05VTEx9LCA4MjA0LCAidWRwIn0sCit7ImxtLWluc3RtZ3IiLCAgICAgICAgIHtOVUxMfSwgODIwNSwgInRjcCJ9LAoreyJsbS1pbnN0bWdyIiwgICAgICAgICB7TlVMTH0sIDgyMDUsICJ1ZHAifSwKK3sibG0tZHRhIiwgICAgICAgICAgICAge05VTEx9LCA4MjA2LCAidGNwIn0sCit7ImxtLWR0YSIsICAgICAgICAgICAgIHtOVUxMfSwgODIwNiwgInVkcCJ9LAoreyJsbS1zc2VydmVyIiwgICAgICAgICB7TlVMTH0sIDgyMDcsICJ0Y3AifSwKK3sibG0tc3NlcnZlciIsICAgICAgICAge05VTEx9LCA4MjA3LCAidWRwIn0sCit7ImxtLXdlYndhdGNoZXIiLCAgICAgIHtOVUxMfSwgODIwOCwgInRjcCJ9LAoreyJsbS13ZWJ3YXRjaGVyIiwgICAgICB7TlVMTH0sIDgyMDgsICJ1ZHAifSwKK3sicmV4ZWNqIiwgICAgICAgICAgICAge05VTEx9LCA4MjMwLCAidGNwIn0sCit7InJleGVjaiIsICAgICAgICAgICAgIHtOVUxMfSwgODIzMCwgInVkcCJ9LAoreyJzeW5hcHNlLW5odHRwcyIsICAgICB7TlVMTH0sIDgyNDMsICJ0Y3AifSwKK3sic3luYXBzZS1uaHR0cHMiLCAgICAge05VTEx9LCA4MjQzLCAidWRwIn0sCit7InBhbmRvLXNlYyIsICAgICAgICAgIHtOVUxMfSwgODI3NiwgInRjcCJ9LAoreyJwYW5kby1zZWMiLCAgICAgICAgICB7TlVMTH0sIDgyNzYsICJ1ZHAifSwKK3sic3luYXBzZS1uaHR0cCIsICAgICAge05VTEx9LCA4MjgwLCAidGNwIn0sCit7InN5bmFwc2Utbmh0dHAiLCAgICAgIHtOVUxMfSwgODI4MCwgInVkcCJ9LAoreyJibHAzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDgyOTIsICJ0Y3AifSwKK3siYmxwMyIsICAgICAgICAgICAgICAge05VTEx9LCA4MjkyLCAidWRwIn0sCit7ImhpcGVyc2Nhbi1pZCIsICAgICAgIHtOVUxMfSwgODI5MywgInRjcCJ9LAoreyJibHA0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDgyOTQsICJ0Y3AifSwKK3siYmxwNCIsICAgICAgICAgICAgICAge05VTEx9LCA4Mjk0LCAidWRwIn0sCit7InRtaSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgODMwMCwgInRjcCJ9LAoreyJ0bWkiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDgzMDAsICJ1ZHAifSwKK3siYW1iZXJvbiIsICAgICAgICAgICAge05VTEx9LCA4MzAxLCAidGNwIn0sCit7ImFtYmVyb24iLCAgICAgICAgICAgIHtOVUxMfSwgODMwMSwgInVkcCJ9LAoreyJ0bnAtZGlzY292ZXIiLCAgICAgICB7TlVMTH0sIDgzMjAsICJ0Y3AifSwKK3sidG5wLWRpc2NvdmVyIiwgICAgICAge05VTEx9LCA4MzIwLCAidWRwIn0sCit7InRucCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgODMyMSwgInRjcCJ9LAoreyJ0bnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDgzMjEsICJ1ZHAifSwKK3sic2VydmVyLWZpbmQiLCAgICAgICAge05VTEx9LCA4MzUxLCAidGNwIn0sCit7InNlcnZlci1maW5kIiwgICAgICAgIHtOVUxMfSwgODM1MSwgInVkcCJ9LAoreyJjcnVpc2UtZW51bSIsICAgICAgICB7TlVMTH0sIDgzNzYsICJ0Y3AifSwKK3siY3J1aXNlLWVudW0iLCAgICAgICAge05VTEx9LCA4Mzc2LCAidWRwIn0sCit7ImNydWlzZS1zd3JvdXRlIiwgICAgIHtOVUxMfSwgODM3NywgInRjcCJ9LAoreyJjcnVpc2Utc3dyb3V0ZSIsICAgICB7TlVMTH0sIDgzNzcsICJ1ZHAifSwKK3siY3J1aXNlLWNvbmZpZyIsICAgICAge05VTEx9LCA4Mzc4LCAidGNwIn0sCit7ImNydWlzZS1jb25maWciLCAgICAgIHtOVUxMfSwgODM3OCwgInVkcCJ9LAoreyJjcnVpc2UtZGlhZ3MiLCAgICAgICB7TlVMTH0sIDgzNzksICJ0Y3AifSwKK3siY3J1aXNlLWRpYWdzIiwgICAgICAge05VTEx9LCA4Mzc5LCAidWRwIn0sCit7ImNydWlzZS11cGRhdGUiLCAgICAgIHtOVUxMfSwgODM4MCwgInRjcCJ9LAoreyJjcnVpc2UtdXBkYXRlIiwgICAgICB7TlVMTH0sIDgzODAsICJ1ZHAifSwKK3sibTJtc2VydmljZXMiLCAgICAgICAge05VTEx9LCA4MzgzLCAidGNwIn0sCit7Im0ybXNlcnZpY2VzIiwgICAgICAgIHtOVUxMfSwgODM4MywgInVkcCJ9LAoreyJjdmQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDg0MDAsICJ0Y3AifSwKK3siY3ZkIiwgICAgICAgICAgICAgICAge05VTEx9LCA4NDAwLCAidWRwIn0sCit7InNhYmFyc2QiLCAgICAgICAgICAgIHtOVUxMfSwgODQwMSwgInRjcCJ9LAoreyJzYWJhcnNkIiwgICAgICAgICAgICB7TlVMTH0sIDg0MDEsICJ1ZHAifSwKK3siYWJhcnNkIiwgICAgICAgICAgICAge05VTEx9LCA4NDAyLCAidGNwIn0sCit7ImFiYXJzZCIsICAgICAgICAgICAgIHtOVUxMfSwgODQwMiwgInVkcCJ9LAoreyJhZG1pbmQiLCAgICAgICAgICAgICB7TlVMTH0sIDg0MDMsICJ0Y3AifSwKK3siYWRtaW5kIiwgICAgICAgICAgICAge05VTEx9LCA4NDAzLCAidWRwIn0sCit7InN2Y2xvdWQiLCAgICAgICAgICAgIHtOVUxMfSwgODQwNCwgInRjcCJ9LAoreyJzdmJhY2t1cCIsICAgICAgICAgICB7TlVMTH0sIDg0MDUsICJ0Y3AifSwKK3siZXNwZWVjaCIsICAgICAgICAgICAge05VTEx9LCA4NDE2LCAidGNwIn0sCit7ImVzcGVlY2giLCAgICAgICAgICAgIHtOVUxMfSwgODQxNiwgInVkcCJ9LAoreyJlc3BlZWNoLXJ0cCIsICAgICAgICB7TlVMTH0sIDg0MTcsICJ0Y3AifSwKK3siZXNwZWVjaC1ydHAiLCAgICAgICAge05VTEx9LCA4NDE3LCAidWRwIn0sCit7ImN5YnJvLWEtYnVzIiwgICAgICAgIHtOVUxMfSwgODQ0MiwgInRjcCJ9LAoreyJjeWJyby1hLWJ1cyIsICAgICAgICB7TlVMTH0sIDg0NDIsICJ1ZHAifSwKK3sicGNzeW5jLWh0dHBzIiwgICAgICAge05VTEx9LCA4NDQzLCAidGNwIn0sCit7InBjc3luYy1odHRwcyIsICAgICAgIHtOVUxMfSwgODQ0MywgInVkcCJ9LAoreyJwY3N5bmMtaHR0cCIsICAgICAgICB7TlVMTH0sIDg0NDQsICJ0Y3AifSwKK3sicGNzeW5jLWh0dHAiLCAgICAgICAge05VTEx9LCA4NDQ0LCAidWRwIn0sCit7Im5wbXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODQ1MCwgInRjcCJ9LAoreyJucG1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDg0NTAsICJ1ZHAifSwKK3siY2lzY28tYXZwIiwgICAgICAgICAge05VTEx9LCA4NDcwLCAidGNwIn0sCit7InBpbS1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgODQ3MSwgInRjcCJ9LAoreyJwaW0tcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDg0NzEsICJzY3RwIn0sCit7Im90diIsICAgICAgICAgICAgICAgIHtOVUxMfSwgODQ3MiwgInRjcCJ9LAoreyJvdHYiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDg0NzIsICJ1ZHAifSwKK3sidnAycCIsICAgICAgICAgICAgICAge05VTEx9LCA4NDczLCAidGNwIn0sCit7InZwMnAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODQ3MywgInVkcCJ9LAoreyJub3Rlc2hhcmUiLCAgICAgICAgICB7TlVMTH0sIDg0NzQsICJ0Y3AifSwKK3sibm90ZXNoYXJlIiwgICAgICAgICAge05VTEx9LCA4NDc0LCAidWRwIn0sCit7ImZtdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODUwMCwgInRjcCJ9LAoreyJmbXRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDg1MDAsICJ1ZHAifSwKK3sicnRzcC1hbHQiLCAgICAgICAgICAge05VTEx9LCA4NTU0LCAidGNwIn0sCit7InJ0c3AtYWx0IiwgICAgICAgICAgIHtOVUxMfSwgODU1NCwgInVkcCJ9LAoreyJkLWZlbmNlIiwgICAgICAgICAgICB7TlVMTH0sIDg1NTUsICJ0Y3AifSwKK3siZC1mZW5jZSIsICAgICAgICAgICAge05VTEx9LCA4NTU1LCAidWRwIn0sCit7Im9hcC1hZG1pbiIsICAgICAgICAgIHtOVUxMfSwgODU2NywgInRjcCJ9LAoreyJvYXAtYWRtaW4iLCAgICAgICAgICB7TlVMTH0sIDg1NjcsICJ1ZHAifSwKK3siYXN0ZXJpeCIsICAgICAgICAgICAge05VTEx9LCA4NjAwLCAidGNwIn0sCit7ImFzdGVyaXgiLCAgICAgICAgICAgIHtOVUxMfSwgODYwMCwgInVkcCJ9LAoreyJjYW5vbi1tZm5wIiwgICAgICAgICB7TlVMTH0sIDg2MTAsICJ0Y3AifSwKK3siY2Fub24tbWZucCIsICAgICAgICAge05VTEx9LCA4NjEwLCAidWRwIn0sCit7ImNhbm9uLWJqbnAxIiwgICAgICAgIHtOVUxMfSwgODYxMSwgInRjcCJ9LAoreyJjYW5vbi1iam5wMSIsICAgICAgICB7TlVMTH0sIDg2MTEsICJ1ZHAifSwKK3siY2Fub24tYmpucDIiLCAgICAgICAge05VTEx9LCA4NjEyLCAidGNwIn0sCit7ImNhbm9uLWJqbnAyIiwgICAgICAgIHtOVUxMfSwgODYxMiwgInVkcCJ9LAoreyJjYW5vbi1iam5wMyIsICAgICAgICB7TlVMTH0sIDg2MTMsICJ0Y3AifSwKK3siY2Fub24tYmpucDMiLCAgICAgICAge05VTEx9LCA4NjEzLCAidWRwIn0sCit7ImNhbm9uLWJqbnA0IiwgICAgICAgIHtOVUxMfSwgODYxNCwgInRjcCJ9LAoreyJjYW5vbi1iam5wNCIsICAgICAgICB7TlVMTH0sIDg2MTQsICJ1ZHAifSwKK3sic3VuLWFzLWpteHJtaSIsICAgICAge05VTEx9LCA4Njg2LCAidGNwIn0sCit7InN1bi1hcy1qbXhybWkiLCAgICAgIHtOVUxMfSwgODY4NiwgInVkcCJ9LAoreyJ2bnl4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDg2OTksICJ0Y3AifSwKK3sidm55eCIsICAgICAgICAgICAgICAge05VTEx9LCA4Njk5LCAidWRwIn0sCit7ImR0cC1uZXQiLCAgICAgICAgICAgIHtOVUxMfSwgODczMiwgInVkcCJ9LAoreyJpYnVzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDg3MzMsICJ0Y3AifSwKK3siaWJ1cyIsICAgICAgICAgICAgICAge05VTEx9LCA4NzMzLCAidWRwIn0sCit7Im1jLWFwcHNlcnZlciIsICAgICAgIHtOVUxMfSwgODc2MywgInRjcCJ9LAoreyJtYy1hcHBzZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDg3NjMsICJ1ZHAifSwKK3sib3BlbnF1ZXVlIiwgICAgICAgICAge05VTEx9LCA4NzY0LCAidGNwIn0sCit7Im9wZW5xdWV1ZSIsICAgICAgICAgIHtOVUxMfSwgODc2NCwgInVkcCJ9LAoreyJ1bHRyYXNlZWstaHR0cCIsICAgICB7TlVMTH0sIDg3NjUsICJ0Y3AifSwKK3sidWx0cmFzZWVrLWh0dHAiLCAgICAge05VTEx9LCA4NzY1LCAidWRwIn0sCit7ImRwYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODc3MCwgInRjcCJ9LAoreyJkcGFwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDg3NzAsICJ1ZHAifSwKK3sibXNnY2xudCIsICAgICAgICAgICAge05VTEx9LCA4Nzg2LCAidGNwIn0sCit7Im1zZ2NsbnQiLCAgICAgICAgICAgIHtOVUxMfSwgODc4NiwgInVkcCJ9LAoreyJtc2dzcnZyIiwgICAgICAgICAgICB7TlVMTH0sIDg3ODcsICJ0Y3AifSwKK3sibXNnc3J2ciIsICAgICAgICAgICAge05VTEx9LCA4Nzg3LCAidWRwIn0sCit7InN1bndlYmFkbWluIiwgICAgICAgIHtOVUxMfSwgODgwMCwgInRjcCJ9LAoreyJzdW53ZWJhZG1pbiIsICAgICAgICB7TlVMTH0sIDg4MDAsICJ1ZHAifSwKK3sidHJ1ZWNtIiwgICAgICAgICAgICAge05VTEx9LCA4ODA0LCAidGNwIn0sCit7InRydWVjbSIsICAgICAgICAgICAgIHtOVUxMfSwgODgwNCwgInVkcCJ9LAoreyJkeHNwaWRlciIsICAgICAgICAgICB7TlVMTH0sIDg4NzMsICJ0Y3AifSwKK3siZHhzcGlkZXIiLCAgICAgICAgICAge05VTEx9LCA4ODczLCAidWRwIn0sCit7ImNkZGJwLWFsdCIsICAgICAgICAgIHtOVUxMfSwgODg4MCwgInRjcCJ9LAoreyJjZGRicC1hbHQiLCAgICAgICAgICB7TlVMTH0sIDg4ODAsICJ1ZHAifSwKK3sic2VjdXJlLW1xdHQiLCAgICAgICAge05VTEx9LCA4ODgzLCAidGNwIn0sCit7InNlY3VyZS1tcXR0IiwgICAgICAgIHtOVUxMfSwgODg4MywgInVkcCJ9LAoreyJkZGktdGNwLTEiLCAgICAgICAgICB7TlVMTH0sIDg4ODgsICJ0Y3AifSwKK3siZGRpLXVkcC0xIiwgICAgICAgICAge05VTEx9LCA4ODg4LCAidWRwIn0sCit7ImRkaS10Y3AtMiIsICAgICAgICAgIHtOVUxMfSwgODg4OSwgInRjcCJ9LAoreyJkZGktdWRwLTIiLCAgICAgICAgICB7TlVMTH0sIDg4ODksICJ1ZHAifSwKK3siZGRpLXRjcC0zIiwgICAgICAgICAge05VTEx9LCA4ODkwLCAidGNwIn0sCit7ImRkaS11ZHAtMyIsICAgICAgICAgIHtOVUxMfSwgODg5MCwgInVkcCJ9LAoreyJkZGktdGNwLTQiLCAgICAgICAgICB7TlVMTH0sIDg4OTEsICJ0Y3AifSwKK3siZGRpLXVkcC00IiwgICAgICAgICAge05VTEx9LCA4ODkxLCAidWRwIn0sCit7ImRkaS10Y3AtNSIsICAgICAgICAgIHtOVUxMfSwgODg5MiwgInRjcCJ9LAoreyJkZGktdWRwLTUiLCAgICAgICAgICB7TlVMTH0sIDg4OTIsICJ1ZHAifSwKK3siZGRpLXRjcC02IiwgICAgICAgICAge05VTEx9LCA4ODkzLCAidGNwIn0sCit7ImRkaS11ZHAtNiIsICAgICAgICAgIHtOVUxMfSwgODg5MywgInVkcCJ9LAoreyJkZGktdGNwLTciLCAgICAgICAgICB7TlVMTH0sIDg4OTQsICJ0Y3AifSwKK3siZGRpLXVkcC03IiwgICAgICAgICAge05VTEx9LCA4ODk0LCAidWRwIn0sCit7Im9zcGYtbGl0ZSIsICAgICAgICAgIHtOVUxMfSwgODg5OSwgInRjcCJ9LAoreyJvc3BmLWxpdGUiLCAgICAgICAgICB7TlVMTH0sIDg4OTksICJ1ZHAifSwKK3siam1iLWNkczEiLCAgICAgICAgICAge05VTEx9LCA4OTAwLCAidGNwIn0sCit7ImptYi1jZHMxIiwgICAgICAgICAgIHtOVUxMfSwgODkwMCwgInVkcCJ9LAoreyJqbWItY2RzMiIsICAgICAgICAgICB7TlVMTH0sIDg5MDEsICJ0Y3AifSwKK3siam1iLWNkczIiLCAgICAgICAgICAge05VTEx9LCA4OTAxLCAidWRwIn0sCit7Im1hbnlvbmUtaHR0cCIsICAgICAgIHtOVUxMfSwgODkxMCwgInRjcCJ9LAoreyJtYW55b25lLWh0dHAiLCAgICAgICB7TlVMTH0sIDg5MTAsICJ1ZHAifSwKK3sibWFueW9uZS14bWwiLCAgICAgICAge05VTEx9LCA4OTExLCAidGNwIn0sCit7Im1hbnlvbmUteG1sIiwgICAgICAgIHtOVUxMfSwgODkxMSwgInVkcCJ9LAoreyJ3Y2JhY2t1cCIsICAgICAgICAgICB7TlVMTH0sIDg5MTIsICJ0Y3AifSwKK3sid2NiYWNrdXAiLCAgICAgICAgICAge05VTEx9LCA4OTEyLCAidWRwIn0sCit7ImRyYWdvbmZseSIsICAgICAgICAgIHtOVUxMfSwgODkxMywgInRjcCJ9LAoreyJkcmFnb25mbHkiLCAgICAgICAgICB7TlVMTH0sIDg5MTMsICJ1ZHAifSwKK3sidHdkcyIsICAgICAgICAgICAgICAge05VTEx9LCA4OTM3LCAidGNwIn0sCit7ImN1bXVsdXMtYWRtaW4iLCAgICAgIHtOVUxMfSwgODk1NCwgInRjcCJ9LAoreyJjdW11bHVzLWFkbWluIiwgICAgICB7TlVMTH0sIDg5NTQsICJ1ZHAifSwKK3sic3Vud2ViYWRtaW5zIiwgICAgICAge05VTEx9LCA4OTg5LCAidGNwIn0sCit7InN1bndlYmFkbWlucyIsICAgICAgIHtOVUxMfSwgODk4OSwgInVkcCJ9LAoreyJodHRwLXdtYXAiLCAgICAgICAgICB7TlVMTH0sIDg5OTAsICJ0Y3AifSwKK3siaHR0cC13bWFwIiwgICAgICAgICAge05VTEx9LCA4OTkwLCAidWRwIn0sCit7Imh0dHBzLXdtYXAiLCAgICAgICAgIHtOVUxMfSwgODk5MSwgInRjcCJ9LAoreyJodHRwcy13bWFwIiwgICAgICAgICB7TlVMTH0sIDg5OTEsICJ1ZHAifSwKK3siYmN0cCIsICAgICAgICAgICAgICAge05VTEx9LCA4OTk5LCAidGNwIn0sCit7ImJjdHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgODk5OSwgInVkcCJ9LAoreyJjc2xpc3RlbmVyIiwgICAgICAgICB7TlVMTH0sIDkwMDAsICJ0Y3AifSwKK3siY3NsaXN0ZW5lciIsICAgICAgICAge05VTEx9LCA5MDAwLCAidWRwIn0sCit7ImV0bHNlcnZpY2VtZ3IiLCAgICAgIHtOVUxMfSwgOTAwMSwgInRjcCJ9LAoreyJldGxzZXJ2aWNlbWdyIiwgICAgICB7TlVMTH0sIDkwMDEsICJ1ZHAifSwKK3siZHluYW1pZCIsICAgICAgICAgICAge05VTEx9LCA5MDAyLCAidGNwIn0sCit7ImR5bmFtaWQiLCAgICAgICAgICAgIHtOVUxMfSwgOTAwMiwgInVkcCJ9LAoreyJvZ3MtY2xpZW50IiwgICAgICAgICB7TlVMTH0sIDkwMDcsICJ1ZHAifSwKK3sib2dzLXNlcnZlciIsICAgICAgICAge05VTEx9LCA5MDA4LCAidGNwIn0sCit7InBpY2hhdCIsICAgICAgICAgICAgIHtOVUxMfSwgOTAwOSwgInRjcCJ9LAoreyJwaWNoYXQiLCAgICAgICAgICAgICB7TlVMTH0sIDkwMDksICJ1ZHAifSwKK3sic2RyIiwgICAgICAgICAgICAgICAge05VTEx9LCA5MDEwLCAidGNwIn0sCit7InRhbWJvcmEiLCAgICAgICAgICAgIHtOVUxMfSwgOTAyMCwgInRjcCJ9LAoreyJ0YW1ib3JhIiwgICAgICAgICAgICB7TlVMTH0sIDkwMjAsICJ1ZHAifSwKK3sicGFuYWdvbGluLWlkZW50IiwgICAge05VTEx9LCA5MDIxLCAidGNwIn0sCit7InBhbmFnb2xpbi1pZGVudCIsICAgIHtOVUxMfSwgOTAyMSwgInVkcCJ9LAoreyJwYXJhZ2VudCIsICAgICAgICAgICB7TlVMTH0sIDkwMjIsICJ0Y3AifSwKK3sicGFyYWdlbnQiLCAgICAgICAgICAge05VTEx9LCA5MDIyLCAidWRwIn0sCit7InN3YS0xIiwgICAgICAgICAgICAgIHtOVUxMfSwgOTAyMywgInRjcCJ9LAoreyJzd2EtMSIsICAgICAgICAgICAgICB7TlVMTH0sIDkwMjMsICJ1ZHAifSwKK3sic3dhLTIiLCAgICAgICAgICAgICAge05VTEx9LCA5MDI0LCAidGNwIn0sCit7InN3YS0yIiwgICAgICAgICAgICAgIHtOVUxMfSwgOTAyNCwgInVkcCJ9LAoreyJzd2EtMyIsICAgICAgICAgICAgICB7TlVMTH0sIDkwMjUsICJ0Y3AifSwKK3sic3dhLTMiLCAgICAgICAgICAgICAge05VTEx9LCA5MDI1LCAidWRwIn0sCit7InN3YS00IiwgICAgICAgICAgICAgIHtOVUxMfSwgOTAyNiwgInRjcCJ9LAoreyJzd2EtNCIsICAgICAgICAgICAgICB7TlVMTH0sIDkwMjYsICJ1ZHAifSwKK3sidmVyc2llcmEiLCAgICAgICAgICAge05VTEx9LCA5MDUwLCAidGNwIn0sCit7ImZpby1jbWdtdCIsICAgICAgICAgIHtOVUxMfSwgOTA1MSwgInRjcCJ9LAoreyJnbHJwYyIsICAgICAgICAgICAgICB7TlVMTH0sIDkwODAsICJ0Y3AifSwKK3siZ2xycGMiLCAgICAgICAgICAgICAge05VTEx9LCA5MDgwLCAidWRwIn0sCit7Imxjcy1hcCIsICAgICAgICAgICAgIHtOVUxMfSwgOTA4MiwgInNjdHAifSwKK3siZW1jLXBwLW1nbXRzdmMiLCAgICAge05VTEx9LCA5MDgzLCAidGNwIn0sCit7ImF1cm9yYSIsICAgICAgICAgICAgIHtOVUxMfSwgOTA4NCwgInRjcCJ9LAoreyJhdXJvcmEiLCAgICAgICAgICAgICB7TlVMTH0sIDkwODQsICJ1ZHAifSwKK3siYXVyb3JhIiwgICAgICAgICAgICAge05VTEx9LCA5MDg0LCAic2N0cCJ9LAoreyJpYm0tcnN5c2NvbiIsICAgICAgICB7TlVMTH0sIDkwODUsICJ0Y3AifSwKK3siaWJtLXJzeXNjb24iLCAgICAgICAge05VTEx9LCA5MDg1LCAidWRwIn0sCit7Im5ldDJkaXNwbGF5IiwgICAgICAgIHtOVUxMfSwgOTA4NiwgInRjcCJ9LAoreyJuZXQyZGlzcGxheSIsICAgICAgICB7TlVMTH0sIDkwODYsICJ1ZHAifSwKK3siY2xhc3NpYyIsICAgICAgICAgICAge05VTEx9LCA5MDg3LCAidGNwIn0sCit7ImNsYXNzaWMiLCAgICAgICAgICAgIHtOVUxMfSwgOTA4NywgInVkcCJ9LAoreyJzcWxleGVjIiwgICAgICAgICAgICB7TlVMTH0sIDkwODgsICJ0Y3AifSwKK3sic3FsZXhlYyIsICAgICAgICAgICAge05VTEx9LCA5MDg4LCAidWRwIn0sCit7InNxbGV4ZWMtc3NsIiwgICAgICAgIHtOVUxMfSwgOTA4OSwgInRjcCJ9LAoreyJzcWxleGVjLXNzbCIsICAgICAgICB7TlVMTH0sIDkwODksICJ1ZHAifSwKK3sid2Vic20iLCAgICAgICAgICAgICAge05VTEx9LCA5MDkwLCAidGNwIn0sCit7IndlYnNtIiwgICAgICAgICAgICAgIHtOVUxMfSwgOTA5MCwgInVkcCJ9LAoreyJ4bWx0ZWMteG1sbWFpbCIsICAgICB7TlVMTH0sIDkwOTEsICJ0Y3AifSwKK3sieG1sdGVjLXhtbG1haWwiLCAgICAge05VTEx9LCA5MDkxLCAidWRwIn0sCit7IlhtbElwY1JlZ1N2YyIsICAgICAgIHtOVUxMfSwgOTA5MiwgInRjcCJ9LAoreyJYbWxJcGNSZWdTdmMiLCAgICAgICB7TlVMTH0sIDkwOTIsICJ1ZHAifSwKK3siaHAtcGRsLWRhdGFzdHIiLCAgICAge05VTEx9LCA5MTAwLCAidGNwIn0sCit7ImhwLXBkbC1kYXRhc3RyIiwgICAgIHtOVUxMfSwgOTEwMCwgInVkcCJ9LAoreyJwZGwtZGF0YXN0cmVhbSIsICAgICB7TlVMTH0sIDkxMDAsICJ0Y3AifSwKK3sicGRsLWRhdGFzdHJlYW0iLCAgICAge05VTEx9LCA5MTAwLCAidWRwIn0sCit7ImJhY3VsYS1kaXIiLCAgICAgICAgIHtOVUxMfSwgOTEwMSwgInRjcCJ9LAoreyJiYWN1bGEtZGlyIiwgICAgICAgICB7TlVMTH0sIDkxMDEsICJ1ZHAifSwKK3siYmFjdWxhLWZkIiwgICAgICAgICAge05VTEx9LCA5MTAyLCAidGNwIn0sCit7ImJhY3VsYS1mZCIsICAgICAgICAgIHtOVUxMfSwgOTEwMiwgInVkcCJ9LAoreyJiYWN1bGEtc2QiLCAgICAgICAgICB7TlVMTH0sIDkxMDMsICJ0Y3AifSwKK3siYmFjdWxhLXNkIiwgICAgICAgICAge05VTEx9LCA5MTAzLCAidWRwIn0sCit7InBlZXJ3aXJlIiwgICAgICAgICAgIHtOVUxMfSwgOTEwNCwgInRjcCJ9LAoreyJwZWVyd2lyZSIsICAgICAgICAgICB7TlVMTH0sIDkxMDQsICJ1ZHAifSwKK3sieGFkbWluIiwgICAgICAgICAgICAge05VTEx9LCA5MTA1LCAidGNwIn0sCit7InhhZG1pbiIsICAgICAgICAgICAgIHtOVUxMfSwgOTEwNSwgInVkcCJ9LAoreyJhc3RlcmdhdGUiLCAgICAgICAgICB7TlVMTH0sIDkxMDYsICJ0Y3AifSwKK3siYXN0ZXJnYXRlLWRpc2MiLCAgICAge05VTEx9LCA5MTA2LCAidWRwIn0sCit7ImFzdGVyZ2F0ZWZheCIsICAgICAgIHtOVUxMfSwgOTEwNywgInRjcCJ9LAoreyJteGl0IiwgICAgICAgICAgICAgICB7TlVMTH0sIDkxMTksICJ0Y3AifSwKK3sibXhpdCIsICAgICAgICAgICAgICAge05VTEx9LCA5MTE5LCAidWRwIn0sCit7ImRkZHAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgOTEzMSwgInRjcCJ9LAoreyJkZGRwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDkxMzEsICJ1ZHAifSwKK3siYXBhbmkxIiwgICAgICAgICAgICAge05VTEx9LCA5MTYwLCAidGNwIn0sCit7ImFwYW5pMSIsICAgICAgICAgICAgIHtOVUxMfSwgOTE2MCwgInVkcCJ9LAoreyJhcGFuaTIiLCAgICAgICAgICAgICB7TlVMTH0sIDkxNjEsICJ0Y3AifSwKK3siYXBhbmkyIiwgICAgICAgICAgICAge05VTEx9LCA5MTYxLCAidWRwIn0sCit7ImFwYW5pMyIsICAgICAgICAgICAgIHtOVUxMfSwgOTE2MiwgInRjcCJ9LAoreyJhcGFuaTMiLCAgICAgICAgICAgICB7TlVMTH0sIDkxNjIsICJ1ZHAifSwKK3siYXBhbmk0IiwgICAgICAgICAgICAge05VTEx9LCA5MTYzLCAidGNwIn0sCit7ImFwYW5pNCIsICAgICAgICAgICAgIHtOVUxMfSwgOTE2MywgInVkcCJ9LAoreyJhcGFuaTUiLCAgICAgICAgICAgICB7TlVMTH0sIDkxNjQsICJ0Y3AifSwKK3siYXBhbmk1IiwgICAgICAgICAgICAge05VTEx9LCA5MTY0LCAidWRwIn0sCit7InN1bi1hcy1qcGRhIiwgICAgICAgIHtOVUxMfSwgOTE5MSwgInRjcCJ9LAoreyJzdW4tYXMtanBkYSIsICAgICAgICB7TlVMTH0sIDkxOTEsICJ1ZHAifSwKK3sid2FwLXdzcCIsICAgICAgICAgICAge05VTEx9LCA5MjAwLCAidGNwIn0sCit7IndhcC13c3AiLCAgICAgICAgICAgIHtOVUxMfSwgOTIwMCwgInVkcCJ9LAoreyJ3YXAtd3NwLXd0cCIsICAgICAgICB7TlVMTH0sIDkyMDEsICJ0Y3AifSwKK3sid2FwLXdzcC13dHAiLCAgICAgICAge05VTEx9LCA5MjAxLCAidWRwIn0sCit7IndhcC13c3AtcyIsICAgICAgICAgIHtOVUxMfSwgOTIwMiwgInRjcCJ9LAoreyJ3YXAtd3NwLXMiLCAgICAgICAgICB7TlVMTH0sIDkyMDIsICJ1ZHAifSwKK3sid2FwLXdzcC13dHAtcyIsICAgICAge05VTEx9LCA5MjAzLCAidGNwIn0sCit7IndhcC13c3Atd3RwLXMiLCAgICAgIHtOVUxMfSwgOTIwMywgInVkcCJ9LAoreyJ3YXAtdmNhcmQiLCAgICAgICAgICB7TlVMTH0sIDkyMDQsICJ0Y3AifSwKK3sid2FwLXZjYXJkIiwgICAgICAgICAge05VTEx9LCA5MjA0LCAidWRwIn0sCit7IndhcC12Y2FsIiwgICAgICAgICAgIHtOVUxMfSwgOTIwNSwgInRjcCJ9LAoreyJ3YXAtdmNhbCIsICAgICAgICAgICB7TlVMTH0sIDkyMDUsICJ1ZHAifSwKK3sid2FwLXZjYXJkLXMiLCAgICAgICAge05VTEx9LCA5MjA2LCAidGNwIn0sCit7IndhcC12Y2FyZC1zIiwgICAgICAgIHtOVUxMfSwgOTIwNiwgInVkcCJ9LAoreyJ3YXAtdmNhbC1zIiwgICAgICAgICB7TlVMTH0sIDkyMDcsICJ0Y3AifSwKK3sid2FwLXZjYWwtcyIsICAgICAgICAge05VTEx9LCA5MjA3LCAidWRwIn0sCit7InJqY2RiLXZjYXJkcyIsICAgICAgIHtOVUxMfSwgOTIwOCwgInRjcCJ9LAoreyJyamNkYi12Y2FyZHMiLCAgICAgICB7TlVMTH0sIDkyMDgsICJ1ZHAifSwKK3siYWxtb2JpbGUtc3lzdGVtIiwgICAge05VTEx9LCA5MjA5LCAidGNwIn0sCit7ImFsbW9iaWxlLXN5c3RlbSIsICAgIHtOVUxMfSwgOTIwOSwgInVkcCJ9LAoreyJvbWEtbWxwIiwgICAgICAgICAgICB7TlVMTH0sIDkyMTAsICJ0Y3AifSwKK3sib21hLW1scCIsICAgICAgICAgICAge05VTEx9LCA5MjEwLCAidWRwIn0sCit7Im9tYS1tbHAtcyIsICAgICAgICAgIHtOVUxMfSwgOTIxMSwgInRjcCJ9LAoreyJvbWEtbWxwLXMiLCAgICAgICAgICB7TlVMTH0sIDkyMTEsICJ1ZHAifSwKK3sic2VydmVydmlld2RibXMiLCAgICAge05VTEx9LCA5MjEyLCAidGNwIn0sCit7InNlcnZlcnZpZXdkYm1zIiwgICAgIHtOVUxMfSwgOTIxMiwgInVkcCJ9LAoreyJzZXJ2ZXJzdGFydCIsICAgICAgICB7TlVMTH0sIDkyMTMsICJ0Y3AifSwKK3sic2VydmVyc3RhcnQiLCAgICAgICAge05VTEx9LCA5MjEzLCAidWRwIn0sCit7ImlwZGNlc2dicyIsICAgICAgICAgIHtOVUxMfSwgOTIxNCwgInRjcCJ9LAoreyJpcGRjZXNnYnMiLCAgICAgICAgICB7TlVMTH0sIDkyMTQsICJ1ZHAifSwKK3siaW5zaXMiLCAgICAgICAgICAgICAge05VTEx9LCA5MjE1LCAidGNwIn0sCit7Imluc2lzIiwgICAgICAgICAgICAgIHtOVUxMfSwgOTIxNSwgInVkcCJ9LAoreyJhY21lIiwgICAgICAgICAgICAgICB7TlVMTH0sIDkyMTYsICJ0Y3AifSwKK3siYWNtZSIsICAgICAgICAgICAgICAge05VTEx9LCA5MjE2LCAidWRwIn0sCit7ImZzYy1wb3J0IiwgICAgICAgICAgIHtOVUxMfSwgOTIxNywgInRjcCJ9LAoreyJmc2MtcG9ydCIsICAgICAgICAgICB7TlVMTH0sIDkyMTcsICJ1ZHAifSwKK3sidGVhbWNvaGVyZW5jZSIsICAgICAge05VTEx9LCA5MjIyLCAidGNwIn0sCit7InRlYW1jb2hlcmVuY2UiLCAgICAgIHtOVUxMfSwgOTIyMiwgInVkcCJ9LAoreyJtb24iLCAgICAgICAgICAgICAgICB7TlVMTH0sIDkyNTUsICJ0Y3AifSwKK3sibW9uIiwgICAgICAgICAgICAgICAge05VTEx9LCA5MjU1LCAidWRwIn0sCit7InBlZ2FzdXMiLCAgICAgICAgICAgIHtOVUxMfSwgOTI3OCwgInRjcCJ9LAoreyJwZWdhc3VzIiwgICAgICAgICAgICB7TlVMTH0sIDkyNzgsICJ1ZHAifSwKK3sicGVnYXN1cy1jdGwiLCAgICAgICAge05VTEx9LCA5Mjc5LCAidGNwIn0sCit7InBlZ2FzdXMtY3RsIiwgICAgICAgIHtOVUxMfSwgOTI3OSwgInVkcCJ9LAoreyJwZ3BzIiwgICAgICAgICAgICAgICB7TlVMTH0sIDkyODAsICJ0Y3AifSwKK3sicGdwcyIsICAgICAgICAgICAgICAge05VTEx9LCA5MjgwLCAidWRwIn0sCit7InN3dHAtcG9ydDEiLCAgICAgICAgIHtOVUxMfSwgOTI4MSwgInRjcCJ9LAoreyJzd3RwLXBvcnQxIiwgICAgICAgICB7TlVMTH0sIDkyODEsICJ1ZHAifSwKK3sic3d0cC1wb3J0MiIsICAgICAgICAge05VTEx9LCA5MjgyLCAidGNwIn0sCit7InN3dHAtcG9ydDIiLCAgICAgICAgIHtOVUxMfSwgOTI4MiwgInVkcCJ9LAoreyJjYWxsd2F2ZWlhbSIsICAgICAgICB7TlVMTH0sIDkyODMsICJ0Y3AifSwKK3siY2FsbHdhdmVpYW0iLCAgICAgICAge05VTEx9LCA5MjgzLCAidWRwIn0sCit7InZpc2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgOTI4NCwgInRjcCJ9LAoreyJ2aXNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDkyODQsICJ1ZHAifSwKK3sibjJoMnNlcnZlciIsICAgICAgICAge05VTEx9LCA5Mjg1LCAidGNwIn0sCit7Im4yaDJzZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgOTI4NSwgInVkcCJ9LAoreyJuMnJlY2VpdmUiLCAgICAgICAgICB7TlVMTH0sIDkyODYsICJ1ZHAifSwKK3siY3VtdWx1cyIsICAgICAgICAgICAge05VTEx9LCA5Mjg3LCAidGNwIn0sCit7ImN1bXVsdXMiLCAgICAgICAgICAgIHtOVUxMfSwgOTI4NywgInVkcCJ9LAoreyJhcm10ZWNoZGFlbW9uIiwgICAgICB7TlVMTH0sIDkyOTIsICJ0Y3AifSwKK3siYXJtdGVjaGRhZW1vbiIsICAgICAge05VTEx9LCA5MjkyLCAidWRwIn0sCit7InN0b3J2aWV3IiwgICAgICAgICAgIHtOVUxMfSwgOTI5MywgInRjcCJ9LAoreyJzdG9ydmlldyIsICAgICAgICAgICB7TlVMTH0sIDkyOTMsICJ1ZHAifSwKK3siYXJtY2VudGVyaHR0cCIsICAgICAge05VTEx9LCA5Mjk0LCAidGNwIn0sCit7ImFybWNlbnRlcmh0dHAiLCAgICAgIHtOVUxMfSwgOTI5NCwgInVkcCJ9LAoreyJhcm1jZW50ZXJodHRwcyIsICAgICB7TlVMTH0sIDkyOTUsICJ0Y3AifSwKK3siYXJtY2VudGVyaHR0cHMiLCAgICAge05VTEx9LCA5Mjk1LCAidWRwIn0sCit7InZyYWNlIiwgICAgICAgICAgICAgIHtOVUxMfSwgOTMwMCwgInRjcCJ9LAoreyJ2cmFjZSIsICAgICAgICAgICAgICB7TlVMTH0sIDkzMDAsICJ1ZHAifSwKK3sic3BoaW54cWwiLCAgICAgICAgICAge05VTEx9LCA5MzA2LCAidGNwIn0sCit7InNwaGlueGFwaSIsICAgICAgICAgIHtOVUxMfSwgOTMxMiwgInRjcCJ9LAoreyJzZWN1cmUtdHMiLCAgICAgICAgICB7TlVMTH0sIDkzMTgsICJ0Y3AifSwKK3sic2VjdXJlLXRzIiwgICAgICAgICAge05VTEx9LCA5MzE4LCAidWRwIn0sCit7Imd1aWJhc2UiLCAgICAgICAgICAgIHtOVUxMfSwgOTMyMSwgInRjcCJ9LAoreyJndWliYXNlIiwgICAgICAgICAgICB7TlVMTH0sIDkzMjEsICJ1ZHAifSwKK3sibXBpZGNtZ3IiLCAgICAgICAgICAge05VTEx9LCA5MzQzLCAidGNwIn0sCit7Im1waWRjbWdyIiwgICAgICAgICAgIHtOVUxMfSwgOTM0MywgInVkcCJ9LAoreyJtcGhscGRtYyIsICAgICAgICAgICB7TlVMTH0sIDkzNDQsICJ0Y3AifSwKK3sibXBobHBkbWMiLCAgICAgICAgICAge05VTEx9LCA5MzQ0LCAidWRwIn0sCit7ImN0ZWNobGljZW5zaW5nIiwgICAgIHtOVUxMfSwgOTM0NiwgInRjcCJ9LAoreyJjdGVjaGxpY2Vuc2luZyIsICAgICB7TlVMTH0sIDkzNDYsICJ1ZHAifSwKK3siZmpkbWltZ3IiLCAgICAgICAgICAge05VTEx9LCA5Mzc0LCAidGNwIn0sCit7ImZqZG1pbWdyIiwgICAgICAgICAgIHtOVUxMfSwgOTM3NCwgInVkcCJ9LAoreyJib3hwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDkzODAsICJ0Y3AifSwKK3siYm94cCIsICAgICAgICAgICAgICAge05VTEx9LCA5MzgwLCAidWRwIn0sCit7ImQyZGNvbmZpZyIsICAgICAgICAgIHtOVUxMfSwgOTM4NywgInRjcCJ9LAoreyJkMmRkYXRhdHJhbnMiLCAgICAgICB7TlVMTH0sIDkzODgsICJ0Y3AifSwKK3siYWR3cyIsICAgICAgICAgICAgICAge05VTEx9LCA5Mzg5LCAidGNwIn0sCit7Im90cCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgOTM5MCwgInRjcCJ9LAoreyJmamludm1nciIsICAgICAgICAgICB7TlVMTH0sIDkzOTYsICJ0Y3AifSwKK3siZmppbnZtZ3IiLCAgICAgICAgICAge05VTEx9LCA5Mzk2LCAidWRwIn0sCit7Im1waWRjYWd0IiwgICAgICAgICAgIHtOVUxMfSwgOTM5NywgInRjcCJ9LAoreyJtcGlkY2FndCIsICAgICAgICAgICB7TlVMTH0sIDkzOTcsICJ1ZHAifSwKK3sic2VjLXQ0bmV0LXNydiIsICAgICAge05VTEx9LCA5NDAwLCAidGNwIn0sCit7InNlYy10NG5ldC1zcnYiLCAgICAgIHtOVUxMfSwgOTQwMCwgInVkcCJ9LAoreyJzZWMtdDRuZXQtY2x0IiwgICAgICB7TlVMTH0sIDk0MDEsICJ0Y3AifSwKK3sic2VjLXQ0bmV0LWNsdCIsICAgICAge05VTEx9LCA5NDAxLCAidWRwIn0sCit7InNlYy1wYzJmYXgtc3J2IiwgICAgIHtOVUxMfSwgOTQwMiwgInRjcCJ9LAoreyJzZWMtcGMyZmF4LXNydiIsICAgICB7TlVMTH0sIDk0MDIsICJ1ZHAifSwKK3siZ2l0IiwgICAgICAgICAgICAgICAge05VTEx9LCA5NDE4LCAidGNwIn0sCit7ImdpdCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgOTQxOCwgInVkcCJ9LAoreyJ0dW5nc3Rlbi1odHRwcyIsICAgICB7TlVMTH0sIDk0NDMsICJ0Y3AifSwKK3sidHVuZ3N0ZW4taHR0cHMiLCAgICAge05VTEx9LCA5NDQzLCAidWRwIn0sCit7IndzbzJlc2ItY29uc29sZSIsICAgIHtOVUxMfSwgOTQ0NCwgInRjcCJ9LAoreyJ3c28yZXNiLWNvbnNvbGUiLCAgICB7TlVMTH0sIDk0NDQsICJ1ZHAifSwKK3sic250bGtleXNzcnZyIiwgICAgICAge05VTEx9LCA5NDUwLCAidGNwIn0sCit7InNudGxrZXlzc3J2ciIsICAgICAgIHtOVUxMfSwgOTQ1MCwgInVkcCJ9LAoreyJpc21zZXJ2ZXIiLCAgICAgICAgICB7TlVMTH0sIDk1MDAsICJ0Y3AifSwKK3siaXNtc2VydmVyIiwgICAgICAgICAge05VTEx9LCA5NTAwLCAidWRwIn0sCit7InNtYS1zcHciLCAgICAgICAgICAgIHtOVUxMfSwgOTUyMiwgInVkcCJ9LAoreyJtbmdzdWl0ZSIsICAgICAgICAgICB7TlVMTH0sIDk1MzUsICJ0Y3AifSwKK3sibW5nc3VpdGUiLCAgICAgICAgICAge05VTEx9LCA5NTM1LCAidWRwIn0sCit7ImxhZXMtYmYiLCAgICAgICAgICAgIHtOVUxMfSwgOTUzNiwgInRjcCJ9LAoreyJsYWVzLWJmIiwgICAgICAgICAgICB7TlVMTH0sIDk1MzYsICJ1ZHAifSwKK3sidHJpc3Blbi1zcmEiLCAgICAgICAge05VTEx9LCA5NTU1LCAidGNwIn0sCit7InRyaXNwZW4tc3JhIiwgICAgICAgIHtOVUxMfSwgOTU1NSwgInVkcCJ9LAoreyJsZGdhdGV3YXkiLCAgICAgICAgICB7TlVMTH0sIDk1OTIsICJ0Y3AifSwKK3sibGRnYXRld2F5IiwgICAgICAgICAge05VTEx9LCA5NTkyLCAidWRwIn0sCit7ImNiYTgiLCAgICAgICAgICAgICAgIHtOVUxMfSwgOTU5MywgInRjcCJ9LAoreyJjYmE4IiwgICAgICAgICAgICAgICB7TlVMTH0sIDk1OTMsICJ1ZHAifSwKK3sibXNnc3lzIiwgICAgICAgICAgICAge05VTEx9LCA5NTk0LCAidGNwIn0sCit7Im1zZ3N5cyIsICAgICAgICAgICAgIHtOVUxMfSwgOTU5NCwgInVkcCJ9LAoreyJwZHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDk1OTUsICJ0Y3AifSwKK3sicGRzIiwgICAgICAgICAgICAgICAge05VTEx9LCA5NTk1LCAidWRwIn0sCit7Im1lcmN1cnktZGlzYyIsICAgICAgIHtOVUxMfSwgOTU5NiwgInRjcCJ9LAoreyJtZXJjdXJ5LWRpc2MiLCAgICAgICB7TlVMTH0sIDk1OTYsICJ1ZHAifSwKK3sicGQtYWRtaW4iLCAgICAgICAgICAge05VTEx9LCA5NTk3LCAidGNwIn0sCit7InBkLWFkbWluIiwgICAgICAgICAgIHtOVUxMfSwgOTU5NywgInVkcCJ9LAoreyJ2c2NwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDk1OTgsICJ0Y3AifSwKK3sidnNjcCIsICAgICAgICAgICAgICAge05VTEx9LCA5NTk4LCAidWRwIn0sCit7InJvYml4IiwgICAgICAgICAgICAgIHtOVUxMfSwgOTU5OSwgInRjcCJ9LAoreyJyb2JpeCIsICAgICAgICAgICAgICB7TlVMTH0sIDk1OTksICJ1ZHAifSwKK3sibWljcm9tdXNlLW5jcHciLCAgICAge05VTEx9LCA5NjAwLCAidGNwIn0sCit7Im1pY3JvbXVzZS1uY3B3IiwgICAgIHtOVUxMfSwgOTYwMCwgInVkcCJ9LAoreyJzdHJlYW1jb21tLWRzIiwgICAgICB7TlVMTH0sIDk2MTIsICJ0Y3AifSwKK3sic3RyZWFtY29tbS1kcyIsICAgICAge05VTEx9LCA5NjEyLCAidWRwIn0sCit7ImlhZHQtdGxzIiwgICAgICAgICAgIHtOVUxMfSwgOTYxNCwgInRjcCJ9LAoreyJlcnVuYm9va19hZ2VudCIsICAgICB7TlVMTH0sIDk2MTYsICJ0Y3AifSwKK3siZXJ1bmJvb2tfc2VydmVyIiwgICAge05VTEx9LCA5NjE3LCAidGNwIn0sCit7ImNvbmRvciIsICAgICAgICAgICAgIHtOVUxMfSwgOTYxOCwgInRjcCJ9LAoreyJjb25kb3IiLCAgICAgICAgICAgICB7TlVMTH0sIDk2MTgsICJ1ZHAifSwKK3sib2RiY3BhdGh3YXkiLCAgICAgICAge05VTEx9LCA5NjI4LCAidGNwIn0sCit7Im9kYmNwYXRod2F5IiwgICAgICAgIHtOVUxMfSwgOTYyOCwgInVkcCJ9LAoreyJ1bmlwb3J0IiwgICAgICAgICAgICB7TlVMTH0sIDk2MjksICJ0Y3AifSwKK3sidW5pcG9ydCIsICAgICAgICAgICAge05VTEx9LCA5NjI5LCAidWRwIn0sCit7InBlb2N0bHIiLCAgICAgICAgICAgIHtOVUxMfSwgOTYzMCwgInRjcCJ9LAoreyJwZW9jb2xsIiwgICAgICAgICAgICB7TlVMTH0sIDk2MzEsICJ0Y3AifSwKK3sibWMtY29tbSIsICAgICAgICAgICAge05VTEx9LCA5NjMyLCAidWRwIn0sCit7InBxc2Zsb3dzIiwgICAgICAgICAgIHtOVUxMfSwgOTY0MCwgInRjcCJ9LAoreyJ4bW1zMiIsICAgICAgICAgICAgICB7TlVMTH0sIDk2NjcsICJ0Y3AifSwKK3sieG1tczIiLCAgICAgICAgICAgICAge05VTEx9LCA5NjY3LCAidWRwIn0sCit7InRlYzUtc2RjdHAiLCAgICAgICAgIHtOVUxMfSwgOTY2OCwgInRjcCJ9LAoreyJ0ZWM1LXNkY3RwIiwgICAgICAgICB7TlVMTH0sIDk2NjgsICJ1ZHAifSwKK3siY2xpZW50LXdha2V1cCIsICAgICAge05VTEx9LCA5Njk0LCAidGNwIn0sCit7ImNsaWVudC13YWtldXAiLCAgICAgIHtOVUxMfSwgOTY5NCwgInVkcCJ9LAoreyJjY254IiwgICAgICAgICAgICAgICB7TlVMTH0sIDk2OTUsICJ0Y3AifSwKK3siY2NueCIsICAgICAgICAgICAgICAge05VTEx9LCA5Njk1LCAidWRwIn0sCit7ImJvYXJkLXJvYXIiLCAgICAgICAgIHtOVUxMfSwgOTcwMCwgInRjcCJ9LAoreyJib2FyZC1yb2FyIiwgICAgICAgICB7TlVMTH0sIDk3MDAsICJ1ZHAifSwKK3sibDVuYXMtcGFyY2hhbiIsICAgICAge05VTEx9LCA5NzQ3LCAidGNwIn0sCit7Imw1bmFzLXBhcmNoYW4iLCAgICAgIHtOVUxMfSwgOTc0NywgInVkcCJ9LAoreyJib2FyZC12b2lwIiwgICAgICAgICB7TlVMTH0sIDk3NTAsICJ0Y3AifSwKK3siYm9hcmQtdm9pcCIsICAgICAgICAge05VTEx9LCA5NzUwLCAidWRwIn0sCit7InJhc2FkdiIsICAgICAgICAgICAgIHtOVUxMfSwgOTc1MywgInRjcCJ9LAoreyJyYXNhZHYiLCAgICAgICAgICAgICB7TlVMTH0sIDk3NTMsICJ1ZHAifSwKK3sidHVuZ3N0ZW4taHR0cCIsICAgICAge05VTEx9LCA5NzYyLCAidGNwIn0sCit7InR1bmdzdGVuLWh0dHAiLCAgICAgIHtOVUxMfSwgOTc2MiwgInVkcCJ9LAoreyJkYXZzcmMiLCAgICAgICAgICAgICB7TlVMTH0sIDk4MDAsICJ0Y3AifSwKK3siZGF2c3JjIiwgICAgICAgICAgICAge05VTEx9LCA5ODAwLCAidWRwIn0sCit7InNzdHAtMiIsICAgICAgICAgICAgIHtOVUxMfSwgOTgwMSwgInRjcCJ9LAoreyJzc3RwLTIiLCAgICAgICAgICAgICB7TlVMTH0sIDk4MDEsICJ1ZHAifSwKK3siZGF2c3JjcyIsICAgICAgICAgICAge05VTEx9LCA5ODAyLCAidGNwIn0sCit7ImRhdnNyY3MiLCAgICAgICAgICAgIHtOVUxMfSwgOTgwMiwgInVkcCJ9LAoreyJzYXB2MSIsICAgICAgICAgICAgICB7TlVMTH0sIDk4NzUsICJ0Y3AifSwKK3sic2FwdjEiLCAgICAgICAgICAgICAge05VTEx9LCA5ODc1LCAidWRwIn0sCit7InNkIiwgICAgICAgICAgICAgICAgIHtOVUxMfSwgOTg3NiwgInRjcCJ9LAoreyJzZCIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDk4NzYsICJ1ZHAifSwKK3siY3lib3JnLXN5c3RlbXMiLCAgICAge05VTEx9LCA5ODg4LCAidGNwIn0sCit7ImN5Ym9yZy1zeXN0ZW1zIiwgICAgIHtOVUxMfSwgOTg4OCwgInVkcCJ9LAoreyJndC1wcm94eSIsICAgICAgICAgICB7TlVMTH0sIDk4ODksICJ0Y3AifSwKK3siZ3QtcHJveHkiLCAgICAgICAgICAge05VTEx9LCA5ODg5LCAidWRwIn0sCit7Im1vbmtleWNvbSIsICAgICAgICAgIHtOVUxMfSwgOTg5OCwgInRjcCJ9LAoreyJtb25rZXljb20iLCAgICAgICAgICB7TlVMTH0sIDk4OTgsICJ1ZHAifSwKK3sic2N0cC10dW5uZWxpbmciLCAgICAge05VTEx9LCA5ODk5LCAidGNwIn0sCit7InNjdHAtdHVubmVsaW5nIiwgICAgIHtOVUxMfSwgOTg5OSwgInVkcCJ9LAoreyJpdWEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDk5MDAsICJ0Y3AifSwKK3siaXVhIiwgICAgICAgICAgICAgICAge05VTEx9LCA5OTAwLCAidWRwIn0sCit7Iml1YSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgOTkwMCwgInNjdHAifSwKK3siZW5ycCIsICAgICAgICAgICAgICAge05VTEx9LCA5OTAxLCAidWRwIn0sCit7ImVucnAtc2N0cCIsICAgICAgICAgIHtOVUxMfSwgOTkwMSwgInNjdHAifSwKK3siZW5ycC1zY3RwLXRscyIsICAgICAge05VTEx9LCA5OTAyLCAic2N0cCJ9LAoreyJkb21haW50aW1lIiwgICAgICAgICB7TlVMTH0sIDk5MDksICJ0Y3AifSwKK3siZG9tYWludGltZSIsICAgICAgICAge05VTEx9LCA5OTA5LCAidWRwIn0sCit7InN5cGUtdHJhbnNwb3J0IiwgICAgIHtOVUxMfSwgOTkxMSwgInRjcCJ9LAoreyJzeXBlLXRyYW5zcG9ydCIsICAgICB7TlVMTH0sIDk5MTEsICJ1ZHAifSwKK3siYXBjLTk5NTAiLCAgICAgICAgICAge05VTEx9LCA5OTUwLCAidGNwIn0sCit7ImFwYy05OTUwIiwgICAgICAgICAgIHtOVUxMfSwgOTk1MCwgInVkcCJ9LAoreyJhcGMtOTk1MSIsICAgICAgICAgICB7TlVMTH0sIDk5NTEsICJ0Y3AifSwKK3siYXBjLTk5NTEiLCAgICAgICAgICAge05VTEx9LCA5OTUxLCAidWRwIn0sCit7ImFwYy05OTUyIiwgICAgICAgICAgIHtOVUxMfSwgOTk1MiwgInRjcCJ9LAoreyJhcGMtOTk1MiIsICAgICAgICAgICB7TlVMTH0sIDk5NTIsICJ1ZHAifSwKK3siYWNpcyIsICAgICAgICAgICAgICAge05VTEx9LCA5OTUzLCAidGNwIn0sCit7ImFjaXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgOTk1MywgInVkcCJ9LAoreyJvZG5zcCIsICAgICAgICAgICAgICB7TlVMTH0sIDk5NjYsICJ0Y3AifSwKK3sib2Ruc3AiLCAgICAgICAgICAgICAge05VTEx9LCA5OTY2LCAidWRwIn0sCit7ImRzbS1zY20tdGFyZ2V0IiwgICAgIHtOVUxMfSwgOTk4NywgInRjcCJ9LAoreyJkc20tc2NtLXRhcmdldCIsICAgICB7TlVMTH0sIDk5ODcsICJ1ZHAifSwKK3sibnNlc3J2ciIsICAgICAgICAgICAge05VTEx9LCA5OTg4LCAidGNwIn0sCit7Im9zbS1hcHBzcnZyIiwgICAgICAgIHtOVUxMfSwgOTk5MCwgInRjcCJ9LAoreyJvc20tYXBwc3J2ciIsICAgICAgICB7TlVMTH0sIDk5OTAsICJ1ZHAifSwKK3sib3NtLW9ldiIsICAgICAgICAgICAge05VTEx9LCA5OTkxLCAidGNwIn0sCit7Im9zbS1vZXYiLCAgICAgICAgICAgIHtOVUxMfSwgOTk5MSwgInVkcCJ9LAoreyJwYWxhY2UtMSIsICAgICAgICAgICB7TlVMTH0sIDk5OTIsICJ0Y3AifSwKK3sicGFsYWNlLTEiLCAgICAgICAgICAge05VTEx9LCA5OTkyLCAidWRwIn0sCit7InBhbGFjZS0yIiwgICAgICAgICAgIHtOVUxMfSwgOTk5MywgInRjcCJ9LAoreyJwYWxhY2UtMiIsICAgICAgICAgICB7TlVMTH0sIDk5OTMsICJ1ZHAifSwKK3sicGFsYWNlLTMiLCAgICAgICAgICAge05VTEx9LCA5OTk0LCAidGNwIn0sCit7InBhbGFjZS0zIiwgICAgICAgICAgIHtOVUxMfSwgOTk5NCwgInVkcCJ9LAoreyJwYWxhY2UtNCIsICAgICAgICAgICB7TlVMTH0sIDk5OTUsICJ0Y3AifSwKK3sicGFsYWNlLTQiLCAgICAgICAgICAge05VTEx9LCA5OTk1LCAidWRwIn0sCit7InBhbGFjZS01IiwgICAgICAgICAgIHtOVUxMfSwgOTk5NiwgInRjcCJ9LAoreyJwYWxhY2UtNSIsICAgICAgICAgICB7TlVMTH0sIDk5OTYsICJ1ZHAifSwKK3sicGFsYWNlLTYiLCAgICAgICAgICAge05VTEx9LCA5OTk3LCAidGNwIn0sCit7InBhbGFjZS02IiwgICAgICAgICAgIHtOVUxMfSwgOTk5NywgInVkcCJ9LAoreyJkaXN0aW5jdDMyIiwgICAgICAgICB7TlVMTH0sIDk5OTgsICJ0Y3AifSwKK3siZGlzdGluY3QzMiIsICAgICAgICAge05VTEx9LCA5OTk4LCAidWRwIn0sCit7ImRpc3RpbmN0IiwgICAgICAgICAgIHtOVUxMfSwgOTk5OSwgInRjcCJ9LAoreyJkaXN0aW5jdCIsICAgICAgICAgICB7TlVMTH0sIDk5OTksICJ1ZHAifSwKK3sibmRtcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMDAwMCwgInRjcCJ9LAoreyJuZG1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMDAwLCAidWRwIn0sCit7InNjcC1jb25maWciLCAgICAgICAgIHtOVUxMfSwgMTAwMDEsICJ0Y3AifSwKK3sic2NwLWNvbmZpZyIsICAgICAgICAge05VTEx9LCAxMDAwMSwgInVkcCJ9LAoreyJkb2N1bWVudHVtIiwgICAgICAgICB7TlVMTH0sIDEwMDAyLCAidGNwIn0sCit7ImRvY3VtZW50dW0iLCAgICAgICAgIHtOVUxMfSwgMTAwMDIsICJ1ZHAifSwKK3siZG9jdW1lbnR1bV9zIiwgICAgICAge05VTEx9LCAxMDAwMywgInRjcCJ9LAoreyJkb2N1bWVudHVtX3MiLCAgICAgICB7TlVMTH0sIDEwMDAzLCAidWRwIn0sCit7ImVtY3JtaXJjY2QiLCAgICAgICAgIHtOVUxMfSwgMTAwMDQsICJ0Y3AifSwKK3siZW1jcm1pcmQiLCAgICAgICAgICAge05VTEx9LCAxMDAwNSwgInRjcCJ9LAoreyJtdnMtY2FwYWNpdHkiLCAgICAgICB7TlVMTH0sIDEwMDA3LCAidGNwIn0sCit7Im12cy1jYXBhY2l0eSIsICAgICAgIHtOVUxMfSwgMTAwMDcsICJ1ZHAifSwKK3sib2N0b3B1cyIsICAgICAgICAgICAge05VTEx9LCAxMDAwOCwgInRjcCJ9LAoreyJvY3RvcHVzIiwgICAgICAgICAgICB7TlVMTH0sIDEwMDA4LCAidWRwIn0sCit7InN3ZHRwLXN2IiwgICAgICAgICAgIHtOVUxMfSwgMTAwMDksICJ0Y3AifSwKK3sic3dkdHAtc3YiLCAgICAgICAgICAge05VTEx9LCAxMDAwOSwgInVkcCJ9LAoreyJyeGFwaSIsICAgICAgICAgICAgICB7TlVMTH0sIDEwMDEwLCAidGNwIn0sCit7InphYmJpeC1hZ2VudCIsICAgICAgIHtOVUxMfSwgMTAwNTAsICJ0Y3AifSwKK3siemFiYml4LWFnZW50IiwgICAgICAge05VTEx9LCAxMDA1MCwgInVkcCJ9LAoreyJ6YWJiaXgtdHJhcHBlciIsICAgICB7TlVMTH0sIDEwMDUxLCAidGNwIn0sCit7InphYmJpeC10cmFwcGVyIiwgICAgIHtOVUxMfSwgMTAwNTEsICJ1ZHAifSwKK3sicXB0bG1kIiwgICAgICAgICAgICAge05VTEx9LCAxMDA1NSwgInRjcCJ9LAoreyJhbWFuZGEiLCAgICAgICAgICAgICB7TlVMTH0sIDEwMDgwLCAidGNwIn0sCit7ImFtYW5kYSIsICAgICAgICAgICAgIHtOVUxMfSwgMTAwODAsICJ1ZHAifSwKK3siZmFtZGMiLCAgICAgICAgICAgICAge05VTEx9LCAxMDA4MSwgInRjcCJ9LAoreyJmYW1kYyIsICAgICAgICAgICAgICB7TlVMTH0sIDEwMDgxLCAidWRwIn0sCit7Iml0YXAtZGR0cCIsICAgICAgICAgIHtOVUxMfSwgMTAxMDAsICJ0Y3AifSwKK3siaXRhcC1kZHRwIiwgICAgICAgICAge05VTEx9LCAxMDEwMCwgInVkcCJ9LAoreyJlem1lZXRpbmctMiIsICAgICAgICB7TlVMTH0sIDEwMTAxLCAidGNwIn0sCit7ImV6bWVldGluZy0yIiwgICAgICAgIHtOVUxMfSwgMTAxMDEsICJ1ZHAifSwKK3siZXpwcm94eS0yIiwgICAgICAgICAge05VTEx9LCAxMDEwMiwgInRjcCJ9LAoreyJlenByb3h5LTIiLCAgICAgICAgICB7TlVMTH0sIDEwMTAyLCAidWRwIn0sCit7ImV6cmVsYXkiLCAgICAgICAgICAgIHtOVUxMfSwgMTAxMDMsICJ0Y3AifSwKK3siZXpyZWxheSIsICAgICAgICAgICAge05VTEx9LCAxMDEwMywgInVkcCJ9LAoreyJzd2R0cCIsICAgICAgICAgICAgICB7TlVMTH0sIDEwMTA0LCAidGNwIn0sCit7InN3ZHRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTAxMDQsICJ1ZHAifSwKK3siYmN0cC1zZXJ2ZXIiLCAgICAgICAge05VTEx9LCAxMDEwNywgInRjcCJ9LAoreyJiY3RwLXNlcnZlciIsICAgICAgICB7TlVMTH0sIDEwMTA3LCAidWRwIn0sCit7Im5tZWEtMDE4MyIsICAgICAgICAgIHtOVUxMfSwgMTAxMTAsICJ0Y3AifSwKK3sibm1lYS0wMTgzIiwgICAgICAgICAge05VTEx9LCAxMDExMCwgInVkcCJ9LAoreyJuZXRpcS1lbmRwb2ludCIsICAgICB7TlVMTH0sIDEwMTEzLCAidGNwIn0sCit7Im5ldGlxLWVuZHBvaW50IiwgICAgIHtOVUxMfSwgMTAxMTMsICJ1ZHAifSwKK3sibmV0aXEtcWNoZWNrIiwgICAgICAge05VTEx9LCAxMDExNCwgInRjcCJ9LAoreyJuZXRpcS1xY2hlY2siLCAgICAgICB7TlVMTH0sIDEwMTE0LCAidWRwIn0sCit7Im5ldGlxLWVuZHB0IiwgICAgICAgIHtOVUxMfSwgMTAxMTUsICJ0Y3AifSwKK3sibmV0aXEtZW5kcHQiLCAgICAgICAge05VTEx9LCAxMDExNSwgInVkcCJ9LAoreyJuZXRpcS12b2lwYSIsICAgICAgICB7TlVMTH0sIDEwMTE2LCAidGNwIn0sCit7Im5ldGlxLXZvaXBhIiwgICAgICAgIHtOVUxMfSwgMTAxMTYsICJ1ZHAifSwKK3siaXFybSIsICAgICAgICAgICAgICAge05VTEx9LCAxMDExNywgInRjcCJ9LAoreyJpcXJtIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMTE3LCAidWRwIn0sCit7ImJtYy1wZXJmLXNkIiwgICAgICAgIHtOVUxMfSwgMTAxMjgsICJ0Y3AifSwKK3siYm1jLXBlcmYtc2QiLCAgICAgICAge05VTEx9LCAxMDEyOCwgInVkcCJ9LAoreyJibWMtZ21zIiwgICAgICAgICAgICB7TlVMTH0sIDEwMTI5LCAidGNwIn0sCit7InFiLWRiLXNlcnZlciIsICAgICAgIHtOVUxMfSwgMTAxNjAsICJ0Y3AifSwKK3sicWItZGItc2VydmVyIiwgICAgICAge05VTEx9LCAxMDE2MCwgInVkcCJ9LAoreyJzbm1wdGxzIiwgICAgICAgICAgICB7TlVMTH0sIDEwMTYxLCAidGNwIn0sCit7InNubXBkdGxzIiwgICAgICAgICAgIHtOVUxMfSwgMTAxNjEsICJ1ZHAifSwKK3sic25tcHRscy10cmFwIiwgICAgICAge05VTEx9LCAxMDE2MiwgInRjcCJ9LAoreyJzbm1wZHRscy10cmFwIiwgICAgICB7TlVMTH0sIDEwMTYyLCAidWRwIn0sCit7InRyaXNvYXAiLCAgICAgICAgICAgIHtOVUxMfSwgMTAyMDAsICJ0Y3AifSwKK3sidHJpc29hcCIsICAgICAgICAgICAge05VTEx9LCAxMDIwMCwgInVkcCJ9LAoreyJyc21zIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEwMjAxLCAidGNwIn0sCit7InJzY3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTAyMDEsICJ1ZHAifSwKK3siYXBvbGxvLXJlbGF5IiwgICAgICAge05VTEx9LCAxMDI1MiwgInRjcCJ9LAoreyJhcG9sbG8tcmVsYXkiLCAgICAgICB7TlVMTH0sIDEwMjUyLCAidWRwIn0sCit7ImF4aXMtd2ltcC1wb3J0IiwgICAgIHtOVUxMfSwgMTAyNjAsICJ0Y3AifSwKK3siYXhpcy13aW1wLXBvcnQiLCAgICAge05VTEx9LCAxMDI2MCwgInVkcCJ9LAoreyJibG9ja3MiLCAgICAgICAgICAgICB7TlVMTH0sIDEwMjg4LCAidGNwIn0sCit7ImJsb2NrcyIsICAgICAgICAgICAgIHtOVUxMfSwgMTAyODgsICJ1ZHAifSwKK3siY29zaXIiLCAgICAgICAgICAgICAge05VTEx9LCAxMDMyMSwgInRjcCJ9LAoreyJoaXAtbmF0LXQiLCAgICAgICAgICB7TlVMTH0sIDEwNTAwLCAidWRwIn0sCit7Ik1PUy1sb3dlciIsICAgICAgICAgIHtOVUxMfSwgMTA1NDAsICJ0Y3AifSwKK3siTU9TLWxvd2VyIiwgICAgICAgICAge05VTEx9LCAxMDU0MCwgInVkcCJ9LAoreyJNT1MtdXBwZXIiLCAgICAgICAgICB7TlVMTH0sIDEwNTQxLCAidGNwIn0sCit7Ik1PUy11cHBlciIsICAgICAgICAgIHtOVUxMfSwgMTA1NDEsICJ1ZHAifSwKK3siTU9TLWF1eCIsICAgICAgICAgICAge05VTEx9LCAxMDU0MiwgInRjcCJ9LAoreyJNT1MtYXV4IiwgICAgICAgICAgICB7TlVMTH0sIDEwNTQyLCAidWRwIn0sCit7Ik1PUy1zb2FwIiwgICAgICAgICAgIHtOVUxMfSwgMTA1NDMsICJ0Y3AifSwKK3siTU9TLXNvYXAiLCAgICAgICAgICAge05VTEx9LCAxMDU0MywgInVkcCJ9LAoreyJNT1Mtc29hcC1vcHQiLCAgICAgICB7TlVMTH0sIDEwNTQ0LCAidGNwIn0sCit7Ik1PUy1zb2FwLW9wdCIsICAgICAgIHtOVUxMfSwgMTA1NDQsICJ1ZHAifSwKK3siZ2FwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMDgwMCwgInRjcCJ9LAoreyJnYXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwODAwLCAidWRwIn0sCit7ImxwZGciLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTA4MDUsICJ0Y3AifSwKK3sibHBkZyIsICAgICAgICAgICAgICAge05VTEx9LCAxMDgwNSwgInVkcCJ9LAoreyJuYmQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDEwODA5LCAidGNwIn0sCit7Im5tYy1kaXNjIiwgICAgICAgICAgIHtOVUxMfSwgMTA4MTAsICJ1ZHAifSwKK3siaGVsaXgiLCAgICAgICAgICAgICAge05VTEx9LCAxMDg2MCwgInRjcCJ9LAoreyJoZWxpeCIsICAgICAgICAgICAgICB7TlVMTH0sIDEwODYwLCAidWRwIn0sCit7InJtaWF1eCIsICAgICAgICAgICAgIHtOVUxMfSwgMTA5OTAsICJ0Y3AifSwKK3sicm1pYXV4IiwgICAgICAgICAgICAge05VTEx9LCAxMDk5MCwgInVkcCJ9LAoreyJpcmlzYSIsICAgICAgICAgICAgICB7TlVMTH0sIDExMDAwLCAidGNwIn0sCit7ImlyaXNhIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTEwMDAsICJ1ZHAifSwKK3sibWV0YXN5cyIsICAgICAgICAgICAge05VTEx9LCAxMTAwMSwgInRjcCJ9LAoreyJtZXRhc3lzIiwgICAgICAgICAgICB7TlVMTH0sIDExMDAxLCAidWRwIn0sCit7Im5ldGFwcC1pY21nbXQiLCAgICAgIHtOVUxMfSwgMTExMDQsICJ0Y3AifSwKK3sibmV0YXBwLWljZGF0YSIsICAgICAge05VTEx9LCAxMTEwNSwgInRjcCJ9LAoreyJzZ2ktbGsiLCAgICAgICAgICAgICB7TlVMTH0sIDExMTA2LCAidGNwIn0sCit7InNnaS1sayIsICAgICAgICAgICAgIHtOVUxMfSwgMTExMDYsICJ1ZHAifSwKK3sidmNlIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMTExMSwgInRjcCJ9LAoreyJ2Y2UiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDExMTExLCAidWRwIn0sCit7ImRpY29tIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTExMTIsICJ0Y3AifSwKK3siZGljb20iLCAgICAgICAgICAgICAge05VTEx9LCAxMTExMiwgInVkcCJ9LAoreyJzdW5jYWNhby1zbm1wIiwgICAgICB7TlVMTH0sIDExMTYxLCAidGNwIn0sCit7InN1bmNhY2FvLXNubXAiLCAgICAgIHtOVUxMfSwgMTExNjEsICJ1ZHAifSwKK3sic3VuY2FjYW8tam14bXAiLCAgICAge05VTEx9LCAxMTE2MiwgInRjcCJ9LAoreyJzdW5jYWNhby1qbXhtcCIsICAgICB7TlVMTH0sIDExMTYyLCAidWRwIn0sCit7InN1bmNhY2FvLXJtaSIsICAgICAgIHtOVUxMfSwgMTExNjMsICJ0Y3AifSwKK3sic3VuY2FjYW8tcm1pIiwgICAgICAge05VTEx9LCAxMTE2MywgInVkcCJ9LAoreyJzdW5jYWNhby1jc2EiLCAgICAgICB7TlVMTH0sIDExMTY0LCAidGNwIn0sCit7InN1bmNhY2FvLWNzYSIsICAgICAgIHtOVUxMfSwgMTExNjQsICJ1ZHAifSwKK3sic3VuY2FjYW8td2Vic3ZjIiwgICAge05VTEx9LCAxMTE2NSwgInRjcCJ9LAoreyJzdW5jYWNhby13ZWJzdmMiLCAgICB7TlVMTH0sIDExMTY1LCAidWRwIn0sCit7InNuc3MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTExNzEsICJ1ZHAifSwKK3sib2VtY2FjYW8tam14bXAiLCAgICAge05VTEx9LCAxMTE3MiwgInRjcCJ9LAoreyJvZW1jYWNhby1ybWkiLCAgICAgICB7TlVMTH0sIDExMTc0LCAidGNwIn0sCit7Im9lbWNhY2FvLXdlYnN2YyIsICAgIHtOVUxMfSwgMTExNzUsICJ0Y3AifSwKK3sic21zcXAiLCAgICAgICAgICAgICAge05VTEx9LCAxMTIwMSwgInRjcCJ9LAoreyJzbXNxcCIsICAgICAgICAgICAgICB7TlVMTH0sIDExMjAxLCAidWRwIn0sCit7IndpZnJlZSIsICAgICAgICAgICAgIHtOVUxMfSwgMTEyMDgsICJ0Y3AifSwKK3sid2lmcmVlIiwgICAgICAgICAgICAge05VTEx9LCAxMTIwOCwgInVkcCJ9LAoreyJtZW1jYWNoZSIsICAgICAgICAgICB7TlVMTH0sIDExMjExLCAidGNwIn0sCit7Im1lbWNhY2hlIiwgICAgICAgICAgIHtOVUxMfSwgMTEyMTEsICJ1ZHAifSwKK3siaW1pcCIsICAgICAgICAgICAgICAge05VTEx9LCAxMTMxOSwgInRjcCJ9LAoreyJpbWlwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDExMzE5LCAidWRwIn0sCit7ImltaXAtY2hhbm5lbHMiLCAgICAgIHtOVUxMfSwgMTEzMjAsICJ0Y3AifSwKK3siaW1pcC1jaGFubmVscyIsICAgICAge05VTEx9LCAxMTMyMCwgInVkcCJ9LAoreyJhcmVuYS1zZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDExMzIxLCAidGNwIn0sCit7ImFyZW5hLXNlcnZlciIsICAgICAgIHtOVUxMfSwgMTEzMjEsICJ1ZHAifSwKK3siYXRtLXVoYXMiLCAgICAgICAgICAge05VTEx9LCAxMTM2NywgInRjcCJ9LAoreyJhdG0tdWhhcyIsICAgICAgICAgICB7TlVMTH0sIDExMzY3LCAidWRwIn0sCit7ImhrcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTEzNzEsICJ0Y3AifSwKK3siaGtwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxMTM3MSwgInVkcCJ9LAoreyJhc2djeXByZXNzdGNwcyIsICAgICB7TlVMTH0sIDExNDg5LCAidGNwIn0sCit7InRlbXBlc3QtcG9ydCIsICAgICAgIHtOVUxMfSwgMTE2MDAsICJ0Y3AifSwKK3sidGVtcGVzdC1wb3J0IiwgICAgICAge05VTEx9LCAxMTYwMCwgInVkcCJ9LAoreyJoMzIzY2FsbHNpZ2FsdCIsICAgICB7TlVMTH0sIDExNzIwLCAidGNwIn0sCit7ImgzMjNjYWxsc2lnYWx0IiwgICAgIHtOVUxMfSwgMTE3MjAsICJ1ZHAifSwKK3siaW50cmVwaWQtc3NsIiwgICAgICAge05VTEx9LCAxMTc1MSwgInRjcCJ9LAoreyJpbnRyZXBpZC1zc2wiLCAgICAgICB7TlVMTH0sIDExNzUxLCAidWRwIn0sCit7InhvcmF5YSIsICAgICAgICAgICAgIHtOVUxMfSwgMTE4NzYsICJ0Y3AifSwKK3sieG9yYXlhIiwgICAgICAgICAgICAge05VTEx9LCAxMTg3NiwgInVkcCJ9LAoreyJ4MmUtZGlzYyIsICAgICAgICAgICB7TlVMTH0sIDExODc3LCAidWRwIn0sCit7InN5c2luZm8tc3AiLCAgICAgICAgIHtOVUxMfSwgMTE5NjcsICJ0Y3AifSwKK3sic3lzaW5mby1zcCIsICAgICAgICAge05VTEx9LCAxMTk2NywgInVkcCJ9LAoreyJ3bWVyZWNlaXZpbmciLCAgICAgICB7TlVMTH0sIDExOTk3LCAic2N0cCJ9LAoreyJ3bWVkaXN0cmlidXRpb24iLCAgICB7TlVMTH0sIDExOTk4LCAic2N0cCJ9LAoreyJ3bWVyZXBvcnRpbmciLCAgICAgICB7TlVMTH0sIDExOTk5LCAic2N0cCJ9LAoreyJlbnRleHR4aWQiLCAgICAgICAgICB7TlVMTH0sIDEyMDAwLCAidGNwIn0sCit7ImVudGV4dHhpZCIsICAgICAgICAgIHtOVUxMfSwgMTIwMDAsICJ1ZHAifSwKK3siZW50ZXh0bmV0d2siLCAgICAgICAge05VTEx9LCAxMjAwMSwgInRjcCJ9LAoreyJlbnRleHRuZXR3ayIsICAgICAgICB7TlVMTH0sIDEyMDAxLCAidWRwIn0sCit7ImVudGV4dGhpZ2giLCAgICAgICAgIHtOVUxMfSwgMTIwMDIsICJ0Y3AifSwKK3siZW50ZXh0aGlnaCIsICAgICAgICAge05VTEx9LCAxMjAwMiwgInVkcCJ9LAoreyJlbnRleHRtZWQiLCAgICAgICAgICB7TlVMTH0sIDEyMDAzLCAidGNwIn0sCit7ImVudGV4dG1lZCIsICAgICAgICAgIHtOVUxMfSwgMTIwMDMsICJ1ZHAifSwKK3siZW50ZXh0bG93IiwgICAgICAgICAge05VTEx9LCAxMjAwNCwgInRjcCJ9LAoreyJlbnRleHRsb3ciLCAgICAgICAgICB7TlVMTH0sIDEyMDA0LCAidWRwIn0sCit7ImRiaXNhbXNlcnZlcjEiLCAgICAgIHtOVUxMfSwgMTIwMDUsICJ0Y3AifSwKK3siZGJpc2Ftc2VydmVyMSIsICAgICAge05VTEx9LCAxMjAwNSwgInVkcCJ9LAoreyJkYmlzYW1zZXJ2ZXIyIiwgICAgICB7TlVMTH0sIDEyMDA2LCAidGNwIn0sCit7ImRiaXNhbXNlcnZlcjIiLCAgICAgIHtOVUxMfSwgMTIwMDYsICJ1ZHAifSwKK3siYWNjdXJhY2VyIiwgICAgICAgICAge05VTEx9LCAxMjAwNywgInRjcCJ9LAoreyJhY2N1cmFjZXIiLCAgICAgICAgICB7TlVMTH0sIDEyMDA3LCAidWRwIn0sCit7ImFjY3VyYWNlci1kYm1zIiwgICAgIHtOVUxMfSwgMTIwMDgsICJ0Y3AifSwKK3siYWNjdXJhY2VyLWRibXMiLCAgICAge05VTEx9LCAxMjAwOCwgInVkcCJ9LAoreyJlZGJzcnZyIiwgICAgICAgICAgICB7TlVMTH0sIDEyMDEwLCAidGNwIn0sCit7InZpcGVyYSIsICAgICAgICAgICAgIHtOVUxMfSwgMTIwMTIsICJ0Y3AifSwKK3sidmlwZXJhIiwgICAgICAgICAgICAge05VTEx9LCAxMjAxMiwgInVkcCJ9LAoreyJ2aXBlcmEtc3NsIiwgICAgICAgICB7TlVMTH0sIDEyMDEzLCAidGNwIn0sCit7InZpcGVyYS1zc2wiLCAgICAgICAgIHtOVUxMfSwgMTIwMTMsICJ1ZHAifSwKK3sicmV0cy1zc2wiLCAgICAgICAgICAge05VTEx9LCAxMjEwOSwgInRjcCJ9LAoreyJyZXRzLXNzbCIsICAgICAgICAgICB7TlVMTH0sIDEyMTA5LCAidWRwIn0sCit7Im51cGFwZXItc3MiLCAgICAgICAgIHtOVUxMfSwgMTIxMjEsICJ0Y3AifSwKK3sibnVwYXBlci1zcyIsICAgICAgICAge05VTEx9LCAxMjEyMSwgInVkcCJ9LAoreyJjYXdhcyIsICAgICAgICAgICAgICB7TlVMTH0sIDEyMTY4LCAidGNwIn0sCit7ImNhd2FzIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTIxNjgsICJ1ZHAifSwKK3siaGl2ZXAiLCAgICAgICAgICAgICAge05VTEx9LCAxMjE3MiwgInRjcCJ9LAoreyJoaXZlcCIsICAgICAgICAgICAgICB7TlVMTH0sIDEyMTcyLCAidWRwIn0sCit7Imxpbm9ncmlkZW5naW5lIiwgICAgIHtOVUxMfSwgMTIzMDAsICJ0Y3AifSwKK3sibGlub2dyaWRlbmdpbmUiLCAgICAge05VTEx9LCAxMjMwMCwgInVkcCJ9LAoreyJ3YXJlaG91c2Utc3NzIiwgICAgICB7TlVMTH0sIDEyMzIxLCAidGNwIn0sCit7IndhcmVob3VzZS1zc3MiLCAgICAgIHtOVUxMfSwgMTIzMjEsICJ1ZHAifSwKK3sid2FyZWhvdXNlIiwgICAgICAgICAge05VTEx9LCAxMjMyMiwgInRjcCJ9LAoreyJ3YXJlaG91c2UiLCAgICAgICAgICB7TlVMTH0sIDEyMzIyLCAidWRwIn0sCit7Iml0YWxrIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTIzNDUsICJ0Y3AifSwKK3siaXRhbGsiLCAgICAgICAgICAgICAge05VTEx9LCAxMjM0NSwgInVkcCJ9LAoreyJ0c2FmIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEyNzUzLCAidGNwIn0sCit7InRzYWYiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTI3NTMsICJ1ZHAifSwKK3siaS16aXBxZCIsICAgICAgICAgICAge05VTEx9LCAxMzE2MCwgInRjcCJ9LAoreyJpLXppcHFkIiwgICAgICAgICAgICB7TlVMTH0sIDEzMTYwLCAidWRwIn0sCit7ImJjc2xvZ2MiLCAgICAgICAgICAgIHtOVUxMfSwgMTMyMTYsICJ0Y3AifSwKK3siYmNzbG9nYyIsICAgICAgICAgICAge05VTEx9LCAxMzIxNiwgInVkcCJ9LAoreyJycy1waWFzIiwgICAgICAgICAgICB7TlVMTH0sIDEzMjE3LCAidGNwIn0sCit7InJzLXBpYXMiLCAgICAgICAgICAgIHtOVUxMfSwgMTMyMTcsICJ1ZHAifSwKK3siZW1jLXZjYXMtdGNwIiwgICAgICAge05VTEx9LCAxMzIxOCwgInRjcCJ9LAoreyJlbWMtdmNhcy11ZHAiLCAgICAgICB7TlVMTH0sIDEzMjE4LCAidWRwIn0sCit7InBvd3dvdy1jbGllbnQiLCAgICAgIHtOVUxMfSwgMTMyMjMsICJ0Y3AifSwKK3sicG93d293LWNsaWVudCIsICAgICAge05VTEx9LCAxMzIyMywgInVkcCJ9LAoreyJwb3d3b3ctc2VydmVyIiwgICAgICB7TlVMTH0sIDEzMjI0LCAidGNwIn0sCit7InBvd3dvdy1zZXJ2ZXIiLCAgICAgIHtOVUxMfSwgMTMyMjQsICJ1ZHAifSwKK3siZG9pcC1kYXRhIiwgICAgICAgICAge05VTEx9LCAxMzQwMCwgInRjcCJ9LAoreyJkb2lwLWRpc2MiLCAgICAgICAgICB7TlVMTH0sIDEzNDAwLCAidWRwIn0sCit7ImJwcmQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTM3MjAsICJ0Y3AifSwKK3siYnByZCIsICAgICAgICAgICAgICAge05VTEx9LCAxMzcyMCwgInVkcCJ9LAoreyJicGRibSIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNzIxLCAidGNwIn0sCit7ImJwZGJtIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM3MjEsICJ1ZHAifSwKK3siYnBqYXZhLW1zdmMiLCAgICAgICAge05VTEx9LCAxMzcyMiwgInRjcCJ9LAoreyJicGphdmEtbXN2YyIsICAgICAgICB7TlVMTH0sIDEzNzIyLCAidWRwIn0sCit7InZuZXRkIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM3MjQsICJ0Y3AifSwKK3sidm5ldGQiLCAgICAgICAgICAgICAge05VTEx9LCAxMzcyNCwgInVkcCJ9LAoreyJicGNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDEzNzgyLCAidGNwIn0sCit7ImJwY2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTM3ODIsICJ1ZHAifSwKK3sidm9waWVkIiwgICAgICAgICAgICAge05VTEx9LCAxMzc4MywgInRjcCJ9LAoreyJ2b3BpZWQiLCAgICAgICAgICAgICB7TlVMTH0sIDEzNzgzLCAidWRwIn0sCit7Im5iZGIiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTM3ODUsICJ0Y3AifSwKK3sibmJkYiIsICAgICAgICAgICAgICAge05VTEx9LCAxMzc4NSwgInVkcCJ9LAoreyJub21kYiIsICAgICAgICAgICAgICB7TlVMTH0sIDEzNzg2LCAidGNwIn0sCit7Im5vbWRiIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTM3ODYsICJ1ZHAifSwKK3siZHNtY2MtY29uZmlnIiwgICAgICAge05VTEx9LCAxMzgxOCwgInRjcCJ9LAoreyJkc21jYy1jb25maWciLCAgICAgICB7TlVMTH0sIDEzODE4LCAidWRwIn0sCit7ImRzbWNjLXNlc3Npb24iLCAgICAgIHtOVUxMfSwgMTM4MTksICJ0Y3AifSwKK3siZHNtY2Mtc2Vzc2lvbiIsICAgICAge05VTEx9LCAxMzgxOSwgInVkcCJ9LAoreyJkc21jYy1wYXNzdGhydSIsICAgICB7TlVMTH0sIDEzODIwLCAidGNwIn0sCit7ImRzbWNjLXBhc3N0aHJ1IiwgICAgIHtOVUxMfSwgMTM4MjAsICJ1ZHAifSwKK3siZHNtY2MtZG93bmxvYWQiLCAgICAge05VTEx9LCAxMzgyMSwgInRjcCJ9LAoreyJkc21jYy1kb3dubG9hZCIsICAgICB7TlVMTH0sIDEzODIxLCAidWRwIn0sCit7ImRzbWNjLWNjcCIsICAgICAgICAgIHtOVUxMfSwgMTM4MjIsICJ0Y3AifSwKK3siZHNtY2MtY2NwIiwgICAgICAgICAge05VTEx9LCAxMzgyMiwgInVkcCJ9LAoreyJibWRzcyIsICAgICAgICAgICAgICB7TlVMTH0sIDEzODIzLCAidGNwIn0sCit7ImR0YS1zeXN0ZW1zIiwgICAgICAgIHtOVUxMfSwgMTM5MjksICJ0Y3AifSwKK3siZHRhLXN5c3RlbXMiLCAgICAgICAge05VTEx9LCAxMzkyOSwgInVkcCJ9LAoreyJtZWRldm9sdmUiLCAgICAgICAgICB7TlVMTH0sIDEzOTMwLCAidGNwIn0sCit7InNjb3R0eS1mdCIsICAgICAgICAgIHtOVUxMfSwgMTQwMDAsICJ0Y3AifSwKK3sic2NvdHR5LWZ0IiwgICAgICAgICAge05VTEx9LCAxNDAwMCwgInVkcCJ9LAoreyJzdWEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0MDAxLCAidGNwIn0sCit7InN1YSIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQwMDEsICJ1ZHAifSwKK3sic3VhIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNDAwMSwgInNjdHAifSwKK3sic2FnZS1iZXN0LWNvbTEiLCAgICAge05VTEx9LCAxNDAzMywgInRjcCJ9LAoreyJzYWdlLWJlc3QtY29tMSIsICAgICB7TlVMTH0sIDE0MDMzLCAidWRwIn0sCit7InNhZ2UtYmVzdC1jb20yIiwgICAgIHtOVUxMfSwgMTQwMzQsICJ0Y3AifSwKK3sic2FnZS1iZXN0LWNvbTIiLCAgICAge05VTEx9LCAxNDAzNCwgInVkcCJ9LAoreyJ2Y3MtYXBwIiwgICAgICAgICAgICB7TlVMTH0sIDE0MTQxLCAidGNwIn0sCit7InZjcy1hcHAiLCAgICAgICAgICAgIHtOVUxMfSwgMTQxNDEsICJ1ZHAifSwKK3siaWNwcCIsICAgICAgICAgICAgICAge05VTEx9LCAxNDE0MiwgInRjcCJ9LAoreyJpY3BwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE0MTQyLCAidWRwIn0sCit7ImdjbS1hcHAiLCAgICAgICAgICAgIHtOVUxMfSwgMTQxNDUsICJ0Y3AifSwKK3siZ2NtLWFwcCIsICAgICAgICAgICAge05VTEx9LCAxNDE0NSwgInVkcCJ9LAoreyJ2cnRzLXRkZCIsICAgICAgICAgICB7TlVMTH0sIDE0MTQ5LCAidGNwIn0sCit7InZydHMtdGRkIiwgICAgICAgICAgIHtOVUxMfSwgMTQxNDksICJ1ZHAifSwKK3sidmNzY21kIiwgICAgICAgICAgICAge05VTEx9LCAxNDE1MCwgInRjcCJ9LAoreyJ2YWQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0MTU0LCAidGNwIn0sCit7InZhZCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTQxNTQsICJ1ZHAifSwKK3siY3BzIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNDI1MCwgInRjcCJ9LAoreyJjcHMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE0MjUwLCAidWRwIn0sCit7ImNhLXdlYi11cGRhdGUiLCAgICAgIHtOVUxMfSwgMTQ0MTQsICJ0Y3AifSwKK3siY2Etd2ViLXVwZGF0ZSIsICAgICAge05VTEx9LCAxNDQxNCwgInVkcCJ9LAoreyJoZGUtbGNlc3J2ci0xIiwgICAgICB7TlVMTH0sIDE0OTM2LCAidGNwIn0sCit7ImhkZS1sY2VzcnZyLTEiLCAgICAgIHtOVUxMfSwgMTQ5MzYsICJ1ZHAifSwKK3siaGRlLWxjZXNydnItMiIsICAgICAge05VTEx9LCAxNDkzNywgInRjcCJ9LAoreyJoZGUtbGNlc3J2ci0yIiwgICAgICB7TlVMTH0sIDE0OTM3LCAidWRwIn0sCit7Imh5ZGFwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTUwMDAsICJ0Y3AifSwKK3siaHlkYXAiLCAgICAgICAgICAgICAge05VTEx9LCAxNTAwMCwgInVkcCJ9LAoreyJ4cGlsb3QiLCAgICAgICAgICAgICB7TlVMTH0sIDE1MzQ1LCAidGNwIn0sCit7InhwaWxvdCIsICAgICAgICAgICAgIHtOVUxMfSwgMTUzNDUsICJ1ZHAifSwKK3siM2xpbmsiLCAgICAgICAgICAgICAge05VTEx9LCAxNTM2MywgInRjcCJ9LAoreyIzbGluayIsICAgICAgICAgICAgICB7TlVMTH0sIDE1MzYzLCAidWRwIn0sCit7ImNpc2NvLXNuYXQiLCAgICAgICAgIHtOVUxMfSwgMTU1NTUsICJ0Y3AifSwKK3siY2lzY28tc25hdCIsICAgICAgICAge05VTEx9LCAxNTU1NSwgInVkcCJ9LAoreyJiZXgteHIiLCAgICAgICAgICAgICB7TlVMTH0sIDE1NjYwLCAidGNwIn0sCit7ImJleC14ciIsICAgICAgICAgICAgIHtOVUxMfSwgMTU2NjAsICJ1ZHAifSwKK3sicHRwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxNTc0MCwgInRjcCJ9LAoreyJwdHAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE1NzQwLCAidWRwIn0sCit7IjJwaW5nIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTU5OTgsICJ1ZHAifSwKK3sicHJvZ3JhbW1hciIsICAgICAgICAge05VTEx9LCAxNTk5OSwgInRjcCJ9LAoreyJmbXNhcyIsICAgICAgICAgICAgICB7TlVMTH0sIDE2MDAwLCAidGNwIn0sCit7ImZtc2FzY29uIiwgICAgICAgICAgIHtOVUxMfSwgMTYwMDEsICJ0Y3AifSwKK3siZ3NtcyIsICAgICAgICAgICAgICAge05VTEx9LCAxNjAwMiwgInRjcCJ9LAoreyJhbGZpbiIsICAgICAgICAgICAgICB7TlVMTH0sIDE2MDAzLCAidWRwIn0sCit7Imp3cGMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTYwMjAsICJ0Y3AifSwKK3siandwYy1iaW4iLCAgICAgICAgICAge05VTEx9LCAxNjAyMSwgInRjcCJ9LAoreyJzdW4tc2VhLXBvcnQiLCAgICAgICB7TlVMTH0sIDE2MTYxLCAidGNwIn0sCit7InN1bi1zZWEtcG9ydCIsICAgICAgIHtOVUxMfSwgMTYxNjEsICJ1ZHAifSwKK3sic29sYXJpcy1hdWRpdCIsICAgICAge05VTEx9LCAxNjE2MiwgInRjcCJ9LAoreyJldGI0aiIsICAgICAgICAgICAgICB7TlVMTH0sIDE2MzA5LCAidGNwIn0sCit7ImV0YjRqIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTYzMDksICJ1ZHAifSwKK3sicGR1bmNzIiwgICAgICAgICAgICAge05VTEx9LCAxNjMxMCwgInRjcCJ9LAoreyJwZHVuY3MiLCAgICAgICAgICAgICB7TlVMTH0sIDE2MzEwLCAidWRwIn0sCit7InBkZWZtbnMiLCAgICAgICAgICAgIHtOVUxMfSwgMTYzMTEsICJ0Y3AifSwKK3sicGRlZm1ucyIsICAgICAgICAgICAge05VTEx9LCAxNjMxMSwgInVkcCJ9LAoreyJuZXRzZXJpYWxleHQxIiwgICAgICB7TlVMTH0sIDE2MzYwLCAidGNwIn0sCit7Im5ldHNlcmlhbGV4dDEiLCAgICAgIHtOVUxMfSwgMTYzNjAsICJ1ZHAifSwKK3sibmV0c2VyaWFsZXh0MiIsICAgICAge05VTEx9LCAxNjM2MSwgInRjcCJ9LAoreyJuZXRzZXJpYWxleHQyIiwgICAgICB7TlVMTH0sIDE2MzYxLCAidWRwIn0sCit7Im5ldHNlcmlhbGV4dDMiLCAgICAgIHtOVUxMfSwgMTYzNjcsICJ0Y3AifSwKK3sibmV0c2VyaWFsZXh0MyIsICAgICAge05VTEx9LCAxNjM2NywgInVkcCJ9LAoreyJuZXRzZXJpYWxleHQ0IiwgICAgICB7TlVMTH0sIDE2MzY4LCAidGNwIn0sCit7Im5ldHNlcmlhbGV4dDQiLCAgICAgIHtOVUxMfSwgMTYzNjgsICJ1ZHAifSwKK3siY29ubmVjdGVkIiwgICAgICAgICAge05VTEx9LCAxNjM4NCwgInRjcCJ9LAoreyJjb25uZWN0ZWQiLCAgICAgICAgICB7TlVMTH0sIDE2Mzg0LCAidWRwIn0sCit7InhvbXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTY2MTksICJ0Y3AifSwKK3sibmV3YmF5LXNuYy1tYyIsICAgICAge05VTEx9LCAxNjkwMCwgInRjcCJ9LAoreyJuZXdiYXktc25jLW1jIiwgICAgICB7TlVMTH0sIDE2OTAwLCAidWRwIn0sCit7InNnY2lwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTY5NTAsICJ0Y3AifSwKK3sic2djaXAiLCAgICAgICAgICAgICAge05VTEx9LCAxNjk1MCwgInVkcCJ9LAoreyJpbnRlbC1yY2ktbXAiLCAgICAgICB7TlVMTH0sIDE2OTkxLCAidGNwIn0sCit7ImludGVsLXJjaS1tcCIsICAgICAgIHtOVUxMfSwgMTY5OTEsICJ1ZHAifSwKK3siYW10LXNvYXAtaHR0cCIsICAgICAge05VTEx9LCAxNjk5MiwgInRjcCJ9LAoreyJhbXQtc29hcC1odHRwIiwgICAgICB7TlVMTH0sIDE2OTkyLCAidWRwIn0sCit7ImFtdC1zb2FwLWh0dHBzIiwgICAgIHtOVUxMfSwgMTY5OTMsICJ0Y3AifSwKK3siYW10LXNvYXAtaHR0cHMiLCAgICAge05VTEx9LCAxNjk5MywgInVkcCJ9LAoreyJhbXQtcmVkaXItdGNwIiwgICAgICB7TlVMTH0sIDE2OTk0LCAidGNwIn0sCit7ImFtdC1yZWRpci10Y3AiLCAgICAgIHtOVUxMfSwgMTY5OTQsICJ1ZHAifSwKK3siYW10LXJlZGlyLXRscyIsICAgICAge05VTEx9LCAxNjk5NSwgInRjcCJ9LAoreyJhbXQtcmVkaXItdGxzIiwgICAgICB7TlVMTH0sIDE2OTk1LCAidWRwIn0sCit7Imlzb2RlLWR1YSIsICAgICAgICAgIHtOVUxMfSwgMTcwMDcsICJ0Y3AifSwKK3siaXNvZGUtZHVhIiwgICAgICAgICAge05VTEx9LCAxNzAwNywgInVkcCJ9LAoreyJzb3VuZHN2aXJ0dWFsIiwgICAgICB7TlVMTH0sIDE3MTg1LCAidGNwIn0sCit7InNvdW5kc3ZpcnR1YWwiLCAgICAgIHtOVUxMfSwgMTcxODUsICJ1ZHAifSwKK3siY2hpcHBlciIsICAgICAgICAgICAge05VTEx9LCAxNzIxOSwgInRjcCJ9LAoreyJjaGlwcGVyIiwgICAgICAgICAgICB7TlVMTH0sIDE3MjE5LCAidWRwIn0sCit7ImludGVncml1cy1zdHAiLCAgICAgIHtOVUxMfSwgMTcyMzQsICJ0Y3AifSwKK3siaW50ZWdyaXVzLXN0cCIsICAgICAge05VTEx9LCAxNzIzNCwgInVkcCJ9LAoreyJzc2gtbWdtdCIsICAgICAgICAgICB7TlVMTH0sIDE3MjM1LCAidGNwIn0sCit7InNzaC1tZ210IiwgICAgICAgICAgIHtOVUxMfSwgMTcyMzUsICJ1ZHAifSwKK3siZGItbHNwIiwgICAgICAgICAgICAge05VTEx9LCAxNzUwMCwgInRjcCJ9LAoreyJkYi1sc3AtZGlzYyIsICAgICAgICB7TlVMTH0sIDE3NTAwLCAidWRwIn0sCit7ImVhIiwgICAgICAgICAgICAgICAgIHtOVUxMfSwgMTc3MjksICJ0Y3AifSwKK3siZWEiLCAgICAgICAgICAgICAgICAge05VTEx9LCAxNzcyOSwgInVkcCJ9LAoreyJ6ZXAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDE3NzU0LCAidGNwIn0sCit7InplcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTc3NTQsICJ1ZHAifSwKK3siemlnYmVlLWlwIiwgICAgICAgICAge05VTEx9LCAxNzc1NSwgInRjcCJ9LAoreyJ6aWdiZWUtaXAiLCAgICAgICAgICB7TlVMTH0sIDE3NzU1LCAidWRwIn0sCit7InppZ2JlZS1pcHMiLCAgICAgICAgIHtOVUxMfSwgMTc3NTYsICJ0Y3AifSwKK3siemlnYmVlLWlwcyIsICAgICAgICAge05VTEx9LCAxNzc1NiwgInVkcCJ9LAoreyJzdy1vcmlvbiIsICAgICAgICAgICB7TlVMTH0sIDE3Nzc3LCAidGNwIn0sCit7ImJpaW1lbnUiLCAgICAgICAgICAgIHtOVUxMfSwgMTgwMDAsICJ0Y3AifSwKK3siYmlpbWVudSIsICAgICAgICAgICAge05VTEx9LCAxODAwMCwgInVkcCJ9LAoreyJyYWRwZGYiLCAgICAgICAgICAgICB7TlVMTH0sIDE4MTA0LCAidGNwIn0sCit7InJhY2YiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTgxMzYsICJ0Y3AifSwKK3sib3BzZWMtY3ZwIiwgICAgICAgICAge05VTEx9LCAxODE4MSwgInRjcCJ9LAoreyJvcHNlYy1jdnAiLCAgICAgICAgICB7TlVMTH0sIDE4MTgxLCAidWRwIn0sCit7Im9wc2VjLXVmcCIsICAgICAgICAgIHtOVUxMfSwgMTgxODIsICJ0Y3AifSwKK3sib3BzZWMtdWZwIiwgICAgICAgICAge05VTEx9LCAxODE4MiwgInVkcCJ9LAoreyJvcHNlYy1zYW0iLCAgICAgICAgICB7TlVMTH0sIDE4MTgzLCAidGNwIn0sCit7Im9wc2VjLXNhbSIsICAgICAgICAgIHtOVUxMfSwgMTgxODMsICJ1ZHAifSwKK3sib3BzZWMtbGVhIiwgICAgICAgICAge05VTEx9LCAxODE4NCwgInRjcCJ9LAoreyJvcHNlYy1sZWEiLCAgICAgICAgICB7TlVMTH0sIDE4MTg0LCAidWRwIn0sCit7Im9wc2VjLW9taSIsICAgICAgICAgIHtOVUxMfSwgMTgxODUsICJ0Y3AifSwKK3sib3BzZWMtb21pIiwgICAgICAgICAge05VTEx9LCAxODE4NSwgInVkcCJ9LAoreyJvaHNjIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE4MTg2LCAidGNwIn0sCit7Im9oc2MiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMTgxODYsICJ1ZHAifSwKK3sib3BzZWMtZWxhIiwgICAgICAgICAge05VTEx9LCAxODE4NywgInRjcCJ9LAoreyJvcHNlYy1lbGEiLCAgICAgICAgICB7TlVMTH0sIDE4MTg3LCAidWRwIn0sCit7ImNoZWNrcG9pbnQtcnRtIiwgICAgIHtOVUxMfSwgMTgyNDEsICJ0Y3AifSwKK3siY2hlY2twb2ludC1ydG0iLCAgICAge05VTEx9LCAxODI0MSwgInVkcCJ9LAoreyJndi1wZiIsICAgICAgICAgICAgICB7TlVMTH0sIDE4MjYyLCAidGNwIn0sCit7Imd2LXBmIiwgICAgICAgICAgICAgIHtOVUxMfSwgMTgyNjIsICJ1ZHAifSwKK3siYWMtY2x1c3RlciIsICAgICAgICAge05VTEx9LCAxODQ2MywgInRjcCJ9LAoreyJhYy1jbHVzdGVyIiwgICAgICAgICB7TlVMTH0sIDE4NDYzLCAidWRwIn0sCit7InJkcy1pYiIsICAgICAgICAgICAgIHtOVUxMfSwgMTg2MzQsICJ0Y3AifSwKK3sicmRzLWliIiwgICAgICAgICAgICAge05VTEx9LCAxODYzNCwgInVkcCJ9LAoreyJyZHMtaXAiLCAgICAgICAgICAgICB7TlVMTH0sIDE4NjM1LCAidGNwIn0sCit7InJkcy1pcCIsICAgICAgICAgICAgIHtOVUxMfSwgMTg2MzUsICJ1ZHAifSwKK3siaXF1ZSIsICAgICAgICAgICAgICAge05VTEx9LCAxODc2OSwgInRjcCJ9LAoreyJpcXVlIiwgICAgICAgICAgICAgICB7TlVMTH0sIDE4NzY5LCAidWRwIn0sCit7ImluZm90b3MiLCAgICAgICAgICAgIHtOVUxMfSwgMTg4ODEsICJ0Y3AifSwKK3siaW5mb3RvcyIsICAgICAgICAgICAge05VTEx9LCAxODg4MSwgInVkcCJ9LAoreyJhcGMtbmVjbXAiLCAgICAgICAgICB7TlVMTH0sIDE4ODg4LCAidGNwIn0sCit7ImFwYy1uZWNtcCIsICAgICAgICAgIHtOVUxMfSwgMTg4ODgsICJ1ZHAifSwKK3siaWdyaWQiLCAgICAgICAgICAgICAge05VTEx9LCAxOTAwMCwgInRjcCJ9LAoreyJpZ3JpZCIsICAgICAgICAgICAgICB7TlVMTH0sIDE5MDAwLCAidWRwIn0sCit7ImotbGluayIsICAgICAgICAgICAgIHtOVUxMfSwgMTkwMjAsICJ0Y3AifSwKK3sib3BzZWMtdWFhIiwgICAgICAgICAge05VTEx9LCAxOTE5MSwgInRjcCJ9LAoreyJvcHNlYy11YWEiLCAgICAgICAgICB7TlVMTH0sIDE5MTkxLCAidWRwIn0sCit7InVhLXNlY3VyZWFnZW50IiwgICAgIHtOVUxMfSwgMTkxOTQsICJ0Y3AifSwKK3sidWEtc2VjdXJlYWdlbnQiLCAgICAge05VTEx9LCAxOTE5NCwgInVkcCJ9LAoreyJrZXlzcnZyIiwgICAgICAgICAgICB7TlVMTH0sIDE5MjgzLCAidGNwIn0sCit7ImtleXNydnIiLCAgICAgICAgICAgIHtOVUxMfSwgMTkyODMsICJ1ZHAifSwKK3sia2V5c2hhZG93IiwgICAgICAgICAge05VTEx9LCAxOTMxNSwgInRjcCJ9LAoreyJrZXlzaGFkb3ciLCAgICAgICAgICB7TlVMTH0sIDE5MzE1LCAidWRwIn0sCit7Im10cmd0cmFucyIsICAgICAgICAgIHtOVUxMfSwgMTkzOTgsICJ0Y3AifSwKK3sibXRyZ3RyYW5zIiwgICAgICAgICAge05VTEx9LCAxOTM5OCwgInVkcCJ9LAoreyJocC1zY28iLCAgICAgICAgICAgICB7TlVMTH0sIDE5NDEwLCAidGNwIn0sCit7ImhwLXNjbyIsICAgICAgICAgICAgIHtOVUxMfSwgMTk0MTAsICJ1ZHAifSwKK3siaHAtc2NhIiwgICAgICAgICAgICAge05VTEx9LCAxOTQxMSwgInRjcCJ9LAoreyJocC1zY2EiLCAgICAgICAgICAgICB7TlVMTH0sIDE5NDExLCAidWRwIn0sCit7ImhwLXNlc3Ntb24iLCAgICAgICAgIHtOVUxMfSwgMTk0MTIsICJ0Y3AifSwKK3siaHAtc2Vzc21vbiIsICAgICAgICAge05VTEx9LCAxOTQxMiwgInVkcCJ9LAoreyJmeHVwdHAiLCAgICAgICAgICAgICB7TlVMTH0sIDE5NTM5LCAidGNwIn0sCit7ImZ4dXB0cCIsICAgICAgICAgICAgIHtOVUxMfSwgMTk1MzksICJ1ZHAifSwKK3sic3h1cHRwIiwgICAgICAgICAgICAge05VTEx9LCAxOTU0MCwgInRjcCJ9LAoreyJzeHVwdHAiLCAgICAgICAgICAgICB7TlVMTH0sIDE5NTQwLCAidWRwIn0sCit7ImpjcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMTk1NDEsICJ0Y3AifSwKK3siamNwIiwgICAgICAgICAgICAgICAge05VTEx9LCAxOTU0MSwgInVkcCJ9LAoreyJpZWMtMTA0LXNlYyIsICAgICAgICB7TlVMTH0sIDE5OTk4LCAidGNwIn0sCit7ImRucC1zZWMiLCAgICAgICAgICAgIHtOVUxMfSwgMTk5OTksICJ0Y3AifSwKK3siZG5wLXNlYyIsICAgICAgICAgICAge05VTEx9LCAxOTk5OSwgInVkcCJ9LAoreyJkbnAiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIwMDAwLCAidGNwIn0sCit7ImRucCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgMjAwMDAsICJ1ZHAifSwKK3sibWljcm9zYW4iLCAgICAgICAgICAge05VTEx9LCAyMDAwMSwgInRjcCJ9LAoreyJtaWNyb3NhbiIsICAgICAgICAgICB7TlVMTH0sIDIwMDAxLCAidWRwIn0sCit7ImNvbW10YWN0LWh0dHAiLCAgICAgIHtOVUxMfSwgMjAwMDIsICJ0Y3AifSwKK3siY29tbXRhY3QtaHR0cCIsICAgICAge05VTEx9LCAyMDAwMiwgInVkcCJ9LAoreyJjb21tdGFjdC1odHRwcyIsICAgICB7TlVMTH0sIDIwMDAzLCAidGNwIn0sCit7ImNvbW10YWN0LWh0dHBzIiwgICAgIHtOVUxMfSwgMjAwMDMsICJ1ZHAifSwKK3sib3BlbndlYm5ldCIsICAgICAgICAge05VTEx9LCAyMDAwNSwgInRjcCJ9LAoreyJvcGVud2VibmV0IiwgICAgICAgICB7TlVMTH0sIDIwMDA1LCAidWRwIn0sCit7InNzLWlkaS1kaXNjIiwgICAgICAgIHtOVUxMfSwgMjAwMTIsICJ1ZHAifSwKK3sic3MtaWRpIiwgICAgICAgICAgICAge05VTEx9LCAyMDAxMywgInRjcCJ9LAoreyJvcGVuZGVwbG95IiwgICAgICAgICB7TlVMTH0sIDIwMDE0LCAidGNwIn0sCit7Im9wZW5kZXBsb3kiLCAgICAgICAgIHtOVUxMfSwgMjAwMTQsICJ1ZHAifSwKK3sibmJ1cm5faWQiLCAgICAgICAgICAge05VTEx9LCAyMDAzNCwgInRjcCJ9LAoreyJuYnVybl9pZCIsICAgICAgICAgICB7TlVMTH0sIDIwMDM0LCAidWRwIn0sCit7InRtb3BobDdtdHMiLCAgICAgICAgIHtOVUxMfSwgMjAwNDYsICJ0Y3AifSwKK3sidG1vcGhsN210cyIsICAgICAgICAge05VTEx9LCAyMDA0NiwgInVkcCJ9LAoreyJtb3VudGQiLCAgICAgICAgICAgICB7TlVMTH0sIDIwMDQ4LCAidGNwIn0sCit7Im1vdW50ZCIsICAgICAgICAgICAgIHtOVUxMfSwgMjAwNDgsICJ1ZHAifSwKK3sibmZzcmRtYSIsICAgICAgICAgICAge05VTEx9LCAyMDA0OSwgInRjcCJ9LAoreyJuZnNyZG1hIiwgICAgICAgICAgICB7TlVMTH0sIDIwMDQ5LCAidWRwIn0sCit7Im5mc3JkbWEiLCAgICAgICAgICAgIHtOVUxMfSwgMjAwNDksICJzY3RwIn0sCit7InRvbGZhYiIsICAgICAgICAgICAgIHtOVUxMfSwgMjAxNjcsICJ0Y3AifSwKK3sidG9sZmFiIiwgICAgICAgICAgICAge05VTEx9LCAyMDE2NywgInVkcCJ9LAoreyJpcGR0cC1wb3J0IiwgICAgICAgICB7TlVMTH0sIDIwMjAyLCAidGNwIn0sCit7ImlwZHRwLXBvcnQiLCAgICAgICAgIHtOVUxMfSwgMjAyMDIsICJ1ZHAifSwKK3siaXB1bHNlLWljcyIsICAgICAgICAge05VTEx9LCAyMDIyMiwgInRjcCJ9LAoreyJpcHVsc2UtaWNzIiwgICAgICAgICB7TlVMTH0sIDIwMjIyLCAidWRwIn0sCit7ImVtd2F2ZW1zZyIsICAgICAgICAgIHtOVUxMfSwgMjA0ODAsICJ0Y3AifSwKK3siZW13YXZlbXNnIiwgICAgICAgICAge05VTEx9LCAyMDQ4MCwgInVkcCJ9LAoreyJ0cmFjayIsICAgICAgICAgICAgICB7TlVMTH0sIDIwNjcwLCAidGNwIn0sCit7InRyYWNrIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjA2NzAsICJ1ZHAifSwKK3siYXRoYW5kLW1tcCIsICAgICAgICAge05VTEx9LCAyMDk5OSwgInRjcCJ9LAoreyJhdGhhbmQtbW1wIiwgICAgICAgICB7TlVMTH0sIDIwOTk5LCAidWRwIn0sCit7ImlydHJhbnMiLCAgICAgICAgICAgIHtOVUxMfSwgMjEwMDAsICJ0Y3AifSwKK3siaXJ0cmFucyIsICAgICAgICAgICAge05VTEx9LCAyMTAwMCwgInVkcCJ9LAoreyJkZnNlcnZlciIsICAgICAgICAgICB7TlVMTH0sIDIxNTU0LCAidGNwIn0sCit7ImRmc2VydmVyIiwgICAgICAgICAgIHtOVUxMfSwgMjE1NTQsICJ1ZHAifSwKK3sidm9mci1nYXRld2F5IiwgICAgICAge05VTEx9LCAyMTU5MCwgInRjcCJ9LAoreyJ2b2ZyLWdhdGV3YXkiLCAgICAgICB7TlVMTH0sIDIxNTkwLCAidWRwIn0sCit7InR2cG0iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjE4MDAsICJ0Y3AifSwKK3sidHZwbSIsICAgICAgICAgICAgICAge05VTEx9LCAyMTgwMCwgInVkcCJ9LAoreyJ3ZWJwaG9uZSIsICAgICAgICAgICB7TlVMTH0sIDIxODQ1LCAidGNwIn0sCit7IndlYnBob25lIiwgICAgICAgICAgIHtOVUxMfSwgMjE4NDUsICJ1ZHAifSwKK3sibmV0c3BlYWstaXMiLCAgICAgICAge05VTEx9LCAyMTg0NiwgInRjcCJ9LAoreyJuZXRzcGVhay1pcyIsICAgICAgICB7TlVMTH0sIDIxODQ2LCAidWRwIn0sCit7Im5ldHNwZWFrLWNzIiwgICAgICAgIHtOVUxMfSwgMjE4NDcsICJ0Y3AifSwKK3sibmV0c3BlYWstY3MiLCAgICAgICAge05VTEx9LCAyMTg0NywgInVkcCJ9LAoreyJuZXRzcGVhay1hY2QiLCAgICAgICB7TlVMTH0sIDIxODQ4LCAidGNwIn0sCit7Im5ldHNwZWFrLWFjZCIsICAgICAgIHtOVUxMfSwgMjE4NDgsICJ1ZHAifSwKK3sibmV0c3BlYWstY3BzIiwgICAgICAge05VTEx9LCAyMTg0OSwgInRjcCJ9LAoreyJuZXRzcGVhay1jcHMiLCAgICAgICB7TlVMTH0sIDIxODQ5LCAidWRwIn0sCit7InNuYXBlbmV0aW8iLCAgICAgICAgIHtOVUxMfSwgMjIwMDAsICJ0Y3AifSwKK3sic25hcGVuZXRpbyIsICAgICAgICAge05VTEx9LCAyMjAwMCwgInVkcCJ9LAoreyJvcHRvY29udHJvbCIsICAgICAgICB7TlVMTH0sIDIyMDAxLCAidGNwIn0sCit7Im9wdG9jb250cm9sIiwgICAgICAgIHtOVUxMfSwgMjIwMDEsICJ1ZHAifSwKK3sib3B0b2hvc3QwMDIiLCAgICAgICAge05VTEx9LCAyMjAwMiwgInRjcCJ9LAoreyJvcHRvaG9zdDAwMiIsICAgICAgICB7TlVMTH0sIDIyMDAyLCAidWRwIn0sCit7Im9wdG9ob3N0MDAzIiwgICAgICAgIHtOVUxMfSwgMjIwMDMsICJ0Y3AifSwKK3sib3B0b2hvc3QwMDMiLCAgICAgICAge05VTEx9LCAyMjAwMywgInVkcCJ9LAoreyJvcHRvaG9zdDAwNCIsICAgICAgICB7TlVMTH0sIDIyMDA0LCAidGNwIn0sCit7Im9wdG9ob3N0MDA0IiwgICAgICAgIHtOVUxMfSwgMjIwMDQsICJ1ZHAifSwKK3sib3B0b2hvc3QwMDQiLCAgICAgICAge05VTEx9LCAyMjAwNSwgInRjcCJ9LAoreyJvcHRvaG9zdDAwNCIsICAgICAgICB7TlVMTH0sIDIyMDA1LCAidWRwIn0sCit7ImRjYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjIxMjUsICJ0Y3AifSwKK3siZ3NpZGNhcCIsICAgICAgICAgICAge05VTEx9LCAyMjEyOCwgInRjcCJ9LAoreyJ3bm42IiwgICAgICAgICAgICAgICB7TlVMTH0sIDIyMjczLCAidGNwIn0sCit7IndubjYiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjIyNzMsICJ1ZHAifSwKK3siY2lzIiwgICAgICAgICAgICAgICAge05VTEx9LCAyMjMwNSwgInRjcCJ9LAoreyJjaXMiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDIyMzA1LCAidWRwIn0sCit7ImNpcy1zZWN1cmUiLCAgICAgICAgIHtOVUxMfSwgMjIzNDMsICJ0Y3AifSwKK3siY2lzLXNlY3VyZSIsICAgICAgICAge05VTEx9LCAyMjM0MywgInVkcCJ9LAoreyJXaWJ1S2V5IiwgICAgICAgICAgICB7TlVMTH0sIDIyMzQ3LCAidGNwIn0sCit7IldpYnVLZXkiLCAgICAgICAgICAgIHtOVUxMfSwgMjIzNDcsICJ1ZHAifSwKK3siQ29kZU1ldGVyIiwgICAgICAgICAge05VTEx9LCAyMjM1MCwgInRjcCJ9LAoreyJDb2RlTWV0ZXIiLCAgICAgICAgICB7TlVMTH0sIDIyMzUwLCAidWRwIn0sCit7InZvY2FsdGVjLXdjb25mIiwgICAgIHtOVUxMfSwgMjI1NTUsICJ0Y3AifSwKK3sidm9jYWx0ZWMtcGhvbmUiLCAgICAge05VTEx9LCAyMjU1NSwgInVkcCJ9LAoreyJ0YWxpa2FzZXJ2ZXIiLCAgICAgICB7TlVMTH0sIDIyNzYzLCAidGNwIn0sCit7InRhbGlrYXNlcnZlciIsICAgICAgIHtOVUxMfSwgMjI3NjMsICJ1ZHAifSwKK3siYXdzLWJyZiIsICAgICAgICAgICAge05VTEx9LCAyMjgwMCwgInRjcCJ9LAoreyJhd3MtYnJmIiwgICAgICAgICAgICB7TlVMTH0sIDIyODAwLCAidWRwIn0sCit7ImJyZi1ndyIsICAgICAgICAgICAgIHtOVUxMfSwgMjI5NTEsICJ0Y3AifSwKK3siYnJmLWd3IiwgICAgICAgICAgICAge05VTEx9LCAyMjk1MSwgInVkcCJ9LAoreyJpbm92YXBvcnQxIiwgICAgICAgICB7TlVMTH0sIDIzMDAwLCAidGNwIn0sCit7Imlub3ZhcG9ydDEiLCAgICAgICAgIHtOVUxMfSwgMjMwMDAsICJ1ZHAifSwKK3siaW5vdmFwb3J0MiIsICAgICAgICAge05VTEx9LCAyMzAwMSwgInRjcCJ9LAoreyJpbm92YXBvcnQyIiwgICAgICAgICB7TlVMTH0sIDIzMDAxLCAidWRwIn0sCit7Imlub3ZhcG9ydDMiLCAgICAgICAgIHtOVUxMfSwgMjMwMDIsICJ0Y3AifSwKK3siaW5vdmFwb3J0MyIsICAgICAgICAge05VTEx9LCAyMzAwMiwgInVkcCJ9LAoreyJpbm92YXBvcnQ0IiwgICAgICAgICB7TlVMTH0sIDIzMDAzLCAidGNwIn0sCit7Imlub3ZhcG9ydDQiLCAgICAgICAgIHtOVUxMfSwgMjMwMDMsICJ1ZHAifSwKK3siaW5vdmFwb3J0NSIsICAgICAgICAge05VTEx9LCAyMzAwNCwgInRjcCJ9LAoreyJpbm92YXBvcnQ1IiwgICAgICAgICB7TlVMTH0sIDIzMDA0LCAidWRwIn0sCit7Imlub3ZhcG9ydDYiLCAgICAgICAgIHtOVUxMfSwgMjMwMDUsICJ0Y3AifSwKK3siaW5vdmFwb3J0NiIsICAgICAgICAge05VTEx9LCAyMzAwNSwgInVkcCJ9LAoreyJzMTAyIiwgICAgICAgICAgICAgICB7TlVMTH0sIDIzMjcyLCAidWRwIn0sCit7ImVseG1nbXQiLCAgICAgICAgICAgIHtOVUxMfSwgMjMzMzMsICJ0Y3AifSwKK3siZWx4bWdtdCIsICAgICAgICAgICAge05VTEx9LCAyMzMzMywgInVkcCJ9LAoreyJub3Zhci1kYmFzZSIsICAgICAgICB7TlVMTH0sIDIzNDAwLCAidGNwIn0sCit7Im5vdmFyLWRiYXNlIiwgICAgICAgIHtOVUxMfSwgMjM0MDAsICJ1ZHAifSwKK3sibm92YXItYWxhcm0iLCAgICAgICAge05VTEx9LCAyMzQwMSwgInRjcCJ9LAoreyJub3Zhci1hbGFybSIsICAgICAgICB7TlVMTH0sIDIzNDAxLCAidWRwIn0sCit7Im5vdmFyLWdsb2JhbCIsICAgICAgIHtOVUxMfSwgMjM0MDIsICJ0Y3AifSwKK3sibm92YXItZ2xvYmFsIiwgICAgICAge05VTEx9LCAyMzQwMiwgInVkcCJ9LAoreyJhZXF1dXMiLCAgICAgICAgICAgICB7TlVMTH0sIDIzNDU2LCAidGNwIn0sCit7ImFlcXV1cy1hbHQiLCAgICAgICAgIHtOVUxMfSwgMjM0NTcsICJ0Y3AifSwKK3sibWVkLWx0cCIsICAgICAgICAgICAge05VTEx9LCAyNDAwMCwgInRjcCJ9LAoreyJtZWQtbHRwIiwgICAgICAgICAgICB7TlVMTH0sIDI0MDAwLCAidWRwIn0sCit7Im1lZC1mc3AtcngiLCAgICAgICAgIHtOVUxMfSwgMjQwMDEsICJ0Y3AifSwKK3sibWVkLWZzcC1yeCIsICAgICAgICAge05VTEx9LCAyNDAwMSwgInVkcCJ9LAoreyJtZWQtZnNwLXR4IiwgICAgICAgICB7TlVMTH0sIDI0MDAyLCAidGNwIn0sCit7Im1lZC1mc3AtdHgiLCAgICAgICAgIHtOVUxMfSwgMjQwMDIsICJ1ZHAifSwKK3sibWVkLXN1cHAiLCAgICAgICAgICAge05VTEx9LCAyNDAwMywgInRjcCJ9LAoreyJtZWQtc3VwcCIsICAgICAgICAgICB7TlVMTH0sIDI0MDAzLCAidWRwIn0sCit7Im1lZC1vdnciLCAgICAgICAgICAgIHtOVUxMfSwgMjQwMDQsICJ0Y3AifSwKK3sibWVkLW92dyIsICAgICAgICAgICAge05VTEx9LCAyNDAwNCwgInVkcCJ9LAoreyJtZWQtY2kiLCAgICAgICAgICAgICB7TlVMTH0sIDI0MDA1LCAidGNwIn0sCit7Im1lZC1jaSIsICAgICAgICAgICAgIHtOVUxMfSwgMjQwMDUsICJ1ZHAifSwKK3sibWVkLW5ldC1zdmMiLCAgICAgICAge05VTEx9LCAyNDAwNiwgInRjcCJ9LAoreyJtZWQtbmV0LXN2YyIsICAgICAgICB7TlVMTH0sIDI0MDA2LCAidWRwIn0sCit7ImZpbGVzcGhlcmUiLCAgICAgICAgIHtOVUxMfSwgMjQyNDIsICJ0Y3AifSwKK3siZmlsZXNwaGVyZSIsICAgICAgICAge05VTEx9LCAyNDI0MiwgInVkcCJ9LAoreyJ2aXN0YS00Z2wiLCAgICAgICAgICB7TlVMTH0sIDI0MjQ5LCAidGNwIn0sCit7InZpc3RhLTRnbCIsICAgICAgICAgIHtOVUxMfSwgMjQyNDksICJ1ZHAifSwKK3siaWxkIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNDMyMSwgInRjcCJ9LAoreyJpbGQiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDI0MzIxLCAidWRwIn0sCit7ImludGVsX3JjaSIsICAgICAgICAgIHtOVUxMfSwgMjQzODYsICJ0Y3AifSwKK3siaW50ZWxfcmNpIiwgICAgICAgICAge05VTEx9LCAyNDM4NiwgInVkcCJ9LAoreyJ0b25pZG9kcyIsICAgICAgICAgICB7TlVMTH0sIDI0NDY1LCAidGNwIn0sCit7InRvbmlkb2RzIiwgICAgICAgICAgIHtOVUxMfSwgMjQ0NjUsICJ1ZHAifSwKK3siYmlua3AiLCAgICAgICAgICAgICAge05VTEx9LCAyNDU1NCwgInRjcCJ9LAoreyJiaW5rcCIsICAgICAgICAgICAgICB7TlVMTH0sIDI0NTU0LCAidWRwIn0sCit7ImNhbmRpdHYiLCAgICAgICAgICAgIHtOVUxMfSwgMjQ2NzYsICJ0Y3AifSwKK3siY2FuZGl0diIsICAgICAgICAgICAge05VTEx9LCAyNDY3NiwgInVkcCJ9LAoreyJmbGFzaGZpbGVyIiwgICAgICAgICB7TlVMTH0sIDI0Njc3LCAidGNwIn0sCit7ImZsYXNoZmlsZXIiLCAgICAgICAgIHtOVUxMfSwgMjQ2NzcsICJ1ZHAifSwKK3sicHJvYWN0aXZhdGUiLCAgICAgICAge05VTEx9LCAyNDY3OCwgInRjcCJ9LAoreyJwcm9hY3RpdmF0ZSIsICAgICAgICB7TlVMTH0sIDI0Njc4LCAidWRwIn0sCit7InRjYy1odHRwIiwgICAgICAgICAgIHtOVUxMfSwgMjQ2ODAsICJ0Y3AifSwKK3sidGNjLWh0dHAiLCAgICAgICAgICAge05VTEx9LCAyNDY4MCwgInVkcCJ9LAoreyJjc2xnIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI0NzU0LCAidGNwIn0sCit7ImZpbmQiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjQ5MjIsICJ0Y3AifSwKK3siZmluZCIsICAgICAgICAgICAgICAge05VTEx9LCAyNDkyMiwgInVkcCJ9LAoreyJpY2wtdHdvYmFzZTEiLCAgICAgICB7TlVMTH0sIDI1MDAwLCAidGNwIn0sCit7ImljbC10d29iYXNlMSIsICAgICAgIHtOVUxMfSwgMjUwMDAsICJ1ZHAifSwKK3siaWNsLXR3b2Jhc2UyIiwgICAgICAge05VTEx9LCAyNTAwMSwgInRjcCJ9LAoreyJpY2wtdHdvYmFzZTIiLCAgICAgICB7TlVMTH0sIDI1MDAxLCAidWRwIn0sCit7ImljbC10d29iYXNlMyIsICAgICAgIHtOVUxMfSwgMjUwMDIsICJ0Y3AifSwKK3siaWNsLXR3b2Jhc2UzIiwgICAgICAge05VTEx9LCAyNTAwMiwgInVkcCJ9LAoreyJpY2wtdHdvYmFzZTQiLCAgICAgICB7TlVMTH0sIDI1MDAzLCAidGNwIn0sCit7ImljbC10d29iYXNlNCIsICAgICAgIHtOVUxMfSwgMjUwMDMsICJ1ZHAifSwKK3siaWNsLXR3b2Jhc2U1IiwgICAgICAge05VTEx9LCAyNTAwNCwgInRjcCJ9LAoreyJpY2wtdHdvYmFzZTUiLCAgICAgICB7TlVMTH0sIDI1MDA0LCAidWRwIn0sCit7ImljbC10d29iYXNlNiIsICAgICAgIHtOVUxMfSwgMjUwMDUsICJ0Y3AifSwKK3siaWNsLXR3b2Jhc2U2IiwgICAgICAge05VTEx9LCAyNTAwNSwgInVkcCJ9LAoreyJpY2wtdHdvYmFzZTciLCAgICAgICB7TlVMTH0sIDI1MDA2LCAidGNwIn0sCit7ImljbC10d29iYXNlNyIsICAgICAgIHtOVUxMfSwgMjUwMDYsICJ1ZHAifSwKK3siaWNsLXR3b2Jhc2U4IiwgICAgICAge05VTEx9LCAyNTAwNywgInRjcCJ9LAoreyJpY2wtdHdvYmFzZTgiLCAgICAgICB7TlVMTH0sIDI1MDA3LCAidWRwIn0sCit7ImljbC10d29iYXNlOSIsICAgICAgIHtOVUxMfSwgMjUwMDgsICJ0Y3AifSwKK3siaWNsLXR3b2Jhc2U5IiwgICAgICAge05VTEx9LCAyNTAwOCwgInVkcCJ9LAoreyJpY2wtdHdvYmFzZTEwIiwgICAgICB7TlVMTH0sIDI1MDA5LCAidGNwIn0sCit7ImljbC10d29iYXNlMTAiLCAgICAgIHtOVUxMfSwgMjUwMDksICJ1ZHAifSwKK3sicm5hIiwgICAgICAgICAgICAgICAge05VTEx9LCAyNTQ3MSwgInNjdHAifSwKK3sic2F1dGVyZG9uZ2xlIiwgICAgICAge05VTEx9LCAyNTU3NiwgInRjcCJ9LAoreyJ2b2NhbHRlYy1ob3MiLCAgICAgICB7TlVMTH0sIDI1NzkzLCAidGNwIn0sCit7InZvY2FsdGVjLWhvcyIsICAgICAgIHtOVUxMfSwgMjU3OTMsICJ1ZHAifSwKK3sidGFzcC1uZXQiLCAgICAgICAgICAge05VTEx9LCAyNTkwMCwgInRjcCJ9LAoreyJ0YXNwLW5ldCIsICAgICAgICAgICB7TlVMTH0sIDI1OTAwLCAidWRwIn0sCit7Im5pb2JzZXJ2ZXIiLCAgICAgICAgIHtOVUxMfSwgMjU5MDEsICJ0Y3AifSwKK3sibmlvYnNlcnZlciIsICAgICAgICAge05VTEx9LCAyNTkwMSwgInVkcCJ9LAoreyJuaWxpbmthbmFseXN0IiwgICAgICB7TlVMTH0sIDI1OTAyLCAidGNwIn0sCit7Im5pbGlua2FuYWx5c3QiLCAgICAgIHtOVUxMfSwgMjU5MDIsICJ1ZHAifSwKK3sibmlwcm9iZSIsICAgICAgICAgICAge05VTEx9LCAyNTkwMywgInRjcCJ9LAoreyJuaXByb2JlIiwgICAgICAgICAgICB7TlVMTH0sIDI1OTAzLCAidWRwIn0sCit7InF1YWtlIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjYwMDAsICJ0Y3AifSwKK3sicXVha2UiLCAgICAgICAgICAgICAge05VTEx9LCAyNjAwMCwgInVkcCJ9LAoreyJzY3NjcCIsICAgICAgICAgICAgICB7TlVMTH0sIDI2MTMzLCAidGNwIn0sCit7InNjc2NwIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjYxMzMsICJ1ZHAifSwKK3sid25uNi1kcyIsICAgICAgICAgICAge05VTEx9LCAyNjIwOCwgInRjcCJ9LAoreyJ3bm42LWRzIiwgICAgICAgICAgICB7TlVMTH0sIDI2MjA4LCAidWRwIn0sCit7ImV6cHJveHkiLCAgICAgICAgICAgIHtOVUxMfSwgMjYyNjAsICJ0Y3AifSwKK3siZXpwcm94eSIsICAgICAgICAgICAge05VTEx9LCAyNjI2MCwgInVkcCJ9LAoreyJlem1lZXRpbmciLCAgICAgICAgICB7TlVMTH0sIDI2MjYxLCAidGNwIn0sCit7ImV6bWVldGluZyIsICAgICAgICAgIHtOVUxMfSwgMjYyNjEsICJ1ZHAifSwKK3siazNzb2Z0d2FyZS1zdnIiLCAgICAge05VTEx9LCAyNjI2MiwgInRjcCJ9LAoreyJrM3NvZnR3YXJlLXN2ciIsICAgICB7TlVMTH0sIDI2MjYyLCAidWRwIn0sCit7Imszc29mdHdhcmUtY2xpIiwgICAgIHtOVUxMfSwgMjYyNjMsICJ0Y3AifSwKK3siazNzb2Z0d2FyZS1jbGkiLCAgICAge05VTEx9LCAyNjI2MywgInVkcCJ9LAoreyJleG9saW5lLXRjcCIsICAgICAgICB7TlVMTH0sIDI2NDg2LCAidGNwIn0sCit7ImV4b2xpbmUtdWRwIiwgICAgICAgIHtOVUxMfSwgMjY0ODYsICJ1ZHAifSwKK3siZXhvY29uZmlnIiwgICAgICAgICAge05VTEx9LCAyNjQ4NywgInRjcCJ9LAoreyJleG9jb25maWciLCAgICAgICAgICB7TlVMTH0sIDI2NDg3LCAidWRwIn0sCit7ImV4b25ldCIsICAgICAgICAgICAgIHtOVUxMfSwgMjY0ODksICJ0Y3AifSwKK3siZXhvbmV0IiwgICAgICAgICAgICAge05VTEx9LCAyNjQ4OSwgInVkcCJ9LAoreyJpbWFnZXB1bXAiLCAgICAgICAgICB7TlVMTH0sIDI3MzQ1LCAidGNwIn0sCit7ImltYWdlcHVtcCIsICAgICAgICAgIHtOVUxMfSwgMjczNDUsICJ1ZHAifSwKK3siamVzbXNqYyIsICAgICAgICAgICAge05VTEx9LCAyNzQ0MiwgInRjcCJ9LAoreyJqZXNtc2pjIiwgICAgICAgICAgICB7TlVMTH0sIDI3NDQyLCAidWRwIn0sCit7ImtvcGVrLWh0dHBoZWFkIiwgICAgIHtOVUxMfSwgMjc1MDQsICJ0Y3AifSwKK3sia29wZWstaHR0cGhlYWQiLCAgICAge05VTEx9LCAyNzUwNCwgInVkcCJ9LAoreyJhcnMtdmlzdGEiLCAgICAgICAgICB7TlVMTH0sIDI3NzgyLCAidGNwIn0sCit7ImFycy12aXN0YSIsICAgICAgICAgIHtOVUxMfSwgMjc3ODIsICJ1ZHAifSwKK3sidHctYXV0aC1rZXkiLCAgICAgICAge05VTEx9LCAyNzk5OSwgInRjcCJ9LAoreyJ0dy1hdXRoLWtleSIsICAgICAgICB7TlVMTH0sIDI3OTk5LCAidWRwIn0sCit7Im54bG1kIiwgICAgICAgICAgICAgIHtOVUxMfSwgMjgwMDAsICJ0Y3AifSwKK3sibnhsbWQiLCAgICAgICAgICAgICAge05VTEx9LCAyODAwMCwgInVkcCJ9LAoreyJwcXNwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI4MDAxLCAidGNwIn0sCit7InNpZW1lbnNnc20iLCAgICAgICAgIHtOVUxMfSwgMjgyNDAsICJ0Y3AifSwKK3sic2llbWVuc2dzbSIsICAgICAgICAge05VTEx9LCAyODI0MCwgInVkcCJ9LAoreyJzZ3NhcCIsICAgICAgICAgICAgICB7TlVMTH0sIDI5MTE4LCAic2N0cCJ9LAoreyJvdG1wIiwgICAgICAgICAgICAgICB7TlVMTH0sIDI5MTY3LCAidGNwIn0sCit7Im90bXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMjkxNjcsICJ1ZHAifSwKK3sic2JjYXAiLCAgICAgICAgICAgICAge05VTEx9LCAyOTE2OCwgInNjdHAifSwKK3siaXVoc2N0cGFzc29jIiwgICAgICAge05VTEx9LCAyOTE2OSwgInNjdHAifSwKK3sicGFnby1zZXJ2aWNlczEiLCAgICAge05VTEx9LCAzMDAwMSwgInRjcCJ9LAoreyJwYWdvLXNlcnZpY2VzMSIsICAgICB7TlVMTH0sIDMwMDAxLCAidWRwIn0sCit7InBhZ28tc2VydmljZXMyIiwgICAgIHtOVUxMfSwgMzAwMDIsICJ0Y3AifSwKK3sicGFnby1zZXJ2aWNlczIiLCAgICAge05VTEx9LCAzMDAwMiwgInVkcCJ9LAoreyJraW5nZG9tc29ubGluZSIsICAgICB7TlVMTH0sIDMwMjYwLCAidGNwIn0sCit7Imtpbmdkb21zb25saW5lIiwgICAgIHtOVUxMfSwgMzAyNjAsICJ1ZHAifSwKK3sib3ZvYnMiLCAgICAgICAgICAgICAge05VTEx9LCAzMDk5OSwgInRjcCJ9LAoreyJvdm9icyIsICAgICAgICAgICAgICB7TlVMTH0sIDMwOTk5LCAidWRwIn0sCit7ImF1dG90cmFjLWFjcCIsICAgICAgIHtOVUxMfSwgMzEwMjAsICJ0Y3AifSwKK3sieWF3biIsICAgICAgICAgICAgICAge05VTEx9LCAzMTAyOSwgInVkcCJ9LAoreyJ4cW9zZCIsICAgICAgICAgICAgICB7TlVMTH0sIDMxNDE2LCAidGNwIn0sCit7Inhxb3NkIiwgICAgICAgICAgICAgIHtOVUxMfSwgMzE0MTYsICJ1ZHAifSwKK3sidGV0cmluZXQiLCAgICAgICAgICAge05VTEx9LCAzMTQ1NywgInRjcCJ9LAoreyJ0ZXRyaW5ldCIsICAgICAgICAgICB7TlVMTH0sIDMxNDU3LCAidWRwIn0sCit7ImxtLW1vbiIsICAgICAgICAgICAgIHtOVUxMfSwgMzE2MjAsICJ0Y3AifSwKK3sibG0tbW9uIiwgICAgICAgICAgICAge05VTEx9LCAzMTYyMCwgInVkcCJ9LAoreyJkc3hfbW9uaXRvciIsICAgICAgICB7TlVMTH0sIDMxNjg1LCAidGNwIn0sCit7ImdhbWVzbWl0aC1wb3J0IiwgICAgIHtOVUxMfSwgMzE3NjUsICJ0Y3AifSwKK3siZ2FtZXNtaXRoLXBvcnQiLCAgICAge05VTEx9LCAzMTc2NSwgInVkcCJ9LAoreyJpY2VlZGNwX3R4IiwgICAgICAgICB7TlVMTH0sIDMxOTQ4LCAidGNwIn0sCit7ImljZWVkY3BfdHgiLCAgICAgICAgIHtOVUxMfSwgMzE5NDgsICJ1ZHAifSwKK3siaWNlZWRjcF9yeCIsICAgICAgICAge05VTEx9LCAzMTk0OSwgInRjcCJ9LAoreyJpY2VlZGNwX3J4IiwgICAgICAgICB7TlVMTH0sIDMxOTQ5LCAidWRwIn0sCit7ImlyYWNpbmdoZWxwZXIiLCAgICAgIHtOVUxMfSwgMzIwMzQsICJ0Y3AifSwKK3siaXJhY2luZ2hlbHBlciIsICAgICAge05VTEx9LCAzMjAzNCwgInVkcCJ9LAoreyJ0MWRpc3Rwcm9jNjAiLCAgICAgICB7TlVMTH0sIDMyMjQ5LCAidGNwIn0sCit7InQxZGlzdHByb2M2MCIsICAgICAgIHtOVUxMfSwgMzIyNDksICJ1ZHAifSwKK3siYXBtLWxpbmsiLCAgICAgICAgICAge05VTEx9LCAzMjQ4MywgInRjcCJ9LAoreyJhcG0tbGluayIsICAgICAgICAgICB7TlVMTH0sIDMyNDgzLCAidWRwIn0sCit7InNlYy1udGItY2xudCIsICAgICAgIHtOVUxMfSwgMzI2MzUsICJ0Y3AifSwKK3sic2VjLW50Yi1jbG50IiwgICAgICAge05VTEx9LCAzMjYzNSwgInVkcCJ9LAoreyJETUV4cHJlc3MiLCAgICAgICAgICB7TlVMTH0sIDMyNjM2LCAidGNwIn0sCit7IkRNRXhwcmVzcyIsICAgICAgICAgIHtOVUxMfSwgMzI2MzYsICJ1ZHAifSwKK3siZmlsZW5ldC1wb3dzcm0iLCAgICAge05VTEx9LCAzMjc2NywgInRjcCJ9LAoreyJmaWxlbmV0LXBvd3NybSIsICAgICB7TlVMTH0sIDMyNzY3LCAidWRwIn0sCit7ImZpbGVuZXQtdG1zIiwgICAgICAgIHtOVUxMfSwgMzI3NjgsICJ0Y3AifSwKK3siZmlsZW5ldC10bXMiLCAgICAgICAge05VTEx9LCAzMjc2OCwgInVkcCJ9LAoreyJmaWxlbmV0LXJwYyIsICAgICAgICB7TlVMTH0sIDMyNzY5LCAidGNwIn0sCit7ImZpbGVuZXQtcnBjIiwgICAgICAgIHtOVUxMfSwgMzI3NjksICJ1ZHAifSwKK3siZmlsZW5ldC1uY2giLCAgICAgICAge05VTEx9LCAzMjc3MCwgInRjcCJ9LAoreyJmaWxlbmV0LW5jaCIsICAgICAgICB7TlVMTH0sIDMyNzcwLCAidWRwIn0sCit7ImZpbGVuZXQtcm1pIiwgICAgICAgIHtOVUxMfSwgMzI3NzEsICJ0Y3AifSwKK3siZmlsZW5ldC1ybWkiLCAgICAgICAge05VTEx9LCAzMjc3MSwgInVkcCJ9LAoreyJmaWxlbmV0LXBhIiwgICAgICAgICB7TlVMTH0sIDMyNzcyLCAidGNwIn0sCit7ImZpbGVuZXQtcGEiLCAgICAgICAgIHtOVUxMfSwgMzI3NzIsICJ1ZHAifSwKK3siZmlsZW5ldC1jbSIsICAgICAgICAge05VTEx9LCAzMjc3MywgInRjcCJ9LAoreyJmaWxlbmV0LWNtIiwgICAgICAgICB7TlVMTH0sIDMyNzczLCAidWRwIn0sCit7ImZpbGVuZXQtcmUiLCAgICAgICAgIHtOVUxMfSwgMzI3NzQsICJ0Y3AifSwKK3siZmlsZW5ldC1yZSIsICAgICAgICAge05VTEx9LCAzMjc3NCwgInVkcCJ9LAoreyJmaWxlbmV0LXBjaCIsICAgICAgICB7TlVMTH0sIDMyNzc1LCAidGNwIn0sCit7ImZpbGVuZXQtcGNoIiwgICAgICAgIHtOVUxMfSwgMzI3NzUsICJ1ZHAifSwKK3siZmlsZW5ldC1wZWlvciIsICAgICAge05VTEx9LCAzMjc3NiwgInRjcCJ9LAoreyJmaWxlbmV0LXBlaW9yIiwgICAgICB7TlVMTH0sIDMyNzc2LCAidWRwIn0sCit7ImZpbGVuZXQtb2Jyb2siLCAgICAgIHtOVUxMfSwgMzI3NzcsICJ0Y3AifSwKK3siZmlsZW5ldC1vYnJvayIsICAgICAge05VTEx9LCAzMjc3NywgInVkcCJ9LAoreyJtbHNuIiwgICAgICAgICAgICAgICB7TlVMTH0sIDMyODAxLCAidGNwIn0sCit7Im1sc24iLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzI4MDEsICJ1ZHAifSwKK3sicmV0cCIsICAgICAgICAgICAgICAge05VTEx9LCAzMjgxMSwgInRjcCJ9LAoreyJpZG1ncmF0bSIsICAgICAgICAgICB7TlVMTH0sIDMyODk2LCAidGNwIn0sCit7ImlkbWdyYXRtIiwgICAgICAgICAgIHtOVUxMfSwgMzI4OTYsICJ1ZHAifSwKK3siYXVyb3JhLWJhbGFlbmEiLCAgICAge05VTEx9LCAzMzEyMywgInRjcCJ9LAoreyJhdXJvcmEtYmFsYWVuYSIsICAgICB7TlVMTH0sIDMzMTIzLCAidWRwIn0sCit7ImRpYW1vbmRwb3J0IiwgICAgICAgIHtOVUxMfSwgMzMzMzEsICJ0Y3AifSwKK3siZGlhbW9uZHBvcnQiLCAgICAgICAge05VTEx9LCAzMzMzMSwgInVkcCJ9LAoreyJkZ2ktc2VydiIsICAgICAgICAgICB7TlVMTH0sIDMzMzMzLCAidGNwIn0sCit7InRyYWNlcm91dGUiLCAgICAgICAgIHtOVUxMfSwgMzM0MzQsICJ0Y3AifSwKK3sidHJhY2Vyb3V0ZSIsICAgICAgICAge05VTEx9LCAzMzQzNCwgInVkcCJ9LAoreyJzbmlwLXNsYXZlIiwgICAgICAgICB7TlVMTH0sIDMzNjU2LCAidGNwIn0sCit7InNuaXAtc2xhdmUiLCAgICAgICAgIHtOVUxMfSwgMzM2NTYsICJ1ZHAifSwKK3sidHVyYm9ub3RlLTIiLCAgICAgICAge05VTEx9LCAzNDI0OSwgInRjcCJ9LAoreyJ0dXJib25vdGUtMiIsICAgICAgICB7TlVMTH0sIDM0MjQ5LCAidWRwIn0sCit7InAtbmV0LWxvY2FsIiwgICAgICAgIHtOVUxMfSwgMzQzNzgsICJ0Y3AifSwKK3sicC1uZXQtbG9jYWwiLCAgICAgICAge05VTEx9LCAzNDM3OCwgInVkcCJ9LAoreyJwLW5ldC1yZW1vdGUiLCAgICAgICB7TlVMTH0sIDM0Mzc5LCAidGNwIn0sCit7InAtbmV0LXJlbW90ZSIsICAgICAgIHtOVUxMfSwgMzQzNzksICJ1ZHAifSwKK3siZGhhbmFsYWtzaG1pIiwgICAgICAge05VTEx9LCAzNDU2NywgInRjcCJ9LAoreyJwcm9maW5ldC1ydCIsICAgICAgICB7TlVMTH0sIDM0OTYyLCAidGNwIn0sCit7InByb2ZpbmV0LXJ0IiwgICAgICAgIHtOVUxMfSwgMzQ5NjIsICJ1ZHAifSwKK3sicHJvZmluZXQtcnRtIiwgICAgICAge05VTEx9LCAzNDk2MywgInRjcCJ9LAoreyJwcm9maW5ldC1ydG0iLCAgICAgICB7TlVMTH0sIDM0OTYzLCAidWRwIn0sCit7InByb2ZpbmV0LWNtIiwgICAgICAgIHtOVUxMfSwgMzQ5NjQsICJ0Y3AifSwKK3sicHJvZmluZXQtY20iLCAgICAgICAge05VTEx9LCAzNDk2NCwgInVkcCJ9LAoreyJldGhlcmNhdCIsICAgICAgICAgICB7TlVMTH0sIDM0OTgwLCAidGNwIn0sCit7ImV0aGVyY2F0IiwgICAgICAgICAgIHtOVUxMfSwgMzQ5ODAsICJ1ZHAifSwKK3siYWxscGVlcnMiLCAgICAgICAgICAge05VTEx9LCAzNjAwMSwgInRjcCJ9LAoreyJhbGxwZWVycyIsICAgICAgICAgICB7TlVMTH0sIDM2MDAxLCAidWRwIn0sCit7InMxLWNvbnRyb2wiLCAgICAgICAgIHtOVUxMfSwgMzY0MTIsICJzY3RwIn0sCit7IngyLWNvbnRyb2wiLCAgICAgICAgIHtOVUxMfSwgMzY0MjIsICJzY3RwIn0sCit7Im0yYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzY0NDMsICJzY3RwIn0sCit7Im0zYXAiLCAgICAgICAgICAgICAgIHtOVUxMfSwgMzY0NDQsICJzY3RwIn0sCit7Imthc3RlbnhwaXBlIiwgICAgICAgIHtOVUxMfSwgMzY4NjUsICJ0Y3AifSwKK3sia2FzdGVueHBpcGUiLCAgICAgICAge05VTEx9LCAzNjg2NSwgInVkcCJ9LAoreyJuZWNrYXIiLCAgICAgICAgICAgICB7TlVMTH0sIDM3NDc1LCAidGNwIn0sCit7Im5lY2thciIsICAgICAgICAgICAgIHtOVUxMfSwgMzc0NzUsICJ1ZHAifSwKK3sidW5pc3lzLWVwb3J0YWwiLCAgICAge05VTEx9LCAzNzY1NCwgInRjcCJ9LAoreyJ1bmlzeXMtZXBvcnRhbCIsICAgICB7TlVMTH0sIDM3NjU0LCAidWRwIn0sCit7ImdhbGF4eTctZGF0YSIsICAgICAgIHtOVUxMfSwgMzgyMDEsICJ0Y3AifSwKK3siZ2FsYXh5Ny1kYXRhIiwgICAgICAge05VTEx9LCAzODIwMSwgInVkcCJ9LAoreyJmYWlydmlldyIsICAgICAgICAgICB7TlVMTH0sIDM4MjAyLCAidGNwIn0sCit7ImZhaXJ2aWV3IiwgICAgICAgICAgIHtOVUxMfSwgMzgyMDIsICJ1ZHAifSwKK3siYWdwb2xpY3kiLCAgICAgICAgICAge05VTEx9LCAzODIwMywgInRjcCJ9LAoreyJhZ3BvbGljeSIsICAgICAgICAgICB7TlVMTH0sIDM4MjAzLCAidWRwIn0sCit7InR1cmJvbm90ZS0xIiwgICAgICAgIHtOVUxMfSwgMzk2ODEsICJ0Y3AifSwKK3sidHVyYm9ub3RlLTEiLCAgICAgICAge05VTEx9LCAzOTY4MSwgInVkcCJ9LAoreyJzYWZldHluZXRwIiwgICAgICAgICB7TlVMTH0sIDQwMDAwLCAidGNwIn0sCit7InNhZmV0eW5ldHAiLCAgICAgICAgIHtOVUxMfSwgNDAwMDAsICJ1ZHAifSwKK3siY3NjcCIsICAgICAgICAgICAgICAge05VTEx9LCA0MDg0MSwgInRjcCJ9LAoreyJjc2NwIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQwODQxLCAidWRwIn0sCit7ImNzY2NyZWRpciIsICAgICAgICAgIHtOVUxMfSwgNDA4NDIsICJ0Y3AifSwKK3siY3NjY3JlZGlyIiwgICAgICAgICAge05VTEx9LCA0MDg0MiwgInVkcCJ9LAoreyJjc2NjZmlyZXdhbGwiLCAgICAgICB7TlVMTH0sIDQwODQzLCAidGNwIn0sCit7ImNzY2NmaXJld2FsbCIsICAgICAgIHtOVUxMfSwgNDA4NDMsICJ1ZHAifSwKK3sib3J0ZWMtZGlzYyIsICAgICAgICAge05VTEx9LCA0MDg1MywgInVkcCJ9LAoreyJmcy1xb3MiLCAgICAgICAgICAgICB7TlVMTH0sIDQxMTExLCAidGNwIn0sCit7ImZzLXFvcyIsICAgICAgICAgICAgIHtOVUxMfSwgNDExMTEsICJ1ZHAifSwKK3sidGVudGFjbGUiLCAgICAgICAgICAge05VTEx9LCA0MTEyMSwgInRjcCJ9LAoreyJjcmVzdHJvbi1jaXAiLCAgICAgICB7TlVMTH0sIDQxNzk0LCAidGNwIn0sCit7ImNyZXN0cm9uLWNpcCIsICAgICAgIHtOVUxMfSwgNDE3OTQsICJ1ZHAifSwKK3siY3Jlc3Ryb24tY3RwIiwgICAgICAge05VTEx9LCA0MTc5NSwgInRjcCJ9LAoreyJjcmVzdHJvbi1jdHAiLCAgICAgICB7TlVMTH0sIDQxNzk1LCAidWRwIn0sCit7ImNhbmRwIiwgICAgICAgICAgICAgIHtOVUxMfSwgNDI1MDgsICJ0Y3AifSwKK3siY2FuZHAiLCAgICAgICAgICAgICAge05VTEx9LCA0MjUwOCwgInVkcCJ9LAoreyJjYW5kcnAiLCAgICAgICAgICAgICB7TlVMTH0sIDQyNTA5LCAidGNwIn0sCit7ImNhbmRycCIsICAgICAgICAgICAgIHtOVUxMfSwgNDI1MDksICJ1ZHAifSwKK3siY2FlcnBjIiwgICAgICAgICAgICAge05VTEx9LCA0MjUxMCwgInRjcCJ9LAoreyJjYWVycGMiLCAgICAgICAgICAgICB7TlVMTH0sIDQyNTEwLCAidWRwIn0sCit7InJlYWNob3V0IiwgICAgICAgICAgIHtOVUxMfSwgNDMxODgsICJ0Y3AifSwKK3sicmVhY2hvdXQiLCAgICAgICAgICAge05VTEx9LCA0MzE4OCwgInVkcCJ9LAoreyJuZG0tYWdlbnQtcG9ydCIsICAgICB7TlVMTH0sIDQzMTg5LCAidGNwIn0sCit7Im5kbS1hZ2VudC1wb3J0IiwgICAgIHtOVUxMfSwgNDMxODksICJ1ZHAifSwKK3siaXAtcHJvdmlzaW9uIiwgICAgICAge05VTEx9LCA0MzE5MCwgInRjcCJ9LAoreyJpcC1wcm92aXNpb24iLCAgICAgICB7TlVMTH0sIDQzMTkwLCAidWRwIn0sCit7Im5vaXQtdHJhbnNwb3J0IiwgICAgIHtOVUxMfSwgNDMxOTEsICJ0Y3AifSwKK3siZXctbWdtdCIsICAgICAgICAgICAge05VTEx9LCA0MzQ0MCwgInRjcCJ9LAoreyJldy1kaXNjLWNtZCIsICAgICAgICB7TlVMTH0sIDQzNDQwLCAidWRwIn0sCit7ImNpc2NvY3NkYiIsICAgICAgICAgIHtOVUxMfSwgNDM0NDEsICJ0Y3AifSwKK3siY2lzY29jc2RiIiwgICAgICAgICAge05VTEx9LCA0MzQ0MSwgInVkcCJ9LAoreyJwbWNkIiwgICAgICAgICAgICAgICB7TlVMTH0sIDQ0MzIxLCAidGNwIn0sCit7InBtY2QiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDQzMjEsICJ1ZHAifSwKK3sicG1jZHByb3h5IiwgICAgICAgICAge05VTEx9LCA0NDMyMiwgInRjcCJ9LAoreyJwbWNkcHJveHkiLCAgICAgICAgICB7TlVMTH0sIDQ0MzIyLCAidWRwIn0sCit7InBjcCIsICAgICAgICAgICAgICAgIHtOVUxMfSwgNDQzMjMsICJ1ZHAifSwKK3sicmJyLWRlYnVnIiwgICAgICAgICAge05VTEx9LCA0NDU1MywgInRjcCJ9LAoreyJyYnItZGVidWciLCAgICAgICAgICB7TlVMTH0sIDQ0NTUzLCAidWRwIn0sCit7IkV0aGVyTmV0L0lQLTIiLCAgICAgIHtOVUxMfSwgNDQ4MTgsICJ0Y3AifSwKK3siRXRoZXJOZXQvSVAtMiIsICAgICAge05VTEx9LCA0NDgxOCwgInVkcCJ9LAoreyJpbnZpc2lvbi1hZyIsICAgICAgICB7TlVMTH0sIDQ1MDU0LCAidGNwIn0sCit7ImludmlzaW9uLWFnIiwgICAgICAgIHtOVUxMfSwgNDUwNTQsICJ1ZHAifSwKK3siZWJhIiwgICAgICAgICAgICAgICAge05VTEx9LCA0NTY3OCwgInRjcCJ9LAoreyJlYmEiLCAgICAgICAgICAgICAgICB7TlVMTH0sIDQ1Njc4LCAidWRwIn0sCit7InFkYjJzZXJ2aWNlIiwgICAgICAgIHtOVUxMfSwgNDU4MjUsICJ0Y3AifSwKK3sicWRiMnNlcnZpY2UiLCAgICAgICAge05VTEx9LCA0NTgyNSwgInVkcCJ9LAoreyJzc3Itc2VydmVybWdyIiwgICAgICB7TlVMTH0sIDQ1OTY2LCAidGNwIn0sCit7InNzci1zZXJ2ZXJtZ3IiLCAgICAgIHtOVUxMfSwgNDU5NjYsICJ1ZHAifSwKK3sibWVkaWFib3giLCAgICAgICAgICAge05VTEx9LCA0Njk5OSwgInRjcCJ9LAoreyJtZWRpYWJveCIsICAgICAgICAgICB7TlVMTH0sIDQ2OTk5LCAidWRwIn0sCit7Im1idXMiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDcwMDAsICJ0Y3AifSwKK3sibWJ1cyIsICAgICAgICAgICAgICAge05VTEx9LCA0NzAwMCwgInVkcCJ9LAoreyJ3aW5ybSIsICAgICAgICAgICAgICB7TlVMTH0sIDQ3MDAxLCAidGNwIn0sCit7ImRiYnJvd3NlIiwgICAgICAgICAgIHtOVUxMfSwgNDc1NTcsICJ0Y3AifSwKK3siZGJicm93c2UiLCAgICAgICAgICAge05VTEx9LCA0NzU1NywgInVkcCJ9LAoreyJkaXJlY3RwbGF5c3J2ciIsICAgICB7TlVMTH0sIDQ3NjI0LCAidGNwIn0sCit7ImRpcmVjdHBsYXlzcnZyIiwgICAgIHtOVUxMfSwgNDc2MjQsICJ1ZHAifSwKK3siYXAiLCAgICAgICAgICAgICAgICAge05VTEx9LCA0NzgwNiwgInRjcCJ9LAoreyJhcCIsICAgICAgICAgICAgICAgICB7TlVMTH0sIDQ3ODA2LCAidWRwIn0sCit7ImJhY25ldCIsICAgICAgICAgICAgIHtOVUxMfSwgNDc4MDgsICJ0Y3AifSwKK3siYmFjbmV0IiwgICAgICAgICAgICAge05VTEx9LCA0NzgwOCwgInVkcCJ9LAoreyJuaW1jb250cm9sbGVyIiwgICAgICB7TlVMTH0sIDQ4MDAwLCAidGNwIn0sCit7Im5pbWNvbnRyb2xsZXIiLCAgICAgIHtOVUxMfSwgNDgwMDAsICJ1ZHAifSwKK3sibmltc3Bvb2xlciIsICAgICAgICAge05VTEx9LCA0ODAwMSwgInRjcCJ9LAoreyJuaW1zcG9vbGVyIiwgICAgICAgICB7TlVMTH0sIDQ4MDAxLCAidWRwIn0sCit7Im5pbWh1YiIsICAgICAgICAgICAgIHtOVUxMfSwgNDgwMDIsICJ0Y3AifSwKK3sibmltaHViIiwgICAgICAgICAgICAge05VTEx9LCA0ODAwMiwgInVkcCJ9LAoreyJuaW1ndHciLCAgICAgICAgICAgICB7TlVMTH0sIDQ4MDAzLCAidGNwIn0sCit7Im5pbWd0dyIsICAgICAgICAgICAgIHtOVUxMfSwgNDgwMDMsICJ1ZHAifSwKK3sibmltYnVzZGIiLCAgICAgICAgICAge05VTEx9LCA0ODAwNCwgInRjcCJ9LAoreyJuaW1idXNkYmN0cmwiLCAgICAgICB7TlVMTH0sIDQ4MDA1LCAidGNwIn0sCit7IjNncHAtY2JzcCIsICAgICAgICAgIHtOVUxMfSwgNDgwNDksICJ0Y3AifSwKK3siaXNuZXRzZXJ2IiwgICAgICAgICAge05VTEx9LCA0ODEyOCwgInRjcCJ9LAoreyJpc25ldHNlcnYiLCAgICAgICAgICB7TlVMTH0sIDQ4MTI4LCAidWRwIn0sCit7ImJscDUiLCAgICAgICAgICAgICAgIHtOVUxMfSwgNDgxMjksICJ0Y3AifSwKK3siYmxwNSIsICAgICAgICAgICAgICAge05VTEx9LCA0ODEyOSwgInVkcCJ9LAoreyJjb20tYmFyZGFjLWR3IiwgICAgICB7TlVMTH0sIDQ4NTU2LCAidGNwIn0sCit7ImNvbS1iYXJkYWMtZHciLCAgICAgIHtOVUxMfSwgNDg1NTYsICJ1ZHAifSwKK3siaXFvYmplY3QiLCAgICAgICAgICAge05VTEx9LCA0ODYxOSwgInRjcCJ9LAoreyJpcW9iamVjdCIsICAgICAgICAgICB7TlVMTH0sIDQ4NjE5LCAidWRwIn0sCisjZW5kaWYgLyogVVNFX0lBTkFfUkVHSVNURVJFRF9QT1JUUyAqLworeyBOVUxMLCAgICAgICAgICAgICAgICB7TlVMTH0sIDAsIE5VTEwgfQorfTsKKworc3RydWN0IHNlcnZlbnQgKmdldHNlcnZieXBvcnQoaW50IHBvcnQsIGNvbnN0IGNoYXIgKnByb3RvKQoreworICB1bnNpZ25lZCBzaG9ydCB1X3BvcnQ7CisgIGNvbnN0IGNoYXIgKnByb3RvY29sID0gTlVMTDsKKyAgaW50IGksIGVycm9yID0gMDsKKworICB1X3BvcnQgPSBudG9ocygodW5zaWduZWQgc2hvcnQpcG9ydCk7CisKKyAgaWYgKHByb3RvKQorICAgIHsKKyAgICAgIHN3aXRjaCAoc3RybGVuKHByb3RvKSkgeworICAgICAgY2FzZSAzOgorICAgICAgICBpZiAoIXN0cm5jYXNlY21wKHByb3RvLCAidGNwIiwgMykpCisgICAgICAgICAgcHJvdG9jb2wgPSAidGNwIjsKKyAgICAgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKHByb3RvLCAidWRwIiwgMykpCisgICAgICAgICAgcHJvdG9jb2wgPSAidWRwIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVycm9yID0gV1NBRUZBVUxUOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChwcm90bywgInNjdHAiLCA0KSkKKyAgICAgICAgICBwcm90b2NvbCA9ICJzY3RwIjsKKyAgICAgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKHByb3RvLCAiZGNjcCIsIDQpKQorICAgICAgICAgIHByb3RvY29sID0gImRjY3AiOworICAgICAgICBlbHNlCisgICAgICAgICAgZXJyb3IgPSBXU0FFRkFVTFQ7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IgPSBXU0FFRkFVTFQ7CisgICAgICB9CisgICAgfQorCisgIGlmICghZXJyb3IpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IChzaXplb2YoSUFOQXBvcnRzKSAvIHNpemVvZihJQU5BcG9ydHNbMF0pKSAtIDE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlmICh1X3BvcnQgPT0gSUFOQXBvcnRzW2ldLnNfcG9ydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCFwcm90b2NvbCB8fCAhc3RyY2FzZWNtcChwcm90b2NvbCwgSUFOQXBvcnRzW2ldLnNfcHJvdG8pKQorICAgICAgICAgICAgICAgIHJldHVybiAoc3RydWN0IHNlcnZlbnQgKikmSUFOQXBvcnRzW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlcnJvciA9IFdTQU5PX0RBVEE7CisgICAgfQorCisgIFNFVF9TT0NLRVJSTk8oZXJyb3IpOworICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIF9XSU4zMl9XQ0UgKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGxhdGZvcm0uaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjg4NWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgSEVBREVSX0NBUkVTX1BMQVRGT1JNX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX1BMQVRGT1JNX0gKKworCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMTEgYnkgRGFuaWVsIFN0ZW5iZXJnIGV0IGFsCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKE1TRE9TKQorCit0eXBlZGVmIGVudW0geworICBXSU5fVU5LTk9XTiwKKyAgV0lOXzNYLAorICBXSU5fOVgsCisgIFdJTl9OVCwKKyAgV0lOX0NFCit9IHdpbl9wbGF0Zm9ybTsKKword2luX3BsYXRmb3JtIGFyZXNfX2dldHBsYXRmb3JtKHZvaWQpOworCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKKworc3RydWN0IHNlcnZlbnQgKmdldHNlcnZieXBvcnQoaW50IHBvcnQsIGNvbnN0IGNoYXIgKnByb3RvKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ0FSRVNfUExBVEZPUk1fSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wcml2YXRlLmggYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2EyM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSwzNjMgQEAKKyNpZm5kZWYgX19BUkVTX1BSSVZBVEVfSAorI2RlZmluZSBfX0FSRVNfUFJJVkFURV9ICisKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBieSBEYW5pZWwgU3RlbmJlcmcKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKgorICogRGVmaW5lIFdJTjMyIHdoZW4gYnVpbGQgdGFyZ2V0IGlzIFdpbjMyIEFQSQorICovCisKKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4zMl9fKSkgJiYgIWRlZmluZWQoV0lOMzIpCisjZGVmaW5lIFdJTjMyCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpZmRlZiBXQVRUMzIKKyNpbmNsdWRlIDx0Y3AuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNkZWZpbmUgd3JpdGV2KHMsdixjKSAgICAgd3JpdGV2X3Mocyx2LGMpCisjZGVmaW5lIEhBVkVfV1JJVEVWIDEKKyNlbmRpZgorCisjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgIDUwMDAgLyogbWlsbGlzZWNvbmRzICovCisjZGVmaW5lIERFRkFVTFRfVFJJRVMgICAgICAgICAgIDQKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUgMHhmZmZmZmZmZgorI2VuZGlmCisKKyNpZmRlZiBDQVJFU19FWFBPU0VfU1RBVElDUworLyogTWFrZSBzb21lIGludGVybmFsIGZ1bmN0aW9ucyB2aXNpYmxlIGZvciB0ZXN0aW5nICovCisjZGVmaW5lIFNUQVRJQ19URVNUQUJMRQorI2Vsc2UKKyNkZWZpbmUgU1RBVElDX1RFU1RBQkxFIHN0YXRpYworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChXQVRUMzIpCisKKyNkZWZpbmUgV0lOX05TXzlYICAgICAgIlN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXFNlcnZpY2VzXFxWeERcXE1TVENQIgorI2RlZmluZSBXSU5fTlNfTlRfS0VZICAiU3lzdGVtXFxDdXJyZW50Q29udHJvbFNldFxcU2VydmljZXNcXFRjcGlwXFxQYXJhbWV0ZXJzIgorI2RlZmluZSBOQU1FU0VSVkVSICAgICAiTmFtZVNlcnZlciIKKyNkZWZpbmUgREhDUE5BTUVTRVJWRVIgIkRoY3BOYW1lU2VydmVyIgorI2RlZmluZSBEQVRBQkFTRVBBVEggICAiRGF0YWJhc2VQYXRoIgorI2RlZmluZSBXSU5fUEFUSF9IT1NUUyAgIlxcaG9zdHMiCisKKyNlbGlmIGRlZmluZWQoV0FUVDMyKQorCisjZGVmaW5lIFBBVEhfUkVTT0xWX0NPTkYgIi9kZXYvRU5WL2V0Yy9yZXNvbHYuY29uZiIKKworI2VsaWYgZGVmaW5lZChORVRXQVJFKQorCisjZGVmaW5lIFBBVEhfUkVTT0xWX0NPTkYgInN5czovZXRjL3Jlc29sdi5jZmciCisjZGVmaW5lIFBBVEhfSE9TVFMgICAgICAgICAgICAgICJzeXM6L2V0Yy9ob3N0cyIKKworI2VsaWYgZGVmaW5lZChfX3Jpc2Nvc19fKQorCisjZGVmaW5lIFBBVEhfSE9TVFMgICAgICAgICAgICAgIkluZXREQmFzZTpIb3N0cyIKKworI2Vsc2UKKworI2RlZmluZSBQQVRIX1JFU09MVl9DT05GICAgICAgICAiL2V0Yy9yZXNvbHYuY29uZiIKKyNpZmRlZiBFVENfSU5FVAorI2RlZmluZSBQQVRIX0hPU1RTICAgICAgICAgICAgICAiL2V0Yy9pbmV0L2hvc3RzIgorI2Vsc2UKKyNkZWZpbmUgUEFUSF9IT1NUUyAgICAgICAgICAgICAgIi9ldGMvaG9zdHMiCisjZW5kaWYKKworI2VuZGlmCisKKyNkZWZpbmUgQVJFU19JRF9LRVlfTEVOIDMxCisKKyNpbmNsdWRlICJhcmVzX2lwdjYuaCIKKyNpbmNsdWRlICJhcmVzX2xsaXN0LmgiCisKKyNpZm5kZWYgSEFWRV9HRVRFTlYKKyMgIGluY2x1ZGUgImFyZXNfZ2V0ZW52LmgiCisjICBkZWZpbmUgZ2V0ZW52KHB0cikgYXJlc19nZXRlbnYocHRyKQorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzX3N0cmR1cC5oIgorCisjaWZuZGVmIEhBVkVfU1RSQ0FTRUNNUAorIyAgaW5jbHVkZSAiYXJlc19zdHJjYXNlY21wLmgiCisjICBkZWZpbmUgc3RyY2FzZWNtcChwMSxwMikgYXJlc19zdHJjYXNlY21wKHAxLHAyKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TVFJOQ0FTRUNNUAorIyAgaW5jbHVkZSAiYXJlc19zdHJjYXNlY21wLmgiCisjICBkZWZpbmUgc3RybmNhc2VjbXAocDEscDIsbikgYXJlc19zdHJuY2FzZWNtcChwMSxwMixuKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9XUklURVYKKyMgIGluY2x1ZGUgImFyZXNfd3JpdGV2LmgiCisjICBkZWZpbmUgd3JpdGV2KHMscHRyLGNudCkgYXJlc193cml0ZXYocyxwdHIsY250KQorI2VuZGlmCisKKy8qKioqKioqKiogRUROUyBkZWZpbmVzIHNlY3Rpb24gKioqKioqLworI2RlZmluZSBFRE5TUEFDS0VUU1ogICAxMjgwICAvKiBSZWFzb25hYmxlIFVEUCBwYXlsb2FkIHNpemUsIGFzIHN1Z2dlc3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBSRkMyNjcxICovCisjZGVmaW5lIE1BWEVORFNTWiAgICAgIDQwOTYgIC8qIE1heGltdW0gKGxvY2FsKSBsaW1pdCBmb3IgZWRucyBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBFRE5TRklYRURTWiAgICAxMSAgICAvKiBTaXplIG9mIEVETlMgaGVhZGVyICovCisvKioqKioqKioqIEVETlMgZGVmaW5lcyBzZWN0aW9uICoqKioqKi8KKworc3RydWN0IGFyZXNfYWRkciB7CisgIGludCBmYW1pbHk7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgaW5fYWRkciAgICAgICBhZGRyNDsKKyAgICBzdHJ1Y3QgYXJlc19pbjZfYWRkciBhZGRyNjsKKyAgfSBhZGRyOworICBpbnQgdWRwX3BvcnQ7ICAvKiBzdG9yZWQgaW4gbmV0d29yayBvcmRlciAqLworICBpbnQgdGNwX3BvcnQ7ICAvKiBzdG9yZWQgaW4gbmV0d29yayBvcmRlciAqLworfTsKKyNkZWZpbmUgYWRkclY0IGFkZHIuYWRkcjQKKyNkZWZpbmUgYWRkclY2IGFkZHIuYWRkcjYKKworc3RydWN0IHF1ZXJ5OworCitzdHJ1Y3Qgc2VuZF9yZXF1ZXN0IHsKKyAgLyogUmVtYWluaW5nIGRhdGEgdG8gc2VuZCAqLworICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOworICBzaXplX3QgbGVuOworCisgIC8qIFRoZSBxdWVyeSBmb3Igd2hpY2ggd2UncmUgc2VuZGluZyB0aGlzIGRhdGEgKi8KKyAgc3RydWN0IHF1ZXJ5KiBvd25lcl9xdWVyeTsKKyAgLyogVGhlIGJ1ZmZlciB3ZSdyZSB1c2luZywgaWYgd2UgaGF2ZSBvdXIgb3duIGNvcHkgb2YgdGhlIHBhY2tldCAqLworICB1bnNpZ25lZCBjaGFyICpkYXRhX3N0b3JhZ2U7CisKKyAgLyogTmV4dCByZXF1ZXN0IGluIHF1ZXVlICovCisgIHN0cnVjdCBzZW5kX3JlcXVlc3QgKm5leHQ7Cit9OworCitzdHJ1Y3Qgc2VydmVyX3N0YXRlIHsKKyAgc3RydWN0IGFyZXNfYWRkciBhZGRyOworICBhcmVzX3NvY2tldF90IHVkcF9zb2NrZXQ7CisgIGFyZXNfc29ja2V0X3QgdGNwX3NvY2tldDsKKworICAvKiBNaW5pLWJ1ZmZlciBmb3IgcmVhZGluZyB0aGUgbGVuZ3RoIHdvcmQgKi8KKyAgdW5zaWduZWQgY2hhciB0Y3BfbGVuYnVmWzJdOworICBpbnQgdGNwX2xlbmJ1Zl9wb3M7CisgIGludCB0Y3BfbGVuZ3RoOworCisgIC8qIEJ1ZmZlciBmb3IgcmVhZGluZyBhY3R1YWwgVENQIGRhdGEgKi8KKyAgdW5zaWduZWQgY2hhciAqdGNwX2J1ZmZlcjsKKyAgaW50IHRjcF9idWZmZXJfcG9zOworCisgIC8qIFRDUCBvdXRwdXQgcXVldWUgKi8KKyAgc3RydWN0IHNlbmRfcmVxdWVzdCAqcWhlYWQ7CisgIHN0cnVjdCBzZW5kX3JlcXVlc3QgKnF0YWlsOworCisgIC8qIFdoaWNoIGluY2FybmF0aW9uIG9mIHRoaXMgY29ubmVjdGlvbiBpcyB0aGlzPyBXZSBkb24ndCB3YW50IHRvCisgICAqIHJldHJhbnNtaXQgcmVxdWVzdHMgaW50byB0aGUgdmVyeSBzYW1lIHNvY2tldCwgYnV0IGlmIHRoZSBzZXJ2ZXIKKyAgICogY2xvc2VzIG9uIHVzIGFuZCB3ZSByZS1vcGVuIHRoZSBjb25uZWN0aW9uLCB0aGVuIHdlIGRvIHdhbnQgdG8KKyAgICogcmUtc2VuZC4gKi8KKyAgaW50IHRjcF9jb25uZWN0aW9uX2dlbmVyYXRpb247CisKKyAgLyogQ2lyY3VsYXIsIGRvdWJseS1saW5rZWQgbGlzdCBvZiBvdXRzdGFuZGluZyBxdWVyaWVzIHRvIHRoaXMgc2VydmVyICovCisgIHN0cnVjdCBsaXN0X25vZGUgcXVlcmllc190b19zZXJ2ZXI7CisKKyAgLyogTGluayBiYWNrIHRvIG93bmluZyBjaGFubmVsICovCisgIGFyZXNfY2hhbm5lbCBjaGFubmVsOworCisgIC8qIElzIHRoaXMgc2VydmVyIGJyb2tlbj8gV2UgbWFyayBjb25uZWN0aW9ucyBhcyBicm9rZW4gd2hlbiBhCisgICAqIHJlcXVlc3QgdGhhdCBpcyBxdWV1ZWQgZm9yIHNlbmRpbmcgdGltZXMgb3V0LgorICAgKi8KKyAgaW50IGlzX2Jyb2tlbjsKK307CisKKy8qIFN0YXRlIHRvIHJlcHJlc2VudCBhIEROUyBxdWVyeSAqLworc3RydWN0IHF1ZXJ5IHsKKyAgLyogUXVlcnkgSUQgZnJvbSBxYnVmLCBmb3IgZmFzdGVyIGxvb2t1cCwgYW5kIGN1cnJlbnQgdGltZW91dCAqLworICB1bnNpZ25lZCBzaG9ydCBxaWQ7CisgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisKKyAgLyoKKyAgICogTGlua3MgZm9yIHRoZSBkb3VibHktbGlua2VkIGxpc3RzIGluIHdoaWNoIHdlIGluc2VydCBhIHF1ZXJ5LgorICAgKiBUaGVzZSBjaXJjdWxhciwgZG91Ymx5LWxpbmtlZCBsaXN0cyB0aGF0IGFyZSBoYXNoLWJ1Y2tldGVkIGJhc2VkCisgICAqIHRoZSBhdHRyaWJ1dGVzIHdlIGNhcmUgYWJvdXQsIGhlbHAgbWFraW5nIG1vc3QgaW1wb3J0YW50CisgICAqIG9wZXJhdGlvbnMgTygxKS4KKyAgICovCisgIHN0cnVjdCBsaXN0X25vZGUgcXVlcmllc19ieV9xaWQ7ICAgIC8qIGhvcGVmdWxseSBpbiBzYW1lIGNhY2hlIGxpbmUgYXMgcWlkICovCisgIHN0cnVjdCBsaXN0X25vZGUgcXVlcmllc19ieV90aW1lb3V0OworICBzdHJ1Y3QgbGlzdF9ub2RlIHF1ZXJpZXNfdG9fc2VydmVyOworICBzdHJ1Y3QgbGlzdF9ub2RlIGFsbF9xdWVyaWVzOworCisgIC8qIFF1ZXJ5IGJ1ZiB3aXRoIGxlbmd0aCBhdCBiZWdpbm5pbmcsIGZvciBUQ1AgdHJhbnNtaXNzaW9uICovCisgIHVuc2lnbmVkIGNoYXIgKnRjcGJ1ZjsKKyAgaW50IHRjcGxlbjsKKworICAvKiBBcmd1bWVudHMgcGFzc2VkIHRvIGFyZXNfc2VuZCgpIChxYnVmIHBvaW50cyBpbnRvIHRjcGJ1ZikgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcWJ1ZjsKKyAgaW50IHFsZW47CisgIGFyZXNfY2FsbGJhY2sgY2FsbGJhY2s7CisgIHZvaWQgKmFyZzsKKworICAvKiBRdWVyeSBzdGF0dXMgKi8KKyAgaW50IHRyeV9jb3VudDsgLyogTnVtYmVyIG9mIHRpbWVzIHdlIHRyaWVkIHRoaXMgcXVlcnkgYWxyZWFkeS4gKi8KKyAgaW50IHNlcnZlcjsgLyogU2VydmVyIHRoaXMgcXVlcnkgaGFzIGxhc3QgYmVlbiBzZW50IHRvLiAqLworICBzdHJ1Y3QgcXVlcnlfc2VydmVyX2luZm8gKnNlcnZlcl9pbmZvOyAgIC8qIHBlci1zZXJ2ZXIgc3RhdGUgKi8KKyAgaW50IHVzaW5nX3RjcDsKKyAgaW50IGVycm9yX3N0YXR1czsKKyAgaW50IHRpbWVvdXRzOyAvKiBudW1iZXIgb2YgdGltZW91dHMgd2Ugc2F3IGZvciB0aGlzIHJlcXVlc3QgKi8KK307CisKKy8qIFBlci1zZXJ2ZXIgc3RhdGUgZm9yIGEgcXVlcnkgKi8KK3N0cnVjdCBxdWVyeV9zZXJ2ZXJfaW5mbyB7CisgIGludCBza2lwX3NlcnZlcjsgIC8qIHNob3VsZCB3ZSBza2lwIHNlcnZlciwgZHVlIHRvIGVycm9ycywgZXRjPyAqLworICBpbnQgdGNwX2Nvbm5lY3Rpb25fZ2VuZXJhdGlvbjsgIC8qIGludG8gd2hpY2ggVENQIGNvbm5lY3Rpb24gZGlkIHdlIHNlbmQ/ICovCit9OworCisvKiBBbiBJUCBhZGRyZXNzIHBhdHRlcm47IG1hdGNoZXMgYW4gSVAgYWRkcmVzcyBYIGlmIFggJiBtYXNrID09IGFkZHIgKi8KKyNkZWZpbmUgUEFUVEVSTl9NQVNLIDB4MQorI2RlZmluZSBQQVRURVJOX0NJRFIgMHgyCisKK3N0cnVjdCBhcGF0dGVybiB7CisgIHVuaW9uCisgIHsKKyAgICBzdHJ1Y3QgaW5fYWRkciAgICAgICBhZGRyNDsKKyAgICBzdHJ1Y3QgYXJlc19pbjZfYWRkciBhZGRyNjsKKyAgfSBhZGRyOworICB1bmlvbgorICB7CisgICAgc3RydWN0IGluX2FkZHIgICAgICAgYWRkcjQ7CisgICAgc3RydWN0IGFyZXNfaW42X2FkZHIgYWRkcjY7CisgICAgdW5zaWduZWQgc2hvcnQgICAgICAgYml0czsKKyAgfSBtYXNrOworICBpbnQgZmFtaWx5OworICB1bnNpZ25lZCBzaG9ydCB0eXBlOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcmM0X2tleQoreworICB1bnNpZ25lZCBjaGFyIHN0YXRlWzI1Nl07CisgIHVuc2lnbmVkIGNoYXIgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSByYzRfa2V5OworCitzdHJ1Y3QgYXJlc19jaGFubmVsZGF0YSB7CisgIC8qIENvbmZpZ3VyYXRpb24gZGF0YSAqLworICBpbnQgZmxhZ3M7CisgIGludCB0aW1lb3V0OyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAgaW50IHRyaWVzOworICBpbnQgbmRvdHM7CisgIGludCByb3RhdGU7IC8qIGlmIHRydWUsIGFsbCBzZXJ2ZXJzIHNwZWNpZmllZCBhcmUgdXNlZCAqLworICBpbnQgdWRwX3BvcnQ7IC8qIHN0b3JlZCBpbiBuZXR3b3JrIG9yZGVyICovCisgIGludCB0Y3BfcG9ydDsgLyogc3RvcmVkIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgaW50IHNvY2tldF9zZW5kX2J1ZmZlcl9zaXplOworICBpbnQgc29ja2V0X3JlY2VpdmVfYnVmZmVyX3NpemU7CisgIGNoYXIgKipkb21haW5zOworICBpbnQgbmRvbWFpbnM7CisgIHN0cnVjdCBhcGF0dGVybiAqc29ydGxpc3Q7CisgIGludCBuc29ydDsKKyAgY2hhciAqbG9va3VwczsKKyAgaW50IGVkbnNwc3o7CisKKyAgLyogRm9yIGJpbmRpbmcgdG8gbG9jYWwgZGV2aWNlcyBhbmQvb3IgSVAgYWRkcmVzc2VzLiAgTGVhdmUKKyAgICogdGhlbSBudWxsL3plcm8gZm9yIG5vIGJpbmRpbmcuCisgICAqLworICBjaGFyIGxvY2FsX2Rldl9uYW1lWzMyXTsKKyAgdW5zaWduZWQgaW50IGxvY2FsX2lwNDsKKyAgdW5zaWduZWQgY2hhciBsb2NhbF9pcDZbMTZdOworCisgIGludCBvcHRtYXNrOyAvKiB0aGUgb3B0aW9uIGJpdGZpZWxkIHBhc3NlZCBpbiBhdCBpbml0IHRpbWUgKi8KKworICAvKiBTZXJ2ZXIgYWRkcmVzc2VzIGFuZCBjb21tdW5pY2F0aW9ucyBzdGF0ZSAqLworICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXJzOworICBpbnQgbnNlcnZlcnM7CisKKyAgLyogSUQgdG8gdXNlIGZvciBuZXh0IHF1ZXJ5ICovCisgIHVuc2lnbmVkIHNob3J0IG5leHRfaWQ7CisgIC8qIGtleSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIG5ldyBpZHMgKi8KKyAgcmM0X2tleSBpZF9rZXk7CisKKyAgLyogR2VuZXJhdGlvbiBudW1iZXIgdG8gdXNlIGZvciB0aGUgbmV4dCBUQ1Agc29ja2V0IG9wZW4vY2xvc2UgKi8KKyAgaW50IHRjcF9jb25uZWN0aW9uX2dlbmVyYXRpb247CisKKyAgLyogVGhlIHRpbWUgYXQgd2hpY2ggd2UgbGFzdCBjYWxsZWQgcHJvY2Vzc190aW1lb3V0cygpLiBVc2VzIGludGVnZXIgc2Vjb25kcworICAgICBqdXN0IHRvIGRyYXcgdGhlIGxpbmUgc29tZXdoZXJlLiAqLworICB0aW1lX3QgbGFzdF90aW1lb3V0X3Byb2Nlc3NlZDsKKworICAvKiBMYXN0IHNlcnZlciB3ZSBzZW50IGEgcXVlcnkgdG8uICovCisgIGludCBsYXN0X3NlcnZlcjsKKworICAvKiBDaXJjdWxhciwgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIHF1ZXJpZXMsIGJ1Y2tldGVkIHZhcmlvdXMgd2F5cy4uLi4gKi8KKyAgLyogQWxsIGFjdGl2ZSBxdWVyaWVzIGluIGEgc2luZ2xlIGxpc3Q6ICovCisgIHN0cnVjdCBsaXN0X25vZGUgYWxsX3F1ZXJpZXM7CisgIC8qIFF1ZXJpZXMgYnVja2V0ZWQgYnkgcWlkLCBmb3IgcXVpY2tseSBkaXNwYXRjaGluZyBETlMgcmVzcG9uc2VzOiAqLworI2RlZmluZSBBUkVTX1FJRF9UQUJMRV9TSVpFIDIwNDgKKyAgc3RydWN0IGxpc3Rfbm9kZSBxdWVyaWVzX2J5X3FpZFtBUkVTX1FJRF9UQUJMRV9TSVpFXTsKKyAgLyogUXVlcmllcyBidWNrZXRlZCBieSB0aW1lb3V0LCBmb3IgcXVpY2tseSBoYW5kbGluZyB0aW1lb3V0czogKi8KKyNkZWZpbmUgQVJFU19USU1FT1VUX1RBQkxFX1NJWkUgMTAyNAorICBzdHJ1Y3QgbGlzdF9ub2RlIHF1ZXJpZXNfYnlfdGltZW91dFtBUkVTX1RJTUVPVVRfVEFCTEVfU0laRV07CisKKyAgYXJlc19zb2NrX3N0YXRlX2NiIHNvY2tfc3RhdGVfY2I7CisgIHZvaWQgKnNvY2tfc3RhdGVfY2JfZGF0YTsKKworICBhcmVzX3NvY2tfY3JlYXRlX2NhbGxiYWNrIHNvY2tfY3JlYXRlX2NiOworICB2b2lkICpzb2NrX2NyZWF0ZV9jYl9kYXRhOworCisgIGFyZXNfc29ja19jb25maWdfY2FsbGJhY2sgc29ja19jb25maWdfY2I7CisgIHZvaWQgKnNvY2tfY29uZmlnX2NiX2RhdGE7Cit9OworCisvKiBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkICooKmFyZXNfbWFsbG9jKShzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCAqKCphcmVzX3JlYWxsb2MpKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgKCphcmVzX2ZyZWUpKHZvaWQgKnB0cik7CisKKy8qIHJldHVybiB0cnVlIGlmIG5vdyBpcyBleGFjdGx5IGNoZWNrIHRpbWUgb3IgbGF0ZXIgKi8KK2ludCBhcmVzX190aW1lZG91dChzdHJ1Y3QgdGltZXZhbCAqbm93LAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpjaGVjayk7CisKK3ZvaWQgYXJlc19fc2VuZF9xdWVyeShhcmVzX2NoYW5uZWwgY2hhbm5lbCwgc3RydWN0IHF1ZXJ5ICpxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93KTsKK3ZvaWQgYXJlc19fY2xvc2Vfc29ja2V0cyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVyKTsKK2ludCBhcmVzX19nZXRfaG9zdGVudChGSUxFICpmcCwgaW50IGZhbWlseSwgc3RydWN0IGhvc3RlbnQgKipob3N0KTsKK2ludCBhcmVzX19yZWFkX2xpbmUoRklMRSAqZnAsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmc2l6ZSk7Cit2b2lkIGFyZXNfX2ZyZWVfcXVlcnkoc3RydWN0IHF1ZXJ5ICpxdWVyeSk7Cit1bnNpZ25lZCBzaG9ydCBhcmVzX19nZW5lcmF0ZV9uZXdfaWQocmM0X2tleSoga2V5KTsKK3N0cnVjdCB0aW1ldmFsIGFyZXNfX3R2bm93KHZvaWQpOworaW50IGFyZXNfX2V4cGFuZF9uYW1lX2Zvcl9yZXNwb25zZShjb25zdCB1bnNpZ25lZCBjaGFyICplbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnMsIGxvbmcgKmVuY2xlbik7Cit2b2lkIGFyZXNfX2luaXRfc2VydmVyc19zdGF0ZShhcmVzX2NoYW5uZWwgY2hhbm5lbCk7Cit2b2lkIGFyZXNfX2Rlc3Ryb3lfc2VydmVyc19zdGF0ZShhcmVzX2NoYW5uZWwgY2hhbm5lbCk7CisjaWYgMCAvKiBOb3QgdXNlZCAqLworbG9uZyBhcmVzX190dmRpZmYoc3RydWN0IHRpbWV2YWwgdDEsIHN0cnVjdCB0aW1ldmFsIHQyKTsKKyNlbmRpZgorCisjZGVmaW5lIEFSRVNfU1dBUF9CWVRFKGEsYikgXAorICB7IHVuc2lnbmVkIGNoYXIgc3dhcEJ5dGUgPSAqKGEpOyAgKihhKSA9ICooYik7ICAqKGIpID0gc3dhcEJ5dGU7IH0KKworI2RlZmluZSBTT0NLX1NUQVRFX0NBTExCQUNLKGMsIHMsIHIsIHcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYyktPnNvY2tfc3RhdGVfY2IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGMpLT5zb2NrX3N0YXRlX2NiKChjKS0+c29ja19zdGF0ZV9jYl9kYXRhLCAocyksIChyKSwgKHcpKTsgICAgICAgXAorICB9IFdISUxFX0ZBTFNFCisKKyNpZmRlZiBDVVJMREVCVUcKKy8qIFRoaXMgaXMgbG93LWxldmVsIGhhcmQtaGFja2luZyBtZW1vcnkgbGVhayB0cmFja2luZyBhbmQgc2ltaWxhci4gVXNpbmcgdGhlCisgICBsaWJjdXJsIGxvd2xldmVsIGNvZGUgZnJvbSB3aXRoaW4gbGlicmFyeSBpcyB1Z2x5IGFuZCBvbmx5IHdvcmtzIHdoZW4KKyAgIGMtYXJlcyBpcyBidWlsdCBhbmQgbGlua2VkIHdpdGggYSBzaW1pbGFybHkgY3VybGRlYnVnLWVuYWJsZWQgbGliY3VybCwKKyAgIGJ1dCB3ZSBkbyB0aGlzIGFueXdheSBmb3IgY29udmVuaWVuY2UuICovCisjZGVmaW5lIEhFQURFUl9DVVJMX1NFVFVQX09OQ0VfSAorI2luY2x1ZGUgIi4uL2xpYi9tZW1kZWJ1Zy5oIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FSRVNfUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3Byb2Nlc3MuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcHJvY2Vzcy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYjgzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3Byb2Nlc3MuMwpAQCAtMCwwICsxLDgwIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfUFJPQ0VTUyAzICIyNSBKdWx5IDE5OTgiCisuU0ggTkFNRQorYXJlc19wcm9jZXNzIFwtIFByb2Nlc3MgZXZlbnRzIGZvciBuYW1lIHJlc29sdXRpb24KKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiB2b2lkIGFyZXNfcHJvY2VzcyhhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwgZmRfc2V0ICpcZklyZWFkX2Zkc1xmUCwKKy5CCWZkX3NldCAqXGZJd3JpdGVfZmRzXGZQKQorLmZpCisuUFAKKy5CIHZvaWQgYXJlc19wcm9jZXNzX2ZkKGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLAorLkIgICAgICBhcmVzX3NvY2tldF90IFxmSXJlYWRfZmRcZlAsCisuQglhcmVzX3NvY2tldF90IFxmSXdyaXRlX2ZkXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJhcmVzX3Byb2Nlc3MoMylcZlAgZnVuY3Rpb24gaGFuZGxlcyBpbnB1dC9vdXRwdXQgZXZlbnRzIGFuZCB0aW1lb3V0cworYXNzb2NpYXRlZCB3aXRoIHF1ZXJpZXMgcGVuZGluZyBvbiB0aGUgbmFtZSBzZXJ2aWNlIGNoYW5uZWwgaWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwgLgorVGhlIGZpbGUgZGVzY3JpcHRvciBzZXRzIHBvaW50ZWQgdG8gYnkgXGZJcmVhZF9mZHNcZlAgYW5kIFxmSXdyaXRlX2Zkc1xmUAorc2hvdWxkIGhhdmUgZmlsZSBkZXNjcmlwdG9ycyBzZXQgaW4gdGhlbSBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgZmlsZQorZGVzY3JpcHRvcnMgc3BlY2lmaWVkIGJ5IFxmSWFyZXNfZmRzKDMpXGZQIGFyZSByZWFkeSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KKyhUaGUgZWFzaWVzdCB3YXkgdG8gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24gaXMgdG8gaW52b2tlCisuQiBzZWxlY3QKK3dpdGggYSB0aW1lb3V0IG5vIGdyZWF0ZXIgdGhhbiB0aGUgdGltZW91dCBnaXZlbiBieSBcZklhcmVzX3RpbWVvdXQoMylcZlAgKS4KKy5QUAorVGhlCisuQiBhcmVzX3Byb2Nlc3MKK2Z1bmN0aW9uIHdpbGwgaW52b2tlIGNhbGxiYWNrcyBmb3IgcGVuZGluZyBxdWVyaWVzIGlmIHRoZXkgY29tcGxldGUKK3N1Y2Nlc3NmdWxseSBvciBmYWlsLgorCitcZkJhcmVzX3Byb2Nlc3NfZmQoMylcZlAgd29ya3MgdGhlIHNhbWUgd2F5IGJ1dCBhY3RzIGFuZCBvcGVyYXRlcyBvbmx5IG9uIHRoZQorc3BlY2lmaWMgZmlsZSBkZXNjcmlwdG9ycyAoc29ja2V0cykgeW91IHBhc3MgaW4gdG8gdGhlIGZ1bmN0aW9uLiBVc2UKK0FSRVNfU09DS0VUX0JBRCBmb3IgIm5vIGFjdGlvbiIuIFRoaXMgZnVuY3Rpb24gaXMgb2YgY291cnNlIHByb3ZpZGVkIHRvIGFsbG93Cit1c2VycyBvZiBjLWFyZXMgdG8gdm9pZCBzZWxlY3QoKSBpbiB0aGVpciBhcHBsaWNhdGlvbnMgYW5kIHdpdGhpbiBjLWFyZXMuCisuU1MgRVhBTVBMRQorVGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50IHdhaXRzIGZvciBhbGwgcGVuZGluZyBxdWVyaWVzIG9uIGEgY2hhbm5lbAordG8gY29tcGxldGU6CisuUFAKKy5SUworLm5mCitpbnQgbmZkcywgY291bnQ7CitmZF9zZXQgcmVhZGVycywgd3JpdGVyczsKK3N0cnVjdCB0aW1ldmFsIHR2LCAqdHZwOworCit3aGlsZSAoMSkKKyAgeworICAgIEZEX1pFUk8oJnJlYWRlcnMpOworICAgIEZEX1pFUk8oJndyaXRlcnMpOworICAgIG5mZHMgPSBhcmVzX2ZkcyhjaGFubmVsLCAmcmVhZGVycywgJndyaXRlcnMpOworICAgIGlmIChuZmRzID09IDApCisgICAgICBicmVhazsKKyAgICB0dnAgPSBhcmVzX3RpbWVvdXQoY2hhbm5lbCwgTlVMTCwgJnR2KTsKKyAgICBjb3VudCA9IHNlbGVjdChuZmRzLCAmcmVhZGVycywgJndyaXRlcnMsIE5VTEwsIHR2cCk7CisgICAgYXJlc19wcm9jZXNzKGNoYW5uZWwsICZyZWFkZXJzLCAmd3JpdGVycyk7CisgIH0KKy5maQorLlJFCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2ZkcyAoMyksCisuQlIgYXJlc190aW1lb3V0ICgzKQorLlNIIEFVVEhPUgorR3JlZyBIdWRzb24sIE1JVCBJbmZvcm1hdGlvbiBTeXN0ZW1zCisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wcm9jZXNzLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3Byb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWZhNjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19wcm9jZXNzLmMKQEAgLTAsMCArMSwxMzYwIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1VJT19ICisjICBpbmNsdWRlIDxzeXMvdWlvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjICBpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjICBpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyMgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgTkVUV0FSRQorIyAgaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19kbnMuaCIKKyNpbmNsdWRlICJhcmVzX25vd2Fybi5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCisKK3N0YXRpYyBpbnQgdHJ5X2FnYWluKGludCBlcnJudW0pOworc3RhdGljIHZvaWQgd3JpdGVfdGNwX2RhdGEoYXJlc19jaGFubmVsIGNoYW5uZWwsIGZkX3NldCAqd3JpdGVfZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrZXRfdCB3cml0ZV9mZCwgc3RydWN0IHRpbWV2YWwgKm5vdyk7CitzdGF0aWMgdm9pZCByZWFkX3RjcF9kYXRhKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBmZF9zZXQgKnJlYWRfZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX3NvY2tldF90IHJlYWRfZmQsIHN0cnVjdCB0aW1ldmFsICpub3cpOworc3RhdGljIHZvaWQgcmVhZF91ZHBfcGFja2V0cyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwgZmRfc2V0ICpyZWFkX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrZXRfdCByZWFkX2ZkLCBzdHJ1Y3QgdGltZXZhbCAqbm93KTsKK3N0YXRpYyB2b2lkIGFkdmFuY2VfdGNwX3NlbmRfcXVldWUoYXJlc19jaGFubmVsIGNoYW5uZWwsIGludCB3aGljaHNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBudW1fYnl0ZXMpOworc3RhdGljIHZvaWQgcHJvY2Vzc190aW1lb3V0cyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwgc3RydWN0IHRpbWV2YWwgKm5vdyk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX2Jyb2tlbl9jb25uZWN0aW9ucyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpub3cpOworc3RhdGljIHZvaWQgcHJvY2Vzc19hbnN3ZXIoYXJlc19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgKmFidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxlbiwgaW50IHdoaWNoc2VydmVyLCBpbnQgdGNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKm5vdyk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZXJyb3IoYXJlc19jaGFubmVsIGNoYW5uZWwsIGludCB3aGljaHNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93KTsKK3N0YXRpYyB2b2lkIHNraXBfc2VydmVyKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgcXVlcnkgKnF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNoc2VydmVyKTsKK3N0YXRpYyB2b2lkIG5leHRfc2VydmVyKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgcXVlcnkgKnF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKm5vdyk7CitzdGF0aWMgaW50IG9wZW5fdGNwX3NvY2tldChhcmVzX2NoYW5uZWwgY2hhbm5lbCwgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVyKTsKK3N0YXRpYyBpbnQgb3Blbl91ZHBfc29ja2V0KGFyZXNfY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXIpOworc3RhdGljIGludCBzYW1lX3F1ZXN0aW9ucyhjb25zdCB1bnNpZ25lZCBjaGFyICpxYnVmLCBpbnQgcWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4pOworc3RhdGljIGludCBzYW1lX2FkZHJlc3Moc3RydWN0IHNvY2thZGRyICpzYSwgc3RydWN0IGFyZXNfYWRkciAqYWEpOworc3RhdGljIHZvaWQgZW5kX3F1ZXJ5KGFyZXNfY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgcXVlcnkgKnF1ZXJ5LCBpbnQgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuKTsKKworLyogcmV0dXJuIHRydWUgaWYgbm93IGlzIGV4YWN0bHkgY2hlY2sgdGltZSBvciBsYXRlciAqLworaW50IGFyZXNfX3RpbWVkb3V0KHN0cnVjdCB0aW1ldmFsICpub3csCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKmNoZWNrKQoreworICBsb25nIHNlY3MgPSAobm93LT50dl9zZWMgLSBjaGVjay0+dHZfc2VjKTsKKworICBpZihzZWNzID4gMCkKKyAgICByZXR1cm4gMTsgLyogeWVzLCB0aW1lZCBvdXQgKi8KKyAgaWYoc2VjcyA8IDApCisgICAgcmV0dXJuIDA7IC8qIG5vcGUsIG5vdCB0aW1lZCBvdXQgKi8KKworICAvKiBpZiB0aGUgZnVsbCBzZWNvbmRzIHdlcmUgaWRlbnRpY2FsLCBjaGVjayB0aGUgc3ViIHNlY29uZCBwYXJ0cyAqLworICByZXR1cm4gKG5vdy0+dHZfdXNlYyAtIGNoZWNrLT50dl91c2VjID49IDApOworfQorCisvKiBhZGQgdGhlIHNwZWNpZmljIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIHRpbWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50ICovCitzdGF0aWMgdm9pZCB0aW1lYWRkKHN0cnVjdCB0aW1ldmFsICpub3csIGludCBtaWxsaXNlY3MpCit7CisgIG5vdy0+dHZfc2VjICs9IG1pbGxpc2Vjcy8xMDAwOworICBub3ctPnR2X3VzZWMgKz0gKG1pbGxpc2VjcyUxMDAwKSoxMDAwOworCisgIGlmKG5vdy0+dHZfdXNlYyA+PSAxMDAwMDAwKSB7CisgICAgKysobm93LT50dl9zZWMpOworICAgIG5vdy0+dHZfdXNlYyAtPSAxMDAwMDAwOworICB9Cit9CisKKy8qCisgKiBnZW5lcmljIHByb2Nlc3MgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgcHJvY2Vzc2ZkcyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZWFkX2ZkcywgYXJlc19zb2NrZXRfdCByZWFkX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKndyaXRlX2ZkcywgYXJlc19zb2NrZXRfdCB3cml0ZV9mZCkKK3sKKyAgc3RydWN0IHRpbWV2YWwgbm93ID0gYXJlc19fdHZub3coKTsKKworICB3cml0ZV90Y3BfZGF0YShjaGFubmVsLCB3cml0ZV9mZHMsIHdyaXRlX2ZkLCAmbm93KTsKKyAgcmVhZF90Y3BfZGF0YShjaGFubmVsLCByZWFkX2ZkcywgcmVhZF9mZCwgJm5vdyk7CisgIHJlYWRfdWRwX3BhY2tldHMoY2hhbm5lbCwgcmVhZF9mZHMsIHJlYWRfZmQsICZub3cpOworICBwcm9jZXNzX3RpbWVvdXRzKGNoYW5uZWwsICZub3cpOworICBwcm9jZXNzX2Jyb2tlbl9jb25uZWN0aW9ucyhjaGFubmVsLCAmbm93KTsKK30KKworLyogU29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbmVkIG9uIHRoZSB3aXJlLCBvciB0aGVyZSB3YXMgYSB0aW1lb3V0LgorICogU2VlIHdoYXQncyB1cCBhbmQgcmVzcG9uZCBhY2NvcmRpbmdseS4KKyAqLwordm9pZCBhcmVzX3Byb2Nlc3MoYXJlc19jaGFubmVsIGNoYW5uZWwsIGZkX3NldCAqcmVhZF9mZHMsIGZkX3NldCAqd3JpdGVfZmRzKQoreworICBwcm9jZXNzZmRzKGNoYW5uZWwsIHJlYWRfZmRzLCBBUkVTX1NPQ0tFVF9CQUQsIHdyaXRlX2ZkcywgQVJFU19TT0NLRVRfQkFEKTsKK30KKworLyogU29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbmVkIG9uIHRoZSB3aXJlLCBvciB0aGVyZSB3YXMgYSB0aW1lb3V0LgorICogU2VlIHdoYXQncyB1cCBhbmQgcmVzcG9uZCBhY2NvcmRpbmdseS4KKyAqLwordm9pZCBhcmVzX3Byb2Nlc3NfZmQoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICBhcmVzX3NvY2tldF90IHJlYWRfZmQsIC8qIHVzZSBBUkVTX1NPQ0tFVF9CQUQgb3IgdmFsaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBkZXNjcmlwdG9ycyAqLworICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrZXRfdCB3cml0ZV9mZCkKK3sKKyAgcHJvY2Vzc2ZkcyhjaGFubmVsLCBOVUxMLCByZWFkX2ZkLCBOVUxMLCB3cml0ZV9mZCk7Cit9CisKKworLyogUmV0dXJuIDEgaWYgdGhlIHNwZWNpZmllZCBlcnJvciBudW1iZXIgZGVzY3JpYmVzIGEgcmVhZGluZXNzIGVycm9yLCBvciAwCisgKiBvdGhlcndpc2UuIFRoaXMgaXMgbW9zdGx5IGZvciBIUC1VWCwgd2hpY2ggY291bGQgcmV0dXJuIEVBR0FJTiBvcgorICogRVdPVUxEQkxPQ0suIFNlZSB0aGlzIG1hbiBwYWdlCisgKgorICogaHR0cDovL2RldnJzcmMxLmV4dGVybmFsLmhwLmNvbS9TVEtTL2NnaS1iaW4vbWFuMmh0bWw/CisgKiAgICAgbWFucGFnZT0vdXNyL3NoYXJlL21hbi9tYW4yLlovc2VuZC4yCisgKi8KK3N0YXRpYyBpbnQgdHJ5X2FnYWluKGludCBlcnJudW0pCit7CisjaWYgIWRlZmluZWQgRVdPVUxEQkxPQ0sgJiYgIWRlZmluZWQgRUFHQUlOCisjZXJyb3IgIk5laXRoZXIgRVdPVUxEQkxPQ0sgbm9yIEVBR0FJTiBkZWZpbmVkIgorI2VuZGlmCisgIHN3aXRjaCAoZXJybnVtKQorICAgIHsKKyNpZmRlZiBFV09VTERCTE9DSworICAgIGNhc2UgRVdPVUxEQkxPQ0s6CisgICAgICByZXR1cm4gMTsKKyNlbmRpZgorI2lmIGRlZmluZWQgRUFHQUlOICYmIEVBR0FJTiAhPSBFV09VTERCTE9DSworICAgIGNhc2UgRUFHQUlOOgorICAgICAgcmV0dXJuIDE7CisjZW5kaWYKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBJZiBhbnkgVENQIHNvY2tldHMgc2VsZWN0IHRydWUgZm9yIHdyaXRpbmcsIHdyaXRlIG91dCBxdWV1ZWQgZGF0YQorICogd2UgaGF2ZSBmb3IgdGhlbS4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfdGNwX2RhdGEoYXJlc19jaGFubmVsIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKndyaXRlX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfc29ja2V0X3Qgd3JpdGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXI7CisgIHN0cnVjdCBzZW5kX3JlcXVlc3QgKnNlbmRyZXE7CisgIHN0cnVjdCBpb3ZlYyAqdmVjOworICBpbnQgaTsKKyAgc3NpemVfdCBzY291bnQ7CisgIHNzaXplX3Qgd2NvdW50OworICBzaXplX3QgbjsKKworICBpZighd3JpdGVfZmRzICYmICh3cml0ZV9mZCA9PSBBUkVTX1NPQ0tFVF9CQUQpKQorICAgIC8qIG5vIHBvc3NpYmxlIGFjdGlvbiAqLworICAgIHJldHVybjsKKworICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+bnNlcnZlcnM7IGkrKykKKyAgICB7CisgICAgICAvKiBNYWtlIHN1cmUgc2VydmVyIGhhcyBkYXRhIHRvIHNlbmQgYW5kIGlzIHNlbGVjdGVkIGluIHdyaXRlX2ZkcyBvcgorICAgICAgICAgd3JpdGVfZmQuICovCisgICAgICBzZXJ2ZXIgPSAmY2hhbm5lbC0+c2VydmVyc1tpXTsKKyAgICAgIGlmICghc2VydmVyLT5xaGVhZCB8fCBzZXJ2ZXItPnRjcF9zb2NrZXQgPT0gQVJFU19TT0NLRVRfQkFEIHx8CisgICAgICAgICAgc2VydmVyLT5pc19icm9rZW4pCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZih3cml0ZV9mZHMpIHsKKyAgICAgICAgaWYoIUZEX0lTU0VUKHNlcnZlci0+dGNwX3NvY2tldCwgd3JpdGVfZmRzKSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihzZXJ2ZXItPnRjcF9zb2NrZXQgIT0gd3JpdGVfZmQpCisgICAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmKHdyaXRlX2ZkcykKKyAgICAgICAgLyogSWYgdGhlcmUncyBhbiBlcnJvciBhbmQgd2UgY2xvc2UgdGhpcyBzb2NrZXQsIHRoZW4gb3BlbgorICAgICAgICAgKiBhbm90aGVyIHdpdGggdGhlIHNhbWUgZmQgdG8gdGFsayB0byBhbm90aGVyIHNlcnZlciwgdGhlbiB3ZQorICAgICAgICAgKiBkb24ndCB3YW50IHRvIHRoaW5rIHRoYXQgaXQgd2FzIHRoZSBuZXcgc29ja2V0IHRoYXQgd2FzCisgICAgICAgICAqIHJlYWR5LiBUaGlzIGlzIG5vdCBkaXNhc3Ryb3VzLCBidXQgaXMgbGlrZWx5IHRvIHJlc3VsdCBpbgorICAgICAgICAgKiBleHRyYSBzeXN0ZW0gY2FsbHMgYW5kIGNvbmZ1c2lvbi4gKi8KKyAgICAgICAgRkRfQ0xSKHNlcnZlci0+dGNwX3NvY2tldCwgd3JpdGVfZmRzKTsKKworICAgICAgLyogQ291bnQgdGhlIG51bWJlciBvZiBzZW5kIHF1ZXVlIGl0ZW1zLiAqLworICAgICAgbiA9IDA7CisgICAgICBmb3IgKHNlbmRyZXEgPSBzZXJ2ZXItPnFoZWFkOyBzZW5kcmVxOyBzZW5kcmVxID0gc2VuZHJlcS0+bmV4dCkKKyAgICAgICAgbisrOworCisgICAgICAvKiBBbGxvY2F0ZSBpb3ZlY3Mgc28gd2UgY2FuIHNlbmQgYWxsIG91ciBkYXRhIGF0IG9uY2UuICovCisgICAgICB2ZWMgPSBhcmVzX21hbGxvYyhuICogc2l6ZW9mKHN0cnVjdCBpb3ZlYykpOworICAgICAgaWYgKHZlYykKKyAgICAgICAgeworICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIGlvdmVjcyBhbmQgc2VuZC4gKi8KKyAgICAgICAgICBuID0gMDsKKyAgICAgICAgICBmb3IgKHNlbmRyZXEgPSBzZXJ2ZXItPnFoZWFkOyBzZW5kcmVxOyBzZW5kcmVxID0gc2VuZHJlcS0+bmV4dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdmVjW25dLmlvdl9iYXNlID0gKGNoYXIgKikgc2VuZHJlcS0+ZGF0YTsKKyAgICAgICAgICAgICAgdmVjW25dLmlvdl9sZW4gPSBzZW5kcmVxLT5sZW47CisgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB3Y291bnQgPSAoc3NpemVfdCl3cml0ZXYoc2VydmVyLT50Y3Bfc29ja2V0LCB2ZWMsIChpbnQpbik7CisgICAgICAgICAgYXJlc19mcmVlKHZlYyk7CisgICAgICAgICAgaWYgKHdjb3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghdHJ5X2FnYWluKFNPQ0tFUlJOTykpCisgICAgICAgICAgICAgICAgaGFuZGxlX2Vycm9yKGNoYW5uZWwsIGksIG5vdyk7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogQWR2YW5jZSB0aGUgc2VuZCBxdWV1ZSBieSBhcyBtYW55IGJ5dGVzIGFzIHdlIHNlbnQuICovCisgICAgICAgICAgYWR2YW5jZV90Y3Bfc2VuZF9xdWV1ZShjaGFubmVsLCBpLCB3Y291bnQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDYW4ndCBhbGxvY2F0ZSBpb3ZlY3M7IGp1c3Qgc2VuZCB0aGUgZmlyc3QgcmVxdWVzdC4gKi8KKyAgICAgICAgICBzZW5kcmVxID0gc2VydmVyLT5xaGVhZDsKKworICAgICAgICAgIHNjb3VudCA9IHN3cml0ZShzZXJ2ZXItPnRjcF9zb2NrZXQsIHNlbmRyZXEtPmRhdGEsIHNlbmRyZXEtPmxlbik7CisgICAgICAgICAgaWYgKHNjb3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghdHJ5X2FnYWluKFNPQ0tFUlJOTykpCisgICAgICAgICAgICAgICAgaGFuZGxlX2Vycm9yKGNoYW5uZWwsIGksIG5vdyk7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogQWR2YW5jZSB0aGUgc2VuZCBxdWV1ZSBieSBhcyBtYW55IGJ5dGVzIGFzIHdlIHNlbnQuICovCisgICAgICAgICAgYWR2YW5jZV90Y3Bfc2VuZF9xdWV1ZShjaGFubmVsLCBpLCBzY291bnQpOworICAgICAgICB9CisgICAgfQorfQorCisvKiBDb25zdW1lIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgVENQIHNlbmQgcXVldWUuICovCitzdGF0aWMgdm9pZCBhZHZhbmNlX3RjcF9zZW5kX3F1ZXVlKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBpbnQgd2hpY2hzZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbnVtX2J5dGVzKQoreworICBzdHJ1Y3Qgc2VuZF9yZXF1ZXN0ICpzZW5kcmVxOworICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXIgPSAmY2hhbm5lbC0+c2VydmVyc1t3aGljaHNlcnZlcl07CisgIHdoaWxlIChudW1fYnl0ZXMgPiAwKSB7CisgICAgc2VuZHJlcSA9IHNlcnZlci0+cWhlYWQ7CisgICAgaWYgKChzaXplX3QpbnVtX2J5dGVzID49IHNlbmRyZXEtPmxlbikgeworICAgICAgbnVtX2J5dGVzIC09IHNlbmRyZXEtPmxlbjsKKyAgICAgIHNlcnZlci0+cWhlYWQgPSBzZW5kcmVxLT5uZXh0OworICAgICAgaWYgKHNlbmRyZXEtPmRhdGFfc3RvcmFnZSkKKyAgICAgICAgYXJlc19mcmVlKHNlbmRyZXEtPmRhdGFfc3RvcmFnZSk7CisgICAgICBhcmVzX2ZyZWUoc2VuZHJlcSk7CisgICAgICBpZiAoc2VydmVyLT5xaGVhZCA9PSBOVUxMKSB7CisgICAgICAgIFNPQ0tfU1RBVEVfQ0FMTEJBQ0soY2hhbm5lbCwgc2VydmVyLT50Y3Bfc29ja2V0LCAxLCAwKTsKKyAgICAgICAgc2VydmVyLT5xdGFpbCA9IE5VTEw7CisKKyAgICAgICAgLyogcWhlYWQgaXMgTlVMTCBzbyB3ZSBjYW5ub3QgY29udGludWUgdGhpcyBsb29wICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHNlbmRyZXEtPmRhdGEgKz0gbnVtX2J5dGVzOworICAgICAgc2VuZHJlcS0+bGVuIC09IG51bV9ieXRlczsKKyAgICAgIG51bV9ieXRlcyA9IDA7CisgICAgfQorICB9Cit9CisKKy8qIElmIGFueSBUQ1Agc29ja2V0IHNlbGVjdHMgdHJ1ZSBmb3IgcmVhZGluZywgcmVhZCBzb21lIGRhdGEsCisgKiBhbGxvY2F0ZSBhIGJ1ZmZlciBpZiB3ZSBmaW5pc2ggcmVhZGluZyB0aGUgbGVuZ3RoIHdvcmQsIGFuZCBwcm9jZXNzCisgKiBhIHBhY2tldCBpZiB3ZSBmaW5pc2ggcmVhZGluZyBvbmUuCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfdGNwX2RhdGEoYXJlc19jaGFubmVsIGNoYW5uZWwsIGZkX3NldCAqcmVhZF9mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfc29ja2V0X3QgcmVhZF9mZCwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKyAgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVyOworICBpbnQgaTsKKyAgc3NpemVfdCBjb3VudDsKKworICBpZighcmVhZF9mZHMgJiYgKHJlYWRfZmQgPT0gQVJFU19TT0NLRVRfQkFEKSkKKyAgICAvKiBubyBwb3NzaWJsZSBhY3Rpb24gKi8KKyAgICByZXR1cm47CisKKyAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5zZXJ2ZXJzOyBpKyspCisgICAgeworICAgICAgLyogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIGEgc29ja2V0IGFuZCBpcyBzZWxlY3RlZCBpbiByZWFkX2Zkcy4gKi8KKyAgICAgIHNlcnZlciA9ICZjaGFubmVsLT5zZXJ2ZXJzW2ldOworICAgICAgaWYgKHNlcnZlci0+dGNwX3NvY2tldCA9PSBBUkVTX1NPQ0tFVF9CQUQgfHwgc2VydmVyLT5pc19icm9rZW4pCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZihyZWFkX2ZkcykgeworICAgICAgICBpZighRkRfSVNTRVQoc2VydmVyLT50Y3Bfc29ja2V0LCByZWFkX2ZkcykpCisgICAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoc2VydmVyLT50Y3Bfc29ja2V0ICE9IHJlYWRfZmQpCisgICAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmKHJlYWRfZmRzKQorICAgICAgICAvKiBJZiB0aGVyZSdzIGFuIGVycm9yIGFuZCB3ZSBjbG9zZSB0aGlzIHNvY2tldCwgdGhlbiBvcGVuIGFub3RoZXIKKyAgICAgICAgICogd2l0aCB0aGUgc2FtZSBmZCB0byB0YWxrIHRvIGFub3RoZXIgc2VydmVyLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgICogdGhpbmsgdGhhdCBpdCB3YXMgdGhlIG5ldyBzb2NrZXQgdGhhdCB3YXMgcmVhZHkuIFRoaXMgaXMgbm90CisgICAgICAgICAqIGRpc2FzdHJvdXMsIGJ1dCBpcyBsaWtlbHkgdG8gcmVzdWx0IGluIGV4dHJhIHN5c3RlbSBjYWxscyBhbmQKKyAgICAgICAgICogY29uZnVzaW9uLiAqLworICAgICAgICBGRF9DTFIoc2VydmVyLT50Y3Bfc29ja2V0LCByZWFkX2Zkcyk7CisKKyAgICAgIGlmIChzZXJ2ZXItPnRjcF9sZW5idWZfcG9zICE9IDIpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBXZSBoYXZlbid0IHlldCByZWFkIGEgbGVuZ3RoIHdvcmQsIHNvIHJlYWQgdGhhdCAob3IKKyAgICAgICAgICAgKiB3aGF0J3MgbGVmdCB0byByZWFkIG9mIGl0KS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBjb3VudCA9IHNyZWFkKHNlcnZlci0+dGNwX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci0+dGNwX2xlbmJ1ZiArIHNlcnZlci0+dGNwX2xlbmJ1Zl9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAyIC0gc2VydmVyLT50Y3BfbGVuYnVmX3Bvcyk7CisgICAgICAgICAgaWYgKGNvdW50IDw9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghKGNvdW50ID09IC0xICYmIHRyeV9hZ2FpbihTT0NLRVJSTk8pKSkKKyAgICAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoY2hhbm5lbCwgaSwgbm93KTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBzZXJ2ZXItPnRjcF9sZW5idWZfcG9zICs9IChpbnQpY291bnQ7CisgICAgICAgICAgaWYgKHNlcnZlci0+dGNwX2xlbmJ1Zl9wb3MgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogV2UgZmluaXNoZWQgcmVhZGluZyB0aGUgbGVuZ3RoIHdvcmQuICBEZWNvZGUgdGhlCisgICAgICAgICAgICAgICAqIGxlbmd0aCBhbmQgYWxsb2NhdGUgYSBidWZmZXIgZm9yIHRoZSBkYXRhLgorICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgc2VydmVyLT50Y3BfbGVuZ3RoID0gc2VydmVyLT50Y3BfbGVuYnVmWzBdIDw8IDgKKyAgICAgICAgICAgICAgICB8IHNlcnZlci0+dGNwX2xlbmJ1ZlsxXTsKKyAgICAgICAgICAgICAgc2VydmVyLT50Y3BfYnVmZmVyID0gYXJlc19tYWxsb2Moc2VydmVyLT50Y3BfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgaWYgKCFzZXJ2ZXItPnRjcF9idWZmZXIpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoY2hhbm5lbCwgaSwgbm93KTsKKyAgICAgICAgICAgICAgICByZXR1cm47IC8qIGJhaWwgb3V0IG9uIG1hbGxvYyBmYWlsdXJlLiBUT0RPOiBtYWtlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVybiBlcnJvciBjb2RlcyAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHNlcnZlci0+dGNwX2J1ZmZlcl9wb3MgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSZWFkIGRhdGEgaW50byB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gKi8KKyAgICAgICAgICBjb3VudCA9IHNyZWFkKHNlcnZlci0+dGNwX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci0+dGNwX2J1ZmZlciArIHNlcnZlci0+dGNwX2J1ZmZlcl9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXItPnRjcF9sZW5ndGggLSBzZXJ2ZXItPnRjcF9idWZmZXJfcG9zKTsKKyAgICAgICAgICBpZiAoY291bnQgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCEoY291bnQgPT0gLTEgJiYgdHJ5X2FnYWluKFNPQ0tFUlJOTykpKQorICAgICAgICAgICAgICAgIGhhbmRsZV9lcnJvcihjaGFubmVsLCBpLCBub3cpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHNlcnZlci0+dGNwX2J1ZmZlcl9wb3MgKz0gKGludCljb3VudDsKKyAgICAgICAgICBpZiAoc2VydmVyLT50Y3BfYnVmZmVyX3BvcyA9PSBzZXJ2ZXItPnRjcF9sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIFdlIGZpbmlzaGVkIHJlYWRpbmcgdGhpcyBhbnN3ZXI7IHByb2Nlc3MgaXQgYW5kCisgICAgICAgICAgICAgICAqIHByZXBhcmUgdG8gcmVhZCBhbm90aGVyIGxlbmd0aCB3b3JkLgorICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgcHJvY2Vzc19hbnN3ZXIoY2hhbm5lbCwgc2VydmVyLT50Y3BfYnVmZmVyLCBzZXJ2ZXItPnRjcF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIDEsIG5vdyk7CisgICAgICAgICAgICAgIGFyZXNfZnJlZShzZXJ2ZXItPnRjcF9idWZmZXIpOworICAgICAgICAgICAgICBzZXJ2ZXItPnRjcF9idWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICBzZXJ2ZXItPnRjcF9sZW5idWZfcG9zID0gMDsKKyAgICAgICAgICAgICAgc2VydmVyLT50Y3BfYnVmZmVyX3BvcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIElmIGFueSBVRFAgc29ja2V0cyBzZWxlY3QgdHJ1ZSBmb3IgcmVhZGluZywgcHJvY2VzcyB0aGVtLiAqLworc3RhdGljIHZvaWQgcmVhZF91ZHBfcGFja2V0cyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwgZmRfc2V0ICpyZWFkX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlc19zb2NrZXRfdCByZWFkX2ZkLCBzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXI7CisgIGludCBpOworICBzc2l6ZV90IGNvdW50OworICB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhFTkRTU1ogKyAxXTsKKyNpZmRlZiBIQVZFX1JFQ1ZGUk9NCisgIGFyZXNfc29ja2xlbl90IGZyb21sZW47CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgIHNhOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgc2E0OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc2E2OworICB9IGZyb207CisjZW5kaWYKKworICBpZighcmVhZF9mZHMgJiYgKHJlYWRfZmQgPT0gQVJFU19TT0NLRVRfQkFEKSkKKyAgICAvKiBubyBwb3NzaWJsZSBhY3Rpb24gKi8KKyAgICByZXR1cm47CisKKyAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPm5zZXJ2ZXJzOyBpKyspCisgICAgeworICAgICAgLyogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIGEgc29ja2V0IGFuZCBpcyBzZWxlY3RlZCBpbiByZWFkX2Zkcy4gKi8KKyAgICAgIHNlcnZlciA9ICZjaGFubmVsLT5zZXJ2ZXJzW2ldOworCisgICAgICBpZiAoc2VydmVyLT51ZHBfc29ja2V0ID09IEFSRVNfU09DS0VUX0JBRCB8fCBzZXJ2ZXItPmlzX2Jyb2tlbikKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmKHJlYWRfZmRzKSB7CisgICAgICAgIGlmKCFGRF9JU1NFVChzZXJ2ZXItPnVkcF9zb2NrZXQsIHJlYWRfZmRzKSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihzZXJ2ZXItPnVkcF9zb2NrZXQgIT0gcmVhZF9mZCkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYocmVhZF9mZHMpCisgICAgICAgIC8qIElmIHRoZXJlJ3MgYW4gZXJyb3IgYW5kIHdlIGNsb3NlIHRoaXMgc29ja2V0LCB0aGVuIG9wZW4KKyAgICAgICAgICogYW5vdGhlciB3aXRoIHRoZSBzYW1lIGZkIHRvIHRhbGsgdG8gYW5vdGhlciBzZXJ2ZXIsIHRoZW4gd2UKKyAgICAgICAgICogZG9uJ3Qgd2FudCB0byB0aGluayB0aGF0IGl0IHdhcyB0aGUgbmV3IHNvY2tldCB0aGF0IHdhcworICAgICAgICAgKiByZWFkeS4gVGhpcyBpcyBub3QgZGlzYXN0cm91cywgYnV0IGlzIGxpa2VseSB0byByZXN1bHQgaW4KKyAgICAgICAgICogZXh0cmEgc3lzdGVtIGNhbGxzIGFuZCBjb25mdXNpb24uICovCisgICAgICAgIEZEX0NMUihzZXJ2ZXItPnVkcF9zb2NrZXQsIHJlYWRfZmRzKTsKKworICAgICAgLyogVG8gcmVkdWNlIGV2ZW50IGxvb3Agb3ZlcmhlYWQsIHJlYWQgYW5kIHByb2Nlc3MgYXMgbWFueQorICAgICAgICogcGFja2V0cyBhcyB3ZSBjYW4uICovCisgICAgICBkbyB7CisgICAgICAgIGlmIChzZXJ2ZXItPnVkcF9zb2NrZXQgPT0gQVJFU19TT0NLRVRfQkFEKQorICAgICAgICAgIGNvdW50ID0gMDsKKworICAgICAgICBlbHNlIHsKKyNpZmRlZiBIQVZFX1JFQ1ZGUk9NCisgICAgICAgICAgaWYgKHNlcnZlci0+YWRkci5mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgIGZyb21sZW4gPSBzaXplb2YoZnJvbS5zYTQpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZyb21sZW4gPSBzaXplb2YoZnJvbS5zYTYpOworICAgICAgICAgIGNvdW50ID0gKHNzaXplX3QpcmVjdmZyb20oc2VydmVyLT51ZHBfc29ja2V0LCAodm9pZCAqKWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihidWYpLCAwLCAmZnJvbS5zYSwgJmZyb21sZW4pOworI2Vsc2UKKyAgICAgICAgICBjb3VudCA9IHNyZWFkKHNlcnZlci0+dWRwX3NvY2tldCwgYnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb3VudCA9PSAtMSAmJiB0cnlfYWdhaW4oU09DS0VSUk5PKSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZWxzZSBpZiAoY291bnQgPD0gMCkKKyAgICAgICAgICBoYW5kbGVfZXJyb3IoY2hhbm5lbCwgaSwgbm93KTsKKyNpZmRlZiBIQVZFX1JFQ1ZGUk9NCisgICAgICAgIGVsc2UgaWYgKCFzYW1lX2FkZHJlc3MoJmZyb20uc2EsICZzZXJ2ZXItPmFkZHIpKQorICAgICAgICAgIC8qIFRoZSBhZGRyZXNzIHRoZSByZXNwb25zZSBjb21lcyBmcm9tIGRvZXMgbm90IG1hdGNoIHRoZSBhZGRyZXNzIHdlCisgICAgICAgICAgICogc2VudCB0aGUgcmVxdWVzdCB0by4gU29tZW9uZSBtYXkgYmUgYXR0ZW1wdGluZyB0byBwZXJmb3JtIGEgY2FjaGUKKyAgICAgICAgICAgKiBwb2lzb25pbmcgYXR0YWNrLiAqLworICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcm9jZXNzX2Fuc3dlcihjaGFubmVsLCBidWYsIChpbnQpY291bnQsIGksIDAsIG5vdyk7CisgICAgICAgfSB3aGlsZSAoY291bnQgPiAwKTsKKyAgICB9Cit9CisKKy8qIElmIGFueSBxdWVyaWVzIGhhdmUgdGltZWQgb3V0LCBub3RlIHRoZSB0aW1lb3V0IGFuZCBtb3ZlIHRoZW0gb24uICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RpbWVvdXRzKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworICB0aW1lX3QgdDsgIC8qIHRoZSB0aW1lIG9mIHRoZSB0aW1lb3V0cyB3ZSdyZSBwcm9jZXNzaW5nICovCisgIHN0cnVjdCBxdWVyeSAqcXVlcnk7CisgIHN0cnVjdCBsaXN0X25vZGUqIGxpc3RfaGVhZDsKKyAgc3RydWN0IGxpc3Rfbm9kZSogbGlzdF9ub2RlOworCisgIC8qIFByb2Nlc3MgYWxsIHRoZSB0aW1lb3V0cyB0aGF0IGhhdmUgZmlyZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBwcm9jZXNzZWQKKyAgICogdGltZW91dHMuIElmIHRoaW5ncyBhcmUgZ29pbmcgd2VsbCwgdGhlbiB3ZSdsbCBoYXZlIGh1bmRyZWRzL3Rob3VzYW5kcyBvZgorICAgKiBxdWVyaWVzIHRoYXQgZmFsbCBpbnRvIGZ1dHVyZSBidWNrZXRzLCBhbmQgb25seSBhIGhhbmRmdWwgb2YgcmVxdWVzdHMKKyAgICogdGhhdCBmYWxsIGludG8gdGhlICJub3ciIGJ1Y2tldCwgc28gdGhpcyBzaG91bGQgYmUgcXVpdGUgcXVpY2suCisgICAqLworICBmb3IgKHQgPSBjaGFubmVsLT5sYXN0X3RpbWVvdXRfcHJvY2Vzc2VkOyB0IDw9IG5vdy0+dHZfc2VjOyB0KyspCisgICAgeworICAgICAgbGlzdF9oZWFkID0gJihjaGFubmVsLT5xdWVyaWVzX2J5X3RpbWVvdXRbdCAlIEFSRVNfVElNRU9VVF9UQUJMRV9TSVpFXSk7CisgICAgICBmb3IgKGxpc3Rfbm9kZSA9IGxpc3RfaGVhZC0+bmV4dDsgbGlzdF9ub2RlICE9IGxpc3RfaGVhZDsgKQorICAgICAgICB7CisgICAgICAgICAgcXVlcnkgPSBsaXN0X25vZGUtPmRhdGE7CisgICAgICAgICAgbGlzdF9ub2RlID0gbGlzdF9ub2RlLT5uZXh0OyAgLyogaW4gY2FzZSB0aGUgcXVlcnkgZ2V0cyBkZWxldGVkICovCisgICAgICAgICAgaWYgKHF1ZXJ5LT50aW1lb3V0LnR2X3NlYyAmJiBhcmVzX190aW1lZG91dChub3csICZxdWVyeS0+dGltZW91dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHF1ZXJ5LT5lcnJvcl9zdGF0dXMgPSBBUkVTX0VUSU1FT1VUOworICAgICAgICAgICAgICArK3F1ZXJ5LT50aW1lb3V0czsKKyAgICAgICAgICAgICAgbmV4dF9zZXJ2ZXIoY2hhbm5lbCwgcXVlcnksIG5vdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgfQorICBjaGFubmVsLT5sYXN0X3RpbWVvdXRfcHJvY2Vzc2VkID0gbm93LT50dl9zZWM7Cit9CisKKy8qIEhhbmRsZSBhbiBhbnN3ZXIgZnJvbSBhIHNlcnZlci4gKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NfYW5zd2VyKGFyZXNfY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyICphYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZW4sIGludCB3aGljaHNlcnZlciwgaW50IHRjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpub3cpCit7CisgIGludCB0YywgcmNvZGUsIHBhY2tldHN6OworICB1bnNpZ25lZCBzaG9ydCBpZDsKKyAgc3RydWN0IHF1ZXJ5ICpxdWVyeTsKKyAgc3RydWN0IGxpc3Rfbm9kZSogbGlzdF9oZWFkOworICBzdHJ1Y3QgbGlzdF9ub2RlKiBsaXN0X25vZGU7CisKKyAgLyogSWYgdGhlcmUncyBubyByb29tIGluIHRoZSBhbnN3ZXIgZm9yIGEgaGVhZGVyLCB3ZSBjYW4ndCBkbyBtdWNoCisgICAqIHdpdGggaXQuICovCisgIGlmIChhbGVuIDwgSEZJWEVEU1opCisgICAgcmV0dXJuOworCisgIC8qIEdyYWIgdGhlIHF1ZXJ5IElELCB0cnVuY2F0ZSBiaXQsIGFuZCByZXNwb25zZSBjb2RlIGZyb20gdGhlIHBhY2tldC4gKi8KKyAgaWQgPSBETlNfSEVBREVSX1FJRChhYnVmKTsKKyAgdGMgPSBETlNfSEVBREVSX1RDKGFidWYpOworICByY29kZSA9IEROU19IRUFERVJfUkNPREUoYWJ1Zik7CisKKyAgLyogRmluZCB0aGUgcXVlcnkgY29ycmVzcG9uZGluZyB0byB0aGlzIHBhY2tldC4gVGhlIHF1ZXJpZXMgYXJlCisgICAqIGhhc2hlZC9idWNrZXRlZCBieSBxdWVyeSBpZCwgc28gdGhpcyBsb29rdXAgc2hvdWxkIGJlIHF1aWNrLiAgTm90ZSB0aGF0CisgICAqIGJvdGggdGhlIHF1ZXJ5IGlkIGFuZCB0aGUgcXVlc3Rpb25zIG11c3QgYmUgdGhlIHNhbWU7IHdoZW4gdGhlIHF1ZXJ5IGlkCisgICAqIHdyYXBzIGFyb3VuZCB3ZSBjYW4gaGF2ZSBtdWx0aXBsZSBvdXRzdGFuZGluZyBxdWVyaWVzIHdpdGggdGhlIHNhbWUgcXVlcnkKKyAgICogaWQsIHNvIHdlIG5lZWQgdG8gY2hlY2sgYm90aCB0aGUgaWQgYW5kIHF1ZXN0aW9uLgorICAgKi8KKyAgcXVlcnkgPSBOVUxMOworICBsaXN0X2hlYWQgPSAmKGNoYW5uZWwtPnF1ZXJpZXNfYnlfcWlkW2lkICUgQVJFU19RSURfVEFCTEVfU0laRV0pOworICBmb3IgKGxpc3Rfbm9kZSA9IGxpc3RfaGVhZC0+bmV4dDsgbGlzdF9ub2RlICE9IGxpc3RfaGVhZDsKKyAgICAgICBsaXN0X25vZGUgPSBsaXN0X25vZGUtPm5leHQpCisgICAgeworICAgICAgc3RydWN0IHF1ZXJ5ICpxID0gbGlzdF9ub2RlLT5kYXRhOworICAgICAgaWYgKChxLT5xaWQgPT0gaWQpICYmIHNhbWVfcXVlc3Rpb25zKHEtPnFidWYsIHEtPnFsZW4sIGFidWYsIGFsZW4pKQorICAgICAgICB7CisgICAgICAgICAgcXVlcnkgPSBxOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICBpZiAoIXF1ZXJ5KQorICAgIHJldHVybjsKKworICBwYWNrZXRzeiA9IFBBQ0tFVFNaOworICAvKiBJZiB3ZSB1c2UgRUROUyBhbmQgc2VydmVyIGFuc3dlcnMgd2l0aCBvbmUgb2YgdGhlc2UgUkNPREVTLCB0aGUgcHJvdG9jb2wKKyAgICogZXh0ZW5zaW9uIGlzIG5vdCB1bmRlcnN0b29kIGJ5IHRoZSByZXNwb25kZXIuIFdlIG11c3QgcmV0cnkgdGhlIHF1ZXJ5CisgICAqIHdpdGhvdXQgRUROUyBlbmFibGVkLgorICAgKi8KKyAgaWYgKGNoYW5uZWwtPmZsYWdzICYgQVJFU19GTEFHX0VETlMpCisgIHsKKyAgICAgIHBhY2tldHN6ID0gY2hhbm5lbC0+ZWRuc3BzejsKKyAgICAgIGlmIChyY29kZSA9PSBOT1RJTVAgfHwgcmNvZGUgPT0gRk9STUVSUiB8fCByY29kZSA9PSBTRVJWRkFJTCkKKyAgICAgIHsKKyAgICAgICAgICBpbnQgcWxlbiA9IChxdWVyeS0+dGNwbGVuIC0gMikgLSBFRE5TRklYRURTWjsKKyAgICAgICAgICBjaGFubmVsLT5mbGFncyBePSBBUkVTX0ZMQUdfRUROUzsKKyAgICAgICAgICBxdWVyeS0+dGNwbGVuIC09IEVETlNGSVhFRFNaOworICAgICAgICAgIHF1ZXJ5LT5xbGVuIC09IEVETlNGSVhFRFNaOworICAgICAgICAgIHF1ZXJ5LT50Y3BidWZbMF0gPSAodW5zaWduZWQgY2hhcikoKHFsZW4gPj4gOCkgJiAweGZmKTsKKyAgICAgICAgICBxdWVyeS0+dGNwYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpKHFsZW4gJiAweGZmKTsKKyAgICAgICAgICBETlNfSEVBREVSX1NFVF9BUkNPVU5UKHF1ZXJ5LT50Y3BidWYgKyAyLCAwKTsKKyAgICAgICAgICBxdWVyeS0+dGNwYnVmID0gYXJlc19yZWFsbG9jKHF1ZXJ5LT50Y3BidWYsIHF1ZXJ5LT50Y3BsZW4pOworICAgICAgICAgIHF1ZXJ5LT5xYnVmID0gcXVlcnktPnRjcGJ1ZiArIDI7CisgICAgICAgICAgYXJlc19fc2VuZF9xdWVyeShjaGFubmVsLCBxdWVyeSwgbm93KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICB9CisgIH0KKworICAvKiBJZiB3ZSBnb3QgYSB0cnVuY2F0ZWQgVURQIHBhY2tldCBhbmQgYXJlIG5vdCBpZ25vcmluZyB0cnVuY2F0aW9uLAorICAgKiBkb24ndCBhY2NlcHQgdGhlIHBhY2tldCwgYW5kIHN3aXRjaCB0aGUgcXVlcnkgdG8gVENQIGlmIHdlIGhhZG4ndAorICAgKiBkb25lIHNvIGFscmVhZHkuCisgICAqLworICBpZiAoKHRjIHx8IGFsZW4gPiBwYWNrZXRzeikgJiYgIXRjcCAmJiAhKGNoYW5uZWwtPmZsYWdzICYgQVJFU19GTEFHX0lHTlRDKSkKKyAgICB7CisgICAgICBpZiAoIXF1ZXJ5LT51c2luZ190Y3ApCisgICAgICAgIHsKKyAgICAgICAgICBxdWVyeS0+dXNpbmdfdGNwID0gMTsKKyAgICAgICAgICBhcmVzX19zZW5kX3F1ZXJ5KGNoYW5uZWwsIHF1ZXJ5LCBub3cpOworICAgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIExpbWl0IGFsZW4gdG8gUEFDS0VUU1ogaWYgd2UgYXJlbid0IHVzaW5nIFRDUCAob25seSByZWxldmFudCBpZiB3ZQorICAgKiBhcmUgaWdub3JpbmcgdHJ1bmNhdGlvbi4KKyAgICovCisgIGlmIChhbGVuID4gcGFja2V0c3ogJiYgIXRjcCkKKyAgICAgIGFsZW4gPSBwYWNrZXRzejsKKworICAvKiBJZiB3ZSBhcmVuJ3QgcGFzc2luZyB0aHJvdWdoIGFsbCBlcnJvciBwYWNrZXRzLCBkaXNjYXJkIHBhY2tldHMKKyAgICogd2l0aCBTRVJWRkFJTCwgTk9USU1QLCBvciBSRUZVU0VEIHJlc3BvbnNlIGNvZGVzLgorICAgKi8KKyAgaWYgKCEoY2hhbm5lbC0+ZmxhZ3MgJiBBUkVTX0ZMQUdfTk9DSEVDS1JFU1ApKQorICAgIHsKKyAgICAgIGlmIChyY29kZSA9PSBTRVJWRkFJTCB8fCByY29kZSA9PSBOT1RJTVAgfHwgcmNvZGUgPT0gUkVGVVNFRCkKKyAgICAgICAgeworICAgICAgICAgIHNraXBfc2VydmVyKGNoYW5uZWwsIHF1ZXJ5LCB3aGljaHNlcnZlcik7CisgICAgICAgICAgaWYgKHF1ZXJ5LT5zZXJ2ZXIgPT0gd2hpY2hzZXJ2ZXIpCisgICAgICAgICAgICBuZXh0X3NlcnZlcihjaGFubmVsLCBxdWVyeSwgbm93KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgZW5kX3F1ZXJ5KGNoYW5uZWwsIHF1ZXJ5LCBBUkVTX1NVQ0NFU1MsIGFidWYsIGFsZW4pOworfQorCisvKiBDbG9zZSBhbGwgdGhlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIG5vIGxvbmdlciB1c2FibGUuICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Jyb2tlbl9jb25uZWN0aW9ucyhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpub3cpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+bnNlcnZlcnM7IGkrKykKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXIgPSAmY2hhbm5lbC0+c2VydmVyc1tpXTsKKyAgICAgIGlmIChzZXJ2ZXItPmlzX2Jyb2tlbikKKyAgICAgICAgeworICAgICAgICAgIGhhbmRsZV9lcnJvcihjaGFubmVsLCBpLCBub3cpOworICAgICAgICB9CisgICAgfQorfQorCisvKiBTd2FwIHRoZSBjb250ZW50cyBvZiB0d28gbGlzdHMgKi8KK3N0YXRpYyB2b2lkIHN3YXBfbGlzdHMoc3RydWN0IGxpc3Rfbm9kZSogaGVhZF9hLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9ub2RlKiBoZWFkX2IpCit7CisgIGludCBpc19hX2VtcHR5ID0gYXJlc19faXNfbGlzdF9lbXB0eShoZWFkX2EpOworICBpbnQgaXNfYl9lbXB0eSA9IGFyZXNfX2lzX2xpc3RfZW1wdHkoaGVhZF9iKTsKKyAgc3RydWN0IGxpc3Rfbm9kZSBvbGRfYSA9ICpoZWFkX2E7CisgIHN0cnVjdCBsaXN0X25vZGUgb2xkX2IgPSAqaGVhZF9iOworCisgIGlmIChpc19hX2VtcHR5KSB7CisgICAgYXJlc19faW5pdF9saXN0X2hlYWQoaGVhZF9iKTsKKyAgfSBlbHNlIHsKKyAgICAqaGVhZF9iID0gb2xkX2E7CisgICAgb2xkX2EubmV4dC0+cHJldiA9IGhlYWRfYjsKKyAgICBvbGRfYS5wcmV2LT5uZXh0ID0gaGVhZF9iOworICB9CisgIGlmIChpc19iX2VtcHR5KSB7CisgICAgYXJlc19faW5pdF9saXN0X2hlYWQoaGVhZF9hKTsKKyAgfSBlbHNlIHsKKyAgICAqaGVhZF9hID0gb2xkX2I7CisgICAgb2xkX2IubmV4dC0+cHJldiA9IGhlYWRfYTsKKyAgICBvbGRfYi5wcmV2LT5uZXh0ID0gaGVhZF9hOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9lcnJvcihhcmVzX2NoYW5uZWwgY2hhbm5lbCwgaW50IHdoaWNoc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpub3cpCit7CisgIHN0cnVjdCBzZXJ2ZXJfc3RhdGUgKnNlcnZlcjsKKyAgc3RydWN0IHF1ZXJ5ICpxdWVyeTsKKyAgc3RydWN0IGxpc3Rfbm9kZSBsaXN0X2hlYWQ7CisgIHN0cnVjdCBsaXN0X25vZGUqIGxpc3Rfbm9kZTsKKworICBzZXJ2ZXIgPSAmY2hhbm5lbC0+c2VydmVyc1t3aGljaHNlcnZlcl07CisKKyAgLyogUmVzZXQgY29tbXVuaWNhdGlvbnMgd2l0aCB0aGlzIHNlcnZlci4gKi8KKyAgYXJlc19fY2xvc2Vfc29ja2V0cyhjaGFubmVsLCBzZXJ2ZXIpOworCisgIC8qIFRlbGwgYWxsIHF1ZXJpZXMgdGFsa2luZyB0byB0aGlzIHNlcnZlciB0byBtb3ZlIG9uIGFuZCBub3QgdHJ5IHRoaXMKKyAgICogc2VydmVyIGFnYWluLiBXZSBzdGVhbCB0aGUgY3VycmVudCBsaXN0IG9mIHF1ZXJpZXMgdGhhdCB3ZXJlIGluLWZsaWdodCB0bworICAgKiB0aGlzIHNlcnZlciwgc2luY2Ugd2hlbiB3ZSBjYWxsIG5leHRfc2VydmVyIHRoaXMgY2FuIGNhdXNlIHRoZSBxdWVyaWVzIHRvCisgICAqIGJlIHJlLXNlbnQgdG8gdGhpcyBzZXJ2ZXIsIHdoaWNoIHdpbGwgcmUtaW5zZXJ0IHRoZXNlIHF1ZXJpZXMgaW4gdGhhdAorICAgKiBzYW1lIHNlcnZlci0+cXVlcmllc190b19zZXJ2ZXIgbGlzdC4KKyAgICovCisgIGFyZXNfX2luaXRfbGlzdF9oZWFkKCZsaXN0X2hlYWQpOworICBzd2FwX2xpc3RzKCZsaXN0X2hlYWQsICYoc2VydmVyLT5xdWVyaWVzX3RvX3NlcnZlcikpOworICBmb3IgKGxpc3Rfbm9kZSA9IGxpc3RfaGVhZC5uZXh0OyBsaXN0X25vZGUgIT0gJmxpc3RfaGVhZDsgKQorICAgIHsKKyAgICAgIHF1ZXJ5ID0gbGlzdF9ub2RlLT5kYXRhOworICAgICAgbGlzdF9ub2RlID0gbGlzdF9ub2RlLT5uZXh0OyAgLyogaW4gY2FzZSB0aGUgcXVlcnkgZ2V0cyBkZWxldGVkICovCisgICAgICBhc3NlcnQocXVlcnktPnNlcnZlciA9PSB3aGljaHNlcnZlcik7CisgICAgICBza2lwX3NlcnZlcihjaGFubmVsLCBxdWVyeSwgd2hpY2hzZXJ2ZXIpOworICAgICAgbmV4dF9zZXJ2ZXIoY2hhbm5lbCwgcXVlcnksIG5vdyk7CisgICAgfQorICAvKiBFYWNoIHF1ZXJ5IHNob3VsZCBoYXZlIHJlbW92ZWQgaXRzZWxmIGZyb20gb3VyIHRlbXBvcmFyeSBsaXN0IGFzCisgICAqIGl0IHJlLXNlbnQgaXRzZWxmIG9yIGZpbmlzaGVkIHVwLi4uCisgICAqLworICBhc3NlcnQoYXJlc19faXNfbGlzdF9lbXB0eSgmbGlzdF9oZWFkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfc2VydmVyKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgcXVlcnkgKnF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNoc2VydmVyKQoreworICAvKiBUaGUgZ2l2ZW4gc2VydmVyIGdhdmUgdXMgcHJvYmxlbXMgd2l0aCB0aGlzIHF1ZXJ5LCBzbyBpZiB3ZSBoYXZlIHRoZQorICAgKiBsdXh1cnkgb2YgdXNpbmcgb3RoZXIgc2VydmVycywgdGhlbiBsZXQncyBza2lwIHRoZSBwb3RlbnRpYWxseSBicm9rZW4KKyAgICogc2VydmVyIGFuZCBqdXN0IHVzZSB0aGUgb3RoZXJzLiBJZiB3ZSBvbmx5IGhhdmUgb25lIHNlcnZlciBhbmQgd2UgbmVlZCB0bworICAgKiByZXRyeSB0aGVuIHdlIHNob3VsZCBqdXN0IGdvIGFoZWFkIGFuZCByZS11c2UgdGhhdCBzZXJ2ZXIsIHNpbmNlIGl0J3Mgb3VyCisgICAqIG9ubHkgaG9wZTsgcGVyaGFwcyB3ZSBqdXN0IGdvdCB1bmx1Y2t5LCBhbmQgcmV0cnlpbmcgd2lsbCB3b3JrIChlZywgdGhlCisgICAqIHNlcnZlciB0aW1lZCBvdXQgb3VyIFRDUCBjb25uZWN0aW9uIGp1c3QgYXMgd2Ugd2VyZSBzZW5kaW5nIGFub3RoZXIKKyAgICogcmVxdWVzdCkuCisgICAqLworICBpZiAoY2hhbm5lbC0+bnNlcnZlcnMgPiAxKQorICAgIHsKKyAgICAgIHF1ZXJ5LT5zZXJ2ZXJfaW5mb1t3aGljaHNlcnZlcl0uc2tpcF9zZXJ2ZXIgPSAxOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbmV4dF9zZXJ2ZXIoYXJlc19jaGFubmVsIGNoYW5uZWwsIHN0cnVjdCBxdWVyeSAqcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworICAvKiBXZSBuZWVkIHRvIHRyeSBlYWNoIHNlcnZlciBjaGFubmVsLT50cmllcyB0aW1lcy4gV2UgaGF2ZSBjaGFubmVsLT5uc2VydmVycworICAgKiBzZXJ2ZXJzIHRvIHRyeS4gSW4gdG90YWwsIHdlIG5lZWQgdG8gZG8gY2hhbm5lbC0+bnNlcnZlcnMgKiBjaGFubmVsLT50cmllcworICAgKiBhdHRlbXB0cy4gVXNlIHF1ZXJ5LT50cnkgdG8gcmVtZW1iZXIgaG93IG1hbnkgdGltZXMgd2UgYWxyZWFkeSBhdHRlbXB0ZWQKKyAgICogdGhpcyBxdWVyeS4gVXNlIG1vZHVsYXIgYXJpdGhtZXRpYyB0byBmaW5kIHRoZSBuZXh0IHNlcnZlciB0byB0cnkuICovCisgIHdoaWxlICgrKyhxdWVyeS0+dHJ5X2NvdW50KSA8IChjaGFubmVsLT5uc2VydmVycyAqIGNoYW5uZWwtPnRyaWVzKSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXI7CisKKyAgICAgIC8qIE1vdmUgb24gdG8gdGhlIG5leHQgc2VydmVyLiAqLworICAgICAgcXVlcnktPnNlcnZlciA9IChxdWVyeS0+c2VydmVyICsgMSkgJSBjaGFubmVsLT5uc2VydmVyczsKKyAgICAgIHNlcnZlciA9ICZjaGFubmVsLT5zZXJ2ZXJzW3F1ZXJ5LT5zZXJ2ZXJdOworCisgICAgICAvKiBXZSBkb24ndCB3YW50IHRvIHVzZSB0aGlzIHNlcnZlciBpZiAoMSkgd2UgZGVjaWRlZCB0aGlzIGNvbm5lY3Rpb24gaXMKKyAgICAgICAqIGJyb2tlbiwgYW5kIHRodXMgYWJvdXQgdG8gYmUgY2xvc2VkLCAoMikgd2UndmUgZGVjaWRlZCB0byBza2lwIHRoaXMKKyAgICAgICAqIHNlcnZlciBiZWNhdXNlIG9mIGVhcmxpZXIgZXJyb3JzIHdlIGVuY291bnRlcmVkLCBvciAoMykgd2UgYWxyZWFkeQorICAgICAgICogc2VudCB0aGlzIHF1ZXJ5IG92ZXIgdGhpcyBleGFjdCBjb25uZWN0aW9uLgorICAgICAgICovCisgICAgICBpZiAoIXNlcnZlci0+aXNfYnJva2VuICYmCisgICAgICAgICAgICFxdWVyeS0+c2VydmVyX2luZm9bcXVlcnktPnNlcnZlcl0uc2tpcF9zZXJ2ZXIgJiYKKyAgICAgICAgICAgIShxdWVyeS0+dXNpbmdfdGNwICYmCisgICAgICAgICAgICAgKHF1ZXJ5LT5zZXJ2ZXJfaW5mb1txdWVyeS0+c2VydmVyXS50Y3BfY29ubmVjdGlvbl9nZW5lcmF0aW9uID09CisgICAgICAgICAgICAgIHNlcnZlci0+dGNwX2Nvbm5lY3Rpb25fZ2VuZXJhdGlvbikpKQorICAgICAgICB7CisgICAgICAgICAgIGFyZXNfX3NlbmRfcXVlcnkoY2hhbm5lbCwgcXVlcnksIG5vdyk7CisgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAvKiBZb3UgbWlnaHQgdGhpbmsgdGhhdCB3aXRoIFRDUCB3ZSBvbmx5IG5lZWQgb25lIHRyeS4gSG93ZXZlciwgZXZlbgorICAgICAgICogd2hlbiB1c2luZyBUQ1AsIHNlcnZlcnMgY2FuIHRpbWUtb3V0IG91ciBjb25uZWN0aW9uIGp1c3QgYXMgd2UncmUKKyAgICAgICAqIHNlbmRpbmcgYSByZXF1ZXN0LCBvciBjbG9zZSBvdXIgY29ubmVjdGlvbiBiZWNhdXNlIHRoZXkgZGllLCBvciBuZXZlcgorICAgICAgICogc2VuZCB1cyBhIHJlcGx5IGJlY2F1c2UgdGhleSBnZXQgd2VkZ2VkIG9yIHRpY2tsZSBhIGJ1ZyB0aGF0IGRyb3BzCisgICAgICAgKiBvdXIgcmVxdWVzdC4KKyAgICAgICAqLworICAgIH0KKworICAvKiBJZiB3ZSBhcmUgaGVyZSwgYWxsIGF0dGVtcHRzIHRvIHBlcmZvcm0gcXVlcnkgZmFpbGVkLiAqLworICBlbmRfcXVlcnkoY2hhbm5lbCwgcXVlcnksIHF1ZXJ5LT5lcnJvcl9zdGF0dXMsIE5VTEwsIDApOworfQorCit2b2lkIGFyZXNfX3NlbmRfcXVlcnkoYXJlc19jaGFubmVsIGNoYW5uZWwsIHN0cnVjdCBxdWVyeSAqcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKyAgc3RydWN0IHNlbmRfcmVxdWVzdCAqc2VuZHJlcTsKKyAgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVyOworICBpbnQgdGltZXBsdXM7CisKKyAgc2VydmVyID0gJmNoYW5uZWwtPnNlcnZlcnNbcXVlcnktPnNlcnZlcl07CisgIGlmIChxdWVyeS0+dXNpbmdfdGNwKQorICAgIHsKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgVENQIHNvY2tldCBmb3IgdGhpcyBzZXJ2ZXIgaXMgc2V0IHVwIGFuZCBxdWV1ZQorICAgICAgICogYSBzZW5kIHJlcXVlc3QuCisgICAgICAgKi8KKyAgICAgIGlmIChzZXJ2ZXItPnRjcF9zb2NrZXQgPT0gQVJFU19TT0NLRVRfQkFEKQorICAgICAgICB7CisgICAgICAgICAgaWYgKG9wZW5fdGNwX3NvY2tldChjaGFubmVsLCBzZXJ2ZXIpID09IC0xKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBza2lwX3NlcnZlcihjaGFubmVsLCBxdWVyeSwgcXVlcnktPnNlcnZlcik7CisgICAgICAgICAgICAgIG5leHRfc2VydmVyKGNoYW5uZWwsIHF1ZXJ5LCBub3cpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHNlbmRyZXEgPSBhcmVzX21hbGxvYyhzaXplb2Yoc3RydWN0IHNlbmRfcmVxdWVzdCkpOworICAgICAgaWYgKCFzZW5kcmVxKQorICAgICAgICB7CisgICAgICAgIGVuZF9xdWVyeShjaGFubmVsLCBxdWVyeSwgQVJFU19FTk9NRU0sIE5VTEwsIDApOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgbWVtc2V0KHNlbmRyZXEsIDAsIHNpemVvZihzdHJ1Y3Qgc2VuZF9yZXF1ZXN0KSk7CisgICAgICAvKiBUbyBtYWtlIHRoZSBjb21tb24gY2FzZSBmYXN0LCB3ZSBhdm9pZCBjb3BpZXMgYnkgdXNpbmcgdGhlIHF1ZXJ5J3MKKyAgICAgICAqIHRjcGJ1ZiBmb3IgYXMgbG9uZyBhcyB0aGUgcXVlcnkgaXMgYWxpdmUuIEluIHRoZSByYXJlIGNhc2Ugd2hlcmUgdGhlCisgICAgICAgKiBxdWVyeSBlbmRzIHdoaWxlIGl0J3MgcXVldWVkIGZvciB0cmFuc21pc3Npb24sIHRoZW4gd2UgZ2l2ZSB0aGUKKyAgICAgICAqIHNlbmRyZXEgaXRzIG93biBjb3B5IG9mIHRoZSByZXF1ZXN0IHBhY2tldCBhbmQgcHV0IGl0IGluCisgICAgICAgKiBzZW5kcmVxLT5kYXRhX3N0b3JhZ2UuCisgICAgICAgKi8KKyAgICAgIHNlbmRyZXEtPmRhdGFfc3RvcmFnZSA9IE5VTEw7CisgICAgICBzZW5kcmVxLT5kYXRhID0gcXVlcnktPnRjcGJ1ZjsKKyAgICAgIHNlbmRyZXEtPmxlbiA9IHF1ZXJ5LT50Y3BsZW47CisgICAgICBzZW5kcmVxLT5vd25lcl9xdWVyeSA9IHF1ZXJ5OworICAgICAgc2VuZHJlcS0+bmV4dCA9IE5VTEw7CisgICAgICBpZiAoc2VydmVyLT5xdGFpbCkKKyAgICAgICAgc2VydmVyLT5xdGFpbC0+bmV4dCA9IHNlbmRyZXE7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBTT0NLX1NUQVRFX0NBTExCQUNLKGNoYW5uZWwsIHNlcnZlci0+dGNwX3NvY2tldCwgMSwgMSk7CisgICAgICAgICAgc2VydmVyLT5xaGVhZCA9IHNlbmRyZXE7CisgICAgICAgIH0KKyAgICAgIHNlcnZlci0+cXRhaWwgPSBzZW5kcmVxOworICAgICAgcXVlcnktPnNlcnZlcl9pbmZvW3F1ZXJ5LT5zZXJ2ZXJdLnRjcF9jb25uZWN0aW9uX2dlbmVyYXRpb24gPQorICAgICAgICBzZXJ2ZXItPnRjcF9jb25uZWN0aW9uX2dlbmVyYXRpb247CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHNlcnZlci0+dWRwX3NvY2tldCA9PSBBUkVTX1NPQ0tFVF9CQUQpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAob3Blbl91ZHBfc29ja2V0KGNoYW5uZWwsIHNlcnZlcikgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNraXBfc2VydmVyKGNoYW5uZWwsIHF1ZXJ5LCBxdWVyeS0+c2VydmVyKTsKKyAgICAgICAgICAgICAgbmV4dF9zZXJ2ZXIoY2hhbm5lbCwgcXVlcnksIG5vdyk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKHN3cml0ZShzZXJ2ZXItPnVkcF9zb2NrZXQsIHF1ZXJ5LT5xYnVmLCBxdWVyeS0+cWxlbikgPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBGSVhNRTogSGFuZGxlIEVBR0FJTiBoZXJlIHNpbmNlIGl0IGxpa2VseSBjYW4gaGFwcGVuLiAqLworICAgICAgICAgIHNraXBfc2VydmVyKGNoYW5uZWwsIHF1ZXJ5LCBxdWVyeS0+c2VydmVyKTsKKyAgICAgICAgICBuZXh0X3NlcnZlcihjaGFubmVsLCBxdWVyeSwgbm93KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgdGltZXBsdXMgPSBjaGFubmVsLT50aW1lb3V0IDw8IChxdWVyeS0+dHJ5X2NvdW50IC8gY2hhbm5lbC0+bnNlcnZlcnMpOworICAgIHRpbWVwbHVzID0gKHRpbWVwbHVzICogKDkgKyAocmFuZCAoKSAmIDcpKSkgLyAxNjsKKyAgICBxdWVyeS0+dGltZW91dCA9ICpub3c7CisgICAgdGltZWFkZCgmcXVlcnktPnRpbWVvdXQsIHRpbWVwbHVzKTsKKyAgICAvKiBLZWVwIHRyYWNrIG9mIHF1ZXJpZXMgYnVja2V0ZWQgYnkgdGltZW91dCwgc28gd2UgY2FuIHByb2Nlc3MKKyAgICAgKiB0aW1lb3V0IGV2ZW50cyBxdWlja2x5LgorICAgICAqLworICAgIGFyZXNfX3JlbW92ZV9mcm9tX2xpc3QoJihxdWVyeS0+cXVlcmllc19ieV90aW1lb3V0KSk7CisgICAgYXJlc19faW5zZXJ0X2luX2xpc3QoCisgICAgICAgICYocXVlcnktPnF1ZXJpZXNfYnlfdGltZW91dCksCisgICAgICAgICYoY2hhbm5lbC0+cXVlcmllc19ieV90aW1lb3V0W3F1ZXJ5LT50aW1lb3V0LnR2X3NlYyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSRVNfVElNRU9VVF9UQUJMRV9TSVpFXSkpOworCisgICAgLyogS2VlcCB0cmFjayBvZiBxdWVyaWVzIGJ1Y2tldGVkIGJ5IHNlcnZlciwgc28gd2UgY2FuIHByb2Nlc3Mgc2VydmVyCisgICAgICogZXJyb3JzIHF1aWNrbHkuCisgICAgICovCisgICAgYXJlc19fcmVtb3ZlX2Zyb21fbGlzdCgmKHF1ZXJ5LT5xdWVyaWVzX3RvX3NlcnZlcikpOworICAgIGFyZXNfX2luc2VydF9pbl9saXN0KCYocXVlcnktPnF1ZXJpZXNfdG9fc2VydmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmKHNlcnZlci0+cXVlcmllc190b19zZXJ2ZXIpKTsKK30KKworLyoKKyAqIHNldHNvY2tub25ibG9jayBzZXRzIHRoZSBnaXZlbiBzb2NrZXQgdG8gZWl0aGVyIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZworICogbW9kZSBiYXNlZCBvbiB0aGUgJ25vbmJsb2NrJyBib29sZWFuIGFyZ3VtZW50LiBUaGlzIGZ1bmN0aW9uIGlzIGhpZ2hseQorICogcG9ydGFibGUuCisgKi8KK3N0YXRpYyBpbnQgc2V0c29ja25vbmJsb2NrKGFyZXNfc29ja2V0X3Qgc29ja2ZkLCAgICAvKiBvcGVyYXRlIG9uIHRoaXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBub25ibG9jayAgIC8qIFRSVUUgb3IgRkFMU0UgKi8pCit7CisjaWYgZGVmaW5lZChVU0VfQkxPQ0tJTkdfU09DS0VUUykKKworICByZXR1cm4gMDsgLyogcmV0dXJucyBzdWNjZXNzICovCisKKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9PX05PTkJMT0NLKQorCisgIC8qIG1vc3QgcmVjZW50IHVuaXggdmVyc2lvbnMgKi8KKyAgaW50IGZsYWdzOworICBmbGFncyA9IGZjbnRsKHNvY2tmZCwgRl9HRVRGTCwgMCk7CisgIGlmIChGQUxTRSAhPSBub25ibG9jaykKKyAgICByZXR1cm4gZmNudGwoc29ja2ZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spOworICBlbHNlCisgICAgcmV0dXJuIGZjbnRsKHNvY2tmZCwgRl9TRVRGTCwgZmxhZ3MgJiAofk9fTk9OQkxPQ0spKTsgIC8qIExDT1ZfRVhDTF9MSU5FICovCisKKyNlbGlmIGRlZmluZWQoSEFWRV9JT0NUTF9GSU9OQklPKQorCisgIC8qIG9sZGVyIHVuaXggdmVyc2lvbnMgKi8KKyAgaW50IGZsYWdzID0gbm9uYmxvY2sgPyAxIDogMDsKKyAgcmV0dXJuIGlvY3RsKHNvY2tmZCwgRklPTkJJTywgJmZsYWdzKTsKKworI2VsaWYgZGVmaW5lZChIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8pCisKKyNpZmRlZiBXQVRUMzIKKyAgY2hhciBmbGFncyA9IG5vbmJsb2NrID8gMSA6IDA7CisjZWxzZQorICAvKiBXaW5kb3dzICovCisgIHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBub25ibG9jayA/IDFVTCA6IDBVTDsKKyNlbmRpZgorICByZXR1cm4gaW9jdGxzb2NrZXQoc29ja2ZkLCBGSU9OQklPLCAmZmxhZ3MpOworCisjZWxpZiBkZWZpbmVkKEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTykKKworICAvKiBBbWlnYSAqLworICBsb25nIGZsYWdzID0gbm9uYmxvY2sgPyAxTCA6IDBMOworICByZXR1cm4gSW9jdGxTb2NrZXQoc29ja2ZkLCBGSU9OQklPLCBmbGFncyk7CisKKyNlbGlmIGRlZmluZWQoSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLKQorCisgIC8qIEJlT1MgKi8KKyAgbG9uZyBiID0gbm9uYmxvY2sgPyAxTCA6IDBMOworICByZXR1cm4gc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX05PTkJMT0NLLCAmYiwgc2l6ZW9mKGIpKTsKKworI2Vsc2UKKyMgIGVycm9yICJubyBub24tYmxvY2tpbmcgbWV0aG9kIHdhcyBmb3VuZC91c2VkL3NldCIKKyNlbmRpZgorfQorI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UgMQorc3RhdGljIGludCBjb25maWd1cmVfc29ja2V0KGFyZXNfc29ja2V0X3QgcywgaW50IGZhbWlseSwgYXJlc19jaGFubmVsIGNoYW5uZWwpCit7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgIHNhOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgc2E0OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc2E2OworICB9IGxvY2FsOworCisgICh2b2lkKXNldHNvY2tub25ibG9jayhzLCBUUlVFKTsKKworI2lmIGRlZmluZWQoRkRfQ0xPRVhFQykgJiYgIWRlZmluZWQoTVNET1MpCisgIC8qIENvbmZpZ3VyZSB0aGUgc29ja2V0IGZkIGFzIGNsb3NlLW9uLWV4ZWMuICovCisgIGlmIChmY250bChzLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA9PSAtMSkKKyAgICByZXR1cm4gLTE7ICAvKiBMQ09WX0VYQ0xfTElORSAqLworI2VuZGlmCisKKyAgLyogU2V0IHRoZSBzb2NrZXQncyBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBzaXplcy4gKi8KKyAgaWYgKChjaGFubmVsLT5zb2NrZXRfc2VuZF9idWZmZXJfc2l6ZSA+IDApICYmCisgICAgICBzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwKKyAgICAgICAgICAgICAgICAgKHZvaWQgKikmY2hhbm5lbC0+c29ja2V0X3NlbmRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgIHNpemVvZihjaGFubmVsLT5zb2NrZXRfc2VuZF9idWZmZXJfc2l6ZSkpID09IC0xKQorICAgIHJldHVybiAtMTsKKworICBpZiAoKGNoYW5uZWwtPnNvY2tldF9yZWNlaXZlX2J1ZmZlcl9zaXplID4gMCkgJiYKKyAgICAgIHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAorICAgICAgICAgICAgICAgICAodm9pZCAqKSZjaGFubmVsLT5zb2NrZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKGNoYW5uZWwtPnNvY2tldF9yZWNlaXZlX2J1ZmZlcl9zaXplKSkgPT0gLTEpCisgICAgcmV0dXJuIC0xOworZnByaW50ZihzdGRlcnIsICJjb25maWd1cmVfc29ja2V0IGJlZm9yZVxuIik7CisjaWZkZWYgU09fQklORFRPREVWSUNFCisgIGlmIChjaGFubmVsLT5sb2NhbF9kZXZfbmFtZVswXSkgeworICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwKKyAgICAgICAgICAgICAgICAgICBjaGFubmVsLT5sb2NhbF9kZXZfbmFtZSwgc2l6ZW9mKGNoYW5uZWwtPmxvY2FsX2Rldl9uYW1lKSkgPT0gLTEpIHsKKyAgICAgIAkvKiBPbmx5IHJvb3QgY2FuIGRvIHRoaXMsIGFuZCB1c3VhbGx5IG5vdCBmYXRhbCBpZiBpdCBkb2Vzbid0IHdvcmssIHNvICovCisJLyoganVzdCBjb250aW51ZSBvbi4gKi8KKwkJZnByaW50ZihzdGRlcnIsICJjb25maWd1cmVfc29ja2V0IGZhaWxlZFxuIik7CisgICAgfQorICB9CisjZW5kaWYKK2ZwcmludGYoc3RkZXJyLCAiY29uZmlndXJlX3NvY2tldCBnb29kXG4iKTsKKyAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgaWYgKGNoYW5uZWwtPmxvY2FsX2lwNCkgeworICAgICAgbWVtc2V0KCZsb2NhbC5zYTQsIDAsIHNpemVvZihsb2NhbC5zYTQpKTsKKyAgICAgIGxvY2FsLnNhNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGxvY2FsLnNhNC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChjaGFubmVsLT5sb2NhbF9pcDQpOworICAgICAgaWYgKGJpbmQocywgJmxvY2FsLnNhLCBzaXplb2YobG9jYWwuc2E0KSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisgIGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgeworICAgIGlmIChtZW1jbXAoY2hhbm5lbC0+bG9jYWxfaXA2LCAmYXJlc19pbjZhZGRyX2FueSwKKyAgICAgICAgICAgICAgIHNpemVvZihjaGFubmVsLT5sb2NhbF9pcDYpKSAhPSAwKSB7CisgICAgICBtZW1zZXQoJmxvY2FsLnNhNiwgMCwgc2l6ZW9mKGxvY2FsLnNhNikpOworICAgICAgbG9jYWwuc2E2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICBtZW1jcHkoJmxvY2FsLnNhNi5zaW42X2FkZHIsIGNoYW5uZWwtPmxvY2FsX2lwNiwKKyAgICAgICAgICAgICBzaXplb2YoY2hhbm5lbC0+bG9jYWxfaXA2KSk7CisgICAgICBpZiAoYmluZChzLCAmbG9jYWwuc2EsIHNpemVvZihsb2NhbC5zYTYpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcGVuX3RjcF9zb2NrZXQoYXJlc19jaGFubmVsIGNoYW5uZWwsIHN0cnVjdCBzZXJ2ZXJfc3RhdGUgKnNlcnZlcikKK3sKKyAgYXJlc19zb2NrZXRfdCBzOworICBpbnQgb3B0OworICBhcmVzX3NvY2tsZW5fdCBzYWxlbjsKKyAgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgc2E0OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc2E2OworICB9IHNhZGRyOworICBzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCisgIHN3aXRjaCAoc2VydmVyLT5hZGRyLmZhbWlseSkKKyAgICB7CisgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgIHNhID0gKHZvaWQgKikmc2FkZHIuc2E0OworICAgICAgICBzYWxlbiA9IHNpemVvZihzYWRkci5zYTQpOworICAgICAgICBtZW1zZXQoc2EsIDAsIHNhbGVuKTsKKyAgICAgICAgc2FkZHIuc2E0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBpZiAoc2VydmVyLT5hZGRyLnRjcF9wb3J0KSB7CisgICAgICAgICAgc2FkZHIuc2E0LnNpbl9wb3J0ID0gYXJlc3hfc2l0b3VzKHNlcnZlci0+YWRkci50Y3BfcG9ydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2FkZHIuc2E0LnNpbl9wb3J0ID0gYXJlc3hfc2l0b3VzKGNoYW5uZWwtPnRjcF9wb3J0KTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoJnNhZGRyLnNhNC5zaW5fYWRkciwgJnNlcnZlci0+YWRkci5hZGRyVjQsCisgICAgICAgICAgICAgICBzaXplb2Yoc2VydmVyLT5hZGRyLmFkZHJWNCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgIHNhID0gKHZvaWQgKikmc2FkZHIuc2E2OworICAgICAgICBzYWxlbiA9IHNpemVvZihzYWRkci5zYTYpOworICAgICAgICBtZW1zZXQoc2EsIDAsIHNhbGVuKTsKKyAgICAgICAgc2FkZHIuc2E2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIGlmIChzZXJ2ZXItPmFkZHIudGNwX3BvcnQpIHsKKyAgICAgICAgICBzYWRkci5zYTYuc2luNl9wb3J0ID0gYXJlc3hfc2l0b3VzKHNlcnZlci0+YWRkci50Y3BfcG9ydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2FkZHIuc2E2LnNpbjZfcG9ydCA9IGFyZXN4X3NpdG91cyhjaGFubmVsLT50Y3BfcG9ydCk7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KCZzYWRkci5zYTYuc2luNl9hZGRyLCAmc2VydmVyLT5hZGRyLmFkZHJWNiwKKyAgICAgICAgICAgICAgIHNpemVvZihzZXJ2ZXItPmFkZHIuYWRkclY2KSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIC0xOyAgLyogTENPVl9FWENMX0xJTkUgKi8KKyAgICB9CisKKyAgLyogQWNxdWlyZSBhIHNvY2tldC4gKi8KKyAgcyA9IHNvY2tldChzZXJ2ZXItPmFkZHIuZmFtaWx5LCBTT0NLX1NUUkVBTSwgMCk7CisgIGlmIChzID09IEFSRVNfU09DS0VUX0JBRCkKKyAgICByZXR1cm4gLTE7CisKKyAgLyogQ29uZmlndXJlIGl0LiAqLworICBpZiAoY29uZmlndXJlX3NvY2tldChzLCBzZXJ2ZXItPmFkZHIuZmFtaWx5LCBjaGFubmVsKSA8IDApCisgICAgeworICAgICAgIHNjbG9zZShzKTsKKyAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgVENQX05PREVMQVkKKyAgLyoKKyAgICogRGlzYWJsZSB0aGUgTmFnbGUgYWxnb3JpdGhtIChvbmx5IHJlbGV2YW50IGZvciBUQ1Agc29ja2V0cywgYW5kIHRodXMgbm90CisgICAqIGluIGNvbmZpZ3VyZV9zb2NrZXQpLiBJbiBnZW5lcmFsLCBpbiBETlMgbG9va3VwcyB3ZSdyZSBwcmV0dHkgbXVjaAorICAgKiBpbnRlcmVzdGVkIGluIGZpcmluZyBvZmYgYSBzaW5nbGUgcmVxdWVzdCBhbmQgdGhlbiB3YWl0aW5nIGZvciBhIHJlcGx5LAorICAgKiBzbyBiYXRjaGluZyBpc24ndCB2ZXJ5IGludGVyZXN0aW5nLgorICAgKi8KKyAgb3B0ID0gMTsKKyAgaWYgKHNldHNvY2tvcHQocywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLAorICAgICAgICAgICAgICAgICAodm9pZCAqKSZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSkKKyAgICB7CisgICAgICAgc2Nsb3NlKHMpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKworICBpZiAoY2hhbm5lbC0+c29ja19jb25maWdfY2IpCisgICAgeworICAgICAgaW50IGVyciA9IGNoYW5uZWwtPnNvY2tfY29uZmlnX2NiKHMsIFNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwtPnNvY2tfY29uZmlnX2NiX2RhdGEpOworICAgICAgaWYgKGVyciA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBzY2xvc2Uocyk7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBDb25uZWN0IHRvIHRoZSBzZXJ2ZXIuICovCisgIGlmIChjb25uZWN0KHMsIHNhLCBzYWxlbikgPT0gLTEpCisgICAgeworICAgICAgaW50IGVyciA9IFNPQ0tFUlJOTzsKKworICAgICAgaWYgKGVyciAhPSBFSU5QUk9HUkVTUyAmJiBlcnIgIT0gRVdPVUxEQkxPQ0spCisgICAgICAgIHsKKyAgICAgICAgICBzY2xvc2Uocyk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgIGlmIChjaGFubmVsLT5zb2NrX2NyZWF0ZV9jYikKKyAgICB7CisgICAgICBpbnQgZXJyID0gY2hhbm5lbC0+c29ja19jcmVhdGVfY2IocywgU09DS19TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbC0+c29ja19jcmVhdGVfY2JfZGF0YSk7CisgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgeworICAgICAgICAgIHNjbG9zZShzKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfQorCisgIFNPQ0tfU1RBVEVfQ0FMTEJBQ0soY2hhbm5lbCwgcywgMSwgMCk7CisgIHNlcnZlci0+dGNwX2J1ZmZlcl9wb3MgPSAwOworICBzZXJ2ZXItPnRjcF9zb2NrZXQgPSBzOworICBzZXJ2ZXItPnRjcF9jb25uZWN0aW9uX2dlbmVyYXRpb24gPSArK2NoYW5uZWwtPnRjcF9jb25uZWN0aW9uX2dlbmVyYXRpb247CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wZW5fdWRwX3NvY2tldChhcmVzX2NoYW5uZWwgY2hhbm5lbCwgc3RydWN0IHNlcnZlcl9zdGF0ZSAqc2VydmVyKQoreworICBhcmVzX3NvY2tldF90IHM7CisgIGFyZXNfc29ja2xlbl90IHNhbGVuOworICB1bmlvbiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luICBzYTQ7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBzYTY7CisgIH0gc2FkZHI7CisgIHN0cnVjdCBzb2NrYWRkciAqc2E7CisKKyAgc3dpdGNoIChzZXJ2ZXItPmFkZHIuZmFtaWx5KQorICAgIHsKKyAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgc2EgPSAodm9pZCAqKSZzYWRkci5zYTQ7CisgICAgICAgIHNhbGVuID0gc2l6ZW9mKHNhZGRyLnNhNCk7CisgICAgICAgIG1lbXNldChzYSwgMCwgc2FsZW4pOworICAgICAgICBzYWRkci5zYTQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIGlmIChzZXJ2ZXItPmFkZHIudWRwX3BvcnQpIHsKKyAgICAgICAgICBzYWRkci5zYTQuc2luX3BvcnQgPSBhcmVzeF9zaXRvdXMoc2VydmVyLT5hZGRyLnVkcF9wb3J0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzYWRkci5zYTQuc2luX3BvcnQgPSBhcmVzeF9zaXRvdXMoY2hhbm5lbC0+dWRwX3BvcnQpOworICAgICAgICB9CisgICAgICAgIG1lbWNweSgmc2FkZHIuc2E0LnNpbl9hZGRyLCAmc2VydmVyLT5hZGRyLmFkZHJWNCwKKyAgICAgICAgICAgICAgIHNpemVvZihzZXJ2ZXItPmFkZHIuYWRkclY0KSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgc2EgPSAodm9pZCAqKSZzYWRkci5zYTY7CisgICAgICAgIHNhbGVuID0gc2l6ZW9mKHNhZGRyLnNhNik7CisgICAgICAgIG1lbXNldChzYSwgMCwgc2FsZW4pOworICAgICAgICBzYWRkci5zYTYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgaWYgKHNlcnZlci0+YWRkci51ZHBfcG9ydCkgeworICAgICAgICAgIHNhZGRyLnNhNi5zaW42X3BvcnQgPSBhcmVzeF9zaXRvdXMoc2VydmVyLT5hZGRyLnVkcF9wb3J0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzYWRkci5zYTYuc2luNl9wb3J0ID0gYXJlc3hfc2l0b3VzKGNoYW5uZWwtPnVkcF9wb3J0KTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoJnNhZGRyLnNhNi5zaW42X2FkZHIsICZzZXJ2ZXItPmFkZHIuYWRkclY2LAorICAgICAgICAgICAgICAgc2l6ZW9mKHNlcnZlci0+YWRkci5hZGRyVjYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7ICAvKiBMQ09WX0VYQ0xfTElORSAqLworICAgIH0KKworICAvKiBBY3F1aXJlIGEgc29ja2V0LiAqLworICBzID0gc29ja2V0KHNlcnZlci0+YWRkci5mYW1pbHksIFNPQ0tfREdSQU0sIDApOworICBpZiAocyA9PSBBUkVTX1NPQ0tFVF9CQUQpCisgICAgcmV0dXJuIC0xOworCisgIC8qIFNldCB0aGUgc29ja2V0IG5vbi1ibG9ja2luZy4gKi8KKyAgaWYgKGNvbmZpZ3VyZV9zb2NrZXQocywgc2VydmVyLT5hZGRyLmZhbWlseSwgY2hhbm5lbCkgPCAwKQorICAgIHsKKyAgICAgICBzY2xvc2Uocyk7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoY2hhbm5lbC0+c29ja19jb25maWdfY2IpCisgICAgeworICAgICAgaW50IGVyciA9IGNoYW5uZWwtPnNvY2tfY29uZmlnX2NiKHMsIFNPQ0tfREdSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbC0+c29ja19jb25maWdfY2JfZGF0YSk7CisgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgeworICAgICAgICAgIHNjbG9zZShzKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfQorCisgIC8qIENvbm5lY3QgdG8gdGhlIHNlcnZlci4gKi8KKyAgaWYgKGNvbm5lY3Qocywgc2EsIHNhbGVuKSA9PSAtMSkKKyAgICB7CisgICAgICBpbnQgZXJyID0gU09DS0VSUk5POworCisgICAgICBpZiAoZXJyICE9IEVJTlBST0dSRVNTICYmIGVyciAhPSBFV09VTERCTE9DSykKKyAgICAgICAgeworICAgICAgICAgIHNjbG9zZShzKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGNoYW5uZWwtPnNvY2tfY3JlYXRlX2NiKQorICAgIHsKKyAgICAgIGludCBlcnIgPSBjaGFubmVsLT5zb2NrX2NyZWF0ZV9jYihzLCBTT0NLX0RHUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwtPnNvY2tfY3JlYXRlX2NiX2RhdGEpOworICAgICAgaWYgKGVyciA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBzY2xvc2Uocyk7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKworICBTT0NLX1NUQVRFX0NBTExCQUNLKGNoYW5uZWwsIHMsIDEsIDApOworCisgIHNlcnZlci0+dWRwX3NvY2tldCA9IHM7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhbWVfcXVlc3Rpb25zKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnFidWYsIGludCBxbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbikKK3sKKyAgc3RydWN0IHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworICAgIGludCBxZGNvdW50OworICAgIGNoYXIgKm5hbWU7CisgICAgbG9uZyBuYW1lbGVuOworICAgIGludCB0eXBlOworICAgIGludCBkbnNjbGFzczsKKyAgfSBxLCBhOworICBpbnQgaSwgajsKKworICBpZiAocWxlbiA8IEhGSVhFRFNaIHx8IGFsZW4gPCBIRklYRURTWikKKyAgICByZXR1cm4gMDsKKworICAvKiBFeHRyYWN0IHFkY291bnQgZnJvbSB0aGUgcmVxdWVzdCBhbmQgcmVwbHkgYnVmZmVycyBhbmQgY29tcGFyZSB0aGVtLiAqLworICBxLnFkY291bnQgPSBETlNfSEVBREVSX1FEQ09VTlQocWJ1Zik7CisgIGEucWRjb3VudCA9IEROU19IRUFERVJfUURDT1VOVChhYnVmKTsKKyAgaWYgKHEucWRjb3VudCAhPSBhLnFkY291bnQpCisgICAgcmV0dXJuIDA7CisKKyAgLyogRm9yIGVhY2ggcXVlc3Rpb24gaW4gcWJ1ZiwgZmluZCBpdCBpbiBhYnVmLiAqLworICBxLnAgPSBxYnVmICsgSEZJWEVEU1o7CisgIGZvciAoaSA9IDA7IGkgPCBxLnFkY291bnQ7IGkrKykKKyAgICB7CisgICAgICAvKiBEZWNvZGUgdGhlIHF1ZXN0aW9uIGluIHRoZSBxdWVyeS4gKi8KKyAgICAgIGlmIChhcmVzX2V4cGFuZF9uYW1lKHEucCwgcWJ1ZiwgcWxlbiwgJnEubmFtZSwgJnEubmFtZWxlbikKKyAgICAgICAgICAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworICAgICAgcS5wICs9IHEubmFtZWxlbjsKKyAgICAgIGlmIChxLnAgKyBRRklYRURTWiA+IHFidWYgKyBxbGVuKQorICAgICAgICB7CisgICAgICAgICAgYXJlc19mcmVlKHEubmFtZSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIHEudHlwZSA9IEROU19RVUVTVElPTl9UWVBFKHEucCk7CisgICAgICBxLmRuc2NsYXNzID0gRE5TX1FVRVNUSU9OX0NMQVNTKHEucCk7CisgICAgICBxLnAgKz0gUUZJWEVEU1o7CisKKyAgICAgIC8qIFNlYXJjaCBmb3IgdGhpcyBxdWVzdGlvbiBpbiB0aGUgYW5zd2VyLiAqLworICAgICAgYS5wID0gYWJ1ZiArIEhGSVhFRFNaOworICAgICAgZm9yIChqID0gMDsgaiA8IGEucWRjb3VudDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgLyogRGVjb2RlIHRoZSBxdWVzdGlvbiBpbiB0aGUgYW5zd2VyLiAqLworICAgICAgICAgIGlmIChhcmVzX2V4cGFuZF9uYW1lKGEucCwgYWJ1ZiwgYWxlbiwgJmEubmFtZSwgJmEubmFtZWxlbikKKyAgICAgICAgICAgICAgIT0gQVJFU19TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBhcmVzX2ZyZWUocS5uYW1lKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgYS5wICs9IGEubmFtZWxlbjsKKyAgICAgICAgICBpZiAoYS5wICsgUUZJWEVEU1ogPiBhYnVmICsgYWxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYXJlc19mcmVlKHEubmFtZSk7CisgICAgICAgICAgICAgIGFyZXNfZnJlZShhLm5hbWUpOworICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBhLnR5cGUgPSBETlNfUVVFU1RJT05fVFlQRShhLnApOworICAgICAgICAgIGEuZG5zY2xhc3MgPSBETlNfUVVFU1RJT05fQ0xBU1MoYS5wKTsKKyAgICAgICAgICBhLnAgKz0gUUZJWEVEU1o7CisKKyAgICAgICAgICAvKiBDb21wYXJlIHRoZSBkZWNvZGVkIHF1ZXN0aW9ucy4gKi8KKyAgICAgICAgICBpZiAoc3RyY2FzZWNtcChxLm5hbWUsIGEubmFtZSkgPT0gMCAmJiBxLnR5cGUgPT0gYS50eXBlCisgICAgICAgICAgICAgICYmIHEuZG5zY2xhc3MgPT0gYS5kbnNjbGFzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYXJlc19mcmVlKGEubmFtZSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGFyZXNfZnJlZShhLm5hbWUpOworICAgICAgICB9CisKKyAgICAgIGFyZXNfZnJlZShxLm5hbWUpOworICAgICAgaWYgKGogPT0gYS5xZGNvdW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNhbWVfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzdHJ1Y3QgYXJlc19hZGRyICphYSkKK3sKKyAgdm9pZCAqYWRkcjE7CisgIHZvaWQgKmFkZHIyOworCisgIGlmIChzYS0+c2FfZmFtaWx5ID09IGFhLT5mYW1pbHkpCisgICAgeworICAgICAgc3dpdGNoIChhYS0+ZmFtaWx5KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgYWRkcjEgPSAmYWEtPmFkZHJWNDsKKyAgICAgICAgICAgIGFkZHIyID0gJigoc3RydWN0IHNvY2thZGRyX2luICopc2EpLT5zaW5fYWRkcjsKKyAgICAgICAgICAgIGlmIChtZW1jbXAoYWRkcjEsIGFkZHIyLCBzaXplb2YoYWEtPmFkZHJWNCkpID09IDApCisgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBtYXRjaCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIGFkZHIxID0gJmFhLT5hZGRyVjY7CisgICAgICAgICAgICBhZGRyMiA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktPnNpbjZfYWRkcjsKKyAgICAgICAgICAgIGlmIChtZW1jbXAoYWRkcjEsIGFkZHIyLCBzaXplb2YoYWEtPmFkZHJWNikpID09IDApCisgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBtYXRjaCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOyAgLyogTENPVl9FWENMX0xJTkUgKi8KKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIDA7IC8qIGRpZmZlcmVudCAqLworfQorCitzdGF0aWMgdm9pZCBlbmRfcXVlcnkgKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgcXVlcnkgKnF1ZXJ5LCBpbnQgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbikKK3sKKyAgaW50IGk7CisKKyAgLyogRmlyc3Qgd2UgY2hlY2sgdG8gc2VlIGlmIHRoaXMgcXVlcnkgZW5kZWQgd2hpbGUgb25lIG9mIG91ciBzZW5kCisgICAqIHF1ZXVlcyBzdGlsbCBoYXMgcG9pbnRlcnMgdG8gaXQuCisgICAqLworICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+bnNlcnZlcnM7IGkrKykKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2VydmVyX3N0YXRlICpzZXJ2ZXIgPSAmY2hhbm5lbC0+c2VydmVyc1tpXTsKKyAgICAgIHN0cnVjdCBzZW5kX3JlcXVlc3QgKnNlbmRyZXE7CisgICAgICBmb3IgKHNlbmRyZXEgPSBzZXJ2ZXItPnFoZWFkOyBzZW5kcmVxOyBzZW5kcmVxID0gc2VuZHJlcS0+bmV4dCkKKyAgICAgICAgaWYgKHNlbmRyZXEtPm93bmVyX3F1ZXJ5ID09IHF1ZXJ5KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHNlbmRyZXEtPm93bmVyX3F1ZXJ5ID0gTlVMTDsKKyAgICAgICAgICAgIGFzc2VydChzZW5kcmVxLT5kYXRhX3N0b3JhZ2UgPT0gTlVMTCk7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IEFSRVNfU1VDQ0VTUykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFdlIGdvdCBhIHJlcGx5IGZvciB0aGlzIHF1ZXJ5LCBidXQgdGhpcyBxdWV1ZWQgc2VuZHJlcQorICAgICAgICAgICAgICAgICAqIHBvaW50cyBpbnRvIHRoaXMgc29vbi10by1iZS1nb25lIHF1ZXJ5J3MgdGNwYnVmLiBQcm9iYWJseQorICAgICAgICAgICAgICAgICAqIHRoaXMgbWVhbnMgd2UgdGltZWQgb3V0IGFuZCBxdWV1ZWQgdGhlIHF1ZXJ5IGZvcgorICAgICAgICAgICAgICAgICAqIHJldHJhbnNtaXNzaW9uLCB0aGVuIHJlY2VpdmVkIGEgcmVzcG9uc2UgYmVmb3JlIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICogcmV0cmFuc21pdHRpbmcuIFRoaXMgaXMgcGVyZmVjdGx5IGZpbmUsIHNvIHdlIHdhbnQgdG8ga2VlcAorICAgICAgICAgICAgICAgICAqIHRoZSBjb25uZWN0aW9uIHJ1bm5pbmcgc21vb3RobHkgaWYgd2UgY2FuLiBCdXQgaW4gdGhlIHdvcnN0CisgICAgICAgICAgICAgICAgICogY2FzZSB3ZSBtYXkgaGF2ZSBzZW50IG9ubHkgc29tZSBwcmVmaXggb2YgdGhlIHF1ZXJ5LCB3aXRoCisgICAgICAgICAgICAgICAgICogc29tZSBzdWZmaXggb2YgdGhlIHF1ZXJ5IGxlZnQgdG8gc2VuZC4gQWxzbywgdGhlIGJ1ZmZlciBtYXkKKyAgICAgICAgICAgICAgICAgKiBiZSBxdWV1ZWQgb24gbXVsdGlwbGUgcXVldWVzLiBUbyBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzCisgICAgICAgICAgICAgICAgICogdG8gdGhlIHF1ZXJ5J3MgdGNwYnVmIGFuZCBoYW5kbGUgdGhlc2UgY2FzZXMsIHdlIGp1c3QgZ2l2ZQorICAgICAgICAgICAgICAgICAqIHN1Y2ggc2VuZHJlcXMgdGhlaXIgb3duIGNvcHkgb2YgdGhlIHF1ZXJ5IHBhY2tldC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgIHNlbmRyZXEtPmRhdGFfc3RvcmFnZSA9IGFyZXNfbWFsbG9jKHNlbmRyZXEtPmxlbik7CisgICAgICAgICAgICAgICBpZiAoc2VuZHJlcS0+ZGF0YV9zdG9yYWdlICE9IE5VTEwpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICBtZW1jcHkoc2VuZHJlcS0+ZGF0YV9zdG9yYWdlLCBzZW5kcmVxLT5kYXRhLCBzZW5kcmVxLT5sZW4pOworICAgICAgICAgICAgICAgICAgIHNlbmRyZXEtPmRhdGEgPSBzZW5kcmVxLT5kYXRhX3N0b3JhZ2U7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKSB8fCAoc2VuZHJlcS0+ZGF0YV9zdG9yYWdlID09IE5VTEwpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogV2UgZW5jb3VudGVyZWQgYW4gZXJyb3IgKHByb2JhYmx5IGEgdGltZW91dCwgc3VnZ2VzdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgKiBETlMgc2VydmVyIHdlJ3JlIHRhbGtpbmcgdG8gaXMgcHJvYmFibHkgdW5yZWFjaGFibGUsCisgICAgICAgICAgICAgICAgICogd2VkZ2VkLCBvciBzZXZlcmVseSBvdmVybG9hZGVkKSBvciB3ZSBjb3VsZG4ndCBjb3B5IHRoZQorICAgICAgICAgICAgICAgICAqIHJlcXVlc3QsIHNvIG1hcmsgdGhlIGNvbm5lY3Rpb24gYXMgYnJva2VuLiBXaGVuIHdlIGdldCB0bworICAgICAgICAgICAgICAgICAqIHByb2Nlc3NfYnJva2VuX2Nvbm5lY3Rpb25zKCkgd2UnbGwgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kCisgICAgICAgICAgICAgICAgICogdHJ5IHRvIHJlLXNlbmQgcmVxdWVzdHMgdG8gYW5vdGhlciBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICBzZXJ2ZXItPmlzX2Jyb2tlbiA9IDE7CisgICAgICAgICAgICAgICAvKiBKdXN0IHRvIGJlIHBhcmFub2lkLCB6ZXJvIG91dCB0aGlzIHNlbmRyZXEuLi4gKi8KKyAgICAgICAgICAgICAgIHNlbmRyZXEtPmRhdGEgPSBOVUxMOworICAgICAgICAgICAgICAgc2VuZHJlcS0+bGVuID0gMDsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgIH0KKworICAvKiBJbnZva2UgdGhlIGNhbGxiYWNrICovCisgIHF1ZXJ5LT5jYWxsYmFjayhxdWVyeS0+YXJnLCBzdGF0dXMsIHF1ZXJ5LT50aW1lb3V0cywgYWJ1ZiwgYWxlbik7CisgIGFyZXNfX2ZyZWVfcXVlcnkocXVlcnkpOworCisgIC8qIFNpbXBsZSBjbGVhbnVwIHBvbGljeTogaWYgbm8gcXVlcmllcyBhcmUgcmVtYWluaW5nLCBjbG9zZSBhbGwgbmV0d29yaworICAgKiBzb2NrZXRzIHVubGVzcyBTVEFZT1BFTiBpcyBzZXQuCisgICAqLworICBpZiAoIShjaGFubmVsLT5mbGFncyAmIEFSRVNfRkxBR19TVEFZT1BFTikgJiYKKyAgICAgIGFyZXNfX2lzX2xpc3RfZW1wdHkoJihjaGFubmVsLT5hbGxfcXVlcmllcykpKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5uc2VydmVyczsgaSsrKQorICAgICAgICBhcmVzX19jbG9zZV9zb2NrZXRzKGNoYW5uZWwsICZjaGFubmVsLT5zZXJ2ZXJzW2ldKTsKKyAgICB9Cit9CisKK3ZvaWQgYXJlc19fZnJlZV9xdWVyeShzdHJ1Y3QgcXVlcnkgKnF1ZXJ5KQoreworICAvKiBSZW1vdmUgdGhlIHF1ZXJ5IGZyb20gYWxsIHRoZSBsaXN0cyBpbiB3aGljaCBpdCBpcyBsaW5rZWQgKi8KKyAgYXJlc19fcmVtb3ZlX2Zyb21fbGlzdCgmKHF1ZXJ5LT5xdWVyaWVzX2J5X3FpZCkpOworICBhcmVzX19yZW1vdmVfZnJvbV9saXN0KCYocXVlcnktPnF1ZXJpZXNfYnlfdGltZW91dCkpOworICBhcmVzX19yZW1vdmVfZnJvbV9saXN0KCYocXVlcnktPnF1ZXJpZXNfdG9fc2VydmVyKSk7CisgIGFyZXNfX3JlbW92ZV9mcm9tX2xpc3QoJihxdWVyeS0+YWxsX3F1ZXJpZXMpKTsKKyAgLyogWmVybyBvdXQgc29tZSBpbXBvcnRhbnQgc3R1ZmYsIHRvIGhlbHAgY2F0Y2ggYnVncyAqLworICBxdWVyeS0+Y2FsbGJhY2sgPSBOVUxMOworICBxdWVyeS0+YXJnID0gTlVMTDsKKyAgLyogRGVhbGxvY2F0ZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVlcnkgKi8KKyAgYXJlc19mcmVlKHF1ZXJ5LT50Y3BidWYpOworICBhcmVzX2ZyZWUocXVlcnktPnNlcnZlcl9pbmZvKTsKKyAgYXJlc19mcmVlKHF1ZXJ5KTsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcXVlcnkuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcXVlcnkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNmYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19xdWVyeS4zCkBAIC0wLDAgKzEsMTQ5IEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfUVVFUlkgMyAiMjQgSnVseSAxOTk4IgorLlNIIE5BTUUKK2FyZXNfcXVlcnkgXC0gSW5pdGlhdGUgYSBzaW5nbGUtcXVlc3Rpb24gRE5TIHF1ZXJ5CisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgdHlwZWRlZiB2b2lkICgqYXJlc19jYWxsYmFjaykodm9pZCAqXGZJYXJnXGZQLCBpbnQgXGZJc3RhdHVzXGZQLAorLkIJaW50IFxmSXRpbWVvdXRzXGZQLCB1bnNpZ25lZCBjaGFyICpcZklhYnVmXGZQLCBpbnQgXGZJYWxlblxmUCkKKy5QUAorLkIgdm9pZCBhcmVzX3F1ZXJ5KGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLCBjb25zdCBjaGFyICpcZkluYW1lXGZQLAorLkIgCWludCBcZklkbnNjbGFzc1xmUCwgaW50IFxmSXR5cGVcZlAsIGFyZXNfY2FsbGJhY2sgXGZJY2FsbGJhY2tcZlAsCisuQgl2b2lkICpcZklhcmdcZlApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBhcmVzX3F1ZXJ5CitmdW5jdGlvbiBpbml0aWF0ZXMgYSBzaW5nbGUtcXVlc3Rpb24gRE5TIHF1ZXJ5IG9uIHRoZSBuYW1lIHNlcnZpY2UKK2NoYW5uZWwgaWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwgLgorVGhlIHBhcmFtZXRlcgorLkkgbmFtZQorZ2l2ZXMgdGhlIHF1ZXJ5IG5hbWUgYXMgYSBOVUwtdGVybWluYXRlZCBDIHN0cmluZyBvZiBwZXJpb2Qtc2VwYXJhdGVkCitsYWJlbHMgb3B0aW9uYWxseSBlbmRpbmcgd2l0aCBhIHBlcmlvZDsgcGVyaW9kcyBhbmQgYmFja3NsYXNoZXMgd2l0aGluCithIGxhYmVsIG11c3QgYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLiAgVGhlIHBhcmFtZXRlcnMKKy5JIGRuc2NsYXNzCithbmQKKy5JIHR5cGUKK2dpdmUgdGhlIGNsYXNzIGFuZCB0eXBlIG9mIHRoZSBxdWVyeSB1c2luZyB0aGUgdmFsdWVzIGRlZmluZWQgaW4KKy5CUiA8YXJwYS9uYW1lc2VyLmg+IC4KK1doZW4gdGhlIHF1ZXJ5IGlzIGNvbXBsZXRlIG9yIGhhcyBmYWlsZWQsIHRoZSBhcmVzIGxpYnJhcnkgd2lsbCBpbnZva2UKKy5JUiBjYWxsYmFjayAuCitDb21wbGV0aW9uIG9yIGZhaWx1cmUgb2YgdGhlIHF1ZXJ5IG1heSBoYXBwZW4gaW1tZWRpYXRlbHksIG9yIG1heQoraGFwcGVuIGR1cmluZyBhIGxhdGVyIGNhbGwgdG8KKy5CUiBhcmVzX3Byb2Nlc3MgKDMpCitvcgorLkJSIGFyZXNfZGVzdHJveSAoMykuCisuUFAKK1RoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgYXJnCitpcyBjb3BpZWQgZnJvbSB0aGUKKy5CIGFyZXNfcXVlcnkKK2FyZ3VtZW50CisuSVIgYXJnIC4KK1RoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgc3RhdHVzCitpbmRpY2F0ZXMgd2hldGhlciB0aGUgcXVlcnkgc3VjY2VlZGVkIGFuZCwgaWYgbm90LCBob3cgaXQgZmFpbGVkLiAgSXQKK21heSBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxOQorLkIgQVJFU19TVUNDRVNTCitUaGUgcXVlcnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKy5UUCAxOQorLkIgQVJFU19FTk9EQVRBCitUaGUgcXVlcnkgY29tcGxldGVkIGJ1dCBjb250YWlucyBubyBhbnN3ZXJzLgorLlRQIDE5CisuQiBBUkVTX0VGT1JNRVJSCitUaGUgcXVlcnkgY29tcGxldGVkIGJ1dCB0aGUgc2VydmVyIGNsYWltcyB0aGF0IHRoZSBxdWVyeSB3YXMKK21hbGZvcm1hdHRlZC4KKy5UUCAxOQorLkIgQVJFU19FU0VSVkZBSUwKK1RoZSBxdWVyeSBjb21wbGV0ZWQgYnV0IHRoZSBzZXJ2ZXIgY2xhaW1zIHRvIGhhdmUgZXhwZXJpZW5jZWQgYQorZmFpbHVyZS4gIChUaGlzIGNvZGUgY2FuIG9ubHkgb2NjdXIgaWYgdGhlCisuQiBBUkVTX0ZMQUdfTk9DSEVDS1JFU1AKK2ZsYWcgd2FzIHNwZWNpZmllZCBhdCBjaGFubmVsIGluaXRpYWxpemF0aW9uIHRpbWU7IG90aGVyd2lzZSwgc3VjaAorcmVzcG9uc2VzIGFyZSBpZ25vcmVkIGF0IHRoZQorLkJSIGFyZXNfc2VuZCAoMykKK2xldmVsLikKKy5UUCAxOQorLkIgQVJFU19FTk9URk9VTkQKK1RoZSBxdWVyeSBjb21wbGV0ZWQgYnV0IHRoZSBxdWVyaWVkLWZvciBkb21haW4gbmFtZSB3YXMgbm90IGZvdW5kLgorLlRQIDE5CisuQiBBUkVTX0VOT1RJTVAKK1RoZSBxdWVyeSBjb21wbGV0ZWQgYnV0IHRoZSBzZXJ2ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24KK3JlcXVlc3RlZCBieSB0aGUgcXVlcnkuICAoVGhpcyBjb2RlIGNhbiBvbmx5IG9jY3VyIGlmIHRoZQorLkIgQVJFU19GTEFHX05PQ0hFQ0tSRVNQCitmbGFnIHdhcyBzcGVjaWZpZWQgYXQgY2hhbm5lbCBpbml0aWFsaXphdGlvbiB0aW1lOyBvdGhlcndpc2UsIHN1Y2gKK3Jlc3BvbnNlcyBhcmUgaWdub3JlZCBhdCB0aGUKKy5CUiBhcmVzX3NlbmQgKDMpCitsZXZlbC4pCisuVFAgMTkKKy5CIEFSRVNfRVJFRlVTRUQKK1RoZSBxdWVyeSBjb21wbGV0ZWQgYnV0IHRoZSBzZXJ2ZXIgcmVmdXNlZCB0aGUgcXVlcnkuICAoVGhpcyBjb2RlIGNhbgorb25seSBvY2N1ciBpZiB0aGUKKy5CIEFSRVNfRkxBR19OT0NIRUNLUkVTUAorZmxhZyB3YXMgc3BlY2lmaWVkIGF0IGNoYW5uZWwgaW5pdGlhbGl6YXRpb24gdGltZTsgb3RoZXJ3aXNlLCBzdWNoCityZXNwb25zZXMgYXJlIGlnbm9yZWQgYXQgdGhlCisuQlIgYXJlc19zZW5kICgzKQorbGV2ZWwuKQorLlRQIDE5CisuQiBBUkVTX0VCQUROQU1FCitUaGUgcXVlcnkgbmFtZQorLkkgbmFtZQorY291bGQgbm90IGJlIGVuY29kZWQgYXMgYSBkb21haW4gbmFtZSwgZWl0aGVyIGJlY2F1c2UgaXQgY29udGFpbmVkIGEKK3plcm8tbGVuZ3RoIGxhYmVsIG9yIGJlY2F1c2UgaXQgY29udGFpbmVkIGEgbGFiZWwgb2YgbW9yZSB0aGFuIDYzCitjaGFyYWN0ZXJzLgorLlRQIDE5CisuQiBBUkVTX0VUSU1FT1VUCitObyBuYW1lIHNlcnZlcnMgcmVzcG9uZGVkIHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QuCisuVFAgMTkKKy5CIEFSRVNfRUNPTk5SRUZVU0VECitObyBuYW1lIHNlcnZlcnMgY291bGQgYmUgY29udGFjdGVkLgorLlRQIDE5CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuVFAgMTkKKy5CIEFSRVNfRUNBTkNFTExFRAorVGhlIHF1ZXJ5IHdhcyBjYW5jZWxsZWQuCisuVFAgMTkKKy5CIEFSRVNfRURFU1RSVUNUSU9OCitUaGUgbmFtZSBzZXJ2aWNlIGNoYW5uZWwKKy5JIGNoYW5uZWwKK2lzIGJlaW5nIGRlc3Ryb3llZDsgdGhlIHF1ZXJ5IHdpbGwgbm90IGJlIGNvbXBsZXRlZC4KKy5QUAorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSB0aW1lb3V0cworcmVwb3J0cyBob3cgbWFueSB0aW1lcyBhIHF1ZXJ5IHRpbWVkIG91dCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKK2dpdmVuIHJlcXVlc3QuCisuUFAKK0lmIHRoZSBxdWVyeSBjb21wbGV0ZWQgKGV2ZW4gaWYgdGhlcmUgd2FzIHNvbWV0aGluZyB3cm9uZyB3aXRoIGl0LCBhcworaW5kaWNhdGVkIGJ5IHNvbWUgb2YgdGhlIGFib3ZlIGVycm9yIGNvZGVzKSwgdGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBhYnVmCitwb2ludHMgdG8gYSByZXN1bHQgYnVmZmVyIG9mIGxlbmd0aAorLklSIGFsZW4gLgorSWYgdGhlIHF1ZXJ5IGRpZCBub3QgY29tcGxldGUsCisuSSBhYnVmCit3aWxsIGJlIE5VTEwgYW5kCisuSSBhbGVuCit3aWxsIGJlIDAuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3Byb2Nlc3MgKDMpCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3F1ZXJ5LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4YjhhNgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfcXVlcnkuYwpAQCAtMCwwICsxLDE4NiBAQAorCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgIm5hbWVzZXIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0NPTVBBVF9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCitzdHJ1Y3QgcXF1ZXJ5IHsKKyAgYXJlc19jYWxsYmFjayBjYWxsYmFjazsKKyAgdm9pZCAqYXJnOworfTsKKworc3RhdGljIHZvaWQgcWNhbGxiYWNrKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLCB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbik7CisKK3N0YXRpYyB2b2lkIHJjNChyYzRfa2V5KiBrZXksIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9wdHIsIGludCBidWZmZXJfbGVuKQoreworICB1bnNpZ25lZCBjaGFyIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKKyAgdW5zaWduZWQgY2hhciogc3RhdGU7CisgIHVuc2lnbmVkIGNoYXIgeG9ySW5kZXg7CisgIHNob3J0IGNvdW50ZXI7CisKKyAgeCA9IGtleS0+eDsKKyAgeSA9IGtleS0+eTsKKworICBzdGF0ZSA9ICZrZXktPnN0YXRlWzBdOworICBmb3IoY291bnRlciA9IDA7IGNvdW50ZXIgPCBidWZmZXJfbGVuOyBjb3VudGVyICsrKQorICB7CisgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSgoeCArIDEpICUgMjU2KTsKKyAgICB5ID0gKHVuc2lnbmVkIGNoYXIpKChzdGF0ZVt4XSArIHkpICUgMjU2KTsKKyAgICBBUkVTX1NXQVBfQllURSgmc3RhdGVbeF0sICZzdGF0ZVt5XSk7CisKKyAgICB4b3JJbmRleCA9ICh1bnNpZ25lZCBjaGFyKSgoc3RhdGVbeF0gKyBzdGF0ZVt5XSkgJSAyNTYpOworCisgICAgYnVmZmVyX3B0cltjb3VudGVyXSA9ICh1bnNpZ25lZCBjaGFyKShidWZmZXJfcHRyW2NvdW50ZXJdXnN0YXRlW3hvckluZGV4XSk7CisgIH0KKyAga2V5LT54ID0geDsKKyAga2V5LT55ID0geTsKK30KKworc3RhdGljIHN0cnVjdCBxdWVyeSogZmluZF9xdWVyeV9ieV9pZChhcmVzX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgc2hvcnQgaWQpCit7CisgIHVuc2lnbmVkIHNob3J0IHFpZDsKKyAgc3RydWN0IGxpc3Rfbm9kZSogbGlzdF9oZWFkOworICBzdHJ1Y3QgbGlzdF9ub2RlKiBsaXN0X25vZGU7CisgIEROU19IRUFERVJfU0VUX1FJRCgoKHVuc2lnbmVkIGNoYXIqKSZxaWQpLCBpZCk7CisKKyAgLyogRmluZCB0aGUgcXVlcnkgY29ycmVzcG9uZGluZyB0byB0aGlzIHBhY2tldC4gKi8KKyAgbGlzdF9oZWFkID0gJihjaGFubmVsLT5xdWVyaWVzX2J5X3FpZFtxaWQgJSBBUkVTX1FJRF9UQUJMRV9TSVpFXSk7CisgIGZvciAobGlzdF9ub2RlID0gbGlzdF9oZWFkLT5uZXh0OyBsaXN0X25vZGUgIT0gbGlzdF9oZWFkOworICAgICAgIGxpc3Rfbm9kZSA9IGxpc3Rfbm9kZS0+bmV4dCkKKyAgICB7CisgICAgICAgc3RydWN0IHF1ZXJ5ICpxID0gbGlzdF9ub2RlLT5kYXRhOworICAgICAgIGlmIChxLT5xaWQgPT0gcWlkKQorCSAgcmV0dXJuIHE7CisgICAgfQorICByZXR1cm4gTlVMTDsKK30KKworCisvKiBhIHVuaXF1ZSBxdWVyeSBpZCBpcyBnZW5lcmF0ZWQgdXNpbmcgYW4gcmM0IGtleS4gU2luY2UgdGhlIGlkIG1heSBhbHJlYWR5CisgICBiZSB1c2VkIGJ5IGEgcnVubmluZyBxdWVyeSAoYXMgaW5mcmVxdWVudCBhcyBpdCBtYXkgYmUpLCBhIGxvb2t1cCBpcworICAgcGVyZm9ybWVkIHBlciBpZCBnZW5lcmF0aW9uLiBJbiBwcmFjdGljZSB0aGlzIHNlYXJjaCBzaG91bGQgaGFwcGVuIG9ubHkKKyAgIG9uY2UgcGVyIG5ld2x5IGdlbmVyYXRlZCBpZAorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZW5lcmF0ZV91bmlxdWVfaWQoYXJlc19jaGFubmVsIGNoYW5uZWwpCit7CisgIHVuc2lnbmVkIHNob3J0IGlkOworCisgIGRvIHsKKyAgICBpZCA9IGFyZXNfX2dlbmVyYXRlX25ld19pZCgmY2hhbm5lbC0+aWRfa2V5KTsKKyAgfSB3aGlsZSAoZmluZF9xdWVyeV9ieV9pZChjaGFubmVsLCBpZCkpOworCisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpaWQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IGFyZXNfX2dlbmVyYXRlX25ld19pZChyYzRfa2V5KiBrZXkpCit7CisgIHVuc2lnbmVkIHNob3J0IHI9MDsKKyAgcmM0KGtleSwgKHVuc2lnbmVkIGNoYXIgKikmciwgc2l6ZW9mKHIpKTsKKyAgcmV0dXJuIHI7Cit9CisKK3ZvaWQgYXJlc19xdWVyeShhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGRuc2NsYXNzLAorICAgICAgICAgICAgICAgIGludCB0eXBlLCBhcmVzX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICphcmcpCit7CisgIHN0cnVjdCBxcXVlcnkgKnFxdWVyeTsKKyAgdW5zaWduZWQgY2hhciAqcWJ1ZjsKKyAgaW50IHFsZW4sIHJkLCBzdGF0dXM7CisKKyAgLyogQ29tcG9zZSB0aGUgcXVlcnkuICovCisgIHJkID0gIShjaGFubmVsLT5mbGFncyAmIEFSRVNfRkxBR19OT1JFQ1VSU0UpOworICBzdGF0dXMgPSBhcmVzX2NyZWF0ZV9xdWVyeShuYW1lLCBkbnNjbGFzcywgdHlwZSwgY2hhbm5lbC0+bmV4dF9pZCwgcmQsICZxYnVmLAorICAgICAgICAgICAgICAmcWxlbiwgKGNoYW5uZWwtPmZsYWdzICYgQVJFU19GTEFHX0VETlMpID8gY2hhbm5lbC0+ZWRuc3BzeiA6IDApOworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAocWJ1ZiAhPSBOVUxMKSBhcmVzX2ZyZWUocWJ1Zik7CisgICAgICBjYWxsYmFjayhhcmcsIHN0YXR1cywgMCwgTlVMTCwgMCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGNoYW5uZWwtPm5leHRfaWQgPSBnZW5lcmF0ZV91bmlxdWVfaWQoY2hhbm5lbCk7CisKKyAgLyogQWxsb2NhdGUgYW5kIGZpbGwgaW4gdGhlIHF1ZXJ5IHN0cnVjdHVyZS4gKi8KKyAgcXF1ZXJ5ID0gYXJlc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBxcXVlcnkpKTsKKyAgaWYgKCFxcXVlcnkpCisgICAgeworICAgICAgYXJlc19mcmVlX3N0cmluZyhxYnVmKTsKKyAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FTk9NRU0sIDAsIE5VTEwsIDApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcXF1ZXJ5LT5jYWxsYmFjayA9IGNhbGxiYWNrOworICBxcXVlcnktPmFyZyA9IGFyZzsKKworICAvKiBTZW5kIGl0IG9mZi4gIHFjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIHdlIGdldCBhbiBhbnN3ZXIuICovCisgIGFyZXNfc2VuZChjaGFubmVsLCBxYnVmLCBxbGVuLCBxY2FsbGJhY2ssIHFxdWVyeSk7CisgIGFyZXNfZnJlZV9zdHJpbmcocWJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHFjYWxsYmFjayh2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4pCit7CisgIHN0cnVjdCBxcXVlcnkgKnFxdWVyeSA9IChzdHJ1Y3QgcXF1ZXJ5ICopIGFyZzsKKyAgdW5zaWduZWQgaW50IGFuY291bnQ7CisgIGludCByY29kZTsKKworICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICBxcXVlcnktPmNhbGxiYWNrKHFxdWVyeS0+YXJnLCBzdGF0dXMsIHRpbWVvdXRzLCBhYnVmLCBhbGVuKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFB1bGwgdGhlIHJlc3BvbnNlIGNvZGUgYW5kIGFuc3dlciBjb3VudCBmcm9tIHRoZSBwYWNrZXQuICovCisgICAgICByY29kZSA9IEROU19IRUFERVJfUkNPREUoYWJ1Zik7CisgICAgICBhbmNvdW50ID0gRE5TX0hFQURFUl9BTkNPVU5UKGFidWYpOworCisgICAgICAvKiBDb252ZXJ0IGVycm9ycy4gKi8KKyAgICAgIHN3aXRjaCAocmNvZGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOT0VSUk9SOgorICAgICAgICAgIHN0YXR1cyA9IChhbmNvdW50ID4gMCkgPyBBUkVTX1NVQ0NFU1MgOiBBUkVTX0VOT0RBVEE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRk9STUVSUjoKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VGT1JNRVJSOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNFUlZGQUlMOgorICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRVNFUlZGQUlMOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5YRE9NQUlOOgorICAgICAgICAgIHN0YXR1cyA9IEFSRVNfRU5PVEZPVU5EOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5PVElNUDoKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VOT1RJTVA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVGVVNFRDoKKyAgICAgICAgICBzdGF0dXMgPSBBUkVTX0VSRUZVU0VEOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBxcXVlcnktPmNhbGxiYWNrKHFxdWVyeS0+YXJnLCBzdGF0dXMsIHRpbWVvdXRzLCBhYnVmLCBhbGVuKTsKKyAgICB9CisgIGFyZXNfZnJlZShxcXVlcnkpOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ydWxlcy5oIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19ydWxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MTdmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3J1bGVzLmgKQEAgLTAsMCArMSwxMjUgQEAKKyNpZm5kZWYgX19DQVJFU19SVUxFU19ICisjZGVmaW5lIF9fQ0FSRVNfUlVMRVNfSAorCisKKy8qIENvcHlyaWdodCAoQykgMjAwOSBieSBEYW5pZWwgU3RlbmJlcmcgZXQgYWwKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKKyAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICBDT01QSUxFIFRJTUUgU0FOSVRZIENIRUNLUyAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIE5PVEUgMToKKyAqIC0tLS0tLS0KKyAqCisgKiBBbGwgY2hlY2tzIGRvbmUgaW4gdGhpcyBmaWxlIGFyZSBpbnRlbnRpb25hbGx5IHBsYWNlZCBpbiBhIHB1YmxpYworICogaGVhZGVyIGZpbGUgd2hpY2ggaXMgcHVsbGVkIGJ5IGFyZXMuaCB3aGVuIGFuIGFwcGxpY2F0aW9uIGlzCisgKiBiZWluZyBidWlsdCB1c2luZyBhbiBhbHJlYWR5IGJ1aWx0IGMtYXJlcyBsaWJyYXJ5LiBBZGRpdGlvbmFsbHkKKyAqIHRoaXMgZmlsZSBpcyBhbHNvIGluY2x1ZGVkIGFuZCB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCisgKgorICogSWYgY29tcGlsYXRpb24gZmFpbHMgb24gdGhpcyBmaWxlIGl0IGlzIGNlcnRhaW5seSBzdXJlIHRoYXQgdGhlCisgKiBwcm9ibGVtIGlzIGVsc2V3aGVyZS4gSXQgY291bGQgYmUgYSBwcm9ibGVtIGluIHRoZSBhcmVzX2J1aWxkLmgKKyAqIGhlYWRlciBmaWxlLCBvciBzaW1wbHkgdGhhdCB5b3UgYXJlIHVzaW5nIGRpZmZlcmVudCBjb21waWxhdGlvbgorICogc2V0dGluZ3MgdGhhbiB0aG9zZSB1c2VkIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5LgorICoKKyAqIE5vdGhpbmcgaW4gdGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIG1vZGlmaWVkIG9yIGFkanVzdGVkIGJ5IHRoZQorICogYy1hcmVzIGxpYnJhcnkgdXNlciBub3IgYnkgdGhlIGMtYXJlcyBsaWJyYXJ5IGJ1aWxkZXIuCisgKgorICogRG8gbm90IGRlYWN0aXZhdGUgYW55IGNoZWNrLCB0aGVzZSBhcmUgZG9uZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGxpYnJhcnkgaXMgcHJvcGVybHkgYnVpbHQgYW5kIHVzZWQuCisgKgorICogWW91IGNhbiBmaW5kIGZ1cnRoZXIgaGVscCBvbiB0aGUgYy1hcmVzIGRldmVsb3BtZW50IG1haWxpbmcgbGlzdDoKKyAqIGh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jLWFyZXMvCisgKgorICogTk9URSAyCisgKiAtLS0tLS0KKyAqCisgKiBTb21lIG9mIHRoZSBmb2xsb3dpbmcgY29tcGlsZSB0aW1lIGNoZWNrcyBhcmUgYmFzZWQgb24gdGhlIGZhY3QKKyAqIHRoYXQgdGhlIGRpbWVuc2lvbiBvZiBhIGNvbnN0YW50IGFycmF5IGNhbiBub3QgYmUgYSBuZWdhdGl2ZSBvbmUuCisgKiBJbiB0aGlzIHdheSBpZiB0aGUgY29tcGlsZSB0aW1lIHZlcmlmaWNhdGlvbiBmYWlscywgdGhlIGNvbXBpbGF0aW9uCisgKiB3aWxsIGZhaWwgaXNzdWluZyBhbiBlcnJvci4gVGhlIGVycm9yIGRlc2NyaXB0aW9uIHdvcmRpbmcgaXMgY29tcGlsZXIKKyAqIGRlcGVuZGVudCBidXQgaXQgd2lsbCBiZSBxdWl0ZSBzaW1pbGFyIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoKKyAqICAgIm5lZ2F0aXZlIHN1YnNjcmlwdCBvciBzdWJzY3JpcHQgaXMgdG9vIGxhcmdlIgorICogICAiYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50IgorICogICAiLTEgaXMgYW4gaWxsZWdhbCBhcnJheSBzaXplIgorICogICAic2l6ZSBvZiBhcnJheSBpcyBuZWdhdGl2ZSIKKyAqCisgKiBJZiB5b3UgYXJlIGJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIHdoaWNoIHRyaWVzIHRvIHVzZSBhbiBhbHJlYWR5CisgKiBidWlsdCBjLWFyZXMgbGlicmFyeSBhbmQgeW91IGFyZSBnZXR0aW5nIHRoaXMga2luZCBvZiBlcnJvcnMgb24KKyAqIHRoaXMgZmlsZSwgaXQgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuCisgKiBob3cgdGhlIGxpYnJhcnkgd2FzIGJ1aWx0IGFuZCBob3cgeW91IGFyZSB0cnlpbmcgdG8gdXNlIGl0IGZvciB5b3VyCisgKiBhcHBsaWNhdGlvbi4gWW91ciBhbHJlYWR5IGNvbXBpbGVkIG9yIGJpbmFyeSBsaWJyYXJ5IHByb3ZpZGVyIGlzIHRoZQorICogb25seSBvbmUgd2hvIGNhbiBnaXZlIHlvdSB0aGUgZGV0YWlscyB5b3UgbmVlZCB0byBwcm9wZXJseSB1c2UgaXQuCisgKi8KKworLyoKKyAqIFZlcmlmeSB0aGF0IHNvbWUgbWFjcm9zIGFyZSBhY3R1YWxseSBkZWZpbmVkLgorICovCisKKyNpZm5kZWYgQ0FSRVNfVFlQRU9GX0FSRVNfU09DS0xFTl9UCisjICBlcnJvciAiQ0FSRVNfVFlQRU9GX0FSRVNfU09DS0xFTl9UIGRlZmluaXRpb24gaXMgbWlzc2luZyEiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NBUkVTX1RZUEVPRl9BUkVTX1NPQ0tMRU5fVF9pc19taXNzaW5nCisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBwcml2YXRlIHRvIHRoaXMgaGVhZGVyIGZpbGUuCisgKi8KKworI2RlZmluZSBDYXJlc2Noa3N6RVEodCwgcykgc2l6ZW9mKHQpID09IHMgPyAxIDogLTEKKworI2RlZmluZSBDYXJlc2Noa3N6R0UodDEsIHQyKSBzaXplb2YodDEpID49IHNpemVvZih0MikgPyAxIDogLTEKKworLyoKKyAqIFZlcmlmeSB0aGF0IHRoZSBzaXplIHByZXZpb3VzbHkgZGVmaW5lZCBhbmQgZXhwZWN0ZWQgZm9yCisgKiBhcmVzX3NvY2tsZW5fdCBpcyBhY3R1YWxseSB0aGUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXBvcnRlZAorICogYnkgc2l6ZW9mKCkgYXQgY29tcGlsZSB0aW1lLgorICovCisKK3R5cGVkZWYgY2hhcgorICBfX2NhcmVzX3J1bGVfMDJfXworICAgIFtDYXJlc2Noa3N6RVEoYXJlc19zb2NrbGVuX3QsIHNpemVvZihDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1QpKV07CisKKy8qCisgKiBWZXJpZnkgYXQgY29tcGlsZSB0aW1lIHRoYXQgdGhlIHNpemUgb2YgYXJlc19zb2NrbGVuX3QgYXMgcmVwb3J0ZWQKKyAqIGJ5IHNpemVvZigpIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiB0aGUgb25lIHJlcG9ydGVkIGZvciBpbnQgZm9yCisgKiB0aGUgY3VycmVudCBjb21waWxhdGlvbi4KKyAqLworCit0eXBlZGVmIGNoYXIKKyAgX19jYXJlc19ydWxlXzAzX18KKyAgICBbQ2FyZXNjaGtzekdFKGFyZXNfc29ja2xlbl90LCBpbnQpXTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgRVhURVJOQUxMWSBBTkQgSU5URVJOQUxMWSBWSVNJQkxFIERFRklOSVRJT05TICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogR2V0IHJpZCBvZiBtYWNyb3MgcHJpdmF0ZSB0byB0aGlzIGhlYWRlciBmaWxlLgorICovCisKKyN1bmRlZiBDYXJlc2Noa3N6RVEKKyN1bmRlZiBDYXJlc2Noa3N6R0UKKworLyoKKyAqIEdldCByaWQgb2YgbWFjcm9zIG5vdCBpbnRlbmRlZCB0byBleGlzdCBiZXlvbmQgdGhpcyBwb2ludC4KKyAqLworCisjdW5kZWYgQ0FSRVNfUFVMTF9XUzJUQ1BJUF9ICisjdW5kZWYgQ0FSRVNfUFVMTF9TWVNfVFlQRVNfSAorI3VuZGVmIENBUkVTX1BVTExfU1lTX1NPQ0tFVF9ICisKKyN1bmRlZiBDQVJFU19UWVBFT0ZfQVJFU19TT0NLTEVOX1QKKworI2VuZGlmIC8qIF9fQ0FSRVNfUlVMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zYXZlX29wdGlvbnMuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2F2ZV9vcHRpb25zLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkYWUwNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2F2ZV9vcHRpb25zLjMKQEAgLTAsMCArMSw3NCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX1NBVkVfT1BUSU9OUyAzICI1IE1hcmNoIDIwMTAiCisuU0ggTkFNRQorYXJlc19zYXZlX29wdGlvbnMgXC0gU2F2ZSBjb25maWd1cmF0aW9uIHZhbHVlcyBvYnRhaW5lZCBmcm9tIGluaXRpYWxpemVkIGFyZXNfY2hhbm5lbAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX3NhdmVfb3B0aW9ucyhhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwgc3RydWN0IGFyZXNfb3B0aW9ucyAqXGZJb3B0aW9uc1xmUCwgaW50ICpcZklvcHRtYXNrXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJhcmVzX3NhdmVfb3B0aW9ucygzKVxmUCBmdW5jdGlvbiBzYXZlcyB0aGUgY2hhbm5lbCBkYXRhIGlkZW50aWZpZWQgYnkKKy5JUiBjaGFubmVsICwKK2ludG8gdGhlIG9wdGlvbnMgc3RydWN0IGlkZW50aWZpZWQgYnkKKy5JUiBvcHRpb25zICwKK2FuZCBzYXZlcyB0aGUgbWFzayBvZiBvcHRpb25zIHdoaWNoIGFyZSBzZXQgdG8gdGhlIGludGVnZXIKK3BvaW50ZXIgKHBhc3NlZCBieSByZWZlcmVuY2UpIGlkZW50aWZpZWQgYnkKKy5JUiBvcHRtYXNrIC4KKworVGhlIHJlc3VsdGFudCBvcHRpb25zIGFuZCBvcHRtYXNrIGFyZSB0aGVuIGFibGUgdG8gYmUKK3Bhc3NlZCBkaXJlY3RseSB0byBhcmVzX2luaXRfb3B0aW9ucy4gIFdoZW4gdGhlIG9wdGlvbnMKK2FyZSBubyBsb25nZXIgbmVlZGVkLCBhcmVzX2Rlc3Ryb3lfb3B0aW9ucyBzaG91bGQgYmUgY2FsbGVkCit0byBmcmVlIGFueSBhc3NvY2lhdGVkIG1lbW9yeS4KKy5TSCBSRVRVUk4gVkFMVUVTCisuQiBhcmVzX3NhdmVfb3B0aW9ucygzKQorY2FuIHJldHVybiBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuVFAgMTUKKy5CIEFSRVNfU1VDQ0VTUworVGhlIGNoYW5uZWwgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHN0b3JlZAorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorVGhlIG1lbW9yeSB3YXMgZXhoYXVzdGVkCisuVFAgMTUKKy5CIEFSRVNfRU5PREFUQQorVGhlIGNoYW5uZWwgZGF0YSBpZGVudGlmaWVkIGJ5IAorLklSIGNoYW5uZWwKK3dlcmUgaW52YWxpZC4KKy5TSCBOT1RFCitTaW5jZSBjLWFyZXMgMS42LjAgdGhlIGFyZXNfb3B0aW9ucyBzdHJ1Y3QgaGFzIGJlZW4gImxvY2tlZCIgbWVhbmluZyB0aGF0IGl0Cit3b24ndCBiZSBleHRlbmRlZCB0byBjb3ZlciBuZXcgZnVuY3Rpb25zLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVtYWluCitmdW5jdGlvbmluZywgYnV0IGl0IGNhbiBvbmx5IHJldHVybiBjb25maWcgZGF0YSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbgordGhpcyBjb25maWcgc3RydWN0LCB3aGljaCBtYXkgbm8gbG9uZ2VyIGJlIHRoZSBjb21wbGV0ZSBzZXQgb2YgY29uZmlnCitvcHRpb25zLiBcZkJhcmVzX2R1cCgzKVxmUCB3aWxsIG5vdCBoYXZlIHRoYXQgcmVzdHJpY3Rpb24uCisKK1RoZSBhcmVzX29wdGlvbnMgc3RydWN0IGNhbiBub3QgaGFuZGxlIHBvdGVudGlhbCBJUHY2IG5hbWUgc2VydmVycyB0aGUKK2FyZXNfY2hhbm5lbCBtaWdodCBiZSBjb25maWd1cmVkIHRvIHVzZS4gVGhlIFxmQmFyZXNfc2F2ZV9vcHRpb25zKDMpXGZQIGZ1bmN0aW9uCit3aWxsIG9ubHkgcmV0dXJuIElQdjQgc2VydmVycywgaWYgYW55LiBJbiBvcmRlciB0byByZXRyaWV2ZSBhbGwgbmFtZSBzZXJ2ZXJzCithbiBhcmVzX2NoYW5uZWwgbWlnaHQgYmUgdXNpbmcsIHRoZSBcZkJhcmVzX2dldF9zZXJ2ZXJzKDMpXGZQIGZ1bmN0aW9uIG11c3QgYmUKK3VzZWQgaW5zdGVhZC4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfZGVzdHJveV9vcHRpb25zICgzKSwKKy5CUiBhcmVzX2luaXRfb3B0aW9ucyAoMyksCisuQlIgYXJlc19nZXRfc2VydmVycyAoMyksCisuQlIgYXJlc19kdXAgKDMpCisuU0ggQVZBSUxBQklMSVRZCithcmVzX3NhdmVfb3B0aW9ucygzKSB3YXMgYWRkZWQgaW4gYy1hcmVzIDEuNC4wCisuU0ggQVVUSE9SCitCcmFkIEhvdXNlCisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZWFyY2guMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2VhcmNoLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4NWQyMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2VhcmNoLjMKQEAgLTAsMCArMSwxNTEgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19TRUFSQ0ggMyAiMjQgSnVseSAxOTk4IgorLlNIIE5BTUUKK2FyZXNfc2VhcmNoIFwtIEluaXRpYXRlIGEgRE5TIHF1ZXJ5IHdpdGggZG9tYWluIHNlYXJjaAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHR5cGVkZWYgdm9pZCAoKmFyZXNfY2FsbGJhY2spKHZvaWQgKlxmSWFyZ1xmUCwgaW50IFxmSXN0YXR1c1xmUCwKKy5CCWludCBcZkl0aW1lb3V0c1xmUCwgdW5zaWduZWQgY2hhciAqXGZJYWJ1ZlxmUCwgaW50IFxmSWFsZW5cZlApCisuUFAKKy5CIHZvaWQgYXJlc19zZWFyY2goYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsIGNvbnN0IGNoYXIgKlxmSW5hbWVcZlAsCisuQiAJaW50IFxmSWRuc2NsYXNzXGZQLCBpbnQgXGZJdHlwZVxmUCwgYXJlc19jYWxsYmFjayBcZkljYWxsYmFja1xmUCwKKy5CCXZvaWQgKlxmSWFyZ1xmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfc2VhcmNoCitmdW5jdGlvbiBpbml0aWF0ZXMgYSBzZXJpZXMgb2Ygc2luZ2xlLXF1ZXN0aW9uIEROUyBxdWVyaWVzIG9uIHRoZSBuYW1lCitzZXJ2aWNlIGNoYW5uZWwgaWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwgLAordXNpbmcgdGhlIGNoYW5uZWwncyBzZWFyY2ggZG9tYWlucyBhcyB3ZWxsIGFzIGEgaG9zdCBhbGlhcyBmaWxlIGdpdmVuCitieSB0aGUgSE9TVEFMSUFTIGVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhlIHBhcmFtZXRlcgorLkkgbmFtZQorZ2l2ZXMgdGhlIGFsaWFzIG5hbWUgb3IgdGhlIGJhc2Ugb2YgdGhlIHF1ZXJ5IG5hbWUgYXMgYSBOVUwtdGVybWluYXRlZAorQyBzdHJpbmcgb2YgcGVyaW9kLXNlcGFyYXRlZCBsYWJlbHM7IGlmIGl0IGVuZHMgd2l0aCBhIHBlcmlvZCwgdGhlCitjaGFubmVsJ3Mgc2VhcmNoIGRvbWFpbnMgd2lsbCBub3QgYmUgdXNlZC4gIFBlcmlvZHMgYW5kIGJhY2tzbGFzaGVzCit3aXRoaW4gYSBsYWJlbCBtdXN0IGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBwYXJhbWV0ZXJzCisuSSBkbnNjbGFzcworYW5kCisuSSB0eXBlCitnaXZlIHRoZSBjbGFzcyBhbmQgdHlwZSBvZiB0aGUgcXVlcnkgdXNpbmcgdGhlIHZhbHVlcyBkZWZpbmVkIGluCisuQlIgPGFycGEvbmFtZXNlci5oPiAuCitXaGVuIHRoZSBxdWVyeSBzZXF1ZW5jZSBpcyBjb21wbGV0ZSBvciBoYXMgZmFpbGVkLCB0aGUgYXJlcyBsaWJyYXJ5Cit3aWxsIGludm9rZQorLklSIGNhbGxiYWNrIC4KK0NvbXBsZXRpb24gb3IgZmFpbHVyZSBvZiB0aGUgcXVlcnkgc2VxdWVuY2UgbWF5IGhhcHBlbiBpbW1lZGlhdGVseSwgb3IKK21heSBoYXBwZW4gZHVyaW5nIGEgbGF0ZXIgY2FsbCB0bworLkJSIGFyZXNfcHJvY2VzcyAoMykKK29yCisuQlIgYXJlc19kZXN0cm95ICgzKS4KKy5QUAorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBhcmcKK2lzIGNvcGllZCBmcm9tIHRoZQorLkIgYXJlc19zZWFyY2gKK2FyZ3VtZW50CisuSVIgYXJnIC4KK1RoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgc3RhdHVzCitpbmRpY2F0ZXMgd2hldGhlciB0aGUgcXVlcnkgc2VxdWVuY2UgZW5kZWQgd2l0aCBhIHN1Y2Nlc3NmdWwgcXVlcnkKK2FuZCwgaWYgbm90LCBob3cgdGhlIHF1ZXJ5IHNlcXVlbmNlIGZhaWxlZC4gIEl0IG1heSBoYXZlIGFueSBvZiB0aGUKK2ZvbGxvd2luZyB2YWx1ZXM6CisuVFAgMTkKKy5CIEFSRVNfU1VDQ0VTUworQSBxdWVyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorLlRQIDE5CisuQiBBUkVTX0VOT0RBVEEKK05vIHF1ZXJ5IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk7IHdoZW4gdGhlIHF1ZXJ5IHdhcyB0cmllZCB3aXRob3V0IGEKK3NlYXJjaCBkb21haW4gYXBwZW5kZWQsIGEgcmVzcG9uc2Ugd2FzIHJldHVybmVkIHdpdGggbm8gYW5zd2Vycy4KKy5UUCAxOQorLkIgQVJFU19FRk9STUVSUgorQSBxdWVyeSBjb21wbGV0ZWQgYnV0IHRoZSBzZXJ2ZXIgY2xhaW1lZCB0aGF0IHRoZSBxdWVyeSB3YXMKK21hbGZvcm1hdHRlZC4KKy5UUCAxOQorLkIgQVJFU19FU0VSVkZBSUwKK05vIHF1ZXJ5IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk7IHdoZW4gdGhlIHF1ZXJ5IHdhcyB0cmllZCB3aXRob3V0IGEKK3NlYXJjaCBkb21haW4gYXBwZW5kZWQsIHRoZSBzZXJ2ZXIgY2xhaW1lZCB0byBoYXZlIGV4cGVyaWVuY2VkIGEKK2ZhaWx1cmUuICAoVGhpcyBjb2RlIGNhbiBvbmx5IG9jY3VyIGlmIHRoZQorLkIgQVJFU19GTEFHX05PQ0hFQ0tSRVNQCitmbGFnIHdhcyBzcGVjaWZpZWQgYXQgY2hhbm5lbCBpbml0aWFsaXphdGlvbiB0aW1lOyBvdGhlcndpc2UsIHN1Y2gKK3Jlc3BvbnNlcyBhcmUgaWdub3JlZCBhdCB0aGUKKy5CUiBhcmVzX3NlbmQgKDMpCitsZXZlbC4pCisuVFAgMTkKKy5CIEFSRVNfRU5PVEZPVU5ECitObyBxdWVyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OyB3aGVuIHRoZSBxdWVyeSB3YXMgdHJpZWQgd2l0aG91dCBhCitzZWFyY2ggZG9tYWluIGFwcGVuZGVkLCB0aGUgc2VydmVyIHJlcG9ydGVkIHRoYXQgdGhlIHF1ZXJpZWQtZm9yCitkb21haW4gbmFtZSB3YXMgbm90IGZvdW5kLgorLlRQIDE5CisuQiBBUkVTX0VOT1RJTVAKK0EgcXVlcnkgY29tcGxldGVkIGJ1dCB0aGUgc2VydmVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uCityZXF1ZXN0ZWQgYnkgdGhlIHF1ZXJ5LiAgKFRoaXMgY29kZSBjYW4gb25seSBvY2N1ciBpZiB0aGUKKy5CIEFSRVNfRkxBR19OT0NIRUNLUkVTUAorZmxhZyB3YXMgc3BlY2lmaWVkIGF0IGNoYW5uZWwgaW5pdGlhbGl6YXRpb24gdGltZTsgb3RoZXJ3aXNlLCBzdWNoCityZXNwb25zZXMgYXJlIGlnbm9yZWQgYXQgdGhlCisuQlIgYXJlc19zZW5kICgzKQorbGV2ZWwuKQorLlRQIDE5CisuQiBBUkVTX0VSRUZVU0VECitBIHF1ZXJ5IGNvbXBsZXRlZCBidXQgdGhlIHNlcnZlciByZWZ1c2VkIHRoZSBxdWVyeS4gIChUaGlzIGNvZGUgY2FuCitvbmx5IG9jY3VyIHJldHVybmVkIGlmIHRoZQorLkIgQVJFU19GTEFHX05PQ0hFQ0tSRVNQCitmbGFnIHdhcyBzcGVjaWZpZWQgYXQgY2hhbm5lbCBpbml0aWFsaXphdGlvbiB0aW1lOyBvdGhlcndpc2UsIHN1Y2gKK3Jlc3BvbnNlcyBhcmUgaWdub3JlZCBhdCB0aGUKKy5CUiBhcmVzX3NlbmQgKDMpCitsZXZlbC4pCisuVFAgMTkKKy5CIEFSRVNfVElNRU9VVAorTm8gbmFtZSBzZXJ2ZXJzIHJlc3BvbmRlZCB0byBhIHF1ZXJ5IHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QuCisuVFAgMTkKKy5CIEFSRVNfRUNPTk5SRUZVU0VECitObyBuYW1lIHNlcnZlcnMgY291bGQgYmUgY29udGFjdGVkLgorLlRQIDE5CisuQiBBUkVTX0VOT01FTQorTWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuVFAgMTkKKy5CIEFSRVNfRUNBTkNFTExFRAorVGhlIHF1ZXJ5IHdhcyBjYW5jZWxsZWQuCisuVFAgMTkKKy5CIEFSRVNfRURFU1RSVUNUSU9OCitUaGUgbmFtZSBzZXJ2aWNlIGNoYW5uZWwKKy5JIGNoYW5uZWwKK2lzIGJlaW5nIGRlc3Ryb3llZDsgdGhlIHF1ZXJ5IHdpbGwgbm90IGJlIGNvbXBsZXRlZC4KKy5QUAorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSB0aW1lb3V0cworcmVwb3J0cyBob3cgbWFueSB0aW1lcyBhIHF1ZXJ5IHRpbWVkIG91dCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKK2dpdmVuIHJlcXVlc3QuCisuUFAKK0lmIGEgcXVlcnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBhYnVmCitwb2ludHMgdG8gYSByZXN1bHQgYnVmZmVyIG9mIGxlbmd0aAorLklSIGFsZW4gLgorSWYgdGhlIHF1ZXJ5IGRpZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LAorLkkgYWJ1Zgord2lsbCB1c3VhbGx5IGJlIE5VTEwgYW5kCisuSSBhbGVuCit3aWxsIHVzdWFsbHkgYmUgMCwgYnV0IGluIHNvbWUgY2FzZXMgYW4gdW5zdWNjZXNzZnVsIHF1ZXJ5IHJlc3VsdCBtYXkKK2JlIHBsYWNlZCBpbgorLklSIGFidWYgLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19wcm9jZXNzICgzKQorLlNIIEFVVEhPUgorR3JlZyBIdWRzb24sIE1JVCBJbmZvcm1hdGlvbiBTeXN0ZW1zCisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZWFyY2guYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2VhcmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlODUyNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2VhcmNoLmMKQEAgLTAsMCArMSwzMTYgQEAKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworc3RydWN0IHNlYXJjaF9xdWVyeSB7CisgIC8qIEFyZ3VtZW50cyBwYXNzZWQgdG8gYXJlc19zZWFyY2ggKi8KKyAgYXJlc19jaGFubmVsIGNoYW5uZWw7CisgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAgIC8qIGNvcGllZCBpbnRvIGFuIGFsbG9jYXRlZCBidWZmZXIgKi8KKyAgaW50IGRuc2NsYXNzOworICBpbnQgdHlwZTsKKyAgYXJlc19jYWxsYmFjayBjYWxsYmFjazsKKyAgdm9pZCAqYXJnOworCisgIGludCBzdGF0dXNfYXNfaXM7ICAgICAgICAgICAgIC8qIGVycm9yIHN0YXR1cyBmcm9tIHRyeWluZyBhcy1pcyAqLworICBpbnQgbmV4dF9kb21haW47ICAgICAgICAgICAgICAvKiBuZXh0IHNlYXJjaCBkb21haW4gdG8gdHJ5ICovCisgIGludCB0cnlpbmdfYXNfaXM7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgcXVlcnkgaXMgZm9yIG5hbWUgYXMtaXMgKi8KKyAgaW50IHRpbWVvdXRzOyAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHRpbWVvdXRzIHdlIHNhdyBmb3IgdGhpcyByZXF1ZXN0ICovCisgIGludCBldmVyX2dvdF9ub2RhdGE7ICAgICAgICAgIC8qIGRpZCB3ZSBldmVyIGdldCBBUkVTX0VOT0RBVEEgYWxvbmcgdGhlIHdheT8gKi8KK307CisKK3N0YXRpYyB2b2lkIHNlYXJjaF9jYWxsYmFjayh2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbik7CitzdGF0aWMgdm9pZCBlbmRfc3F1ZXJ5KHN0cnVjdCBzZWFyY2hfcXVlcnkgKnNxdWVyeSwgaW50IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4pOworc3RhdGljIGludCBjYXRfZG9tYWluKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRvbWFpbiwgY2hhciAqKnMpOworU1RBVElDX1RFU1RBQkxFIGludCBzaW5nbGVfZG9tYWluKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICoqcyk7CisKK3ZvaWQgYXJlc19zZWFyY2goYXJlc19jaGFubmVsIGNoYW5uZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkbnNjbGFzcywKKyAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGFyZXNfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmFyZykKK3sKKyAgc3RydWN0IHNlYXJjaF9xdWVyeSAqc3F1ZXJ5OworICBjaGFyICpzOworICBjb25zdCBjaGFyICpwOworICBpbnQgc3RhdHVzLCBuZG90czsKKworICAvKiBJZiBuYW1lIG9ubHkgeWllbGRzIG9uZSBkb21haW4gdG8gc2VhcmNoLCB0aGVuIHdlIGRvbid0IGhhdmUKKyAgICogdG8ga2VlcCBleHRyYSBzdGF0ZSwgc28ganVzdCBkbyBhbiBhcmVzX3F1ZXJ5KCkuCisgICAqLworICBzdGF0dXMgPSBzaW5nbGVfZG9tYWluKGNoYW5uZWwsIG5hbWUsICZzKTsKKyAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgeworICAgICAgY2FsbGJhY2soYXJnLCBzdGF0dXMsIDAsIE5VTEwsIDApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKHMpCisgICAgeworICAgICAgYXJlc19xdWVyeShjaGFubmVsLCBzLCBkbnNjbGFzcywgdHlwZSwgY2FsbGJhY2ssIGFyZyk7CisgICAgICBhcmVzX2ZyZWUocyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIEFsbG9jYXRlIGEgc2VhcmNoX3F1ZXJ5IHN0cnVjdHVyZSB0byBob2xkIHRoZSBzdGF0ZSBuZWNlc3NhcnkgZm9yCisgICAqIGRvaW5nIG11bHRpcGxlIGxvb2t1cHMuCisgICAqLworICBzcXVlcnkgPSBhcmVzX21hbGxvYyhzaXplb2Yoc3RydWN0IHNlYXJjaF9xdWVyeSkpOworICBpZiAoIXNxdWVyeSkKKyAgICB7CisgICAgICBjYWxsYmFjayhhcmcsIEFSRVNfRU5PTUVNLCAwLCBOVUxMLCAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIHNxdWVyeS0+Y2hhbm5lbCA9IGNoYW5uZWw7CisgIHNxdWVyeS0+bmFtZSA9IGFyZXNfc3RyZHVwKG5hbWUpOworICBpZiAoIXNxdWVyeS0+bmFtZSkKKyAgICB7CisgICAgICBhcmVzX2ZyZWUoc3F1ZXJ5KTsKKyAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FTk9NRU0sIDAsIE5VTEwsIDApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgc3F1ZXJ5LT5kbnNjbGFzcyA9IGRuc2NsYXNzOworICBzcXVlcnktPnR5cGUgPSB0eXBlOworICBzcXVlcnktPnN0YXR1c19hc19pcyA9IC0xOworICBzcXVlcnktPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgIHNxdWVyeS0+YXJnID0gYXJnOworICBzcXVlcnktPnRpbWVvdXRzID0gMDsKKyAgc3F1ZXJ5LT5ldmVyX2dvdF9ub2RhdGEgPSAwOworCisgIC8qIENvdW50IHRoZSBudW1iZXIgb2YgZG90cyBpbiBuYW1lLiAqLworICBuZG90cyA9IDA7CisgIGZvciAocCA9IG5hbWU7ICpwOyBwKyspCisgICAgeworICAgICAgaWYgKCpwID09ICcuJykKKyAgICAgICAgbmRvdHMrKzsKKyAgICB9CisKKyAgLyogSWYgbmRvdHMgaXMgYXQgbGVhc3QgdGhlIGNoYW5uZWwgbmRvdHMgdGhyZXNob2xkICh1c3VhbGx5IDEpLAorICAgKiB0aGVuIHdlIHRyeSB0aGUgbmFtZSBhcy1pcyBmaXJzdC4gIE90aGVyd2lzZSwgd2UgdHJ5IHRoZSBuYW1lCisgICAqIGFzLWlzIGxhc3QuCisgICAqLworICBpZiAobmRvdHMgPj0gY2hhbm5lbC0+bmRvdHMpCisgICAgeworICAgICAgLyogVHJ5IHRoZSBuYW1lIGFzLWlzIGZpcnN0LiAqLworICAgICAgc3F1ZXJ5LT5uZXh0X2RvbWFpbiA9IDA7CisgICAgICBzcXVlcnktPnRyeWluZ19hc19pcyA9IDE7CisgICAgICBhcmVzX3F1ZXJ5KGNoYW5uZWwsIG5hbWUsIGRuc2NsYXNzLCB0eXBlLCBzZWFyY2hfY2FsbGJhY2ssIHNxdWVyeSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVHJ5IHRoZSBuYW1lIGFzLWlzIGxhc3Q7IHN0YXJ0IHdpdGggdGhlIGZpcnN0IHNlYXJjaCBkb21haW4uICovCisgICAgICBzcXVlcnktPm5leHRfZG9tYWluID0gMTsKKyAgICAgIHNxdWVyeS0+dHJ5aW5nX2FzX2lzID0gMDsKKyAgICAgIHN0YXR1cyA9IGNhdF9kb21haW4obmFtZSwgY2hhbm5lbC0+ZG9tYWluc1swXSwgJnMpOworICAgICAgaWYgKHN0YXR1cyA9PSBBUkVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBhcmVzX3F1ZXJ5KGNoYW5uZWwsIHMsIGRuc2NsYXNzLCB0eXBlLCBzZWFyY2hfY2FsbGJhY2ssIHNxdWVyeSk7CisgICAgICAgICAgYXJlc19mcmVlKHMpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIGZhaWxlZCwgZnJlZSB0aGUgbWFsbG9jKCllZCBtZW1vcnkgKi8KKyAgICAgICAgYXJlc19mcmVlKHNxdWVyeS0+bmFtZSk7CisgICAgICAgIGFyZXNfZnJlZShzcXVlcnkpOworICAgICAgICBjYWxsYmFjayhhcmcsIHN0YXR1cywgMCwgTlVMTCwgMCk7CisgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZWFyY2hfY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYWJ1ZiwgaW50IGFsZW4pCit7CisgIHN0cnVjdCBzZWFyY2hfcXVlcnkgKnNxdWVyeSA9IChzdHJ1Y3Qgc2VhcmNoX3F1ZXJ5ICopIGFyZzsKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwgPSBzcXVlcnktPmNoYW5uZWw7CisgIGNoYXIgKnM7CisKKyAgc3F1ZXJ5LT50aW1lb3V0cyArPSB0aW1lb3V0czsKKworICAvKiBTdG9wIHNlYXJjaGluZyB1bmxlc3Mgd2UgZ290IGEgbm9uLWZhdGFsIGVycm9yLiAqLworICBpZiAoc3RhdHVzICE9IEFSRVNfRU5PREFUQSAmJiBzdGF0dXMgIT0gQVJFU19FU0VSVkZBSUwKKyAgICAgICYmIHN0YXR1cyAhPSBBUkVTX0VOT1RGT1VORCkKKyAgICBlbmRfc3F1ZXJ5KHNxdWVyeSwgc3RhdHVzLCBhYnVmLCBhbGVuKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFNhdmUgdGhlIHN0YXR1cyBpZiB3ZSB3ZXJlIHRyeWluZyBhcy1pcy4gKi8KKyAgICAgIGlmIChzcXVlcnktPnRyeWluZ19hc19pcykKKyAgICAgICAgc3F1ZXJ5LT5zdGF0dXNfYXNfaXMgPSBzdGF0dXM7CisKKyAgICAgIC8qCisgICAgICAgKiBJZiB3ZSBldmVyIGdldCBBUkVTX0VOT0RBVEEgYWxvbmcgdGhlIHdheSwgcmVjb3JkIHRoYXQ7IGlmIHRoZSBzZWFyY2gKKyAgICAgICAqIHNob3VsZCBydW4gdG8gdGhlIHZlcnkgZW5kIGFuZCB3ZSBnb3QgYXQgbGVhc3Qgb25lIEFSRVNfRU5PREFUQSwKKyAgICAgICAqIHRoZW4gY2FsbGVycyBsaWtlIGFyZXNfZ2V0aG9zdGJ5bmFtZSgpIG1heSB3YW50IHRvIHRyeSBhIFRfQSBzZWFyY2gKKyAgICAgICAqIGV2ZW4gaWYgdGhlIGxhc3QgZG9tYWluIHdlIHF1ZXJpZWQgZm9yIFRfQUFBQSByZXNvdXJjZSByZWNvcmRzCisgICAgICAgKiByZXR1cm5lZCBBUkVTX0VOT1RGT1VORC4KKyAgICAgICAqLworICAgICAgaWYgKHN0YXR1cyA9PSBBUkVTX0VOT0RBVEEpCisgICAgICAgIHNxdWVyeS0+ZXZlcl9nb3Rfbm9kYXRhID0gMTsKKworICAgICAgaWYgKHNxdWVyeS0+bmV4dF9kb21haW4gPCBjaGFubmVsLT5uZG9tYWlucykKKyAgICAgICAgeworICAgICAgICAgIC8qIFRyeSB0aGUgbmV4dCBkb21haW4uICovCisgICAgICAgICAgc3RhdHVzID0gY2F0X2RvbWFpbihzcXVlcnktPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLT5kb21haW5zW3NxdWVyeS0+bmV4dF9kb21haW5dLCAmcyk7CisgICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCisgICAgICAgICAgICBlbmRfc3F1ZXJ5KHNxdWVyeSwgc3RhdHVzLCBOVUxMLCAwKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNxdWVyeS0+dHJ5aW5nX2FzX2lzID0gMDsKKyAgICAgICAgICAgICAgc3F1ZXJ5LT5uZXh0X2RvbWFpbisrOworICAgICAgICAgICAgICBhcmVzX3F1ZXJ5KGNoYW5uZWwsIHMsIHNxdWVyeS0+ZG5zY2xhc3MsIHNxdWVyeS0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hfY2FsbGJhY2ssIHNxdWVyeSk7CisgICAgICAgICAgICAgIGFyZXNfZnJlZShzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoc3F1ZXJ5LT5zdGF0dXNfYXNfaXMgPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUcnkgdGhlIG5hbWUgYXMtaXMgYXQgdGhlIGVuZC4gKi8KKyAgICAgICAgICBzcXVlcnktPnRyeWluZ19hc19pcyA9IDE7CisgICAgICAgICAgYXJlc19xdWVyeShjaGFubmVsLCBzcXVlcnktPm5hbWUsIHNxdWVyeS0+ZG5zY2xhc3MsIHNxdWVyeS0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlYXJjaF9jYWxsYmFjaywgc3F1ZXJ5KTsKKyAgICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmIChzcXVlcnktPnN0YXR1c19hc19pcyA9PSBBUkVTX0VOT1RGT1VORCAmJiBzcXVlcnktPmV2ZXJfZ290X25vZGF0YSkgeworICAgICAgICAgIGVuZF9zcXVlcnkoc3F1ZXJ5LCBBUkVTX0VOT0RBVEEsIE5VTEwsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlbmRfc3F1ZXJ5KHNxdWVyeSwgc3F1ZXJ5LT5zdGF0dXNfYXNfaXMsIE5VTEwsIDApOworICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZW5kX3NxdWVyeShzdHJ1Y3Qgc2VhcmNoX3F1ZXJ5ICpzcXVlcnksIGludCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuKQoreworICBzcXVlcnktPmNhbGxiYWNrKHNxdWVyeS0+YXJnLCBzdGF0dXMsIHNxdWVyeS0+dGltZW91dHMsIGFidWYsIGFsZW4pOworICBhcmVzX2ZyZWUoc3F1ZXJ5LT5uYW1lKTsKKyAgYXJlc19mcmVlKHNxdWVyeSk7Cit9CisKKy8qIENvbmNhdGVuYXRlIHR3byBkb21haW5zLiAqLworc3RhdGljIGludCBjYXRfZG9tYWluKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRvbWFpbiwgY2hhciAqKnMpCit7CisgIHNpemVfdCBubGVuID0gc3RybGVuKG5hbWUpOworICBzaXplX3QgZGxlbiA9IHN0cmxlbihkb21haW4pOworCisgICpzID0gYXJlc19tYWxsb2MobmxlbiArIDEgKyBkbGVuICsgMSk7CisgIGlmICghKnMpCisgICAgcmV0dXJuIEFSRVNfRU5PTUVNOworICBtZW1jcHkoKnMsIG5hbWUsIG5sZW4pOworICAoKnMpW25sZW5dID0gJy4nOworICBtZW1jcHkoKnMgKyBubGVuICsgMSwgZG9tYWluLCBkbGVuKTsKKyAgKCpzKVtubGVuICsgMSArIGRsZW5dID0gMDsKKyAgcmV0dXJuIEFSRVNfU1VDQ0VTUzsKK30KKworLyogRGV0ZXJtaW5lIGlmIHRoaXMgbmFtZSBvbmx5IHlpZWxkcyBvbmUgcXVlcnkuICBJZiBpdCBkb2VzLCBzZXQgKnMgdG8KKyAqIHRoZSBzdHJpbmcgd2Ugc2hvdWxkIHF1ZXJ5LCBpbiBhbiBhbGxvY2F0ZWQgYnVmZmVyLiAgSWYgbm90LCBzZXQgKnMKKyAqIHRvIE5VTEwuCisgKi8KK1NUQVRJQ19URVNUQUJMRSBpbnQgc2luZ2xlX2RvbWFpbihhcmVzX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqKnMpCit7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisgIGNvbnN0IGNoYXIgKmhvc3RhbGlhc2VzOworICBGSUxFICpmcDsKKyAgY2hhciAqbGluZSA9IE5VTEw7CisgIGludCBzdGF0dXM7CisgIHNpemVfdCBsaW5lc2l6ZTsKKyAgY29uc3QgY2hhciAqcCwgKnE7CisgIGludCBlcnJvcjsKKworICAvKiBJZiB0aGUgbmFtZSBjb250YWlucyBhIHRyYWlsaW5nIGRvdCwgdGhlbiB0aGUgc2luZ2xlIHF1ZXJ5IGlzIHRoZSBuYW1lCisgICAqIHNhbnMgdGhlIHRyYWlsaW5nIGRvdC4KKyAgICovCisgIGlmICgobGVuID4gMCkgJiYgKG5hbWVbbGVuIC0gMV0gPT0gJy4nKSkKKyAgICB7CisgICAgICAqcyA9IGFyZXNfc3RyZHVwKG5hbWUpOworICAgICAgcmV0dXJuICgqcykgPyBBUkVTX1NVQ0NFU1MgOiBBUkVTX0VOT01FTTsKKyAgICB9CisKKyAgaWYgKCEoY2hhbm5lbC0+ZmxhZ3MgJiBBUkVTX0ZMQUdfTk9BTElBU0VTKSAmJiAhc3RyY2hyKG5hbWUsICcuJykpCisgICAgeworICAgICAgLyogVGhlIG5hbWUgbWlnaHQgYmUgYSBob3N0IGFsaWFzLiAqLworICAgICAgaG9zdGFsaWFzZXMgPSBnZXRlbnYoIkhPU1RBTElBU0VTIik7CisgICAgICBpZiAoaG9zdGFsaWFzZXMpCisgICAgICAgIHsKKyAgICAgICAgICBmcCA9IGZvcGVuKGhvc3RhbGlhc2VzLCAiciIpOworICAgICAgICAgIGlmIChmcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgd2hpbGUgKChzdGF0dXMgPSBhcmVzX19yZWFkX2xpbmUoZnAsICZsaW5lLCAmbGluZXNpemUpKQorICAgICAgICAgICAgICAgICAgICAgPT0gQVJFU19TVUNDRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChzdHJuY2FzZWNtcChsaW5lLCBuYW1lLCBsZW4pICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAhSVNTUEFDRShsaW5lW2xlbl0pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgIHAgPSBsaW5lICsgbGVuOworICAgICAgICAgICAgICAgICAgd2hpbGUgKElTU1BBQ0UoKnApKQorICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICBpZiAoKnApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBxID0gcCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpxICYmICFJU1NQQUNFKCpxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHErKzsKKyAgICAgICAgICAgICAgICAgICAgICAqcyA9IGFyZXNfbWFsbG9jKHEgLSBwICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKnMsIHAsIHEgLSBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzKVtxIC0gcF0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGFyZXNfZnJlZShsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZnApOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKnMpID8gQVJFU19TVUNDRVNTIDogQVJFU19FTk9NRU07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGFyZXNfZnJlZShsaW5lKTsKKyAgICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MgJiYgc3RhdHVzICE9IEFSRVNfRU9GKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnJvciA9IEVSUk5POworICAgICAgICAgICAgICBzd2l0Y2goZXJyb3IpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgRU5PRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgRVNSQ0g6CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKSk7CisgICAgICAgICAgICAgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGZpbGU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGFsaWFzZXMpKTsKKyAgICAgICAgICAgICAgICAgICpzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBBUkVTX0VGSUxFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICBpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBBUkVTX0ZMQUdfTk9TRUFSQ0ggfHwgY2hhbm5lbC0+bmRvbWFpbnMgPT0gMCkKKyAgICB7CisgICAgICAvKiBObyBkb21haW4gc2VhcmNoIHRvIGRvOyBqdXN0IHRyeSB0aGUgbmFtZSBhcy1pcy4gKi8KKyAgICAgICpzID0gYXJlc19zdHJkdXAobmFtZSk7CisgICAgICByZXR1cm4gKCpzKSA/IEFSRVNfU1VDQ0VTUyA6IEFSRVNfRU5PTUVNOworICAgIH0KKworICAqcyA9IE5VTEw7CisgIHJldHVybiBBUkVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NlbmQuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2VuZC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWFiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NlbmQuMwpAQCAtMCwwICsxLDEyMyBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX1NFTkQgMyAiMjUgSnVseSAxOTk4IgorLlNIIE5BTUUKK2FyZXNfc2VuZCBcLSBJbml0aWF0ZSBhIEROUyBxdWVyeQorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHR5cGVkZWYgdm9pZCAoKmFyZXNfY2FsbGJhY2spKHZvaWQgKlxmSWFyZ1xmUCwgaW50IFxmSXN0YXR1c1xmUCwKKy5CCWludCBcZkl0aW1lb3V0c1xmUCwgdW5zaWduZWQgY2hhciAqXGZJYWJ1ZlxmUCwgaW50IFxmSWFsZW5cZlApCisuUFAKKy5CIHZvaWQgYXJlc19zZW5kKGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLCBjb25zdCB1bnNpZ25lZCBjaGFyICpcZklxYnVmXGZQLAorLkIgCWludCBcZklxbGVuXGZQLCBhcmVzX2NhbGxiYWNrIFxmSWNhbGxiYWNrXGZQLCB2b2lkICpcZklhcmdcZlApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBhcmVzX3NlbmQKK2Z1bmN0aW9uIGluaXRpYXRlcyBhIEROUyBxdWVyeSBvbiB0aGUgbmFtZSBzZXJ2aWNlIGNoYW5uZWwgaWRlbnRpZmllZAorYnkKKy5JUiBjaGFubmVsIC4KK1RoZSBwYXJhbWV0ZXJzCisuSSBxYnVmCithbmQKKy5JIHFsZW4KK2dpdmUgdGhlIEROUyBxdWVyeSwgd2hpY2ggc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGZvcm1hdHRlZCBhY2NvcmRpbmcKK3RvIHRoZSBETlMgcHJvdG9jb2wuICBXaGVuIHRoZSBxdWVyeSBpcyBjb21wbGV0ZSBvciBoYXMgZmFpbGVkLCB0aGUKK2FyZXMgbGlicmFyeSB3aWxsIGludm9rZQorLklSIGNhbGxiYWNrIC4KK0NvbXBsZXRpb24gb3IgZmFpbHVyZSBvZiB0aGUgcXVlcnkgbWF5IGhhcHBlbiBpbW1lZGlhdGVseSwgb3IgbWF5CitoYXBwZW4gZHVyaW5nIGEgbGF0ZXIgY2FsbCB0bworLkJSIGFyZXNfcHJvY2VzcyAoMykKK29yCisuQlIgYXJlc19kZXN0cm95ICgzKS4KKy5QUAorVGhlIGNhbGxiYWNrIGFyZ3VtZW50CisuSSBhcmcKK2lzIGNvcGllZCBmcm9tIHRoZQorLkIgYXJlc19zZW5kCithcmd1bWVudAorLklSIGFyZyAuCitUaGUgY2FsbGJhY2sgYXJndW1lbnQKKy5JIHN0YXR1cworaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHF1ZXJ5IHN1Y2NlZWRlZCBhbmQsIGlmIG5vdCwgaG93IGl0IGZhaWxlZC4gIEl0CittYXkgaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuVFAgMTkKKy5CIEFSRVNfU1VDQ0VTUworVGhlIHF1ZXJ5IGNvbXBsZXRlZC4KKy5UUCAxOQorLkIgQVJFU19FQkFEUVVFUlkKK1RoZSBxdWVyeSBidWZmZXIgd2FzIHBvb3JseSBmb3JtZWQgKHdhcyBub3QgbG9uZyBlbm91Z2ggZm9yIGEgRE5TCitoZWFkZXIgb3Igd2FzIHRvbyBsb25nIGZvciBUQ1AgdHJhbnNtaXNzaW9uKS4KKy5UUCAxOQorLkIgQVJFU19FVElNRU9VVAorTm8gbmFtZSBzZXJ2ZXJzIHJlc3BvbmRlZCB3aXRoaW4gdGhlIHRpbWVvdXQgcGVyaW9kLgorLlRQIDE5CisuQiBBUkVTX0VDT05OUkVGVVNFRAorTm8gbmFtZSBzZXJ2ZXJzIGNvdWxkIGJlIGNvbnRhY3RlZC4KKy5UUCAxOQorLkIgQVJFU19FTk9NRU0KK01lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlRQIDE5CisuQiBBUkVTX0VDQU5DRUxMRUQKK1RoZSBxdWVyeSB3YXMgY2FuY2VsbGVkLgorLlRQIDE5CisuQiBBUkVTX0VERVNUUlVDVElPTgorVGhlIG5hbWUgc2VydmljZSBjaGFubmVsCisuSSBjaGFubmVsCitpcyBiZWluZyBkZXN0cm95ZWQ7IHRoZSBxdWVyeSB3aWxsIG5vdCBiZSBjb21wbGV0ZWQuCisuUFAKK1RoZSBjYWxsYmFjayBhcmd1bWVudAorLkkgdGltZW91dHMKK3JlcG9ydHMgaG93IG1hbnkgdGltZXMgYSBxdWVyeSB0aW1lZCBvdXQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlCitnaXZlbiByZXF1ZXN0LgorLlBQCitJZiB0aGUgcXVlcnkgY29tcGxldGVkLCB0aGUgY2FsbGJhY2sgYXJndW1lbnQKKy5JIGFidWYKK3BvaW50cyB0byBhIHJlc3VsdCBidWZmZXIgb2YgbGVuZ3RoCisuSVIgYWxlbiAuCitJZiB0aGUgcXVlcnkgZGlkIG5vdCBjb21wbGV0ZSwKKy5JIGFidWYKK3dpbGwgYmUgTlVMTCBhbmQKKy5JIGFsZW4KK3dpbGwgYmUgMC4KKy5QUAorVW5sZXNzIHRoZSBmbGFnCisuQiBBUkVTX0ZMQUdfTk9DSEVDS1JFU1AKK3dhcyBzZXQgYXQgY2hhbm5lbCBpbml0aWFsaXphdGlvbiB0aW1lLAorLkIgYXJlc19zZW5kCit3aWxsIG5vcm1hbGx5IGlnbm9yZSByZXNwb25zZXMgd2hvc2UgcXVlc3Rpb25zIGRvIG5vdCBtYXRjaCB0aGUKK3F1ZXN0aW9ucyBpbgorLklSIHFidWYgLAorYXMgd2VsbCBhcyByZXNwb25zZXMgd2l0aCByZXBseSBjb2RlcyBvZgorLkJSIFNFUlZGQUlMICwKKy5CUiBOT1RJTVAgLAorYW5kCisuQlIgUkVGVVNFRCAuCitVbmxpa2Ugb3RoZXIgcXVlcnkgZnVuY3Rpb25zIGluIHRoZSBhcmVzIGxpYnJhcnksIGhvd2V2ZXIsCisuQiBhcmVzX3NlbmQKK2RvZXMgbm90IGluc3BlY3QgdGhlIGhlYWRlciBvZiB0aGUgcmVwbHkgcGFja2V0IHRvIGRldGVybWluZSB0aGUgZXJyb3IKK3N0YXR1cywgc28gYSBjYWxsYmFjayBzdGF0dXMgb2YKKy5CIEFSRVNfU1VDQ0VTUworZG9lcyBub3QgcmVmbGVjdCBhcyBtdWNoIGFib3V0IHRoZSByZXNwb25zZSBhcyBmb3Igb3RoZXIgcXVlcnkKK2Z1bmN0aW9ucy4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfcHJvY2VzcyAoMykKKy5TSCBBVVRIT1IKK0dyZWcgSHVkc29uLCBNSVQgSW5mb3JtYXRpb24gU3lzdGVtcworLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2VuZC5jIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjMDAzNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2VuZC5jCkBAIC0wLDAgKzEsMTMxIEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfZG5zLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKK3ZvaWQgYXJlc19zZW5kKGFyZXNfY2hhbm5lbCBjaGFubmVsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpxYnVmLCBpbnQgcWxlbiwKKyAgICAgICAgICAgICAgIGFyZXNfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmFyZykKK3sKKyAgc3RydWN0IHF1ZXJ5ICpxdWVyeTsKKyAgaW50IGksIHBhY2tldHN6OworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIHF1ZXJ5IGlzIGF0IGxlYXN0IGxvbmcgZW5vdWdoIHRvIGhvbGQgdGhlIGhlYWRlci4gKi8KKyAgaWYgKHFsZW4gPCBIRklYRURTWiB8fCBxbGVuID49ICgxIDw8IDE2KSkKKyAgICB7CisgICAgICBjYWxsYmFjayhhcmcsIEFSRVNfRUJBRFFVRVJZLCAwLCBOVUxMLCAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHF1ZXJ5IGFuZCBhbGxvY2F0ZWQgZmllbGRzLiAqLworICBxdWVyeSA9IGFyZXNfbWFsbG9jKHNpemVvZihzdHJ1Y3QgcXVlcnkpKTsKKyAgaWYgKCFxdWVyeSkKKyAgICB7CisgICAgICBjYWxsYmFjayhhcmcsIEFSRVNfRU5PTUVNLCAwLCBOVUxMLCAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIHF1ZXJ5LT50Y3BidWYgPSBhcmVzX21hbGxvYyhxbGVuICsgMik7CisgIGlmICghcXVlcnktPnRjcGJ1ZikKKyAgICB7CisgICAgICBhcmVzX2ZyZWUocXVlcnkpOworICAgICAgY2FsbGJhY2soYXJnLCBBUkVTX0VOT01FTSwgMCwgTlVMTCwgMCk7CisgICAgICByZXR1cm47CisgICAgfQorICBxdWVyeS0+c2VydmVyX2luZm8gPSBhcmVzX21hbGxvYyhjaGFubmVsLT5uc2VydmVycyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihxdWVyeS0+c2VydmVyX2luZm9bMF0pKTsKKyAgaWYgKCFxdWVyeS0+c2VydmVyX2luZm8pCisgICAgeworICAgICAgYXJlc19mcmVlKHF1ZXJ5LT50Y3BidWYpOworICAgICAgYXJlc19mcmVlKHF1ZXJ5KTsKKyAgICAgIGNhbGxiYWNrKGFyZywgQVJFU19FTk9NRU0sIDAsIE5VTEwsIDApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBDb21wdXRlIHRoZSBxdWVyeSBJRC4gIFN0YXJ0IHdpdGggbm8gdGltZW91dC4gKi8KKyAgcXVlcnktPnFpZCA9IEROU19IRUFERVJfUUlEKHFidWYpOworICBxdWVyeS0+dGltZW91dC50dl9zZWMgPSAwOworICBxdWVyeS0+dGltZW91dC50dl91c2VjID0gMDsKKworICAvKiBGb3JtIHRoZSBUQ1AgcXVlcnkgYnVmZmVyIGJ5IHByZXBlbmRpbmcgcWxlbiAoYXMgdHdvCisgICAqIG5ldHdvcmstb3JkZXIgYnl0ZXMpIHRvIHFidWYuCisgICAqLworICBxdWVyeS0+dGNwYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKChxbGVuID4+IDgpICYgMHhmZik7CisgIHF1ZXJ5LT50Y3BidWZbMV0gPSAodW5zaWduZWQgY2hhcikocWxlbiAmIDB4ZmYpOworICBtZW1jcHkocXVlcnktPnRjcGJ1ZiArIDIsIHFidWYsIHFsZW4pOworICBxdWVyeS0+dGNwbGVuID0gcWxlbiArIDI7CisKKyAgLyogRmlsbCBpbiBxdWVyeSBhcmd1bWVudHMuICovCisgIHF1ZXJ5LT5xYnVmID0gcXVlcnktPnRjcGJ1ZiArIDI7CisgIHF1ZXJ5LT5xbGVuID0gcWxlbjsKKyAgcXVlcnktPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgIHF1ZXJ5LT5hcmcgPSBhcmc7CisKKyAgLyogSW5pdGlhbGl6ZSBxdWVyeSBzdGF0dXMuICovCisgIHF1ZXJ5LT50cnlfY291bnQgPSAwOworCisgIC8qIENob29zZSB0aGUgc2VydmVyIHRvIHNlbmQgdGhlIHF1ZXJ5IHRvLiBJZiByb3RhdGlvbiBpcyBlbmFibGVkLCBrZWVwIHRyYWNrCisgICAqIG9mIHRoZSBuZXh0IHNlcnZlciB3ZSB3YW50IHRvIHVzZS4gKi8KKyAgcXVlcnktPnNlcnZlciA9IGNoYW5uZWwtPmxhc3Rfc2VydmVyOworICBpZiAoY2hhbm5lbC0+cm90YXRlID09IDEpCisgICAgY2hhbm5lbC0+bGFzdF9zZXJ2ZXIgPSAoY2hhbm5lbC0+bGFzdF9zZXJ2ZXIgKyAxKSAlIGNoYW5uZWwtPm5zZXJ2ZXJzOworCisgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5uc2VydmVyczsgaSsrKQorICAgIHsKKyAgICAgIHF1ZXJ5LT5zZXJ2ZXJfaW5mb1tpXS5za2lwX3NlcnZlciA9IDA7CisgICAgICBxdWVyeS0+c2VydmVyX2luZm9baV0udGNwX2Nvbm5lY3Rpb25fZ2VuZXJhdGlvbiA9IDA7CisgICAgfQorCisgIHBhY2tldHN6ID0gKGNoYW5uZWwtPmZsYWdzICYgQVJFU19GTEFHX0VETlMpID8gY2hhbm5lbC0+ZWRuc3BzeiA6IFBBQ0tFVFNaOworICBxdWVyeS0+dXNpbmdfdGNwID0gKGNoYW5uZWwtPmZsYWdzICYgQVJFU19GTEFHX1VTRVZDKSB8fCBxbGVuID4gcGFja2V0c3o7CisKKyAgcXVlcnktPmVycm9yX3N0YXR1cyA9IEFSRVNfRUNPTk5SRUZVU0VEOworICBxdWVyeS0+dGltZW91dHMgPSAwOworCisgIC8qIEluaXRpYWxpemUgb3VyIGxpc3Qgbm9kZXMuICovCisgIGFyZXNfX2luaXRfbGlzdF9ub2RlKCYocXVlcnktPnF1ZXJpZXNfYnlfcWlkKSwgICAgIHF1ZXJ5KTsKKyAgYXJlc19faW5pdF9saXN0X25vZGUoJihxdWVyeS0+cXVlcmllc19ieV90aW1lb3V0KSwgcXVlcnkpOworICBhcmVzX19pbml0X2xpc3Rfbm9kZSgmKHF1ZXJ5LT5xdWVyaWVzX3RvX3NlcnZlciksICBxdWVyeSk7CisgIGFyZXNfX2luaXRfbGlzdF9ub2RlKCYocXVlcnktPmFsbF9xdWVyaWVzKSwgICAgICAgIHF1ZXJ5KTsKKworICAvKiBDaGFpbiB0aGUgcXVlcnkgaW50byB0aGUgbGlzdCBvZiBhbGwgcXVlcmllcy4gKi8KKyAgYXJlc19faW5zZXJ0X2luX2xpc3QoJihxdWVyeS0+YWxsX3F1ZXJpZXMpLCAmKGNoYW5uZWwtPmFsbF9xdWVyaWVzKSk7CisgIC8qIEtlZXAgdHJhY2sgb2YgcXVlcmllcyBidWNrZXRlZCBieSBxaWQsIHNvIHdlIGNhbiBwcm9jZXNzIEROUworICAgKiByZXNwb25zZXMgcXVpY2tseS4KKyAgICovCisgIGFyZXNfX2luc2VydF9pbl9saXN0KAorICAgICYocXVlcnktPnF1ZXJpZXNfYnlfcWlkKSwKKyAgICAmKGNoYW5uZWwtPnF1ZXJpZXNfYnlfcWlkW3F1ZXJ5LT5xaWQgJSBBUkVTX1FJRF9UQUJMRV9TSVpFXSkpOworCisgIC8qIFBlcmZvcm0gdGhlIGZpcnN0IHF1ZXJ5IGFjdGlvbi4gKi8KKyAgbm93ID0gYXJlc19fdHZub3coKTsKKyAgYXJlc19fc2VuZF9xdWVyeShjaGFubmVsLCBxdWVyeSwgJm5vdyk7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9sb2NhbF9kZXYuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X2xvY2FsX2Rldi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NDY4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9sb2NhbF9kZXYuMwpAQCAtMCwwICsxLDM5IEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMjAxMCBieSBCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNoLmNvbT4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfU0VUX0xPQ0FMX0RFViAzICIzMCBKdW5lIDIwMTAiCisuU0ggTkFNRQorYXJlc19zZXRfbG9jYWxfZGV2IFwtIEJpbmQgdG8gYSBzcGVjaWZpYyBuZXR3b3JrIGRldmljZSB3aGVuIGNyZWF0aW5nIHNvY2tldHMuCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgdm9pZCBhcmVzX3NldF9sb2NhbF9kZXYoYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsIGNvbnN0IGNoYXIqIFxmSWxvY2FsX2Rldl9uYW1lXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJhcmVzX3NldF9sb2NhbF9kZXZcZlAgZnVuY3Rpb24gY2F1c2VzIGFsbCBmdXR1cmUgc29ja2V0cwordG8gYmUgYm91bmQgdG8gdGhpcyBkZXZpY2Ugd2l0aCBTT19CSU5EVE9ERVZJQ0UuICBUaGlzIGZvcmNlcyBjb21tdW5pY2F0aW9ucwordG8gZ28gb3ZlciBhIGNlcnRhaW4gaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdXNlZnVsIG9uIG11bHRpLWhvbWVkIG1hY2hpbmVzLgorVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gTGludXgsIGFuZCByb290IHByaXZpbGVnZXMgYXJlIHJlcXVpcmVkCitmb3IgdGhlIG9wdGlvbiB0byB3b3JrLiAgSWYgU09fQklORFRPREVWSUNFIGlzIG5vdCBzdXBwb3J0ZWQgb3IgdGhlCitzZXRzb2NrdG9wIGNhbGwgZmFpbHMgKHByb2JhYmx5IGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMpLCB0aGUgZXJyb3IgaXMKK3NpbGVudGx5IGlnbm9yZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3NldF9sb2NhbF9pcHY0ICgzKQorLkJSIGFyZXNfc2V0X2xvY2FsX2lwdjYgKDMpCisuU0ggTk9URVMKK1RoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGMtYXJlcyAxLjcuNAorLlNIIEFVVEhPUgorQmVuIEdyZWVhcgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfbG9jYWxfaXA0LjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9sb2NhbF9pcDQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmY1ZmFlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfbG9jYWxfaXA0LjMKQEAgLTAsMCArMSwzNCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDIwMTAgYnkgQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX1NFVF9MT0NBTF9JUDQgMyAiMzAgSnVuZSAyMDEwIgorLlNIIE5BTUUKK2FyZXNfc2V0X2xvY2FsX2lwNCBcLSBTZXQgbG9jYWwgSVB2NCBhZGRyZXNzIG91dGdvaW5nIHJlcXVlc3RzLgorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHZvaWQgYXJlc19zZXRfbG9jYWxfaXA0KGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLCB1bnNpZ25lZCBpbnQgXGZJbG9jYWxfaXBcZlApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmFyZXNfc2V0X2xvY2FsX2lwNFxmUCBmdW5jdGlvbiBzZXRzIHRoZSBJUCBhZGRyZXNzIGZvciBvdXRib3VuZAorcmVxdWVzdHMuICBUaGlzIGFsbG93cyB1c2VycyB0byBzcGVjaWZ5IG91dGJvdW5kIGludGVyZmFjZXMgd2hlbiB1c2VkCitvbiBtdWx0aS1ob21lZCBzeXN0ZW1zLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19zZXRfbG9jYWxfaXA2ICgzKQorLlNIIE5PVEVTCitUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS43LjQKKy5TSCBBVVRIT1IKK0JlbiBHcmVlYXIKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X2xvY2FsX2lwNi4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfbG9jYWxfaXA2LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmYTk2MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X2xvY2FsX2lwNi4zCkBAIC0wLDAgKzEsMzQgQEAKKy5cIgorLlwiIENvcHlyaWdodCAyMDEwIGJ5IEJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19TRVRfTE9DQUxfSVA2IDMgIjMwIEp1bmUgMjAxMCIKKy5TSCBOQU1FCithcmVzX3NldF9sb2NhbF9pcDYgXC0gU2V0IGxvY2FsIElQdjYgYWRkcmVzcyBvdXRnb2luZyByZXF1ZXN0cy4KKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiB2b2lkIGFyZXNfc2V0X2xvY2FsX2lwNihhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwgY29uc3QgdW5zaWduZWQgY2hhciogXGZJbG9jYWxfaXA2XGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJhcmVzX3NldF9sb2NhbF9pcDZcZlAgZnVuY3Rpb24gc2V0cyB0aGUgSVB2NiBhZGRyZXNzIGZvciBvdXRib3VuZAorSVB2NiByZXF1ZXN0cy4gIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHNwZWNpZnkgb3V0Ym91bmQgaW50ZXJmYWNlcyB3aGVuIHVzZWQKK29uIG11bHRpLWhvbWVkIHN5c3RlbXMuICBUaGUgbG9jYWxfaXA2IGFyZ3VtZW50IG11c3QgYmUgMTYgYnl0ZXMgaW4gbGVuZ3RoLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19zZXRfbG9jYWxfaXA0ICgzKQorLlNIIE5PVEVTCitUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS43LjQKKy5TSCBBVVRIT1IKK0JlbiBHcmVlYXIKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X3NlcnZlcnMuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X3NlcnZlcnMuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDhjMTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc2VydmVycy4zCkBAIC0wLDAgKzEsOTIgQEAKKy5cIgorLlwiIENvcHlyaWdodCAyMDEwIGJ5IEJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19TRVRfU0VSVkVSUyAzICI1IE1hcmNoIDIwMTAiCisuU0ggTkFNRQorYXJlc19zZXRfc2VydmVycywgYXJlc19zZXRfc2VydmVyc19wb3J0cyBcLSBJbml0aWFsaXplIGFuIGFyZXNfY2hhbm5lbCBuYW1lIHNlcnZlcnMgY29uZmlndXJhdGlvbgorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIGludCBhcmVzX3NldF9zZXJ2ZXJzKGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLCBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgKlxmSXNlcnZlcnNcZlApCisuQiBpbnQgYXJlc19zZXRfc2VydmVyc19wb3J0cyhhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwgc3RydWN0IGFyZXNfYWRkcl9wb3J0X25vZGUgKlxmSXNlcnZlcnNcZlApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmFyZXNfc2V0X3NlcnZlcnMoMylcZlAgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgbmFtZSBzZXJ2ZXJzIGNvbmZpZ3VyYXRpb24KK2ZvciB0aGUgY2hhbm5lbCBkYXRhIGlkZW50aWZpZWQgYnkKKy5JUiBjaGFubmVsICwKK2Zyb20gYQorLklSIHNlcnZlcnMKK3BvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBhcmVzX2FkZHJfbm9kZSBzdHJ1Y3RzIGhvbGRpbmcgbmFtZSBzZXJ2ZXJzCithZGRyZXNzIGRhdGEuCisuUFAKK1RoZSBuYW1lIHNlcnZlciBsaW5rZWQgbGlzdCBwb2ludGVyIGFyZ3VtZW50IG1heSBiZSB0aGUgcmVzdWx0IG9mIGEgcHJldmlvdXMKK2NhbGwgdG8gXGZCYXJlc19nZXRfc2VydmVycygzKVxmUCBvciBhIGxpbmtlZCBsaXN0IG9mIFxmQmFyZXNfYWRkcl9ub2RlXGZQIHN0cnVjdHMKK3NldCB1cCBieSBvdGhlciBtZWFucy4KKy5QUAorVGhlIFxmQmFyZXNfc2V0X3NlcnZlcnMoMylcZlAgZnVuY3Rpb24gYWxzbyBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgVURQIGFuZAorVENQIHBvcnRzIHRvIGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gb24gYSBwZXItc2VydmVyIGJhc2lzLiAgVGhlIHByb3ZpZGVkCitsaW5rZWQgbGlzdCBhcmd1bWVudCBtYXkgYmUgdGhlIHJlc3VsdCBvZiBhIHByZXZpb3VzIGNhbGwgdG8KK1xmQmFyZXNfZ2V0X3NlcnZlcnNfcG9ydHMoMylcZlAgb3IgYSBsaW5rZWQgbGlzdCBvZiBcZkJhcmVzX2FkZHJfcG9ydF9ub2RlXGZQIHN0cnVjdHMKK3NldCB1cCBieSBvdGhlciBtZWFucy4KKy5QUAorVGhpcyBmdW5jdGlvbiByZXBsYWNlcyBhbnkgcG90ZW50aWFsbHkgcHJldmlvdXNseSBjb25maWd1cmVkIG5hbWUgc2VydmVycword2l0aCB0aGUgb25lcyBnaXZlbiBpbiB0aGUgbGlua2VkIGxpc3QuIFNvLCBpbiBvcmRlciB0byBjb25maWd1cmUgYSBjaGFubmVsCit3aXRoIG1vcmUgdGhhbiBvbmUgbmFtZSBzZXJ2ZXIgYWxsIHRoZSBkZXNpcmVkIG9uZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4gYQorc2luZ2xlIGxpc3QuCisuUFAKK1RoZSBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgbGlua2VkIGxpc3QgYXJndW1lbnQuCitUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBsaW5rZWQgbGlzdCB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisuUFAKK1RoaXMgZnVuY3Rpb24gaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBJUHY0IGFuZCBJUHY2IG5hbWUgc2VydmVyCithZGRyZXNzZXMgc2ltdWx0YW5lb3VzbHksIHJlbmRlcmluZyBcZkJhcmVzX2luaXRfb3B0aW9ucygzKVxmUCB3aXRoCitvcHRtYXNrIFxmQkFSRVNfT1BUX1NFUlZFUlNcZlAgZnVuY3Rpb25hbGx5IG9ic29sZXRlIGV4Y2VwdCBmb3IKK0lQdjQtb25seSBuYW1lIHNlcnZlciB1c2FnZS4KKworLlNIIFJFVFVSTiBWQUxVRVMKKy5CIGFyZXNfc2V0X3NlcnZlcnMoMykKK21heSByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSBuYW1lIHNlcnZlcnMgY29uZmlndXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLgorLlRQIDE1CisuQiBBUkVTX0VOT01FTQorVGhlIHByb2Nlc3MncyBhdmFpbGFibGUgbWVtb3J5IHdhcyBleGhhdXN0ZWQuCisuVFAgMTUKKy5CIEFSRVNfRU5PREFUQQorVGhlIGNoYW5uZWwgZGF0YSBpZGVudGlmaWVkIGJ5IAorLklSIGNoYW5uZWwKK3dhcyBpbnZhbGlkLgorLlRQIDE1CisuQiBBUkVTX0VOT1RJTklUSUFMSVpFRAorYy1hcmVzIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gbm90IHlldCBwZXJmb3JtZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3NldF9zZXJ2ZXJzX2NzdiAoMyksCisuQlIgYXJlc19nZXRfc2VydmVycyAoMyksCisuQlIgYXJlc19pbml0X29wdGlvbnMgKDMpLAorLkJSIGFyZXNfZHVwKDMpCisuU0ggQVZBSUxBQklMSVRZCitcZkJhcmVzX3NldF9zZXJ2ZXJzKDMpXGZQIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS43LjE7CitcZkJhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzKDMpXGZQIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS4xMS4wLgorLlNIIEFVVEhPUgorSW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBsaWJyYXJ5IGludGVybmFscyBhcmUgYmFzZWQKK29uIGNvZGUsIGNvbW1lbnRzIGFuZCBmZWVkYmFjayBwcm92aWRlZCBpbiBOb3ZlbWJlciBhbmQgRGVjZW1iZXIgb2YgMjAwOCBieQorRGFuaWVsIFN0ZW5iZXJnLCBHcmVnb3IgSmFzbnksIFBoaWwgQmx1bmRlbGwgYW5kIFlhbmcgVHNlLCBEZWNlbWJlciAyMDA5CitieSBDZWRyaWMgQmFpbCwgRmVicnVhcnkgMjAxMCBieSBKYWt1YiBIcm96ZWsuIE9uIE1hcmNoIDIwMTAgWWFuZyBUc2UKK3NodWZmbGVkIGFsbCB0aGUgYml0cyBhbmQgdGhpcyBmdW5jdGlvbiBwb3BwZWQgb3V0LgorLmJyCitDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKy5icgorQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgYnkgRGFuaWVsIFN0ZW5iZXJnCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9zZXJ2ZXJzX2Nzdi4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc2VydmVyc19jc3YuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmQyNTExCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc2VydmVyc19jc3YuMwpAQCAtMCwwICsxLDY0IEBACisuXCIKKy5cIiBDb3B5cmlnaHQgMjAxMCBieSBCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNoLmNvbT4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKy5cIiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisuXCIgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorLlwiIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworLlwiIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorLlwiIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKy5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisuXCIgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKy5cIiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKy5cIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKy5cIgorLlRIIEFSRVNfU0VUX1NFUlZFUlNfQ1NWIDMgIjMwIEp1bmUgMjAxMCIKKy5TSCBOQU1FCithcmVzX3NldF9zZXJ2ZXJzX2NzdiwgYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3YgXC0gU2V0IGxpc3Qgb2YgRE5TIHNlcnZlcnMgdG8gYmUgdXNlZC4KKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiBpbnQgYXJlc19zZXRfc2VydmVyc19jc3YoYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsIGNvbnN0IGNoYXIqIFxmSXNlcnZlcnNcZlApCisuQiBpbnQgYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3YoYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsIGNvbnN0IGNoYXIqIFxmSXNlcnZlcnNcZlApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmFyZXNfc2V0X3NlcnZlcnNfY3N2XGZQIGFuZCBcZkJhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2NzdlxmUGZ1bmN0aW9ucyBzZXQKK3RoZSBsaXN0IG9mIEROUyBzZXJ2ZXJzIHRoYXQgQVJFUyB3aWxsIHF1ZXJ5LiAgVGhlIGZvcm1hdCBvZiB0aGUgc2VydmVycyBvcHRpb24gaXM6CisKK2hvc3RbOnBvcnRdWyxob3N0Wzpwb3J0XV0uLi4KKworRm9yIGV4YW1wbGU6CisKKzE5Mi4xNjguMS4xMDAsMTkyLjE2OC4xLjEwMSwzLjQuNS42CisuUFAKK1RoZSBcZkJhcmVzX3NldF9zZXJ2ZXJzX2NzdlxmUCBmdW5jdGlvbiB3aWxsIGlnbm9yZSBhbnkgcG9ydCB2YWx1ZXMgc3BlY2lmaWVkIGluCit0aGUgaW5wdXQgc3RyaW5nLCB3aGVyZWFyZSB0aGUgXGZCYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3ZcZlAgZnVuY3Rpb24gd2lsbAorYXBwbHkgYW55IHNwZWNpZmllZCBwb3J0IHZhbHVlcyBhcyB0aGUgVURQIGFuZCBUQ1AgcG9ydCB0byBiZSB1c2VkIGZvciB0aGF0CitwYXJ0aWN1bGFyIG5hbWVzZXJ2ZXIuCisKKy5TSCBSRVRVUk4gVkFMVUVTCisuQiBhcmVzX3NldF9zZXJ2ZXJzX2NzdigzKQorVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5UUCAxNQorLkIgQVJFU19TVUNDRVNTCitUaGUgbmFtZSBzZXJ2ZXJzIGNvbmZpZ3VyYXRpb24gd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4KKy5UUCAxNQorLkIgQVJFU19FTk9NRU0KK1RoZSBwcm9jZXNzJ3MgYXZhaWxhYmxlIG1lbW9yeSB3YXMgZXhoYXVzdGVkLgorLlRQIDE1CisuQiBBUkVTX0VOT0RBVEEKK1RoZSBjaGFubmVsIGRhdGEgaWRlbnRpZmllZCBieQorLklSIGNoYW5uZWwKK3dhcyBpbnZhbGlkLgorLlRQIDE1CisuQiBBUkVTX0VOT1RJTklUSUFMSVpFRAorYy1hcmVzIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gbm90IHlldCBwZXJmb3JtZWQuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX3NldF9zZXJ2ZXJzICgzKQorLlNIIEFWQUlMQUJJTElUWQorXGZCYXJlc19zZXRfc2VydmVyc19jc3ZcZlAgd2FzIGFkZGVkIGluIGMtYXJlcyAxLjcuMjsKK1xmQmFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2XGZQIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS4xMS4wLgorLlNIIEFVVEhPUgorQmVuIEdyZWVhcgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc2VydmVyc19wb3J0cy4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc2VydmVyc19wb3J0cy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmUxODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9zZXJ2ZXJzX3BvcnRzLjMKQEAgLTAsMCArMSBAQAorLnNvIG1hbjMvYXJlc19zZXRfc2VydmVycy4zCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2Nzdi4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3YuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDUzNWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc2VydmVyc19wb3J0c19jc3YuMwpAQCAtMCwwICsxIEBACisuc28gbWFuMy9hcmVzX3NldF9zZXJ2ZXJzX2Nzdi4zCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9zb2NrZXRfY2FsbGJhY2suMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X3NvY2tldF9jYWxsYmFjay4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTVhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9zb2NrZXRfY2FsbGJhY2suMwpAQCAtMCwwICsxLDMyIEBACisuXCIKKy5USCBBUkVTX1NFVF9TT0NLRVRfQ0FMTEJBQ0sgMyAiMjAgTm92IDIwMDkiCisuU0ggTkFNRQorYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrIFwtIFNldCBhIHNvY2tldCBjcmVhdGlvbiBjYWxsYmFjaworLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHR5cGVkZWYgaW50ICgqYXJlc19zb2NrX2NyZWF0ZV9jYWxsYmFjaykoYXJlc19zb2NrZXRfdCBcZklzb2NrZXRfZmRcZlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBcZkl0eXBlXGZQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpcZkl1c2VyZGF0YVxmUCkKKy5QUAorLkIgdm9pZCBhcmVzX3NldF9zb2NrZXRfY2FsbGJhY2soYXJlc19jaGFubmVsIFxmSWNoYW5uZWxcZlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfc29ja19jcmVhdGVfY2FsbGJhY2sgXGZJY2FsbGJhY2tcZlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKlxmSXVzZXJkYXRhXGZQKQorLlBQCisuQiBjYyBmaWxlLmMgLWxjYXJlcworLmZpCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhpcyBmdW5jdGlvbiBzZXRzIGEgXGZJY2FsbGJhY2tcZlAgaW4gdGhlIGdpdmVuIGFyZXMgY2hhbm5lbCBoYW5kbGUuIFRoaXMKK2NhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBhZnRlciB0aGUgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQsIGFuZAorY29ubmVjdGVkIHRvIHRoZSByZW1vdGUgc2VydmVyLiBUaGUgY2FsbGJhY2sgbXVzdCByZXR1cm4gQVJFU19TVUNDRVNTIGlmCit0aGluZ3MgYXJlIGZpbmUsIG9yIHJldHVybiAtMSB0byBzaWduYWwgYW4gZXJyb3IuIEEgcmV0dXJuZWQgZXJyb3Igd2lsbAorYWJvcnQgdGhlIGFyZXMgb3BlcmF0aW9uLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19pbml0X29wdGlvbnMgKDMpLCBhcmVzX3NldF9zb2NrZXRfY29uZmlndXJlX2NhbGxiYWNrICgzKQorLlNIIEFWQUlMQUJJTElUWQorYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrKDMpIHdhcyBhZGRlZCBpbiBjLWFyZXMgMS42LjAKKy5TSCBBVVRIT1IKK0dyZWdvciBKYXNueQorCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9zb2NrZXRfY29uZmlndXJlX2NhbGxiYWNrLjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldF9zb2NrZXRfY29uZmlndXJlX2NhbGxiYWNrLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiMmY5MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X3NvY2tldF9jb25maWd1cmVfY2FsbGJhY2suMwpAQCAtMCwwICsxLDMzIEBACisuXCIKKy5USCBBUkVTX1NFVF9TT0NLRVRfQ09ORklHVVJFX0NBTExCQUNLIDMgIjYgRmViIDIwMTYiCisuU0ggTkFNRQorYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjayBcLSBTZXQgYSBzb2NrZXQgY29uZmlndXJhdGlvbiBjYWxsYmFjaworLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxhcmVzLmg+CisuUFAKKy5CIHR5cGVkZWYgaW50ICgqYXJlc19zb2NrX2NvbmZpZ19jYWxsYmFjaykoYXJlc19zb2NrZXRfdCBcZklzb2NrZXRfZmRcZlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBcZkl0eXBlXGZQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpcZkl1c2VyZGF0YVxmUCkKKy5QUAorLkIgdm9pZCBhcmVzX3NldF9zb2NrZXRfY29uZmlndXJlX2NhbGxiYWNrKGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVzX3NvY2tfY29uZmlnX2NhbGxiYWNrIFxmSWNhbGxiYWNrXGZQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpcZkl1c2VyZGF0YVxmUCkKKy5QUAorLkIgY2MgZmlsZS5jIC1sY2FyZXMKKy5maQorLlNIIERFU0NSSVBUSU9OCisuUFAKK1RoaXMgZnVuY3Rpb24gc2V0cyBhIFxmSWNhbGxiYWNrXGZQIGluIHRoZSBnaXZlbiBhcmVzIGNoYW5uZWwgaGFuZGxlLiBUaGlzCitjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgYWZ0ZXIgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCBidXQKK2JlZm9yZSBpdCBoYXMgYmVlbiBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIsIHdoaWNoIGlzIGFuIGlkZWFsIHRpbWUKK3RvIGNvbmZpZ3VyZSB2YXJpb3VzIHNvY2tldCBvcHRpb25zLiAgVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIEFSRVNfU1VDQ0VTUworaWYgdGhpbmdzIGFyZSBmaW5lLCBvciByZXR1cm4gLTEgdG8gc2lnbmFsIGFuIGVycm9yLiBBIHJldHVybmVkIGVycm9yIHdpbGwKK2Fib3J0IHRoZSBhcmVzIG9wZXJhdGlvbi4KKy5TSCBTRUUgQUxTTworLkJSIGFyZXNfaW5pdF9vcHRpb25zICgzKSwgYXJlc19zZXRfc29ja2V0X2NhbGxiYWNrICgzKQorLlNIIEFWQUlMQUJJTElUWQorYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjaygzKSB3YXMgYWRkZWQgaW4gYy1hcmVzIDEuMTEuMAorLlNIIEFVVEhPUgorQW5kcmV3IEF5ZXIKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXRfc29ydGxpc3QuMyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X3NvcnRsaXN0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhOTc5MAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc2V0X3NvcnRsaXN0LjMKQEAgLTAsMCArMSw1OCBAQAorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19TRVRfU09SVExJU1QgMyAiMjMgTm92ZW1iZXIgMjAxNSIKKy5TSCBOQU1FCithcmVzX3NldF9zb3J0bGlzdCBcLSBJbml0aWFsaXplIGFuIGFyZXNfY2hhbm5lbCBzb3J0bGlzdCBjb25maWd1cmF0aW9uCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgaW50IGFyZXNfc2V0X3NvcnRsaXN0KGFyZXNfY2hhbm5lbCBcZkljaGFubmVsXGZQLCBjb25zdCBjaGFyICpcZklzb3J0c3RyXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJhcmVzX3NldF9zb3J0bGlzdCgzKVxmUCBmdW5jdGlvbiBpbml0aWFsaXplcyBhbiBhZGRyZXNzIHNvcnRsaXN0IGNvbmZpZ3VyYXRpb24KK2ZvciB0aGUgY2hhbm5lbCBkYXRhIGlkZW50aWZpZWQgYnkKKy5JUiBjaGFubmVsICwKK3NvIHRoYXQgYWRkcmVzc2VzIHJldHVybmVkIGJ5IFxmQmFyZXNfZ2V0aG9zdGJ5bmFtZSgzKVxmUCBhcmUgc29ydGVkIGFjY29yZGluZyB0byB0aGUKK3NvcnRsaXN0LiAgVGhlIHByb3ZpZGVkCisuSVIgc29ydHN0cgorc3RyaW5nIHRoYXQgaG9sZHMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBJUC1hZGRyZXNzLW5ldG1hc2sgcGFpcnMuICBUaGUKK25ldG1hc2sgaXMgb3B0aW9uYWwgYnV0IGZvbGxvd3MgdGhlIGFkZHJlc3MgYWZ0ZXIgYSBzbGFzaCBpZiBwcmVzZW50LiAgRm9yIGV4YW1wbGUsCisiMTMwLjE1NS4xNjAuMC8yNTUuMjU1LjI0MC4wIDEzMC4xNTUuMC4wIi4KKworVGhpcyBmdW5jdGlvbiByZXBsYWNlcyBhbnkgcG90ZW50aWFsbHkgcHJldmlvdXNseSBjb25maWd1cmVkIGFkZHJlc3Mgc29ydGxpc3QKK3dpdGggdGhlIG9uZXMgZ2l2ZW4gaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3RyaW5nLgorCisuU0ggUkVUVVJOIFZBTFVFUworLkIgYXJlc19zZXRfc29ydGxpc3QoMykKK21heSByZXR1cm4gYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlRQIDE1CisuQiBBUkVTX1NVQ0NFU1MKK1RoZSBzb3J0bGlzdCBjb25maWd1cmF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuCisuVFAgMTUKKy5CIEFSRVNfRU5PTUVNCitUaGUgcHJvY2VzcydzIGF2YWlsYWJsZSBtZW1vcnkgd2FzIGV4aGF1c3RlZC4KKy5UUCAxNQorLkIgQVJFU19FTk9EQVRBCitUaGUgY2hhbm5lbCBkYXRhIGlkZW50aWZpZWQgYnkKKy5JUiBjaGFubmVsCit3YXMgaW52YWxpZC4KKy5UUCAxNQorLkIgQVJFU19FTk9USU5JVElBTElaRUQKK2MtYXJlcyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIG5vdCB5ZXQgcGVyZm9ybWVkLgorLlNIIFNFRSBBTFNPCisuQlIgYXJlc19pbml0X29wdGlvbnMgKDMpLAorLkJSIGFyZXNfZHVwKDMpCisuU0ggQVZBSUxBQklMSVRZCithcmVzX3NldF9zb3J0bGlzdCgzKSB3YXMgYWRkZWQgaW4gYy1hcmVzIDEuMTEuMApkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXR1cC5oIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjc5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3NldHVwLmgKQEAgLTAsMCArMSwyMTcgQEAKKyNpZm5kZWYgSEVBREVSX0NBUkVTX1NFVFVQX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX1NFVFVQX0gKKworCisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDEyIGJ5IERhbmllbCBTdGVuYmVyZyBldCBhbAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorICogdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoKKyAqIERlZmluZSBXSU4zMiB3aGVuIGJ1aWxkIHRhcmdldCBpcyBXaW4zMiBBUEkKKyAqLworCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykpICYmICFkZWZpbmVkKFdJTjMyKQorI2RlZmluZSBXSU4zMgorI2VuZGlmCisKKy8qCisgKiBJbmNsdWRlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHJlc3VsdHMgb3IgaGFuZC1jcmFmdGVkCisgKiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHBsYXRmb3JtcyB3aGljaCBsYWNrIGNvbmZpZyB0b29sLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiYXJlc19jb25maWcuaCIKKyNlbHNlCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgImNvbmZpZy13aW4zMi5oIgorI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIERlZmluaXRpb24gb2YgcHJlcHJvY2Vzc29yIG1hY3Jvcy9zeW1ib2xzIHdoaWNoIG1vZGlmeSBjb21waWxlciAgKi8KKy8qIGJlaGF2aW91ciBvciBnZW5lcmF0ZWQgY29kZSBjaGFyYWN0ZXJpc3RpY3MgbXVzdCBiZSBkb25lIGhlcmUsICAgKi8KKy8qIGFzIGFwcHJvcHJpYXRlLCBiZWZvcmUgYW55IHN5c3RlbSBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZC4gSXQgaXMgKi8KKy8qIGFsc28gcG9zc2libGUgdG8gaGF2ZSB0aGVtIGRlZmluZWQgaW4gdGhlIGNvbmZpZyBmaWxlIGluY2x1ZGVkICAgKi8KKy8qIGJlZm9yZSB0aGlzIHBvaW50LiBBcyBhIHJlc3VsdCBvZiBhbGwgdGhpcyB3ZSBmcm93biBpbmNsdXNpb24gb2YgKi8KKy8qIHN5c3RlbSBoZWFkZXIgZmlsZXMgaW4gb3VyIGNvbmZpZyBmaWxlcywgYXZvaWQgdGhpcyBhdCBhbnkgY29zdC4gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIEFJWCA0LjMgYW5kIG5ld2VyIG5lZWRzIF9USFJFQURfU0FGRSBkZWZpbmVkIHRvIGJ1aWxkCisgKiBwcm9wZXIgcmVlbnRyYW50IGNvZGUuIE90aGVycyBtYXkgYWxzbyBuZWVkIGl0LgorICovCisKKyNpZmRlZiBORUVEX1RIUkVBRF9TQUZFCisjICBpZm5kZWYgX1RIUkVBRF9TQUZFCisjICAgIGRlZmluZSBfVEhSRUFEX1NBRkUKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFRydTY0IG5lZWRzIF9SRUVOVFJBTlQgc2V0IGZvciBhIGZldyBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZAorICogdGhpbmdzIHRvIGFwcGVhciBpbiB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcy4gVW5peHdhcmUgbmVlZHMgaXQKKyAqIHRvIGJ1aWxkIHByb3BlciByZWVudHJhbnQgY29kZS4gT3RoZXJzIG1heSBhbHNvIG5lZWQgaXQuCisgKi8KKworI2lmZGVmIE5FRURfUkVFTlRSQU5UCisjICBpZm5kZWYgX1JFRU5UUkFOVAorIyAgICBkZWZpbmUgX1JFRU5UUkFOVAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhIHN5c3RlbSBoZWFkZXIgZmlsZSBmb3IgeW91ciBwbGF0Zm9ybSwgICovCisvKiAgcGxlYXNlLCBkbyBpdCBiZXlvbmQgdGhlIHBvaW50IGZ1cnRoZXIgaW5kaWNhdGVkIGluIHRoaXMgZmlsZS4gICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBjLWFyZXMgZXh0ZXJuYWwgaW50ZXJmYWNlIGRlZmluaXRpb25zIGFyZSBhbHNvIHVzZWQgaW50ZXJuYWxseSwKKyAqIGFuZCBtaWdodCBhbHNvIGluY2x1ZGUgcmVxdWlyZWQgc3lzdGVtIGhlYWRlciBmaWxlcyB0byBkZWZpbmUgdGhlbS4KKyAqLworCisjaW5jbHVkZSA8YXJlc19idWlsZC5oPgorCisvKgorICogQ29tcGlsZSB0aW1lIHNhbml0eSBjaGVja3MgbXVzdCBhbHNvIGJlIGRvbmUgd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeS4KKyAqLworCisjaW5jbHVkZSA8YXJlc19ydWxlcy5oPgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogTm8gc3lzdGVtIGhlYWRlciBmaWxlIHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoaXMgZmlsZSBiZWZvcmUgdGhpcyAgKi8KKy8qIHBvaW50LiBUaGUgb25seSBhbGxvd2VkIG9uZXMgYXJlIHRob3NlIGluY2x1ZGVkIGZyb20gYXJlc19idWlsZC5oICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogSW5jbHVkZSBoZWFkZXIgZmlsZXMgZm9yIHdpbmRvd3MgYnVpbGRzIGJlZm9yZSByZWRlZmluaW5nIGFueXRoaW5nLgorICogVXNlIHRoaXMgcHJlcHJvZXNzb3IgYmxvY2sgb25seSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgd2luZG93cy5oLAorICogd2luc29jazIuaCwgd3MydGNwaXAuaCBvciB3aW5zb2NrLmguIEFueSBvdGhlciB3aW5kb3dzIHRoaW5nIGJlbG9uZ3MKKyAqIHRvIGFueSBvdGhlciBmdXJ0aGVyIGFuZCBpbmRlcGVuZGVudCBibG9jay4gIFVuZGVyIEN5Z3dpbiB0aGluZ3Mgd29yaworICoganVzdCBhcyB1bmRlciBsaW51eCAoZS5nLiA8c3lzL3NvY2tldC5oPikgYW5kIHRoZSB3aW5zb2NrIGhlYWRlcnMgc2hvdWxkCisgKiBuZXZlciBiZSBpbmNsdWRlZCB3aGVuIF9fQ1lHV0lOX18gaXMgZGVmaW5lZC4gIGNvbmZpZ3VyZSBzY3JpcHQgdGFrZXMKKyAqIGNhcmUgb2YgdGhpcywgbm90IGRlZmluaW5nIEhBVkVfV0lORE9XU19ILCBIQVZFX1dJTlNPQ0tfSCwgSEFWRV9XSU5TT0NLMl9ILAorICogbmVpdGhlciBIQVZFX1dTMlRDUElQX0ggd2hlbiBfX0NZR1dJTl9fIGlzIGRlZmluZWQuCisgKi8KKworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgICBpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyMgICAgICAgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyMgICAgZW5kaWYKKyMgIGVsc2UKKyMgICAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgICBpbmNsdWRlIDx3aW5zb2NrLmg+CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMiBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSzIgQVBJLCBlbHNlCisgKiBkZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMSBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSyAgQVBJLCBlbHNlCisgKiB1bmRlZmluZSBVU0VfV0lOU09DSy4KKyAqLworCisjdW5kZWYgVVNFX1dJTlNPQ0sKKworI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgZGVmaW5lIFVTRV9XSU5TT0NLIDIKKyNlbHNlCisjICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAorIyAgICBkZWZpbmUgVVNFX1dJTlNPQ0sgMQorIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogV29yay1hcm91bmRzIGZvciBzeXN0ZW1zIHdpdGhvdXQgY29uZmlndXJlIHN1cHBvcnQKKyAqLworCisjaWZuZGVmIEhBVkVfQ09ORklHX0gKKworI2lmICFkZWZpbmVkKEhBVkVfU1lTX1RJTUVfSCkgJiYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fV0FUQ09NQ19fKQorI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9VTklTVERfSCkgJiYgIWRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX1NZU19VSU9fSCkgJiYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKE1TRE9TKQorI2RlZmluZSBIQVZFX1NZU19VSU9fSAorI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKy8qCisgKiBBcmcgMiB0eXBlIGZvciBnZXRob3N0bmFtZSBpbiBjYXNlIGl0IGhhc24ndCBiZWVuIGRlZmluZWQgaW4gY29uZmlnIGZpbGUuCisgKi8KKworI2lmbmRlZiBHRVRIT1NUTkFNRV9UWVBFX0FSRzIKKyMgIGlmZGVmIFVTRV9XSU5TT0NLCisjICAgIGRlZmluZSBHRVRIT1NUTkFNRV9UWVBFX0FSRzIgaW50CisjICBlbHNlCisjICAgIGRlZmluZSBHRVRIT1NUTkFNRV9UWVBFX0FSRzIgc2l6ZV90CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1BPQ0NfXworIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgIGRlZmluZSBFU1JDSCAzCisjZW5kaWYKKworLyoKKyAqIEFuZHJvaWQgZG9lcyBoYXZlIHRoZSBhcnBhL25hbWVzZXIuaCBoZWFkZXIgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgY29uZmlndXJlCisgKiBidXQgaXQgYXBwZWFycyB0byBiZSBlbXB0eSB3aXRoIHJlY2VudCBOREsgcjdiIC8gcjdjLCBzbyB3ZSB1bmRlZmluZSBoZXJlLgorICovCisjaWYgKGRlZmluZWQoQU5EUk9JRCkgfHwgZGVmaW5lZChfX0FORFJPSURfXykpICYmIGRlZmluZWQoSEFWRV9BUlBBX05BTUVTRVJfSCkKKyMgIHVuZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKyNlbmRpZgorCisvKgorICogUmVjZW50IGF1dG9jb25mIHZlcnNpb25zIGRlZmluZSB0aGVzZSBzeW1ib2xzIGluIGFyZXNfY29uZmlnLmguIFdlIGRvbid0CisgKiB3YW50IHRoZW0gKHNpbmNlIHRoZXkgY29sbGlkZSB3aXRoIHRoZSBsaWJjdXJsIG9uZXMgd2hlbiB3ZSBidWlsZAorICogIC0tZW5hYmxlLWRlYnVnKSBzbyB3ZSB1bmRlZiB0aGVtIGFnYWluIGhlcmUuCisgKi8KKworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKyN1bmRlZiBQQUNLQUdFX05BTUUKKyN1bmRlZiBWRVJTSU9OCisjdW5kZWYgUEFDS0FHRQorCisvKiBJUHY2IGNvbXBhdGliaWxpdHkgKi8KKyNpZiAhZGVmaW5lZChIQVZFX0FGX0lORVQ2KQorI2lmIGRlZmluZWQoSEFWRV9QRl9JTkVUNikKKyNkZWZpbmUgQUZfSU5FVDYgUEZfSU5FVDYKKyNlbHNlCisjZGVmaW5lIEFGX0lORVQ2IEFGX01BWCsxCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogSW5jbHVkZSBtYWNyb3MgYW5kIGRlZmluZXMgdGhhdCBzaG91bGQgb25seSBiZSBwcm9jZXNzZWQgb25jZS4KKyAqLworCisjaWZuZGVmIF9fU0VUVVBfT05DRV9ICisjaW5jbHVkZSAic2V0dXBfb25jZS5oIgorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ0FSRVNfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zdHJjYXNlY21wLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmNhc2VjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWM4NWUyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zdHJjYXNlY21wLmMKQEAgLTAsMCArMSw2NiBAQAorCisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisjaW5jbHVkZSAiYXJlc19zdHJjYXNlY21wLmgiCisKKyNpZm5kZWYgSEFWRV9TVFJDQVNFQ01QCitpbnQgYXJlc19zdHJjYXNlY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisjaWYgZGVmaW5lZChIQVZFX1NUUkNNUEkpCisgIHJldHVybiBzdHJjbXBpKGEsIGIpOworI2VsaWYgZGVmaW5lZChIQVZFX1NUUklDTVApCisgIHJldHVybiBzdHJpY21wKGEsIGIpOworI2Vsc2UKKyAgc2l6ZV90IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IChzaXplX3QpLTE7IGkrKykgeworICAgIGludCBjMSA9IElTVVBQRVIoYVtpXSkgPyB0b2xvd2VyKGFbaV0pIDogYVtpXTsKKyAgICBpbnQgYzIgPSBJU1VQUEVSKGJbaV0pID8gdG9sb3dlcihiW2ldKSA6IGJbaV07CisgICAgaWYgKGMxICE9IGMyKQorICAgICAgcmV0dXJuIGMxLWMyOworICAgIGlmICghYzEpCisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gMDsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TVFJOQ0FTRUNNUAoraW50IGFyZXNfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgc2l6ZV90IG4pCit7CisjaWYgZGVmaW5lZChIQVZFX1NUUk5DTVBJKQorICByZXR1cm4gc3RybmNtcGkoYSwgYiwgbik7CisjZWxpZiBkZWZpbmVkKEhBVkVfU1RSTklDTVApCisgIHJldHVybiBzdHJuaWNtcChhLCBiLCBuKTsKKyNlbHNlCisgIHNpemVfdCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBpbnQgYzEgPSBJU1VQUEVSKGFbaV0pID8gdG9sb3dlcihhW2ldKSA6IGFbaV07CisgICAgaW50IGMyID0gSVNVUFBFUihiW2ldKSA/IHRvbG93ZXIoYltpXSkgOiBiW2ldOworICAgIGlmIChjMSAhPSBjMikKKyAgICAgIHJldHVybiBjMS1jMjsKKyAgICBpZiAoIWMxKQorICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIDA7CisjZW5kaWYKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmNhc2VjbXAuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc3RyY2FzZWNtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZDg2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmNhc2VjbXAuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIEhFQURFUl9DQVJFU19TVFJDQVNFQ01QX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX1NUUkNBU0VDTVBfSAorCisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisKKyNpZm5kZWYgSEFWRV9TVFJDQVNFQ01QCitleHRlcm4gaW50IGFyZXNfc3RyY2FzZWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSTkNBU0VDTVAKK2V4dGVybiBpbnQgYXJlc19zdHJuY2FzZWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBzaXplX3Qgbik7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DQVJFU19TVFJDQVNFQ01QX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc3RyZHVwLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjM2RjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmR1cC5jCkBAIC0wLDAgKzEsNDkgQEAKKworCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorI2luY2x1ZGUgImFyZXNfc3RyZHVwLmgiCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfcHJpdmF0ZS5oIgorCitjaGFyICphcmVzX3N0cmR1cChjb25zdCBjaGFyICpzMSkKK3sKKyNpZmRlZiBIQVZFX1NUUkRVUAorICBpZiAoYXJlc19tYWxsb2MgPT0gbWFsbG9jKQorICAgIHJldHVybiBzdHJkdXAoczEpOworICBlbHNlCisjZW5kaWYKKyAgeworICAgIHNpemVfdCBzejsKKyAgICBjaGFyICogczI7CisKKyAgICBpZihzMSkgeworICAgICAgc3ogPSBzdHJsZW4oczEpOworICAgICAgaWYoc3ogPCAoc2l6ZV90KS0xKSB7CisgICAgICAgIHN6Kys7CisgICAgICAgIGlmKHN6IDwgKChzaXplX3QpLTEpIC8gc2l6ZW9mKGNoYXIpKSB7CisgICAgICAgICAgczIgPSBhcmVzX21hbGxvYyhzeiAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgaWYoczIpIHsKKyAgICAgICAgICAgIG1lbWNweShzMiwgczEsIHN6ICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIHJldHVybiBzMjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChjaGFyICopTlVMTDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zdHJkdXAuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc3RyZHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmMmE3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc3RyZHVwLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBIRUFERVJfQ0FSRVNfU1RSRFVQX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX1NUUkRVUF9ICisKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKworZXh0ZXJuIGNoYXIgKmFyZXNfc3RyZHVwKGNvbnN0IGNoYXIgKnMxKTsKKworI2VuZGlmIC8qIEhFQURFUl9DQVJFU19TVFJEVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zdHJlcnJvci4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc19zdHJlcnJvci4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTBkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmVycm9yLjMKQEAgLTAsMCArMSwzNyBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX1NUUkVSUk9SIDMgIjI1IEp1bHkgMTk5OCIKKy5TSCBOQU1FCithcmVzX3N0cmVycm9yIFwtIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYW4gYXJlcyBsaWJyYXJ5IGVycm9yIGNvZGUKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8YXJlcy5oPgorLlBQCisuQiBjb25zdCBjaGFyICphcmVzX3N0cmVycm9yKGludCBcZkljb2RlXGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc19zdHJlcnJvcgorZnVuY3Rpb24gZ2V0cyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGFyZXMgbGlicmFyeSBlcnJvciBjb2RlCisuSVIgY29kZSAsCityZXR1cm5pbmcgdGhlIHJlc3VsdCBhcyBhIE5VTC10ZXJtaW5hdGVkIEMgc3RyaW5nLgorLlNIIE5PVEVTCitUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYXJlcywgaXQgdGFrZXMgYSBkaWZmZXJlbnQgc2V0IG9mCithcmd1bWVudHMuCisuU0ggQVVUSE9SCitHcmVnIEh1ZHNvbiwgTUlUIEluZm9ybWF0aW9uIFN5c3RlbXMKKy5icgorQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmVycm9yLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3N0cmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlY2JkNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfc3RyZXJyb3IuYwpAQCAtMCwwICsxLDU2IEBACisKKy8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAiYXJlcy5oIgorCitjb25zdCBjaGFyICphcmVzX3N0cmVycm9yKGludCBjb2RlKQoreworICAvKiBSZXR1cm4gYSBzdHJpbmcgbGl0ZXJhbCBmcm9tIGEgdGFibGUuICovCisgIGNvbnN0IGNoYXIgKmVycnRleHRbXSA9IHsKKyAgICAiU3VjY2Vzc2Z1bCBjb21wbGV0aW9uIiwKKyAgICAiRE5TIHNlcnZlciByZXR1cm5lZCBhbnN3ZXIgd2l0aCBubyBkYXRhIiwKKyAgICAiRE5TIHNlcnZlciBjbGFpbXMgcXVlcnkgd2FzIG1pc2Zvcm1hdHRlZCIsCisgICAgIkROUyBzZXJ2ZXIgcmV0dXJuZWQgZ2VuZXJhbCBmYWlsdXJlIiwKKyAgICAiRG9tYWluIG5hbWUgbm90IGZvdW5kIiwKKyAgICAiRE5TIHNlcnZlciBkb2VzIG5vdCBpbXBsZW1lbnQgcmVxdWVzdGVkIG9wZXJhdGlvbiIsCisgICAgIkROUyBzZXJ2ZXIgcmVmdXNlZCBxdWVyeSIsCisgICAgIk1pc2Zvcm1hdHRlZCBETlMgcXVlcnkiLAorICAgICJNaXNmb3JtYXR0ZWQgZG9tYWluIG5hbWUiLAorICAgICJVbnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseSIsCisgICAgIk1pc2Zvcm1hdHRlZCBETlMgcmVwbHkiLAorICAgICJDb3VsZCBub3QgY29udGFjdCBETlMgc2VydmVycyIsCisgICAgIlRpbWVvdXQgd2hpbGUgY29udGFjdGluZyBETlMgc2VydmVycyIsCisgICAgIkVuZCBvZiBmaWxlIiwKKyAgICAiRXJyb3IgcmVhZGluZyBmaWxlIiwKKyAgICAiT3V0IG9mIG1lbW9yeSIsCisgICAgIkNoYW5uZWwgaXMgYmVpbmcgZGVzdHJveWVkIiwKKyAgICAiTWlzZm9ybWF0dGVkIHN0cmluZyIsCisgICAgIklsbGVnYWwgZmxhZ3Mgc3BlY2lmaWVkIiwKKyAgICAiR2l2ZW4gaG9zdG5hbWUgaXMgbm90IG51bWVyaWMiLAorICAgICJJbGxlZ2FsIGhpbnRzIGZsYWdzIHNwZWNpZmllZCIsCisgICAgImMtYXJlcyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIG5vdCB5ZXQgcGVyZm9ybWVkIiwKKyAgICAiRXJyb3IgbG9hZGluZyBpcGhscGFwaS5kbGwiLAorICAgICJDb3VsZCBub3QgZmluZCBHZXROZXR3b3JrUGFyYW1zIGZ1bmN0aW9uIiwKKyAgICAiRE5TIHF1ZXJ5IGNhbmNlbGxlZCIKKyAgfTsKKworICBpZihjb2RlID49IDAgJiYgY29kZSA8IChpbnQpKHNpemVvZihlcnJ0ZXh0KSAvIHNpemVvZigqZXJydGV4dCkpKQorICAgIHJldHVybiBlcnJ0ZXh0W2NvZGVdOworICBlbHNlCisgICAgcmV0dXJuICJ1bmtub3duIjsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfdGltZW91dC4zIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc190aW1lb3V0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNmOGY3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfdGltZW91dC4zCkBAIC0wLDAgKzEsNjEgQEAKKy5cIgorLlwiIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworLlwiIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKy5cIiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisuXCIgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisuXCIgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisuXCIgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKy5cIiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorLlwiIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorLlwiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorLlwiCisuVEggQVJFU19USU1FT1VUIDMgIjI1IEp1bHkgMTk5OCIKKy5TSCBOQU1FCithcmVzX3RpbWVvdXQgXC0gcmV0dXJuIG1heGltdW0gdGltZSB0byB3YWl0CisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgc3RydWN0IHRpbWV2YWwgKmFyZXNfdGltZW91dChhcmVzX2NoYW5uZWwgXGZJY2hhbm5lbFxmUCwKKy5CCXN0cnVjdCB0aW1ldmFsICpcZkltYXh0dlxmUCwgc3RydWN0IHRpbWV2YWwgKlxmSXR2XGZQKQorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYXJlc190aW1lb3V0CitmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIHRpbWUgZm9yIHdoaWNoIHRoZSBjYWxsZXIgc2hvdWxkIHdhaXQgYmVmb3JlCitpbnZva2luZyBcZklhcmVzX3Byb2Nlc3MoMylcZlAgdG8gcHJvY2VzcyB0aW1lb3V0cy4gIFRoZSBwYXJhbWV0ZXIKKy5JIG1heHR2CitzcGVjaWZpZXMgYSBleGlzdGluZyBtYXhpbXVtIHRpbWVvdXQsIG9yCisuQiBOVUxMCitpZiB0aGUgY2FsbGVyIGRvZXMgbm90IHdpc2ggdG8gYXBwbHkgYSBtYXhpbXVtIHRpbWVvdXQuICBUaGUgcGFyYW1ldGVyCisuSSB0dgorbXVzdCBwb2ludCB0byBhIHdyaXRhYmxlIGJ1ZmZlciBvZiB0eXBlCisuQlIgInN0cnVjdCB0aW1ldmFsIiAuCitJdCBpcyB2YWxpZCBmb3IKKy5JIG1heHR2CithbmQKKy5JIHR2Cit0byBoYXZlIHRoZSBzYW1lIHZhbHVlLgorLlBQCitJZiBubyBxdWVyaWVzIGhhdmUgdGltZW91dHMgcGVuZGluZyBzb29uZXIgdGhhbiB0aGUgZ2l2ZW4gbWF4aW11bQordGltZW91dCwKKy5CIGFyZXNfdGltZW91dAorcmV0dXJucyB0aGUgdmFsdWUgb2YKKy5JUiBtYXh0djsKK290aGVyd2lzZQorLkIgYXJlc190aW1lb3V0CitzdG9yZXMgdGhlIGFwcHJvcHJpYXRlIHRpbWVvdXQgdmFsdWUgaW50byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkKKy5JIHR2CithbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YKKy5JUiB0diAuCisuU0ggU0VFIEFMU08KKy5CUiBhcmVzX2ZkcyAoMyksCisuQlIgYXJlc19wcm9jZXNzICgzKQorLlNIIEFVVEhPUgorR3JlZyBIdWRzb24sIE1JVCBJbmZvcm1hdGlvbiBTeXN0ZW1zCisuYnIKK0NvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc190aW1lb3V0LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3RpbWVvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTNlNGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc190aW1lb3V0LmMKQEAgLTAsMCArMSw4OCBAQAorCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmVzLmgiCisjaW5jbHVkZSAiYXJlc19wcml2YXRlLmgiCisKKy8qIHJldHVybiB0aW1lIG9mZnNldCBiZXR3ZWVuIG5vdyBhbmQgKGZ1dHVyZSkgY2hlY2ssIGluIG1pbGxpc2Vjb25kcyAqLworc3RhdGljIGxvbmcgdGltZW9mZnNldChzdHJ1Y3QgdGltZXZhbCAqbm93LCBzdHJ1Y3QgdGltZXZhbCAqY2hlY2spCit7CisgIHJldHVybiAoY2hlY2stPnR2X3NlYyAtIG5vdy0+dHZfc2VjKSoxMDAwICsKKyAgICAgICAgIChjaGVjay0+dHZfdXNlYyAtIG5vdy0+dHZfdXNlYykvMTAwMDsKK30KKworLyogV0FSTklORzogQmV3YXJlIHRoYXQgdGhpcyBpcyBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZworICogcmVxdWVzdHMhIFlvdSBhcmUgcHJvYmFibHkgZmFyIGJldHRlciBvZmYganVzdCBjYWxsaW5nIGFyZXNfcHJvY2VzcygpCisgKiBvbmNlIHBlciBzZWNvbmQsIHJhdGhlciB0aGFuIGNhbGxpbmcgYXJlc190aW1lb3V0KCkgdG8gZmlndXJlIG91dAorICogd2hlbiB0byBuZXh0IGNhbGwgYXJlc19wcm9jZXNzKCkuCisgKi8KK3N0cnVjdCB0aW1ldmFsICphcmVzX3RpbWVvdXQoYXJlc19jaGFubmVsIGNoYW5uZWwsIHN0cnVjdCB0aW1ldmFsICptYXh0diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnR2YnVmKQoreworICBzdHJ1Y3QgcXVlcnkgKnF1ZXJ5OworICBzdHJ1Y3QgbGlzdF9ub2RlKiBsaXN0X2hlYWQ7CisgIHN0cnVjdCBsaXN0X25vZGUqIGxpc3Rfbm9kZTsKKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBzdHJ1Y3QgdGltZXZhbCBuZXh0c3RvcDsKKyAgbG9uZyBvZmZzZXQsIG1pbl9vZmZzZXQ7CisKKyAgLyogTm8gcXVlcmllcywgbm8gdGltZW91dCAoYW5kIG5vIGZldGNoIG9mIHRoZSBjdXJyZW50IHRpbWUpLiAqLworICBpZiAoYXJlc19faXNfbGlzdF9lbXB0eSgmKGNoYW5uZWwtPmFsbF9xdWVyaWVzKSkpCisgICAgcmV0dXJuIG1heHR2OworCisgIC8qIEZpbmQgdGhlIG1pbmltdW0gdGltZW91dCBmb3IgdGhlIGN1cnJlbnQgc2V0IG9mIHF1ZXJpZXMuICovCisgIG5vdyA9IGFyZXNfX3R2bm93KCk7CisgIG1pbl9vZmZzZXQgPSAtMTsKKworICBsaXN0X2hlYWQgPSAmKGNoYW5uZWwtPmFsbF9xdWVyaWVzKTsKKyAgZm9yIChsaXN0X25vZGUgPSBsaXN0X2hlYWQtPm5leHQ7IGxpc3Rfbm9kZSAhPSBsaXN0X2hlYWQ7CisgICAgICAgbGlzdF9ub2RlID0gbGlzdF9ub2RlLT5uZXh0KQorICAgIHsKKyAgICAgIHF1ZXJ5ID0gbGlzdF9ub2RlLT5kYXRhOworICAgICAgaWYgKHF1ZXJ5LT50aW1lb3V0LnR2X3NlYyA9PSAwKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIG9mZnNldCA9IHRpbWVvZmZzZXQoJm5vdywgJnF1ZXJ5LT50aW1lb3V0KTsKKyAgICAgIGlmIChvZmZzZXQgPCAwKQorICAgICAgICBvZmZzZXQgPSAwOworICAgICAgaWYgKG1pbl9vZmZzZXQgPT0gLTEgfHwgb2Zmc2V0IDwgbWluX29mZnNldCkKKyAgICAgICAgbWluX29mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgLyogSWYgd2UgZm91bmQgYSBtaW5pbXVtIHRpbWVvdXQgYW5kIGl0J3Mgc29vbmVyIHRoYW4gdGhlIG9uZSBzcGVjaWZpZWQgaW4KKyAgICogbWF4dHYgKGlmIGFueSksIHJldHVybiBpdC4gIE90aGVyd2lzZSBnbyB3aXRoIG1heHR2LgorICAgKi8KKyAgaWYgKG1pbl9vZmZzZXQgIT0gLTEpCisgICAgeworICAgICAgaW50IGlvZmZzZXQgPSAobWluX29mZnNldCA+IChsb25nKUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpbWluX29mZnNldDsKKworICAgICAgbmV4dHN0b3AudHZfc2VjID0gaW9mZnNldC8xMDAwOworICAgICAgbmV4dHN0b3AudHZfdXNlYyA9IChpb2Zmc2V0JTEwMDApKjEwMDA7CisKKyAgICAgIGlmICghbWF4dHYgfHwgYXJlc19fdGltZWRvdXQobWF4dHYsICZuZXh0c3RvcCkpCisgICAgICAgIHsKKyAgICAgICAgICAqdHZidWYgPSBuZXh0c3RvcDsKKyAgICAgICAgICByZXR1cm4gdHZidWY7CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIG1heHR2OworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc192ZXJzaW9uLjMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3ZlcnNpb24uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIxMzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc192ZXJzaW9uLjMKQEAgLTAsMCArMSw0MCBAQAorLlwiCisuXCIgQ29weXJpZ2h0IDIwMDQgYnkgRGFuaWVsIFN0ZW5iZXJnCisuXCIKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisuXCIgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorLlwiIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKy5cIiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKy5cIiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKy5cIiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorLlwiIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisuXCIgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisuXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisuXCIKKy5USCBBUkVTX1ZFUlNJT04gMyAiMjkgSmFudWFyeSAyMDA0IgorLlNIIE5BTUUKK2FyZXNfdmVyc2lvbiBcLSBHZXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsaWJyYXJ5CisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGFyZXMuaD4KKy5QUAorLkIgY29uc3QgY2hhciAqYXJlc192ZXJzaW9uKGludCAqXGZJdmVyc2lvblxmUCkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGFyZXNfdmVyc2lvbgorZnVuY3Rpb24gZ2V0cyB0aGUgbGlicmFyeSB2ZXJzaW9uIGFzIGEgc3RyaW5nIGFuZCBvcHRpb25hbGx5IGFzIGFuIGludGVnZXIKK3N0b3JlZCBpbiB0aGUKKy5JUiB2ZXJzaW9uICwKK2FyZ3VtZW50LiBJZiB5b3UgcGFzcyBhIE5VTEwsIG5vIGludGVnZXIgaXMgYXR0ZW1wdGVkIHRvIGJlIHJldHVybmVkLgorCitUaGUgaW50ZWdlciBpcyBidWlsdCB1cCBhcyAyNGJpdCBudW1iZXIsIHdpdGggOCBzZXBhcmF0ZSBiaXRzIHVzZWQgZm9yIG1ham9yCitudW1iZXIsIG1pbm9yIG51bWJlciBhbmQgcGF0Y2ggbnVtYmVyLiBUaGlzIG1ha2VzIGEgdmVyc2lvbiBzdHJpbmcgc3VjaCBhcworMS4yLjMgd2lsbCBiZSByZXR1cm5lZCBhcyB0aGUgaGV4YWRlY2ltYWwgbnVtYmVyIDB4MDEwMjAzIChkZWNpbWFsIDY2MDUxKS4KKy5TSCBOT1RFUworVGhpcyBmdW5jdGlvbiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGFyZXMuCisuU0ggQVVUSE9SCitEYW5pZWwgU3RlbmJlcmcKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc192ZXJzaW9uLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjhjNDJmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc192ZXJzaW9uLmMKQEAgLTAsMCArMSwxMSBAQAorCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorI2luY2x1ZGUgImFyZXMuaCIKKworY29uc3QgY2hhciAqYXJlc192ZXJzaW9uKGludCAqdmVyc2lvbikKK3sKKyAgaWYodmVyc2lvbikKKyAgICAqdmVyc2lvbiA9IEFSRVNfVkVSU0lPTjsKKworICByZXR1cm4gQVJFU19WRVJTSU9OX1NUUjsKK30KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfdmVyc2lvbi5oIGIvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc192ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjODU4NAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfdmVyc2lvbi5oCkBAIC0wLDAgKzEsMjQgQEAKKworI2lmbmRlZiBBUkVTX19WRVJTSU9OX0gKKyNkZWZpbmUgQVJFU19fVkVSU0lPTl9ICisKKy8qIFRoaXMgaXMgdGhlIGdsb2JhbCBwYWNrYWdlIGNvcHlyaWdodCAqLworI2RlZmluZSBBUkVTX0NPUFlSSUdIVCAiMjAwNCAtIDIwMTYgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LiIKKworI2RlZmluZSBBUkVTX1ZFUlNJT05fTUFKT1IgMQorI2RlZmluZSBBUkVTX1ZFUlNJT05fTUlOT1IgMTIKKyNkZWZpbmUgQVJFU19WRVJTSU9OX1BBVENIIDAKKyNkZWZpbmUgQVJFU19WRVJTSU9OICgoQVJFU19WRVJTSU9OX01BSk9SPDwxNil8XAorICAgICAgICAgICAgICAgICAgICAgICAoQVJFU19WRVJTSU9OX01JTk9SPDw4KXxcCisgICAgICAgICAgICAgICAgICAgICAgIChBUkVTX1ZFUlNJT05fUEFUQ0gpKQorI2RlZmluZSBBUkVTX1ZFUlNJT05fU1RSICIxLjEyLjAiCisKKyNpZiAoQVJFU19WRVJTSU9OID49IDB4MDEwNzAwKQorIyAgZGVmaW5lIENBUkVTX0hBVkVfQVJFU19MSUJSQVJZX0lOSVQgMQorIyAgZGVmaW5lIENBUkVTX0hBVkVfQVJFU19MSUJSQVJZX0NMRUFOVVAgMQorI2Vsc2UKKyMgIHVuZGVmIENBUkVTX0hBVkVfQVJFU19MSUJSQVJZX0lOSVQKKyMgIHVuZGVmIENBUkVTX0hBVkVfQVJFU19MSUJSQVJZX0NMRUFOVVAKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfd3JpdGV2LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3dyaXRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOGVmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9hcmVzX3dyaXRldi5jCkBAIC0wLDAgKzEsNzkgQEAKKworCisvKiBDb3B5cmlnaHQgMTk5OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0CisgKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKworI2lmbmRlZiBIQVZFX1dSSVRFVgorc3NpemVfdCBhcmVzX3dyaXRldihhcmVzX3NvY2tldF90IHMsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQoreworICBjaGFyICpidWZmZXIsICpicDsKKyAgaW50IGk7CisgIHNpemVfdCBieXRlcyA9IDA7CisgIHNzaXplX3QgcmVzdWx0OworCisgIC8qIFZhbGlkYXRlIGlvdmNudCAqLworICBpZiAoaW92Y250IDw9IDApCisgIHsKKyAgICBTRVRfRVJSTk8oRUlOVkFMKTsKKyAgICByZXR1cm4gKC0xKTsKKyAgfQorCisgIC8qIFZhbGlkYXRlIGFuZCBmaW5kIHRoZSBzdW0gb2YgdGhlIGlvdl9sZW4gdmFsdWVzIGluIHRoZSBpb3YgYXJyYXkgKi8KKyAgZm9yIChpID0gMDsgaSA8IGlvdmNudDsgaSsrKQorICB7CisgICAgaWYgKGlvdltpXS5pb3ZfbGVuID4gSU5UX01BWCAtIGJ5dGVzKQorICAgIHsKKyAgICAgIFNFVF9FUlJOTyhFSU5WQUwpOworICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICAgIGJ5dGVzICs9IGlvdltpXS5pb3ZfbGVuOworICB9CisKKyAgaWYgKGJ5dGVzID09IDApCisgICAgcmV0dXJuICgwKTsKKworICAvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgdG8gaG9sZCB0aGUgZGF0YSAqLworICBidWZmZXIgPSBhcmVzX21hbGxvYyhieXRlcyk7CisgIGlmICghYnVmZmVyKQorICB7CisgICAgU0VUX0VSUk5PKEVOT01FTSk7CisgICAgcmV0dXJuICgtMSk7CisgIH0KKworICAvKiBDb3B5IHRoZSBkYXRhIGludG8gYnVmZmVyICovCisgIGZvciAoYnAgPSBidWZmZXIsIGkgPSAwOyBpIDwgaW92Y250OyArK2kpCisgIHsKKyAgICBtZW1jcHkgKGJwLCBpb3ZbaV0uaW92X2Jhc2UsIGlvdltpXS5pb3ZfbGVuKTsKKyAgICBicCArPSBpb3ZbaV0uaW92X2xlbjsKKyAgfQorCisgIC8qIFNlbmQgYnVmZmVyIGNvbnRlbnRzICovCisgIHJlc3VsdCA9IHN3cml0ZShzLCBidWZmZXIsIGJ5dGVzKTsKKworICBhcmVzX2ZyZWUoYnVmZmVyKTsKKworICByZXR1cm4gKHJlc3VsdCk7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvYXJlc193cml0ZXYuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfd3JpdGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyM2EwZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2FyZXNfd3JpdGV2LmgKQEAgLTAsMCArMSwzNiBAQAorI2lmbmRlZiBIRUFERVJfQ0FSRVNfV1JJVEVWX0gKKyNkZWZpbmUgSEVBREVSX0NBUkVTX1dSSVRFVl9ICisKKworLyogQ29weXJpZ2h0IDE5OTggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAorICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImFyZXNfc2V0dXAuaCIKKyNpbmNsdWRlICJhcmVzLmgiCisKKyNpZm5kZWYgSEFWRV9XUklURVYKKworLyogU3RydWN0dXJlIGZvciBzY2F0dGVyL2dhdGhlciBJL08uICovCitzdHJ1Y3QgaW92ZWMKK3sKKyAgdm9pZCAqaW92X2Jhc2U7ICAvKiBQb2ludGVyIHRvIGRhdGEuICovCisgIHNpemVfdCBpb3ZfbGVuOyAgLyogTGVuZ3RoIG9mIGRhdGEuICAqLworfTsKKworZXh0ZXJuIHNzaXplX3QgYXJlc193cml0ZXYoYXJlc19zb2NrZXRfdCBzLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NBUkVTX1dSSVRFVl9IICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9iaXRuY21wLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9iaXRuY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OGQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2JpdG5jbXAuYwpAQCAtMCwwICsxLDU5IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEhBVkVfQklUTkNNUAorCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorI2luY2x1ZGUgImJpdG5jbXAuaCIKKworLyoKKyAqIGludAorICogYml0bmNtcChsLCByLCBuKQorICoJY29tcGFyZSBiaXQgbWFza3MgbCBhbmQgciwgZm9yIG4gYml0cy4KKyAqIHJldHVybjoKKyAqCTwwLCA+MCwgb3IgMCBpbiB0aGUgbGliYyB0cmFkaXRpb24uCisgKiBub3RlOgorICoJbmV0d29yayBieXRlIG9yZGVyIGFzc3VtZWQuICB0aGlzIG1lYW5zIDE5Mi41LjUuMjQwLzI4IGhhcworICoJMHgxMTExMDAwMCBpbiBpdHMgZm91cnRoIG9jdGV0LgorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSAoSVNDKSwgSnVuZSAxOTk2CisgKi8KK2ludCBhcmVzX19iaXRuY21wKGNvbnN0IHZvaWQgKmwsIGNvbnN0IHZvaWQgKnIsIGludCBuKQoreworICB1bnNpZ25lZCBpbnQgbGIsIHJiOworICBpbnQgeCwgYjsKKworICBiID0gbiAvIDg7CisgIHggPSBtZW1jbXAobCwgciwgYik7CisgIGlmICh4IHx8IChuICUgOCkgPT0gMCkKKyAgICByZXR1cm4gKHgpOworCisgIGxiID0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopbClbYl07CisgIHJiID0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopcilbYl07CisgIGZvciAoYiA9IG4gJSA4OyBiID4gMDsgYi0tKSB7CisgICAgaWYgKChsYiAmIDB4ODApICE9IChyYiAmIDB4ODApKSB7CisgICAgICBpZiAobGIgJiAweDgwKQorICAgICAgICByZXR1cm4gKDEpOworICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICAgIGxiIDw8PSAxOworICAgIHJiIDw8PSAxOworICB9CisgIHJldHVybiAoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2JpdG5jbXAuaCBiL2FwL2FwcC9jLWFyZXMvc3JjL2JpdG5jbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhkNjZjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvYml0bmNtcC5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX19BUkVTX0JJVE5DTVBfSAorI2RlZmluZSBfX0FSRVNfQklUTkNNUF9ICisKKworLyogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDEzIGJ5IERvbWluaWNrIE1lZ2xpbworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpZm5kZWYgSEFWRV9CSVROQ01QCitpbnQgYXJlc19fYml0bmNtcChjb25zdCB2b2lkICpsLCBjb25zdCB2b2lkICpyLCBpbnQgbik7CisjZWxzZQorI2RlZmluZSBhcmVzX19iaXRuY21wKHgseSx6KSBiaXRuY21wKHgseSx6KQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FSRVNfQklUTkNNUF9IICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9idWlsZGNvbmYgYi9hcC9hcHAvYy1hcmVzL3NyYy9idWlsZGNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3OWQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2J1aWxkY29uZgpAQCAtMCwwICsxLDI5NyBAQAorIyEvYmluL3NoCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBkaWUgcHJpbnRzIGFyZ3VtZW50IHN0cmluZyB0byBzdGRvdXQgYW5kIGV4aXRzIHRoaXMgc2hlbGwgc2NyaXB0LgorIworZGllKCl7CisgIGVjaG8gImJ1aWxkY29uZjogJEAiCisgIGV4aXQgMQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZHRvb2wgd29ya3MgYXMgJ3doaWNoJyBidXQgd2UgdXNlIGEgZGlmZmVyZW50IG5hbWUgdG8gbWFrZSBpdCBtb3JlCisjIG9idmlvdXMgd2UgYXJlbid0IHVzaW5nICd3aGljaCchIDstKQorIworZmluZHRvb2woKXsKKyAgZmlsZT0iJDEiCisKKyAgaWYgeyBlY2hvICIkZmlsZSIgfCBncmVwICIvIiA+L2Rldi9udWxsIDI+JjE7IH0gdGhlbgorICAgICMgd2hlbiBmaWxlIGlzIGdpdmVuIHdpdGggYSBwYXRoIGNoZWNrIGl0IGZpcnN0CisgICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisgICAgICBlY2hvICIkZmlsZSIKKyAgICAgIHJldHVybgorICAgIGZpCisgIGZpCisKKyAgb2xkX0lGUz0kSUZTOyBJRlM9JzonCisgIGZvciBwYXRoIGluICRQQVRICisgIGRvCisgICAgSUZTPSRvbGRfSUZTCisgICAgIyBlY2hvICJjaGVja3MgZm9yICRmaWxlIGluICRwYXRoIiA+JjIKKyAgICBpZiB0ZXN0IC1mICIkcGF0aC8kZmlsZSI7IHRoZW4KKyAgICAgIGVjaG8gIiRwYXRoLyRmaWxlIgorICAgICAgcmV0dXJuCisgICAgZmkKKyAgZG9uZQorICBJRlM9JG9sZF9JRlMKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJlbW92ZXRoaXMoKSByZW1vdmVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwKKyMgaW5zaWRlIGFuZCBiZWxvdyB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkgYXQgaW52b2NhdGlvbiB0aW1lLgorIworcmVtb3ZldGhpcygpeworICBpZiB0ZXN0ICIkIyIgPSAiMSI7IHRoZW4KKyAgICBmaW5kIC4gLWRlcHRoIC1uYW1lICQxIC1wcmludCA+IGJ1aWxkY29uZi50bXAuJCQKKyAgICB3aGlsZSByZWFkIGZkbmFtZQorICAgIGRvCisgICAgICBpZiB0ZXN0IC1mICIkZmRuYW1lIjsgdGhlbgorICAgICAgICBybSAtZiAiJGZkbmFtZSIKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZkbmFtZSI7IHRoZW4KKyAgICAgICAgcm0gLWYgLXIgIiRmZG5hbWUiCisgICAgICBmaQorICAgIGRvbmUgPCBidWlsZGNvbmYudG1wLiQkCisgICAgcm0gLWYgYnVpbGRjb25mLnRtcC4kJAorICBmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgYnVpbGRjb25mIHJ1bnMgZnJvbSB0aGUgc3ViZGlyZWN0b3J5IHdoZXJlIGNvbmZpZ3VyZS5hYyBsaXZlcworIworaWYgdGVzdCAhIC1mIGNvbmZpZ3VyZS5hYyB8fAorICB0ZXN0ICEgLWYgYXJlc19pbml0LmMgfHwKKyAgdGVzdCAhIC1mIG00L2NhcmVzLWZ1bmN0aW9ucy5tNDsgdGhlbgorICBlY2hvICJDYW4gbm90IHJ1biBidWlsZGNvbmYgZnJvbSBvdXRzaWRlIG9mIGMtYXJlcyBzb3VyY2Ugc3ViZGlyZWN0b3J5ISIKKyAgZWNobyAiQ2hhbmdlIHRvIHRoZSBzdWJkaXJlY3Rvcnkgd2hlcmUgYnVpbGRjb25mIGlzIGZvdW5kLCBhbmQgdHJ5IGFnYWluLiIKKyAgZXhpdCAxCitmaQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR05VIGxpYnRvb2wgcHJlbGltaW5hcnkgY2hlY2sKKyMKK3dhbnRfbHRfbWFqb3I9MQord2FudF9sdF9taW5vcj00Cit3YW50X2x0X3BhdGNoPTIKK3dhbnRfbHRfdmVyc2lvbj0xLjQuMgorCisjIFRoaXMgYXBwcm9hY2ggdGhhdCB0cmllcyAnZ2xpYnRvb2xpemUgZmlyc3QgaXMgaW50ZW5kZWQgZm9yIHN5c3RlbXMgdGhhdAorIyBoYXZlIEdOVSBsaWJ0b29sIG5hbWVkIGFzICdnbGlidG9vbGl6ZScgYW5kIGxpYnRvb2xpemUgbm90IGJlaW5nIEdOVSdzLgorCitsaWJ0b29saXplPWBmaW5kdG9vbCBnbGlidG9vbGl6ZSAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgISAteCAiJGxpYnRvb2xpemUiOyB0aGVuCisgIGxpYnRvb2xpemU9YGZpbmR0b29sICR7TElCVE9PTElaRTotbGlidG9vbGl6ZX1gCitmaQoraWYgdGVzdCAteiAiJGxpYnRvb2xpemUiOyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogbGlidG9vbGl6ZSBub3QgZm91bmQuIgorICBlY2hvICIgICAgWW91IG5lZWQgR05VIGxpYnRvb2xpemUgJHdhbnRfbHRfdmVyc2lvbiBvciBuZXdlciBpbnN0YWxsZWQuIgorICBleGl0IDEKK2ZpCisKK2x0X3B2ZXI9YCRsaWJ0b29saXplIC0tdmVyc2lvbiAyPi9kZXYvbnVsbHxoZWFkIC1uIDFgCitsdF9xdmVyPWBlY2hvICRsdF9wdmVyfHNlZCAtZSAicy8oW14pXSopLy9nIiAtZSAicy9eW14wLTldKi8vZyJgCitsdF92ZXJzaW9uPWBlY2hvICRsdF9xdmVyfHNlZCAtZSAicy9bLSBdLiovLyIgLWUgInMvXChbYS16XSpcKSQvLyJgCitpZiB0ZXN0IC16ICIkbHRfdmVyc2lvbiI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBsaWJ0b29saXplIG5vdCBmb3VuZC4iCisgIGVjaG8gIiAgICBZb3UgbmVlZCBHTlUgbGlidG9vbGl6ZSAkd2FudF9sdF92ZXJzaW9uIG9yIG5ld2VyIGluc3RhbGxlZC4iCisgIGV4aXQgMQorZmkKK29sZF9JRlM9JElGUzsgSUZTPScuJzsgc2V0ICRsdF92ZXJzaW9uOyBJRlM9JG9sZF9JRlMKK2x0X21ham9yPSQxCitsdF9taW5vcj0kMgorbHRfcGF0Y2g9JDMKKworaWYgdGVzdCAteiAiJGx0X21ham9yIjsgdGhlbgorICBsdF9zdGF0dXM9ImJhZCIKK2VsaWYgdGVzdCAiJGx0X21ham9yIiAtZ3QgIiR3YW50X2x0X21ham9yIjsgdGhlbgorICBsdF9zdGF0dXM9Imdvb2QiCitlbGlmIHRlc3QgIiRsdF9tYWpvciIgLWx0ICIkd2FudF9sdF9tYWpvciI7IHRoZW4KKyAgbHRfc3RhdHVzPSJiYWQiCitlbGlmIHRlc3QgLXogIiRsdF9taW5vciI7IHRoZW4KKyAgbHRfc3RhdHVzPSJiYWQiCitlbGlmIHRlc3QgIiRsdF9taW5vciIgLWd0ICIkd2FudF9sdF9taW5vciI7IHRoZW4KKyAgbHRfc3RhdHVzPSJnb29kIgorZWxpZiB0ZXN0ICIkbHRfbWlub3IiIC1sdCAiJHdhbnRfbHRfbWlub3IiOyB0aGVuCisgIGx0X3N0YXR1cz0iYmFkIgorZWxpZiB0ZXN0IC16ICIkbHRfcGF0Y2giOyB0aGVuCisgIGx0X3N0YXR1cz0iYmFkIgorZWxpZiB0ZXN0ICIkbHRfcGF0Y2giIC1ndCAiJHdhbnRfbHRfcGF0Y2giOyB0aGVuCisgIGx0X3N0YXR1cz0iZ29vZCIKK2VsaWYgdGVzdCAiJGx0X3BhdGNoIiAtbHQgIiR3YW50X2x0X3BhdGNoIjsgdGhlbgorICBsdF9zdGF0dXM9ImJhZCIKK2Vsc2UKKyAgbHRfc3RhdHVzPSJnb29kIgorZmkKK2lmIHRlc3QgIiRsdF9zdGF0dXMiICE9ICJnb29kIjsgdGhlbgorICBlY2hvICJidWlsZGNvbmY6IGxpYnRvb2xpemUgdmVyc2lvbiAkbHRfdmVyc2lvbiBmb3VuZC4iCisgIGVjaG8gIiAgICBZb3UgbmVlZCBHTlUgbGlidG9vbGl6ZSAkd2FudF9sdF92ZXJzaW9uIG9yIG5ld2VyIGluc3RhbGxlZC4iCisgIGV4aXQgMQorZmkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHBlcmwgY2hlY2sKKyMKK1BFUkw9YGZpbmR0b29sICR7UEVSTDotcGVybH1gCitpZiB0ZXN0IC16ICIkUEVSTCI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBwZXJsIG5vdCBmb3VuZCIKKyAgZXhpdCAxCitmaQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVtb3ZlIGZpbGVzIGdlbmVyYXRlZCBvbiBwcmV2aW91cyBidWlsZGNvbmYvY29uZmlndXJlIHJ1bi4KKyMKK2ZvciBmbmFtZSBpbiAuZGVwcyBcCisgICAgLmxpYnMgXAorICAgICoubGEgXAorICAgICoubG8gXAorICAgICouYSBcCisgICAgKi5vIFwKKyAgICBNYWtlZmlsZSBcCisgICAgTWFrZWZpbGUuaW4gXAorICAgIGFjbG9jYWwubTQgXAorICAgIGFjbG9jYWwubTQuYmFrIFwKKyAgICBhcmVzX2J1aWxkLmggXAorICAgIGFyZXNfY29uZmlnLmggXAorICAgIGFyZXNfY29uZmlnLmguaW4gXAorICAgIGF1dG9tNHRlLmNhY2hlIFwKKyAgICBjb21waWxlIFwKKyAgICBjb25maWcuZ3Vlc3MgXAorICAgIGNvbmZpZy5sb2cgXAorICAgIGNvbmZpZy5sdCBcCisgICAgY29uZmlnLnN0YXR1cyBcCisgICAgY29uZmlnLnN1YiBcCisgICAgY29uZmlndXJlIFwKKyAgICBkZXBjb21wIFwKKyAgICBsaWJjYXJlcy5wYyBcCisgICAgbGlidG9vbCBcCisgICAgbGlidG9vbC5tNCBcCisgICAgbGlidG9vbC5tNC50bXAgXAorICAgIGx0bWFpbi5zaCBcCisgICAgbHRvcHRpb25zLm00IFwKKyAgICBsdHN1Z2FyLm00IFwKKyAgICBsdHZlcnNpb24ubTQgXAorICAgIGx0fm9ic29sZXRlLm00IFwKKyAgICBtaXNzaW5nIFwKKyAgICBzdGFtcC1oMSBcCisgICAgc3RhbXAtaDIgOyBkbworICByZW1vdmV0aGlzICIkZm5hbWUiCitkb25lCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBydW4gdGhlIGNvcnJlY3Qgc2NyaXB0cyBub3cKKyMKKworZWNobyAiYnVpbGRjb25mOiBydW5uaW5nIGxpYnRvb2xpemUiCiske2xpYnRvb2xpemV9IC0tY29weSAtLWF1dG9tYWtlIC0tZm9yY2UgfHwgZGllICJsaWJ0b29saXplIGNvbW1hbmQgZmFpbGVkIgorCisjIFdoZW4gdXNpbmcgbGlidG9vbCAxLjUuWCAoWCA8IDI2KSB3ZSBjb3B5IGxpYnRvb2wubTQgdG8gb3VyIGxvY2FsIG00CisjIHN1YmRpcmVjdG9yeSBhbmQgdGhpcyBsb2NhbCBjb3B5IGlzIHBhdGNoZWQgdG8gZml4IHNvbWUgd2FybmluZ3MgdGhhdAorIyBhcmUgdHJpZ2dlcmVkIHdoZW4gcnVubmluZyBhY2xvY2FsIGFuZCB1c2luZyBhdXRvY29uZiAyLjYyIG9yIGxhdGVyLgorCitpZiB0ZXN0ICIkbHRfbWFqb3IiID0gIjEiICYmIHRlc3QgIiRsdF9taW5vciIgPSAiNSI7IHRoZW4KKyAgaWYgdGVzdCAteiAiJGx0X3BhdGNoIiB8fCB0ZXN0ICIkbHRfcGF0Y2giIC1sdCAiMjYiOyB0aGVuCisgICAgZWNobyAiYnVpbGRjb25mOiBjb3B5aW5nIGxpYnRvb2wubTQgdG8gbG9jYWwgbTQgc3ViZGlyIgorICAgIGFjX2Rpcj1gJHtBQ0xPQ0FMOi1hY2xvY2FsfSAtLXByaW50LWFjLWRpcmAKKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvbGlidG9vbC5tNDsgdGhlbgorICAgICAgY3AgLWYgJGFjX2Rpci9saWJ0b29sLm00IG00L2xpYnRvb2wubTQKKyAgICBlbHNlCisgICAgICBlY2hvICJidWlsZGNvbmY6ICRhY19kaXIvbGlidG9vbC5tNCBub3QgZm91bmQiCisgICAgZmkKKyAgICBpZiB0ZXN0IC1mIG00L2xpYnRvb2wubTQ7IHRoZW4KKyAgICAgIGVjaG8gImJ1aWxkY29uZjogcmVuYW1pbmcgc29tZSB2YXJpYWJsZXMgaW4gbG9jYWwgbTQvbGlidG9vbC5tNCIKKyAgICAgICRQRVJMIC1pLnRtcCAtcGUgXAorICAgICAgICAncy9sdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcy9sdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcy9nOyBcCisgICAgICAgICBzL2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzL2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzL2c7JyBcCisgICAgICAgIG00L2xpYnRvb2wubTQKKyAgICAgIHJtIC1mIG00L2xpYnRvb2wubTQudG1wCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgLWYgbTQvbGlidG9vbC5tNDsgdGhlbgorICBlY2hvICJidWlsZGNvbmY6IGNvbnZlcnRpbmcgYWxsIG12IHRvIG12IC1mIGluIGxvY2FsIG00L2xpYnRvb2wubTQiCisgICRQRVJMIC1pLnRtcCAtcGUgJ3MvXGJtdiArKFteLVxzXSkvbXYgLWYgJDEvZycgbTQvbGlidG9vbC5tNAorICBybSAtZiBtNC9saWJ0b29sLm00LnRtcAorZmkKKworZWNobyAiYnVpbGRjb25mOiBydW5uaW5nIGFjbG9jYWwiCiske0FDTE9DQUw6LWFjbG9jYWx9IC1JIG00ICRBQ0xPQ0FMX0ZMQUdTIHx8IGRpZSAiYWNsb2NhbCBjb21tYW5kIGZhaWxlZCIKKworZWNobyAiYnVpbGRjb25mOiBjb252ZXJ0aW5nIGFsbCBtdiB0byBtdiAtZiBpbiBsb2NhbCBhY2xvY2FsLm00IgorJFBFUkwgLWkuYmFrIC1wZSAncy9cYm12ICsoW14tXHNdKS9tdiAtZiAkMS9nJyBhY2xvY2FsLm00CisKK2VjaG8gImJ1aWxkY29uZjogcnVubmluZyBhdXRvaGVhZGVyIgorJHtBVVRPSEVBREVSOi1hdXRvaGVhZGVyfSB8fCBkaWUgImF1dG9oZWFkZXIgY29tbWFuZCBmYWlsZWQiCisKK2VjaG8gImJ1aWxkY29uZjogcnVubmluZyBhdXRvY29uZiIKKyR7QVVUT0NPTkY6LWF1dG9jb25mfSB8fCBkaWUgImF1dG9jb25mIGNvbW1hbmQgZmFpbGVkIgorCitlY2hvICJidWlsZGNvbmY6IHJ1bm5pbmcgYXV0b21ha2UiCiske0FVVE9NQUtFOi1hdXRvbWFrZX0gLS1hZGQtbWlzc2luZyAtLWNvcHkgfHwgZGllICJhdXRvbWFrZSBjb21tYW5kIGZhaWxlZCIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdOVSBsaWJ0b29sIGNvbXBsZW1lbnRhcnkgY2hlY2sKKyMKKyMgRGVwZW5kaW5nIG9uIHRoZSBsaWJ0b29sIGFuZCBhdXRvbWFrZSB2ZXJzaW9ucyBiZWluZyB1c2VkLCBjb25maWcuZ3Vlc3MKKyMgbWlnaHQgbm90IGJlIGluc3RhbGxlZCBpbiB0aGUgc3ViZGlyZWN0b3J5IHVudGlsIGF1dG9tYWtlIGhhcyBmaW5pc2hlZC4KKyMgU28gd2UgY2FuIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCB1bnRpbCB0aGlzIHZlcnkgbGFzdCBidWlsZGNvbmYgc3RhZ2UuCisjCitpZiB0ZXN0ICEgLWYgLi9jb25maWcuZ3Vlc3M7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBjb25maWcuZ3Vlc3Mgbm90IGZvdW5kIgorZWxzZQorICBidWlsZGhvc3Q9YC4vY29uZmlnLmd1ZXNzIDI+L2Rldi9udWxsfGhlYWQgLW4gMWAKKyAgY2FzZSAkYnVpbGRob3N0IGluCisgICAgKi0qLWRhcndpbiopCisgICAgICBuZWVkX2x0X21ham9yPTEKKyAgICAgIG5lZWRfbHRfbWlub3I9NQorICAgICAgbmVlZF9sdF9wYXRjaD0yNgorICAgICAgbmVlZF9sdF9jaGVjaz0ieWVzIgorICAgICAgOzsKKyAgICAqLSotaHB1eCopCisgICAgICBuZWVkX2x0X21ham9yPTEKKyAgICAgIG5lZWRfbHRfbWlub3I9NQorICAgICAgbmVlZF9sdF9wYXRjaD0yNAorICAgICAgbmVlZF9sdF9jaGVjaz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICEgLXogIiRuZWVkX2x0X2NoZWNrIjsgdGhlbgorICAgIGlmIHRlc3QgLXogIiRsdF9tYWpvciI7IHRoZW4KKyAgICAgIGx0X3N0YXR1cz0iYmFkIgorICAgIGVsaWYgdGVzdCAiJGx0X21ham9yIiAtZ3QgIiRuZWVkX2x0X21ham9yIjsgdGhlbgorICAgICAgbHRfc3RhdHVzPSJnb29kIgorICAgIGVsaWYgdGVzdCAiJGx0X21ham9yIiAtbHQgIiRuZWVkX2x0X21ham9yIjsgdGhlbgorICAgICAgbHRfc3RhdHVzPSJiYWQiCisgICAgZWxpZiB0ZXN0IC16ICIkbHRfbWlub3IiOyB0aGVuCisgICAgICBsdF9zdGF0dXM9ImJhZCIKKyAgICBlbGlmIHRlc3QgIiRsdF9taW5vciIgLWd0ICIkbmVlZF9sdF9taW5vciI7IHRoZW4KKyAgICAgIGx0X3N0YXR1cz0iZ29vZCIKKyAgICBlbGlmIHRlc3QgIiRsdF9taW5vciIgLWx0ICIkbmVlZF9sdF9taW5vciI7IHRoZW4KKyAgICAgIGx0X3N0YXR1cz0iYmFkIgorICAgIGVsaWYgdGVzdCAteiAiJGx0X3BhdGNoIjsgdGhlbgorICAgICAgbHRfc3RhdHVzPSJiYWQiCisgICAgZWxpZiB0ZXN0ICIkbHRfcGF0Y2giIC1ndCAiJG5lZWRfbHRfcGF0Y2giOyB0aGVuCisgICAgICBsdF9zdGF0dXM9Imdvb2QiCisgICAgZWxpZiB0ZXN0ICIkbHRfcGF0Y2giIC1sdCAiJG5lZWRfbHRfcGF0Y2giOyB0aGVuCisgICAgICBsdF9zdGF0dXM9ImJhZCIKKyAgICBlbHNlCisgICAgICBsdF9zdGF0dXM9Imdvb2QiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfc3RhdHVzIiAhPSAiZ29vZCI7IHRoZW4KKyAgICAgIG5lZWRfbHRfdmVyc2lvbj0iJG5lZWRfbHRfbWFqb3IuJG5lZWRfbHRfbWlub3IuJG5lZWRfbHRfcGF0Y2giCisgICAgICBlY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgdmVyc2lvbiAkbHRfdmVyc2lvbiBmb3VuZC4iCisgICAgICBlY2hvICIgICAgICAgICAgICAkYnVpbGRob3N0IHJlcXVpcmVzIEdOVSBsaWJ0b29sICRuZWVkX2x0X3ZlcnNpb24gb3IgbmV3ZXIgaW5zdGFsbGVkLiIKKyAgICAgIHJtIC1mIGNvbmZpZ3VyZQorICAgICAgZXhpdCAxCisgICAgZmkKKyAgZmkKK2ZpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisjCitlY2hvICJidWlsZGNvbmY6IE9LIgorCitpZiB0ZXN0IC1mICJ0ZXN0L2J1aWxkY29uZiI7IHRoZW4KKyAgY2QgdGVzdCAmJiAuL2J1aWxkY29uZgorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9jYXJlcy5yYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2NhcmVzLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZWMwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9jYXJlcy5yYwpAQCAtMCwwICsxLDY1IEBACisKKy8qIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IGJ5IERhbmllbCBTdGVuYmVyZworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlIDx3aW52ZXIuaD4KKyNpbmNsdWRlICJhcmVzX3ZlcnNpb24uaCIKKworTEFOR1VBR0UgIDB4MDksMHgwMQorCisjZGVmaW5lIFJDX1ZFUlNJT04gIEFSRVNfVkVSU0lPTl9NQUpPUiwgQVJFU19WRVJTSU9OX01JTk9SLCBBUkVTX1ZFUlNJT05fUEFUQ0gsIDAKKworVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCisgIEZJTEVWRVJTSU9OICAgICBSQ19WRVJTSU9OCisgIFBST0RVQ1RWRVJTSU9OICBSQ19WRVJTSU9OCisgIEZJTEVGTEFHU01BU0sgICAweDNmTAorI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgfHwgZGVmaW5lZChfREVCVUcpCisgIEZJTEVGTEFHUyAxCisjZWxzZQorICBGSUxFRkxBR1MgMAorI2VuZGlmCisgIEZJTEVPUyAgICAgIFZPU19fV0lORE9XUzMyCisgIEZJTEVUWVBFICAgIFZGVF9ETEwKKyAgRklMRVNVQlRZUEUgMHgwTAorCitCRUdJTgorICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgIEJFR0lOCisgICAgQkxPQ0sgIjA0MDkwNGIwIgorICAgIEJFR0lOCisgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAgICAgICJUaGUgYy1hcmVzIGxpYnJhcnksIGh0dHBzOi8vYy1hcmVzLmhheHguc2UvXDAiCisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSB8fCBkZWZpbmVkKF9ERUJVRykKKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAgImMtYXJlcyBEZWJ1ZyBTaGFyZWQgTGlicmFyeVwwIgorICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgICAgICBBUkVTX1ZFUlNJT05fU1RSICJcMCIKKyAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAgICAgImMtYXJlc1wwIgorICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAiY2FyZXNkLmRsbFwwIgorI2Vsc2UKKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAgImMtYXJlcyBTaGFyZWQgTGlicmFyeVwwIgorICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgICAgICBBUkVTX1ZFUlNJT05fU1RSICJcMCIKKyAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAgICAgImMtYXJlc1wwIgorICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAiY2FyZXMuZGxsXDAiCisjZW5kaWYKKyAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICAgICAgIlRoZSBjLWFyZXMgbGlicmFyeVwwIgorICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgICBBUkVTX1ZFUlNJT05fU1RSICJcMCIKKyAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICAgIqkgIiBBUkVTX0NPUFlSSUdIVCAiXDAiCisgICAgICBWQUxVRSAiTGljZW5zZSIsICAgICAgICAgICJodHRwczovL2MtYXJlcy5oYXh4LnNlL2xpY2Vuc2UuaHRtbFwwIgorICAgIEVORAorICBFTkQKKworICBCTE9DSyAiVmFyRmlsZUluZm8iCisgIEJFR0lOCisgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAKKyAgRU5ECitFTkQKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2NvbXBpbGUgYi9hcC9hcHAvYy1hcmVzL3NyYy9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NWI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9jb21waWxlCkBAIC0wLDAgKzEsMzQ3IEBACisjISAvYmluL3NoCisjIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgorCitzY3JpcHR2ZXJzaW9uPTIwMTItMTAtMTQuMTE7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworbmw9JworJworCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IHRvb2xzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgd2hpdGVzcGFjZSB1c2FnZS4KK0lGUz0iICIiCSRubCIKKworZmlsZV9jb252PQorCisjIGZ1bmNfZmlsZV9jb252IGJ1aWxkX2ZpbGUgbGF6eQorIyBDb252ZXJ0IGEgJGJ1aWxkIGZpbGUgdG8gJGhvc3QgZm9ybSBhbmQgc3RvcmUgaXQgaW4gJGZpbGUKKyMgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV2luZG93cyBob3N0cy4gSWYgdGhlIGRldGVybWluZWQgY29udmVyc2lvbgorIyB0eXBlIGlzIGxpc3RlZCBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB3aWxsCisjIHRha2UgcGxhY2UuCitmdW5jX2ZpbGVfY29udiAoKQoreworICBmaWxlPSQxCisgIGNhc2UgJGZpbGUgaW4KKyAgICAvIHwgL1shL10qKSAjIGFic29sdXRlIGZpbGUsIGFuZCBub3QgYSBVTkMgZmlsZQorICAgICAgaWYgdGVzdCAteiAiJGZpbGVfY29udiI7IHRoZW4KKwkjIGxhemlseSBkZXRlcm1pbmUgaG93IHRvIGNvbnZlcnQgYWJzIGZpbGVzCisJY2FzZSBgdW5hbWUgLXNgIGluCisJICBNSU5HVyopCisJICAgIGZpbGVfY29udj1taW5ndworCSAgICA7OworCSAgQ1lHV0lOKikKKwkgICAgZmlsZV9jb252PWN5Z3dpbgorCSAgICA7OworCSAgKikKKwkgICAgZmlsZV9jb252PXdpbmUKKwkgICAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgY2FzZSAkZmlsZV9jb252LywkMiwgaW4KKwkqLCRmaWxlX2NvbnYsKikKKwkgIDs7CisJbWluZ3cvKikKKwkgIGZpbGU9YGNtZCAvL0MgZWNobyAiJGZpbGUgIiB8IHNlZCAtZSAncy8iXCguKlwpICIgKiQvXDEvJ2AKKwkgIDs7CisJY3lnd2luLyopCisJICBmaWxlPWBjeWdwYXRoIC1tICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKwl3aW5lLyopCisJICBmaWxlPWB3aW5lcGF0aCAtdyAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19jbF9kYXNoTCBsaW5rZGlyCisjIE1ha2UgY2wgbG9vayBmb3IgbGlicmFyaWVzIGluIExJTktESVIKK2Z1bmNfY2xfZGFzaEwgKCkKK3sKKyAgZnVuY19maWxlX2NvbnYgIiQxIgorICBpZiB0ZXN0IC16ICIkbGliX3BhdGgiOyB0aGVuCisgICAgbGliX3BhdGg9JGZpbGUKKyAgZWxzZQorICAgIGxpYl9wYXRoPSIkbGliX3BhdGg7JGZpbGUiCisgIGZpCisgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgLUxJQlBBVEg6JGZpbGUiCit9CisKKyMgZnVuY19jbF9kYXNobCBsaWJyYXJ5CisjIERvIGEgbGlicmFyeSBzZWFyY2gtcGF0aCBsb29rdXAgZm9yIGNsCitmdW5jX2NsX2Rhc2hsICgpCit7CisgIGxpYj0kMQorICBmb3VuZD1ubworICBzYXZlX0lGUz0kSUZTCisgIElGUz0nOycKKyAgZm9yIGRpciBpbiAkbGliX3BhdGggJExJQgorICBkbworICAgIElGUz0kc2F2ZV9JRlMKKyAgICBpZiAkc2hhcmVkICYmIHRlc3QgLWYgIiRkaXIvJGxpYi5kbGwubGliIjsgdGhlbgorICAgICAgZm91bmQ9eWVzCisgICAgICBsaWI9JGRpci8kbGliLmRsbC5saWIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWIubGliIjsgdGhlbgorICAgICAgZm91bmQ9eWVzCisgICAgICBsaWI9JGRpci8kbGliLmxpYgorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJGxpYi5hIjsgdGhlbgorICAgICAgZm91bmQ9eWVzCisgICAgICBsaWI9JGRpci9saWIkbGliLmEKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9JHNhdmVfSUZTCisKKyAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKyAgICBsaWI9JGxpYi5saWIKKyAgZmkKK30KKworIyBmdW5jX2NsX3dyYXBwZXIgY2wgYXJnLi4uCisjIEFkanVzdCBjb21waWxlIGNvbW1hbmQgdG8gc3VpdCBjbAorZnVuY19jbF93cmFwcGVyICgpCit7CisgICMgQXNzdW1lIGEgY2FwYWJsZSBzaGVsbAorICBsaWJfcGF0aD0KKyAgc2hhcmVkPToKKyAgbGlua2VyX29wdHM9CisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgICAgZWF0PQorICAgIGVsc2UKKyAgICAgIGNhc2UgJDEgaW4KKwktbykKKwkgICMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSAgZWF0PTEKKwkgIGNhc2UgJDIgaW4KKwkgICAgKi5vIHwgKi5bb09dW2JCXVtqSl0pCisJICAgICAgZnVuY19maWxlX2NvbnYgIiQyIgorCSAgICAgIHNldCB4ICIkQCIgLUZvIiRmaWxlIgorCSAgICAgIHNoaWZ0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCisJICAgICAgc2V0IHggIiRAIiAtRmUiJGZpbGUiCisJICAgICAgc2hpZnQKKwkgICAgICA7OworCSAgZXNhYworCSAgOzsKKwktSSkKKwkgIGVhdD0xCisJICBmdW5jX2ZpbGVfY29udiAiJDIiIG1pbmd3CisJICBzZXQgeCAiJEAiIC1JIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJLUkqKQorCSAgZnVuY19maWxlX2NvbnYgIiR7MSMtSX0iIG1pbmd3CisJICBzZXQgeCAiJEAiIC1JIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJLWwpCisJICBlYXQ9MQorCSAgZnVuY19jbF9kYXNobCAiJDIiCisJICBzZXQgeCAiJEAiICIkbGliIgorCSAgc2hpZnQKKwkgIDs7CisJLWwqKQorCSAgZnVuY19jbF9kYXNobCAiJHsxIy1sfSIKKwkgIHNldCB4ICIkQCIgIiRsaWIiCisJICBzaGlmdAorCSAgOzsKKwktTCkKKwkgIGVhdD0xCisJICBmdW5jX2NsX2Rhc2hMICIkMiIKKwkgIDs7CisJLUwqKQorCSAgZnVuY19jbF9kYXNoTCAiJHsxIy1MfSIKKwkgIDs7CisJLXN0YXRpYykKKwkgIHNoYXJlZD1mYWxzZQorCSAgOzsKKwktV2wsKikKKwkgIGFyZz0kezEjLVdsLH0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgZm9yIGZsYWcgaW4gJGFyZzsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgJGZsYWciCisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIDs7CisJLVhsaW5rZXIpCisJICBlYXQ9MQorCSAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkMiIKKwkgIDs7CisJLSopCisJICBzZXQgeCAiJEAiICIkMSIKKwkgIHNoaWZ0CisJICA7OworCSouY2MgfCAqLkNDIHwgKi5jeHggfCAqLkNYWCB8ICouW2NDXSsrKQorCSAgZnVuY19maWxlX2NvbnYgIiQxIgorCSAgc2V0IHggIiRAIiAtVHAiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwkqLmMgfCAqLmNwcCB8ICouQ1BQIHwgKi5saWIgfCAqLkxJQiB8ICouTGliIHwgKi5PQkogfCAqLm9iaiB8ICouW29PXSkKKwkgIGZ1bmNfZmlsZV9jb252ICIkMSIgbWluZ3cKKwkgIHNldCB4ICIkQCIgIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJKikKKwkgIHNldCB4ICIkQCIgIiQxIgorCSAgc2hpZnQKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBzaGlmdAorICBkb25lCisgIGlmIHRlc3QgLW4gIiRsaW5rZXJfb3B0cyI7IHRoZW4KKyAgICBsaW5rZXJfb3B0cz0iLWxpbmskbGlua2VyX29wdHMiCisgIGZpCisgIGV4ZWMgIiRAIiAkbGlua2VyX29wdHMKKyAgZXhpdCAxCit9CisKK2VhdD0KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgorUmVtb3ZlICctbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCithcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgJ0lOU1RBTEwnLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworICBjbCB8ICpbL1xcXWNsIHwgY2wuZXhlIHwgKlsvXFxdY2wuZXhlICkKKyAgICBmdW5jX2NsX3dyYXBwZXIgIiRAIiAgICAgICMgRG9lc24ndCByZXR1cm4uLi4KKyAgICA7OworZXNhYworCitvZmlsZT0KK2NmaWxlPQorCitmb3IgYXJnCitkbworICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgIGVhdD0KKyAgZWxzZQorICAgIGNhc2UgJDEgaW4KKyAgICAgIC1vKQorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgJy1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCWVhdD0xCisJY2FzZSAkMiBpbgorCSAgKi5vIHwgKi5vYmopCisJICAgIG9maWxlPSQyCisJICAgIDs7CisJICAqKQorCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICouYykKKwljZmlsZT0kMQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICAgICopCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCisgICMgSWYgbm8gJy1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQorICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCisgICMgJy5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyBvay4KKyAgZXhlYyAiJEAiCitmaQorCisjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkICdzfF4uKltcXC9dfHw7IHN8XlthLXpBLVpdOnx8OyBzL1wuYyQvLm8vJ2AKKworIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgorIyBOb3RlOiB1c2UgJ1svXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKK3doaWxlIHRydWU7IGRvCisgIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYnJlYWsKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCit0cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQorCisjIFJ1biB0aGUgY29tcGlsZS4KKyIkQCIKK3JldD0kPworCitpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorICB0ZXN0ICIkY29maWxlIiA9ICIkb2ZpbGUiIHx8IG12ICIkY29maWxlIiAiJG9maWxlIgorZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KKyAgdGVzdCAiJHtjb2ZpbGV9YmoiID0gIiRvZmlsZSIgfHwgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgorZmkKKworcm1kaXIgIiRsb2NrZGlyIgorZXhpdCAkcmV0CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9jb25maWctZG9zLmggYi9hcC9hcHAvYy1hcmVzL3NyYy9jb25maWctZG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5NTk4NwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZy1kb3MuaApAQCAtMCwwICsxLDExMyBAQAorI2lmbmRlZiBIRUFERVJfQ09ORklHX0RPU19ICisjZGVmaW5lIEhFQURFUl9DT05GSUdfRE9TX0gKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICBhcmVzL2NvbmZpZy1kb3MuaCAtIEhhbmQgY3JhZnRlZCBjb25maWcgZmlsZSBmb3IgRE9TICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgUEFDS0FHRSAgImMtYXJlcyIKKworI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9HRVRFTlYgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZICAgICAgMQorI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUICAgICAgIDEKKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPICAgMQorI2RlZmluZSBIQVZFX0xJTUlUU19IICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9ORVRfSUZfSCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfUkVDViAgICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1JFQ1ZGUk9NICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TRU5EICAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1RSRFVQICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NUUklDTVAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSU42X0FERFIgICAxCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgICAgMQorI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgMQorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9USU1FX0ggICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggICAgICAgICAgMQorCisjZGVmaW5lIE5FRURfTUFMTE9DX0ggICAgICAgICAgMQorCisjZGVmaW5lIFJFVFNJR1RZUEUgICAgICAgICAgICAgdm9pZAorI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgICAgIDEKKworLyogUXVhbGlmaWVycyBmb3Igc2VuZCgpLCByZWN2KCksIHJlY3Zmcm9tKCkgYW5kIGdldG5hbWVpbmZvKCkuICovCisKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzEgICAgICAgICBpbnQKKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgICAgICAgICBjb25zdAorI2RlZmluZSBTRU5EX1RZUEVfQVJHMiAgICAgICAgIHZvaWQgKgorI2RlZmluZSBTRU5EX1RZUEVfQVJHMyAgICAgICAgIGludAorI2RlZmluZSBTRU5EX1RZUEVfQVJHNCAgICAgICAgIGludAorI2RlZmluZSBTRU5EX1RZUEVfUkVUViAgICAgICAgIGludAorCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxICAgICAgICAgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyICAgICAgICAgdm9pZCAqCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczICAgICAgICAgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0ICAgICAgICAgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWICAgICAgICAgaW50CisKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxICAgICBpbnQKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyICAgICB2b2lkCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSAgICAgc3RydWN0IHNvY2thZGRyCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEKKworI2RlZmluZSBCU0QKKworI2lmIGRlZmluZWQoX19ISUdIQ19fKSB8fCBcCisgICAgKGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA8IDQpKQorICAjZGVmaW5lIHNzaXplX3QgIGludAorI2VuZGlmCisKKy8qIFRhcmdldCBIQVZFX3ggc2VjdGlvbiAqLworCisjaWYgZGVmaW5lZChESkdQUCkKKyAgI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgICAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX1NUUk5DQVNFQ01QICAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX1NZU19USU1FX0ggICAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0MgIDEKKworICAvKiBCZWNhdXNlIGRqZ3BwIDw9IDIuMDMgZG9lc24ndCBoYXZlIHNucHJpbnRmKCkgZXRjLiAqLworICAjaWYgKERKR1BQX01JTk9SIDwgNCkKKyAgICAjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisgICNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKworI2VsaWYgZGVmaW5lZChfX0hJR0hDX18pCisgICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKyAgI2RlZmluZSBzdHJlcnJvcihlKSBzdHJlcnJvcl9zXygoZSkpCisjZW5kaWYKKworI2lmZGVmIFdBVFQzMgorICAjZGVmaW5lIEhBVkVfQUZfSU5FVDYgICAgICAgICAgICAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IICAgICAgICAgICAgICAgICAxCisgICNkZWZpbmUgSEFWRV9BUlBBX05BTUVTRVJfSCAgICAgICAgICAgICAgMQorICAjZGVmaW5lIEhBVkVfQ0xPU0VfUyAgICAgICAgICAgICAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FICAgICAgICAgICAgICAgICAxCisgICNkZWZpbmUgSEFWRV9ORVREQl9IICAgICAgICAgICAgICAgICAgICAgMQorICAjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IICAgICAgICAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX05FVElORVRfVENQX0ggICAgICAgICAgICAgICAxCisgICNkZWZpbmUgSEFWRV9QRl9JTkVUNiAgICAgICAgICAgICAgICAgICAgMQorICAjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgIDEKKyAgI2RlZmluZSBIQVZFX1NUUlVDVF9BRERSSU5GTyAgICAgICAgICAgICAxCisgICNkZWZpbmUgSEFWRV9TVFJVQ1RfSU42X0FERFIgICAgICAgICAgICAgMQorICAjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONiAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAgICAgICAgICAgICAgICAxCisgICNkZWZpbmUgSEFWRV9TWVNfVUlPX0ggICAgICAgICAgICAgICAgICAgMQorICAjZGVmaW5lIE5TX0lOQUREUlNaICAgICAgICAgICAgICAgICAgICAgIDQKKyAgI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjYgICAgICAgICAxCisjZW5kaWYKKworI3VuZGVmIHdvcmQKKyN1bmRlZiBieXRlCisKKyNlbmRpZiAvKiBIRUFERVJfQ09ORklHX0RPU19IICovCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZy13aW4zMi5oIGIvYXAvYXBwL2MtYXJlcy9zcmMvY29uZmlnLXdpbjMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5NTUyNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZy13aW4zMi5oCkBAIC0wLDAgKzEsMzc3IEBACisjaWZuZGVmIEhFQURFUl9DQVJFU19DT05GSUdfV0lOMzJfSAorI2RlZmluZSBIRUFERVJfQ0FSRVNfQ09ORklHX1dJTjMyX0gKKworLyogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAxMSBieSBEYW5pZWwgU3RlbmJlcmcgZXQgYWwKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKKyAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgYy1hcmVzL2NvbmZpZy13aW4zMi5oIC0gSGFuZCBjcmFmdGVkIGNvbmZpZyBmaWxlIGZvciBXaW5kb3dzICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIEhFQURFUiBGSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQVNTRVJUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9FUlJOT19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19QT0NDX18pCisjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIF9fU0FMRk9SRENfXworI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUgKi8KKy8qICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9USU1FX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykgfHwgZGVmaW5lZChfX0xDQ19fKSB8fCBcCisgICAgZGVmaW5lZChfX1BPQ0NfXykKKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d2luZG93cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XSU5ET1dTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dJTlNPQ0tfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBfX1NBTEZPUkRDX18KKyNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx3czJ0Y3BpcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgX19TQUxGT1JEQ19fCisjZGVmaW5lIEhBVkVfV1MyVENQSVBfSCAxCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBPVEhFUiBIRUFERVIgSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLiAqLworI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworLyogI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgY2xvc2Vzb2NrZXQgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0xPU0VTT0NLRVQgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGVudiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRFTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RuYW1lIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpb2N0bHNvY2tldCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlY21wIGZ1bmN0aW9uLiAqLworLyogI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmR1cCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmljbXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSSUNNUCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNhc2VjbXAgZnVuY3Rpb24uICovCisvKiAjZGVmaW5lIEhBVkVfU1RSTkNBU0VDTVAgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cm5pY21wIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUk5JQ01QIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWN2IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFQ1YgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIGNoYXIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBTT0NLRVQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgY2hhcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzUgc3RydWN0IHNvY2thZGRyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA2IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbmQgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VORCAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzEgU09DS0VUCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfUVVBTF9BUkcyIGNvbnN0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzIgY2hhciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIGludAorCisvKiBTcGVjaWZpY3MgZm9yIHRoZSBXYXR0LTMyIHRjcC9pcCBzdGFjay4gKi8KKyNpZmRlZiBXQVRUMzIKKyAgI2RlZmluZSBTT0NLRVQgICAgICAgICAgICAgIGludAorICAjZGVmaW5lIE5TX0lOQUREUlNaICAgICAgICAgNAorICAjZGVmaW5lIEhBVkVfQVJQQV9OQU1FU0VSX0ggMQorICAjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggICAgMQorICAjZGVmaW5lIEhBVkVfTkVUREJfSCAgICAgICAgMQorICAjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IICAgMQorICAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IICAgMQorICAjZGVmaW5lIEhBVkVfTkVUSU5FVF9UQ1BfSCAgMQorICAjZGVmaW5lIEhBVkVfQUZfSU5FVDYgICAgICAgMQorICAjZGVmaW5lIEhBVkVfUEZfSU5FVDYgICAgICAgMQorICAjZGVmaW5lIEhBVkVfU1RSVUNUX0lONl9BRERSICAgICAxCisgICNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42IDEKKyAgI3VuZGVmIEhBVkVfV0lOU09DS19ICisgICN1bmRlZiBIQVZFX1dJTlNPQ0syX0gKKyAgI3VuZGVmIEhBVkVfV1MyVENQSVBfSAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBUWVBFREVGIFJFUExBQ0VNRU5UUyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIGlmIGluX2FkZHJfdCBpcyBub3QgYW4gYXZhaWxhYmxlICd0eXBlZGVmZWQnIHR5cGUuICovCisjZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCisKKy8qIERlZmluZSB0byB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuICovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisjaWZkZWYgX19jcGx1c3BsdXMKKy8qIENvbXBpbGluZyBoZWFkZXJzIGluIEMrKyBtb2RlIG1lYW5zIGJvb2wgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEhBVkVfQk9PTF9UCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHNzaXplX3QgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlLiAqLworI2lmbmRlZiBfU1NJWkVfVF9ERUZJTkVECisjICBpZiAoZGVmaW5lZChfX1dBVENPTUNfXykgJiYgKF9fV0FUQ09NQ19fID49IDEyNDApKSB8fCBcCisgICAgICBkZWZpbmVkKF9fUE9DQ19fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyAgZWxpZiBkZWZpbmVkKF9XSU42NCkKKyMgICAgZGVmaW5lIF9TU0laRV9UX0RFRklORUQKKyMgICAgZGVmaW5lIHNzaXplX3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgX1NTSVpFX1RfREVGSU5FRAorIyAgICBkZWZpbmUgc3NpemVfdCBpbnQKKyMgIGVuZGlmCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRSBTSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSVUNUIFJFTEFURUQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3QgYWRkcmluZm8uICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX0FERFJJTkZPIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLiAqLworI2lmICFkZWZpbmVkKF9fU0FMRk9SRENfXykgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgc3RydWN0IHRpbWV2YWwuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSIFNQRUNJRklDICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSB0byBhdm9pZCBWUzIwMDUgY29tcGxhaW5pbmcgYWJvdXQgcG9ydGFibGUgQyBmdW5jdGlvbnMuICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCisjICBkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyMgIGRlZmluZSBfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorCisvKiBPZmZpY2lhbGx5LCBNaWNyb3NvZnQncyBXaW5kb3dzIFNESyB2ZXJzaW9ucyA2LlggZG8gbm90IHN1cHBvcnQgV2luZG93cworICAgMjAwMCBhcyBhIHN1cHBvcnRlZCBidWlsZCB0YXJnZXQuIFZTMjAwOCBkZWZhdWx0IGluc3RhbGxhdGlvbnMgcHJvdmlkZQorICAgYW4gZW1iZWRkZWQgV2luZG93cyBTREsgdjYuMEEgYWxvbmcgd2l0aCB0aGUgY2xhaW0gdGhhdCBXaW5kb3dzIDIwMDAgaXMKKyAgIGEgdmFsaWQgYnVpbGQgdGFyZ2V0IGZvciBWUzIwMDguIFBvcHVsYXIgYmVsaWVmIGlzIHRoYXQgYmluYXJpZXMgYnVpbHQKKyAgIHdpdGggVlMyMDA4IHVzaW5nIFdpbmRvd3MgU0RLIHZlcnNpb25zIDYuWCBhbmQgV2luZG93cyAyMDAwIGFzIGEgYnVpbGQKKyAgIHRhcmdldCBhcmUgZnVuY3Rpb25hbC4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkKKyMgIGRlZmluZSBWUzIwMDhfTUlOX1RBUkdFVCAweDA1MDAKKyNlbmRpZgorCisvKiBXaGVuIG5vIGJ1aWxkIHRhcmdldCBpcyBzcGVjaWZpZWQgVlMyMDA4IGRlZmF1bHQgYnVpbGQgdGFyZ2V0IGlzIFdpbmRvd3MKKyAgIFZpc3RhLCB3aGljaCBsZWF2ZXMgb3V0IGV2ZW4gV2luc293cyBYUC4gSWYgbm8gYnVpbGQgdGFyZ2V0IGhhcyBiZWVuIGdpdmVuCisgICBmb3IgVlMyMDA4IHdlIHdpbGwgdGFyZ2V0IHRoZSBtaW5pbXVtIE9mZmljaWFsbHkgc3VwcG9ydGVkIGJ1aWxkIHRhcmdldCwKKyAgIHdoaWNoIGhhcHBlbnMgdG8gYmUgV2luZG93cyBYUC4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkKKyMgIGRlZmluZSBWUzIwMDhfREVGX1RBUkdFVCAgMHgwNTAxCisjZW5kaWYKKworLyogVlMyMDA4IGRlZmF1bHQgdGFyZ2V0IHNldHRpbmdzIGFuZCBtaW5pbXVtIGJ1aWxkIHRhcmdldCBjaGVjay4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkKKyMgIGlmbmRlZiBfV0lOMzJfV0lOTlQKKyMgICAgZGVmaW5lIF9XSU4zMl9XSU5OVCBWUzIwMDhfREVGX1RBUkdFVAorIyAgZW5kaWYKKyMgIGlmbmRlZiBXSU5WRVIKKyMgICAgZGVmaW5lIFdJTlZFUiBWUzIwMDhfREVGX1RBUkdFVAorIyAgZW5kaWYKKyMgIGlmIChfV0lOMzJfV0lOTlQgPCBWUzIwMDhfTUlOX1RBUkdFVCkgfHwgKFdJTlZFUiA8IFZTMjAwOF9NSU5fVEFSR0VUKQorIyAgICBlcnJvciBWUzIwMDggZG9lcyBub3Qgc3VwcG9ydCBXaW5kb3dzIGJ1aWxkIHRhcmdldHMgcHJpb3IgdG8gV2luZG93cyAyMDAwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gbm8gYnVpbGQgdGFyZ2V0IGlzIHNwZWNpZmllZCBQZWxsZXMgQyA1LjAwIGFuZCBsYXRlciBkZWZhdWx0IGJ1aWxkCisgICB0YXJnZXQgaXMgV2luZG93cyBWaXN0YS4gV2Ugb3ZlcnJpZGUgZGVmYXVsdCB0YXJnZXQgdG8gYmUgV2luZG93cyAyMDAwLiAqLworI2lmIGRlZmluZWQoX19QT0NDX18pICYmIChfX1BPQ0NfXyA+PSA1MDApCisjICBpZm5kZWYgX1dJTjMyX1dJTk5UCisjICAgIGRlZmluZSBfV0lOMzJfV0lOTlQgMHgwNTAwCisjICBlbmRpZgorIyAgaWZuZGVmIFdJTlZFUgorIyAgICBkZWZpbmUgV0lOVkVSIDB4MDUwMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBBdmFpbGFiaWxpdHkgb2YgZnJlZWFkZHJpbmZvLCBnZXRhZGRyaW5mbyBhbmQgZ2V0bmFtZWluZm8gZnVuY3Rpb25zIGlzCisgICBxdWl0ZSBjb252b2x1dGVkLCBjb21waWxlciBkZXBlbmRlbnQgYW5kIGV2ZW4gYnVpbGQgdGFyZ2V0IGRlcGVuZGVudC4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfV1MyVENQSVBfSCkKKyMgIGlmIGRlZmluZWQoX19QT0NDX18pCisjICAgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAxCisjICAgIGRlZmluZSBIQVZFX0dFVEFERFJJTkZPICAxCisjICAgIGRlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAxCisjICBlbGlmIGRlZmluZWQoX1dJTjMyX1dJTk5UKSAmJiAoX1dJTjMyX1dJTk5UID49IDB4MDUwMSkKKyMgICAgZGVmaW5lIEhBVkVfRlJFRUFERFJJTkZPIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk8gIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gIDEKKyMgIGVsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDEyMDApCisjICAgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAxCisjICAgIGRlZmluZSBIQVZFX0dFVEFERFJJTkZPICAxCisjICAgIGRlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAxCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fUE9DQ19fKQorIyAgaWZuZGVmIF9NU0NfVkVSCisjICAgIGVycm9yIE1pY3Jvc29mdCBleHRlbnNpb25zIC9aZSBjb21waWxlciBvcHRpb24gaXMgcmVxdWlyZWQKKyMgIGVuZGlmCisjICBpZm5kZWYgX19QT0NDX19PTEROQU1FUworIyAgICBlcnJvciBDb21wYXRpYmlsaXR5IG5hbWVzIC9HbyBjb21waWxlciBvcHRpb24gaXMgcmVxdWlyZWQKKyMgIGVuZGlmCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgSVBWNiBDT01QQVRJQklMSVRZICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYWRkcmVzcyBmYW1pbHkgQUZfSU5FVDYuICovCisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjZGVmaW5lIEhBVkVfQUZfSU5FVDYgMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBwcm90b2NvbCBmYW1pbHkgUEZfSU5FVDYuICovCisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjZGVmaW5lIEhBVkVfUEZfSU5FVDYgMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3QgaW42X2FkZHIuICovCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjZGVmaW5lIEhBVkVfU1RSVUNUX0lONl9BRERSIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX2luNi4gKi8KKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42IDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgc29ja2FkZHJfaW42IHdpdGggc2NvcGVpZC4gKi8KKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBGSVhNRTogQSBwcm9wZXIgY29uZmlnLXdpbjMyY2UuaCBzaG91bGQgYmUgY3JlYXRlZCB0byBob2xkIHRoZXNlICovCisKKy8qCisgKiAgU3lzdGVtIGVycm9yIGNvZGVzIGZvciBXaW5kb3dzIENFCisgKi8KKworI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoSEFWRV9FUlJOT19IKQorIyAgZGVmaW5lIEVOT0VOVCAgICBFUlJPUl9GSUxFX05PVF9GT1VORAorIyAgZGVmaW5lIEVTUkNIICAgICBFUlJPUl9QQVRIX05PVF9GT1VORAorIyAgZGVmaW5lIEVOT01FTSAgICBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWQorIyAgZGVmaW5lIEVOT1NQQyAgICBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUgorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ0FSRVNfQ09ORklHX1dJTjMyX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZy5ndWVzcyBiL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZy5ndWVzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU5MjUwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTQ0MSBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxNS0wOC0yMCcKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CisjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KKyMKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyOyBtYWludGFpbmVkIHNpbmNlIDIwMDAgYnkgQmVuIEVsbGlzdG9uLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisjCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LgorCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgMTk5Mi0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKK2Nhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KK0xpbnV4fEdOVXxHTlUvKikKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorCUxJQkM9Z251CisKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8LUVPRiA+ICRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKwlMSUJDPXVjbGliYworCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorCUxJQkM9ZGlldGxpYmMKKwkjZWxzZQorCUxJQkM9Z251CisJI2VuZGlmCisJRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJyB8IHNlZCAncywgLCxnJ2AKKwk7OworZXNhYworCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKHVuYW1lIC1wIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgZWNobyB1bmtub3duKWAKKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKKwkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OworCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OworCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7CisJICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKKwkgICAgZWFybXYqKQorCQlhcmNoPWBlY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfSB8IHNlZCAtZSAncyxeZVwoYXJtdlswLTldXCkuKiQsXDEsJ2AKKwkJZW5kaWFuPWBlY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfSB8IHNlZCAtbmUgJ3MsXi4qXChlYlwpJCxcMSxwJ2AKKwkJbWFjaGluZT0ke2FyY2h9JHtlbmRpYW59LXVua25vd24KKwkJOzsKKwkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtKnxlYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCQlvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBEZXRlcm1pbmUgQUJJIHRhZ3MuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBlYXJtKikKKwkJZXhwcj0ncy9eZWFybXZbMC05XS8tZWFiaS87cy9lYiQvLycKKwkJYWJpPWBlY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfSB8IHNlZCAtZSAiJGV4cHIiYAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9bLV9dLiovLycgfCBjdXQgLWQuIC1mMSwyYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0ke2FiaX0iCisJZXhpdCA7OworICAgICo6Qml0cmlnOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvQml0cmlnLi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLWJpdHJpZyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpPcGVuQlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6TWlyQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29ydGl4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb3J0aXgKKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCSMgUmVzZXQgRVhJVCB0cmFwIGJlZm9yZSBleGl0aW5nIHRvIGF2b2lkIHNwdXJpb3VzIG5vbi16ZXJvIGV4aXQgY29kZS4KKwlleGl0Y29kZT0kPworCXRyYXAgJycgMAorCWV4aXQgJGV4aXRjb2RlIDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKwllY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybSo6cmlzY29zOio6Knxhcm0qOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKwllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vbHNscHAgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vbHNscHAgLUxxYyBib3MucnRlLmxpYmMgfAorCQkJICAgYXdrIC1GOiAneyBwcmludCAkMyB9JyB8IHNlZCBzL1swLTldKiQvMC9gCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorCQkgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisJCSAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKwkJICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisJCSAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorCQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKwkJCWNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorCQkJICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisJCQkgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorCQkJZXNhYyA7OworCQkgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCisJCSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkjZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKwkJICAgIHN3aXRjaCAoY3B1KQorCQkJeworCQkJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJCSAgICBzd2l0Y2ggKGJpdHMpCisJCQkJeworCQkJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKwkJCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisJCQkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCQkJfSBicmVhazsKKwkJI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKwkJCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKwkJI2VuZGlmCisJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKwkJCX0KKwkJICAgIGV4aXQgKDApOworCQl9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIC1xIF9fTFA2NF9fCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisJZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWNhc2UgJHtVTkFNRV9QUk9DRVNTT1J9IGluCisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1c2NCo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3c2NAorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgICo6TVNZUyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXN5cworCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisJIyB1bmFtZSAtbSBpbmNsdWRlcyAiLXBjIiBvbiB0aGlzIHN5c3RlbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHg4NikKKwkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCisJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tJHtMSUJDfWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYWFyY2g2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhYXJjaDY0X2JlOkxpbnV4Oio6KikKKwlVTkFNRV9NQUNISU5FPWFhcmNoNjRfYmUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImdudWxpYmMxIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcmM6TGludXg6KjoqIHwgYXJjZWI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJtKjpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXworCXRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWVsc2UKKwkgICAgaWYgZWNobyBfX0FSTV9QQ1NfVkZQIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJfCBncmVwIC1xIF9fQVJNX1BDU19WRlAKKwkgICAgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaQorCSAgICBlbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpaGYKKwkgICAgZmkKKwlmaQorCWV4aXQgOzsKKyAgICBhdnIzMio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGUyazpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaGV4YWdvbjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KKwk7OworICAgIG9wZW5yaXNjKjpMaW51eDoqOiopCisJZWNobyBvcjFrLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBvcjMyOkxpbnV4Oio6KiB8IG9yMWsqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjNjRsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjbGU6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgdGlsZSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgeDg2XzY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KKwkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCisJIyBzeXNuYW1lIGFuZCBub2RlbmFtZS4KKwllY2hvIGkzODYtc2VxdWVudC1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlVOSVhfU1Y6NC4yTVA6Mi4qKQorCSMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKwkjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisJIyBJIGFtIG5vdCBwb3NpdGl2ZSB0aGF0IG90aGVyIFNWUjQgc3lzdGVtcyB3b24ndCBtYXRjaCB0aGlzLAorCSMgSSBqdXN0IGhhdmUgdG8gaG9wZS4gIC0tIHJtcy4KKwkjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9CisJZmkKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgorCWZpCisJZXhpdCA7OworICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgorCSMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0CisJIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KKwkjIE5vdGU6IHdoYXRldmVyIHRoaXMgaXMsIGl0IE1VU1QgYmUgdGhlIHNhbWUgYXMgd2hhdCBjb25maWcuc3ViCisJIyBwcmludHMgZm9yIHRoZSAiZGpncHAiIGhvc3QsIG9yIGVsc2UgR0RCIGNvbmZpZ3VyeSB3aWxsIGRlY2lkZSB0aGF0CisJIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCisJZWNobyBpNTg2LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCisJT1NfUkVMPScuMycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0CisJZWxzZQorCQllY2hvIG5zMzJrLXNuaS1zeXN2CisJZmkKKwlleGl0IDs7CisgICAgUEVOVElVTToqOjQuMCo6KikJIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKKwkJCSMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KKwllY2hvIGk1ODYtdW5pc3lzLXN5c3Y0CisJZXhpdCA7OworICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQorCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKwkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KKwllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgKjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICBtYzY4KjpBL1VYOio6KikKKwllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCisJZWNobyBtaXBzLXNvbnktbmV3c29zNgorCWV4aXQgOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KKwkJZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWVsc2UKKwkJZWNobyBtaXBzLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7CisgICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6SGFpa3U6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24taGFpa3UKKwlleGl0IDs7CisgICAgU1gtNDpTVVBFUi1VWDoqOiopCisJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTU6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g1LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC02OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ni1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNzpTVVBFUi1VWDoqOiopCisJZWNobyBzeDctbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTg6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04UjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDhyLW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpSaGFwc29keToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgorCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYworCWZpCisJaWYgdGVzdCBgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuLiovLydgIC1sZSAxMCA7IHRoZW4KKwkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCWlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQkgICAgZXNhYworCQlmaQorCSAgICBmaQorCWVsaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBpMzg2IDsgdGhlbgorCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBvbiBPUyBYIDEwLjksIGFzIGl0IHNoaXBzIHdpdGggYSBzdHViCisJICAgICMgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0IHByb21wdGluZyB0byBpbnN0YWxsCisJICAgICMgZGV2ZWxvcGVyIHRvb2xzLiAgQW55IHN5c3RlbSBydW5uaW5nIE1hYyBPUyBYIDEwLjcgb3IKKwkgICAgIyBsYXRlciAoRGFyd2luIDExIGFuZCBsYXRlcikgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIDY0LWJpdAorCSAgICAjIHByb2Nlc3Nvci4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB0aGUgQVJNIHZlcnNpb24gb2YgRGFyd2luCisJICAgICMgdGhhdCBBcHBsZSB1c2VzIGluIHBvcnRhYmxlIGRldmljZXMuCisJICAgIFVOQU1FX1BST0NFU1NPUj14ODZfNjQKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1pMzg2CisJCVVOQU1FX01BQ0hJTkU9cGMKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpRTlg6Kjo0KikKKwllY2hvIGkzODYtcGMtcW54CisJZXhpdCA7OworICAgIE5FTy0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5lby10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU0UtKjpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKwllY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRyYWdvbkZseToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCWV4aXQgOzsKKyAgICAqOipWTVM6KjoqKQorCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OworICAgIHg4Nl82NDpWTWtlcm5lbDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZXN4CisJZXhpdCA7OworZXNhYworCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKK2FuZAorICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvY29uZmlnLnN1YiBiL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZy5zdWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjYzk2NgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxODEzIEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTUtMDgtMjAnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAorIyBwcm9ncmFtLiAgVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IDE5OTItMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCisjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCitjYXNlICRtYXliZV9vcyBpbgorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKyAgbGludXgtbXVzbCogfCBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgIGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBuZXRic2QqLWVhYmkqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICBhbmRyb2lkLWxpbnV4KQorICAgIG9zPS1saW51eC1hbmRyb2lkCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AtdW5rbm93bgorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKikKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktYmx1ZWdlbmUqKQorCQlvcz0tY25rCisJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNyZGIpCisJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1oaXV4KikKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvKikKKwkJb3M9LXNjbzMuMnYyCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1pc2MpCisJCW9zPS1pc2MyLjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1jbGl4KikKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKKwkJOzsKKwktaXNjKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1seW54KjE3OCkKKwkJb3M9LWx5bnhvczE3OAorCQk7OworCS1seW54KjUpCisJCW9zPS1seW54b3M1CisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhYXJjaDY0IHwgYWFyY2g2NF9iZSBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcmNlYiBcCisJfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyLThdIHwgYXJtdlszLThdW2xiXSB8IGFybXY3W2FybV0gXAorCXwgYXZyIHwgYXZyMzIgXAorCXwgYmEgXAorCXwgYmUzMiB8IGJlNjQgXAorCXwgYmZpbiBcCisJfCBjNHggfCBjODA1MSB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGUyayB8IGVwaXBoYW55IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IHwgZnQzMiBcCisJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorCXwgaGV4YWdvbiBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgazFvbSBcCisJfCBsZTMyIHwgbGU2NCBcCisJfCBsbTMyIFwKKwl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAorCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1pY3JvYmxhemVlbCB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAorCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJfCBtaXBzMTYgXAorCXwgbWlwczY0IHwgbWlwczY0ZWwgXAorCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAorCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAorCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAorCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAorCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAorCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAorCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwl8IG1pcHNpc2EzMnI2IHwgbWlwc2lzYTMycjZlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAorCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAorCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcGVuOCB8IG9yMWsgfCBvcjFrbmQgfCBvcjMyIFwKKwl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAorCXwgcHlyYW1pZCBcCisJfCByaXNjdjMyIHwgcmlzY3Y2NCBcCisJfCBybDc4IHwgcnggXAorCXwgc2NvcmUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMjM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgXAorCXwgdGFob2UgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSB8IHY4NTBlMSB8IHY4NTBlMiB8IHY4NTBlcyB8IHY4NTBlMnYzIFwKKwl8IHZpc2l1bSBcCisJfCB3ZTMyayBcCisJfCB4ODYgfCB4YzE2eCB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGsgfCB6ODApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCWM1NHgpCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KKwkJOzsKKwljNTV4KQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCTs7CisJYzZ4KQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJOzsKKwlsZW9ufGxlb25bMy05XSkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy0kYmFzaWNfbWFjaGluZQorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwlzdHJvbmdhcm0gfCB0aHVtYiB8IHhzY2FsZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQk7OworCXhnYXRlKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwl4c2NhbGVlYikKKwkJYmFzaWNfbWFjaGluZT1hcm1lYi11bmtub3duCisJCTs7CisKKwl4c2NhbGVlbCkKKwkJYmFzaWNfbWFjaGluZT1hcm1lbC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWFyY2g2NC0qIHwgYWFyY2g2NF9iZS0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogfCBhcmNlYi0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJhLSogXAorCXwgYmUzMi0qIHwgYmU2NC0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIFwKKwl8IGM4MDUxLSogfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZTJrLSogfCBlbHhzaS0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGg4MzAwLSogfCBoODUwMC0qIFwKKwl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBoZXhhZ29uLSogXAorCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKwl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGsxb20tKiBcCisJfCBsZTMyLSogfCBsZTY0LSogXAorCXwgbG0zMi0qIFwKKwl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIFwKKwl8IG1pY3JvYmxhemUtKiB8IG1pY3JvYmxhemVlbC0qIFwKKwl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKwl8IG1pcHMxNi0qIFwKKwl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKKwl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCisJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKKwl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCisJfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKKwl8IG1pcHNpc2EzMnI2LSogfCBtaXBzaXNhMzJyNmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0cjYtKiB8IG1pcHNpc2E2NHI2ZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzcjU5MDAtKiB8IG1pcHNyNTkwMGVsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuZHMzMi0qIHwgbmRzMzJsZS0qIHwgbmRzMzJiZS0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogfCBuaW9zMmViLSogfCBuaW9zMmVsLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcGVuOC0qIFwKKwl8IG9yMWsqLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIFwKKwl8IHB5cmFtaWQtKiBcCisJfCByaXNjdjMyLSogfCByaXNjdjY0LSogXAorCXwgcmw3OC0qIHwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdjEtKiB8IHN4Ki0qIFwKKwl8IHRhaG9lLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdGlsZSotKiBcCisJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdjg1MGUxLSogfCB2ODUwZXMtKiB8IHY4NTBlMi0qIHwgdjg1MGUydjMtKiBcCisJfCB2YXgtKiBcCisJfCB2aXNpdW0tKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAorCXwgeW1wLSogXAorCXwgejhrLSogfCB6ODAtKikKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCisJeHRlbnNhKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCisJMzg2YnNkKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tYnNkCisJCTs7CisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBwYzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWF0dAorCQk7OworCTNiKikKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlhMjlraGlmKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisgICAgICAgIGFzbWpzKQorCQliYXNpY19tYWNoaW5lPWFzbWpzLXVua25vd24KKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKKwljNTR4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzU1eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM2eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKKwljb252ZXgtYzEpCisJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzIpCisJCWJhc2ljX21hY2hpbmU9YzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzMyKQorCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzQpCisJCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzOCkKKwkJYmFzaWNfbWFjaGluZT1jMzgtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljcmF5IHwgajkwKQorCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljcmF5bnYpCisJCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKKwkJb3M9LXVuaWNvc21wCisJCTs7CisJY3IxNiB8IGNyMTYtKikKKwkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWNyZHMgfCB1bm9zKQorCQliYXNpY19tYWNoaW5lPW02OGstY3JkcworCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJZGEzMCB8IGRhMzAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJOzsKKwlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKKwlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAorCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQorCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKKwkJOzsKKwlkZWx0YTg4KQorCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKKwkJb3M9LXN5c3YzCisJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKKwlkamdwcCkKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCW9zPS1tc2Rvc2RqZ3BwCisJCTs7CisJZHB4MjAgfCBkcHgyMC0qKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCisJCW9zPS1ib3N4CisJCTs7CisJZHB4MiogfCBkcHgyKi1idWxsKQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjMKKwkJOzsKKwllYm1vbjI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tZWJtb24KKwkJOzsKKwllbHhzaSkKKwkJYmFzaWNfbWFjaGluZT1lbHhzaS1lbHhzaQorCQlvcz0tYnNkCisJCTs7CisJZW5jb3JlIHwgdW1heCB8IG1tYXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstZW5jb3JlCisJCTs7CisJZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQorCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCWZ4MjgwMCkKKwkJYmFzaWNfbWFjaGluZT1pODYwLWFsbGlhbnQKKwkJOzsKKwlnZW5peCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1ucworCQk7OworCWdtaWNybykKKwkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybworCQlvcz0tc3lzdgorCQk7OworCWdvMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tZ28zMgorCQk7OworCWgzMDUwciogfCBoaXV4KikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwloODMwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloODMwMHhyYXkpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0teHJheQorCQk7OworCWg4NTAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWhhcnJpcykKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tc3lzdjMKKwkJOzsKKwlocDMwMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDMwMGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ic2QKKwkJOzsKKwlocDMwMGhwdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0taHB1eAorCQk7OworCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWsyWzAtOV1bMC05XSB8IGhwOWszMVswLTldKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1ocAorCQk7OworCWhwOWszWzItOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHBwYS1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJaHBwYW9zZikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1vc2YKKwkJOzsKKwlocHBybykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlpMzcwLWlibSogfCBpYm0qKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCTs7CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbGVvbi0qfGxlb25bMy05XS0qKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzLy0uKi8vJ2AKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSopCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQlvcz0tbWluZ3c2NAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1veGllYm94KQorCQliYXNpY19tYWNoaW5lPW1veGllLXVua25vd24KKwkJb3M9LW1veGllYm94CisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW1zeXMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbXN5cworCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmFjbCkKKwkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJb3M9LW5hY2wKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQk7OworCXBwYy0qIHwgcHBjYmUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcyB8IHJkb3M2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyZG9zMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKKwkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIHwgLWNsb3VkYWJpKiB8IC1zb3J0aXgqIFwKKwkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAorCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAorCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKKwkgICAgICB8IC1iaXRyaWcqIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1taW5ndzY0KiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LW11c2wqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIHwgLW1veGllYm94KiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyogfCAtdGlydG9zKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworCS1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5hY2wqKQorCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworCXNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKwljNHgtKiB8IHRpYzR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJYzgwNTEtKikKKwkJb3M9LWVsZgorCQk7OworCWhleGFnb24tKikKKwkJb3M9LWVsZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvY29uZmlndXJlIGIvYXAvYXBwL2MtYXJlcy9zcmMvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzYzUxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9jb25maWd1cmUKQEAgLTAsMCArMSwzNDc0NSBAQAorIyEgL2Jpbi9zaAorIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIGMtYXJlcyAxLjEyLjAuCisjCisjIFJlcG9ydCBidWdzIHRvIDxjLWFyZXMgbWFpbGluZyBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzPi4KKyMKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgIFhDX0NPTkZJR1VSRV9QUkVBTUJMRSB2ZXI6IDEuMCAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK3hjX2NvbmZpZ3VyZV9wcmVhbWJsZV92ZXJfbWFqb3I9JzEnCit4Y19jb25maWd1cmVfcHJlYW1ibGVfdmVyX21pbm9yPScwJworCisjCisjIFNldCBJRlMgdG8gc3BhY2UsIHRhYiBhbmQgbmV3bGluZS4KKyMKKworeGNfc3BhY2U9JyAnCit4Y190YWI9JwknCit4Y19uZXdsaW5lPScKKycKK0lGUz0iJHhjX3NwYWNlJHhjX3RhYiR4Y19uZXdsaW5lIgorCisjCisjIFNldCBpbnRlcm5hdGlvbmFsaXphdGlvbiBiZWhhdmlvciB2YXJpYWJsZXMuCisjCisKK0xBTkc9J0MnCitMQ19BTEw9J0MnCitMQU5HVUFHRT0nQycKK2V4cG9ydCBMQU5HCitleHBvcnQgTENfQUxMCitleHBvcnQgTEFOR1VBR0UKKworIworIyBTb21lIHVzZWZ1bCB2YXJpYWJsZXMuCisjCisKK3hjX21zZ193YXJuPSdjb25maWd1cmU6IFdBUk5JTkc6JworeGNfbXNnX2FicnQ9J0NhbiBub3QgY29udGludWUuJworeGNfbXNnX2Vycj0nY29uZmlndXJlOiBlcnJvcjonCisKKyMKKyMgVmVyaWZ5IHRoYXQgJ2VjaG8nIGNvbW1hbmQgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgYWJvcnQuCisjCisKK3hjX3RzdF9zdHI9J3Vua25vd24nCisoYGVjaG8gIiR4Y190c3Rfc3RyIiA+L2Rldi9udWxsIDI+JjFgKSAmJiB4Y190c3Rfc3RyPSdzdWNjZXNzJworY2FzZSAieCR4Y190c3Rfc3RyIiBpbiAjICgoCisgIHhzdWNjZXNzKQorICAgIDoKKyAgICA7OworICAqKQorICAgICMgVHJ5IGJ1aWx0LWluIGVjaG8sIGFuZCBmYWlsLgorICAgIGVjaG8gIiR4Y19tc2dfZXJyICdlY2hvJyBjb21tYW5kIG5vdCBmb3VuZC4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworCisjCisjIFZlcmlmeSB0aGF0ICd0ZXN0JyBjb21tYW5kIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGFib3J0LgorIworCit4Y190c3Rfc3RyPSd1bmtub3duJworKGB0ZXN0IC1uICIkeGNfdHN0X3N0ciIgPi9kZXYvbnVsbCAyPiYxYCkgJiYgeGNfdHN0X3N0cj0nc3VjY2VzcycKK2Nhc2UgIngkeGNfdHN0X3N0ciIgaW4gIyAoKAorICB4c3VjY2VzcykKKyAgICA6CisgICAgOzsKKyAgKikKKyAgICBlY2hvICIkeGNfbXNnX2VyciAndGVzdCcgY29tbWFuZCBub3QgZm91bmQuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworIworIyBWZXJpZnkgdGhhdCAnUEFUSCcgdmFyaWFibGUgaXMgc2V0LCBvdGhlcndpc2UgYWJvcnQuCisjCisKK3hjX3RzdF9zdHI9J3Vua25vd24nCisoYHRlc3QgLW4gIiRQQVRIIiA+L2Rldi9udWxsIDI+JjFgKSAmJiB4Y190c3Rfc3RyPSdzdWNjZXNzJworY2FzZSAieCR4Y190c3Rfc3RyIiBpbiAjICgoCisgIHhzdWNjZXNzKQorICAgIDoKKyAgICA7OworICAqKQorICAgIGVjaG8gIiR4Y19tc2dfZXJyICdQQVRIJyB2YXJpYWJsZSBub3Qgc2V0LiAkeGNfbXNnX2FicnQiID4mMgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKKyMKKyMgVmVyaWZ5IHRoYXQgJ2V4cHInIGNvbW1hbmQgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgYWJvcnQuCisjCisKK3hjX3RzdF9zdHI9J3Vua25vd24nCit4Y190c3Rfc3RyPWBleHByICIkeGNfdHN0X3N0ciIgOiAnLionIDI+L2Rldi9udWxsYAorY2FzZSAieCR4Y190c3Rfc3RyIiBpbiAjICgoCisgIHg3KQorICAgIDoKKyAgICA7OworICAqKQorICAgIGVjaG8gIiR4Y19tc2dfZXJyICdleHByJyBjb21tYW5kIG5vdCBmb3VuZC4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworCisjCisjIFZlcmlmeSB0aGF0ICdzZWQnIHV0aWxpdHkgaXMgZm91bmQgd2l0aGluICdQQVRIJywgb3RoZXJ3aXNlIGFib3J0LgorIworCit4Y190c3Rfc3RyPSd1bmtub3duJworeGNfdHN0X3N0cj1gZWNobyAiJHhjX3RzdF9zdHIiIDI+L2Rldi9udWxsIFwKKyAgfCBzZWQgLWUgJ3M6dW5rbm93bjpzdWNjZXNzOicgMj4vZGV2L251bGxgCitjYXNlICJ4JHhjX3RzdF9zdHIiIGluICMgKCgKKyAgeHN1Y2Nlc3MpCisgICAgOgorICAgIDs7CisgICopCisgICAgZWNobyAiJHhjX21zZ19lcnIgJ3NlZCcgdXRpbGl0eSBub3QgZm91bmQgaW4gJ1BBVEgnLiAkeGNfbXNnX2FicnQiID4mMgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKKyMKKyMgVmVyaWZ5IHRoYXQgJ2dyZXAnIHV0aWxpdHkgaXMgZm91bmQgd2l0aGluICdQQVRIJywgb3RoZXJ3aXNlIGFib3J0LgorIworCit4Y190c3Rfc3RyPSd1bmtub3duJworKGBlY2hvICIkeGNfdHN0X3N0ciIgMj4vZGV2L251bGwgXAorICB8IGdyZXAgJ3Vua25vd24nID4vZGV2L251bGwgMj4mMWApICYmIHhjX3RzdF9zdHI9J3N1Y2Nlc3MnCitjYXNlICJ4JHhjX3RzdF9zdHIiIGluICMgKCgKKyAgeHN1Y2Nlc3MpCisgICAgOgorICAgIDs7CisgICopCisgICAgZWNobyAiJHhjX21zZ19lcnIgJ2dyZXAnIHV0aWxpdHkgbm90IGZvdW5kIGluICdQQVRIJy4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworCisjCisjIFZlcmlmeSB0aGF0ICd0cicgdXRpbGl0eSBpcyBmb3VuZCB3aXRoaW4gJ1BBVEgnLCBvdGhlcndpc2UgYWJvcnQuCisjCisKK3hjX3RzdF9zdHI9IiR7eGNfdGFifTk4czd1NmM1YzRlM3MyczEwIgoreGNfdHN0X3N0cj1gZWNobyAiJHhjX3RzdF9zdHIiIDI+L2Rldi9udWxsIFwKKyAgfCB0ciAtZCAiMDEyMzQ1Njc4OSR4Y190YWIiIDI+L2Rldi9udWxsYAorY2FzZSAieCR4Y190c3Rfc3RyIiBpbiAjICgoCisgIHhzdWNjZXNzKQorICAgIDoKKyAgICA7OworICAqKQorICAgIGVjaG8gIiR4Y19tc2dfZXJyICd0cicgdXRpbGl0eSBub3QgZm91bmQgaW4gJ1BBVEgnLiAkeGNfbXNnX2FicnQiID4mMgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKKyMKKyMgVmVyaWZ5IHRoYXQgJ3djJyB1dGlsaXR5IGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydC4KKyMKKworeGNfdHN0X3N0cj0ndW5rbm93biB1bmtub3duIHVua25vd24gdW5rbm93bicKK3hjX3RzdF9zdHI9YGVjaG8gIiR4Y190c3Rfc3RyIiAyPi9kZXYvbnVsbCBcCisgIHwgd2MgLXcgMj4vZGV2L251bGwgfCB0ciAtZCAiJHhjX3NwYWNlJHhjX3RhYiIgMj4vZGV2L251bGxgCitjYXNlICJ4JHhjX3RzdF9zdHIiIGluICMgKCgKKyAgeDQpCisgICAgOgorICAgIDs7CisgICopCisgICAgZWNobyAiJHhjX21zZ19lcnIgJ3djJyB1dGlsaXR5IG5vdCBmb3VuZCBpbiAnUEFUSCcuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworIworIyBWZXJpZnkgdGhhdCAnY2F0JyB1dGlsaXR5IGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydC4KKyMKKworeGNfdHN0X3N0cj0ndW5rbm93bicKK3hjX3RzdF9zdHI9YGNhdCA8PF9FT1QgMj4vZGV2L251bGwgXAorICB8IHdjIC1sIDI+L2Rldi9udWxsIHwgdHIgLWQgIiR4Y19zcGFjZSR4Y190YWIiIDI+L2Rldi9udWxsCit1bmtub3duCit1bmtub3duCit1bmtub3duCitfRU9UYAorY2FzZSAieCR4Y190c3Rfc3RyIiBpbiAjICgoCisgIHgzKQorICAgIDoKKyAgICA7OworICAqKQorICAgIGVjaG8gIiR4Y19tc2dfZXJyICdjYXQnIHV0aWxpdHkgbm90IGZvdW5kIGluICdQQVRIJy4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworCisjCisjIEF1dG8tZGV0ZWN0IGFuZCBzZXQgJ1BBVEhfU0VQQVJBVE9SJywgdW5sZXNzIGl0IGlzIGFscmVhZHkgbm9uLWVtcHR5IHNldC4KKyMKKworIyBEaXJlY3RvcnkgY291bnQgaW4gJ1BBVEgnIHdoZW4gdXNpbmcgYSBjb2xvbiBzZXBhcmF0b3IuCit4Y190c3RfZGlyc19jb2w9J3gnCit4Y190c3RfcHJldl9JRlM9JElGUzsgSUZTPSc6JworZm9yIHhjX3RzdF9kaXIgaW4gJFBBVEg7IGRvCisgIElGUz0keGNfdHN0X3ByZXZfSUZTCisgIHhjX3RzdF9kaXJzX2NvbD0ieCR4Y190c3RfZGlyc19jb2wiCitkb25lCitJRlM9JHhjX3RzdF9wcmV2X0lGUworeGNfdHN0X2RpcnNfY29sPWBleHByICIkeGNfdHN0X2RpcnNfY29sIiA6ICcuKidgCisKKyMgRGlyZWN0b3J5IGNvdW50IGluICdQQVRIJyB3aGVuIHVzaW5nIGEgc2VtaWNvbG9uIHNlcGFyYXRvci4KK3hjX3RzdF9kaXJzX3NlbT0neCcKK3hjX3RzdF9wcmV2X0lGUz0kSUZTOyBJRlM9JzsnCitmb3IgeGNfdHN0X2RpciBpbiAkUEFUSDsgZG8KKyAgSUZTPSR4Y190c3RfcHJldl9JRlMKKyAgeGNfdHN0X2RpcnNfc2VtPSJ4JHhjX3RzdF9kaXJzX3NlbSIKK2RvbmUKK0lGUz0keGNfdHN0X3ByZXZfSUZTCit4Y190c3RfZGlyc19zZW09YGV4cHIgIiR4Y190c3RfZGlyc19zZW0iIDogJy4qJ2AKKworaWYgdGVzdCAkeGNfdHN0X2RpcnNfc2VtIC1lcSAkeGNfdHN0X2RpcnNfY29sOyB0aGVuCisgICMgV2hlbiBib3RoIGNvdW50aW5nIG1ldGhvZHMgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgd2UgZG8gbm90IHdhbnQgdG8KKyAgIyBjaG9zZSBvbmUgb3ZlciB0aGUgb3RoZXIsIGFuZCBjb25zaWRlciBhdXRvLWRldGVjdGlvbiBub3QgcG9zc2libGUuCisgIGlmIHRlc3QgLXogIiRQQVRIX1NFUEFSQVRPUiI7IHRoZW4KKyAgICAjIFN0b3AgZGVhZCB1bnRpbCB1c2VyIHByb3ZpZGVzICdQQVRIX1NFUEFSQVRPUicgZGVmaW5pdGlvbi4KKyAgICBlY2hvICIkeGNfbXNnX2VyciAnUEFUSF9TRVBBUkFUT1InIHZhcmlhYmxlIG5vdCBzZXQuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgIGZpCitlbHNlCisgICMgU2VwYXJhdG9yIHdpdGggdGhlIGdyZWF0ZXIgZGlyZWN0b3J5IGNvdW50IGlzIHRoZSBhdXRvLWRldGVjdGVkIG9uZS4KKyAgaWYgdGVzdCAkeGNfdHN0X2RpcnNfc2VtIC1ndCAkeGNfdHN0X2RpcnNfY29sOyB0aGVuCisgICAgeGNfdHN0X2F1dG9fc2VwYXJhdG9yPSc7JworICBlbHNlCisgICAgeGNfdHN0X2F1dG9fc2VwYXJhdG9yPSc6JworICBmaQorICBpZiB0ZXN0IC16ICIkUEFUSF9TRVBBUkFUT1IiOyB0aGVuCisgICAgIyBTaW1wbHkgdXNlIHRoZSBhdXRvLWRldGVjdGVkIG9uZSB3aGVuIG5vdCBhbHJlYWR5IHNldC4KKyAgICBQQVRIX1NFUEFSQVRPUj0keGNfdHN0X2F1dG9fc2VwYXJhdG9yCisgIGVsaWYgdGVzdCAieCRQQVRIX1NFUEFSQVRPUiIgIT0gIngkeGNfdHN0X2F1dG9fc2VwYXJhdG9yIjsgdGhlbgorICAgIGVjaG8gIiR4Y19tc2dfd2FybiAnUEFUSF9TRVBBUkFUT1InIGRvZXMgbm90IG1hdGNoIGF1dG8tZGV0ZWN0ZWQgb25lLiIgPiYyCisgIGZpCitmaQoreGNfUEFUSF9TRVBBUkFUT1I9JFBBVEhfU0VQQVJBVE9SCisKK3hjX2NvbmZpZ3VyZV9wcmVhbWJsZV9yZXN1bHQ9J3llcycKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKyMgVXNlIGEgcHJvcGVyIGludGVybmFsIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGVuc3VyZSB3ZSBkb24ndCBmYWxsCisgICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KKyAgaWYgdGVzdCB4IiR7X2FzX2Nhbl9yZWV4ZWN9IiAhPSB4bm8gJiYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKyAgICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjOworICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorYXNfZm5fZXhpdCAyNTUKKyAgZmkKKyAgIyBXZSBkb24ndCB3YW50IHRoaXMgdG8gcHJvcGFnYXRlIHRvIG90aGVyIHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgICB7IF9hc19jYW5fcmVleGVjPTsgdW5zZXQgX2FzX2Nhbl9yZWV4ZWM7fQoraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCit0ZXN0IC14IC8gfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxCisKKyAgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cJHtCQVNIX1ZFUlNJT04rc2V0fVwiIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgXCJYXGBwcmludGYgJXMgXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiIFxcCisgICAgICB8fCB0ZXN0IFwiWFxgcHJpbnQgLXIgLS0gXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiICkgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorZXhpdCAyNTUKK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQgYy1hcmVzIG1haWxpbmcKKyQwOiBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzIGFib3V0CiskMDogeW91ciBzeXN0ZW0sIGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZQorJDA6IHRoaXMgbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseQorJDA6IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCisgIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvWyRdTElORU5PLz0KKyAgJyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisgICAgICB0IGxpbmVubworICAgICAgYgorICAgICAgOmxpbmVubworICAgICAgTgorICAgICAgOmxvb3AKKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgdCBsb29wCisgICAgICBzLy1cbi4qLy8KKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQorCisgICMgSWYgd2UgaGFkIHRvIHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMLCB3ZSdyZSBlbnN1cmVkIHRvIGhhdmUKKyAgIyBhbHJlYWR5IGRvbmUgdGhhdCwgc28gZW5zdXJlIHdlIGRvbid0IHRyeSB0byBkbyBzbyBhZ2FpbiBhbmQgZmFsbAorICAjIGluIGFuIGluZmluaXRlIGxvb3AuICBUaGlzIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGluIHByYWN0aWNlLgorICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXBSJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXBSJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2FzX3Rlc3RfeD0ndGVzdCAteCcKK2FzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQorYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9J2MtYXJlcycKK1BBQ0tBR0VfVEFSTkFNRT0nYy1hcmVzJworUEFDS0FHRV9WRVJTSU9OPScxLjEyLjAnCitQQUNLQUdFX1NUUklORz0nYy1hcmVzIDEuMTIuMCcKK1BBQ0tBR0VfQlVHUkVQT1JUPSdjLWFyZXMgbWFpbGluZyBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzJworUEFDS0FHRV9VUkw9JycKKworYWNfdW5pcXVlX2ZpbGU9ImFyZXNfaXB2Ni5oIgorIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgorYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIgorCitlbmFibGVfb3B0aW9uX2NoZWNraW5nPW5vCithY19zdWJzdF92YXJzPSdhbV9fRVhFRVhUX0ZBTFNFCithbV9fRVhFRVhUX1RSVUUKK0xUTElCT0JKUworTElCT0JKUworc3ViZGlycworQ0FSRVNfQ0ZMQUdfRVhUUkFTCitDQVJFU19QUklWQVRFX0xJQlMKK0NGTEFHX0NBUkVTX1NZTUJPTF9ISURJTkcKK0RPSU5HX0NBUkVTX1NZTUJPTF9ISURJTkdfRkFMU0UKK0RPSU5HX0NBUkVTX1NZTUJPTF9ISURJTkdfVFJVRQorUkFORE9NX0ZJTEUKK0RPSU5HX05BVElWRV9XSU5ET1dTX0ZBTFNFCitET0lOR19OQVRJVkVfV0lORE9XU19UUlVFCitDVVJMREVCVUdfRkFMU0UKK0NVUkxERUJVR19UUlVFCitDUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQgorVVNFX0NQUEZMQUdfQ0FSRVNfU1RBVElDTElCX0ZBTFNFCitVU0VfQ1BQRkxBR19DQVJFU19TVEFUSUNMSUJfVFJVRQorQ0FSRVNfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVF9GQUxTRQorQ0FSRVNfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVF9UUlVFCitDQVJFU19MVF9TSExJQl9VU0VfTk9fVU5ERUZJTkVEX0ZBTFNFCitDQVJFU19MVF9TSExJQl9VU0VfTk9fVU5ERUZJTkVEX1RSVUUKK0NBUkVTX0xUX1NITElCX1VTRV9WRVJTSU9OX0lORk9fRkFMU0UKK0NBUkVTX0xUX1NITElCX1VTRV9WRVJTSU9OX0lORk9fVFJVRQorQ1hYQ1BQCitMVF9TWVNfTElCUkFSWV9QQVRICitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorTUFOSUZFU1RfVE9PTAorUkFOTElCCithY19jdF9BUgorTE5fUworTk0KK2FjX2N0X0RVTVBCSU4KK0RVTVBCSU4KK0xECitGR1JFUAorTElCVE9PTAorT0JKRFVNUAorRExMVE9PTAorQVMKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFCithbV9fZmFzdGRlcENYWF9UUlVFCitDWFhERVBNT0RFCithbV9fZmFzdGRlcENDX0ZBTFNFCithbV9fZmFzdGRlcENDX1RSVUUKK0NDREVQTU9ERQorYW1fX25vZGVwCitBTURFUEJBQ0tTTEFTSAorQU1ERVBfRkFMU0UKK0FNREVQX1RSVUUKK2FtX19xdW90ZQorYW1fX2luY2x1ZGUKK0RFUERJUgorYW1fX3VudGFyCithbV9fdGFyCitBTVRBUgorYW1fX2xlYWRpbmdfZG90CitTRVRfTUFLRQorQVdLCitta2Rpcl9wCitNS0RJUl9QCitJTlNUQUxMX1NUUklQX1BST0dSQU0KK1NUUklQCitpbnN0YWxsX3NoCitNQUtFSU5GTworQVVUT0hFQURFUgorQVVUT01BS0UKK0FVVE9DT05GCitBQ0xPQ0FMCitWRVJTSU9OCitQQUNLQUdFCitDWUdQQVRIX1cKK2FtX19pc3JjCitIQVZFX0NYWDExCithY19jdF9DWFgKK0NYWEZMQUdTCitDWFgKK0NQUAorT0JKRVhUCitFWEVFWFQKK2FjX2N0X0NDCitDUFBGTEFHUworTERGTEFHUworQ0ZMQUdTCitDQworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCitob3N0X29zCitob3N0X3ZlbmRvcgoraG9zdF9jcHUKK2hvc3QKK2J1aWxkX29zCitidWlsZF92ZW5kb3IKK2J1aWxkX2NwdQorYnVpbGQKK0NPREVfQ09WRVJBR0VfUlVMRVMKK0NPREVfQ09WRVJBR0VfTERGTEFHUworQ09ERV9DT1ZFUkFHRV9DRkxBR1MKK0dFTkhUTUwKK0xDT1YKK0dDT1YKK0NPREVfQ09WRVJBR0VfRU5BQkxFRAorQ09ERV9DT1ZFUkFHRV9FTkFCTEVEX0ZBTFNFCitDT0RFX0NPVkVSQUdFX0VOQUJMRURfVFJVRQorQVIKK0VHUkVQCitHUkVQCitTRUQKK0FNX0JBQ0tTTEFTSAorQU1fREVGQVVMVF9WRVJCT1NJVFkKK0FNX0RFRkFVTFRfVgorQU1fVgorTUFJTlQKK01BSU5UQUlORVJfTU9ERV9GQUxTRQorTUFJTlRBSU5FUl9NT0RFX1RSVUUKK3RhcmdldF9hbGlhcworaG9zdF9hbGlhcworYnVpbGRfYWxpYXMKK0xJQlMKK0VDSE9fVAorRUNIT19OCitFQ0hPX0MKK0RFRlMKK21hbmRpcgorbG9jYWxlZGlyCitsaWJkaXIKK3BzZGlyCitwZGZkaXIKK2R2aWRpcgoraHRtbGRpcgoraW5mb2RpcgorZG9jZGlyCitvbGRpbmNsdWRlZGlyCitpbmNsdWRlZGlyCitydW5zdGF0ZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1NIRUxMCitQQVRIX1NFUEFSQVRPUicKK2FjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX21haW50YWluZXJfbW9kZQorZW5hYmxlX3NpbGVudF9ydWxlcworZW5hYmxlX2RlYnVnCitlbmFibGVfb3B0aW1pemUKK2VuYWJsZV93YXJuaW5ncworZW5hYmxlX3dlcnJvcgorZW5hYmxlX2N1cmxkZWJ1ZworZW5hYmxlX3N5bWJvbF9oaWRpbmcKK2VuYWJsZV9leHBvc2Vfc3RhdGljcword2l0aF9nY292CitlbmFibGVfY29kZV9jb3ZlcmFnZQorZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKK2VuYWJsZV9sYXJnZWZpbGUKK2VuYWJsZV9zaGFyZWQKK2VuYWJsZV9zdGF0aWMKK3dpdGhfcGljCitlbmFibGVfZmFzdF9pbnN0YWxsCit3aXRoX2FpeF9zb25hbWUKK3dpdGhfZ251X2xkCit3aXRoX3N5c3Jvb3QKK2VuYWJsZV9saWJ0b29sX2xvY2sKK2VuYWJsZV9saWJnY2MKK3dpdGhfcmFuZG9tCitlbmFibGVfbm9uYmxvY2tpbmcKK2VuYWJsZV90ZXN0cworJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUAorQ1hYCitDWFhGTEFHUworQ0NDCitMVF9TWVNfTElCUkFSWV9QQVRICitDWFhDUFAnCithY19zdWJkaXJzX2FsbD0ndGVzdCcKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorYWNfaW5pdF9oZWxwPQorYWNfaW5pdF92ZXJzaW9uPWZhbHNlCithY191bnJlY29nbml6ZWRfb3B0cz0KK2FjX3VucmVjb2duaXplZF9zZXA9CisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorY2FjaGVfZmlsZT0vZGV2L251bGwKK2V4ZWNfcHJlZml4PU5PTkUKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhZGlyPScke2RhdGFyb290ZGlyfScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitydW5zdGF0ZWRpcj0nJHtsb2NhbHN0YXRlZGlyfS9ydW4nCitpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKworYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQorZm9yIGFjX29wdGlvbgorZG8KKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisgICo9KSAgIGFjX29wdGFyZz0gOzsKKyAgKikgICAgYWNfb3B0YXJnPXllcyA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisgICAgYWNfcHJldj1wZGZkaXIgOzsKKyAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworCisgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCisgICAgYWNfcHJldj1wc2RpciA7OworICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKyAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1ydW5zdGF0ZWRpciB8IC0tcnVuc3RhdGVkaXIgfCAtLXJ1bnN0YXRlZGkgfCAtLXJ1bnN0YXRlZCBcCisgIHwgLS1ydW5zdGF0ZSB8IC0tcnVuc3RhdCB8IC0tcnVuc3RhIHwgLS1ydW5zdCB8IC0tcnVucyBcCisgIHwgLS1ydW4gfCAtLXJ1IHwgLS1yKQorICAgIGFjX3ByZXY9cnVuc3RhdGVkaXIgOzsKKyAgLXJ1bnN0YXRlZGlyPSogfCAtLXJ1bnN0YXRlZGlyPSogfCAtLXJ1bnN0YXRlZGk9KiB8IC0tcnVuc3RhdGVkPSogXAorICB8IC0tcnVuc3RhdGU9KiB8IC0tcnVuc3RhdD0qIHwgLS1ydW5zdGE9KiB8IC0tcnVuc3Q9KiB8IC0tcnVucz0qIFwKKyAgfCAtLXJ1bj0qIHwgLS1ydT0qIHwgLS1yPSopCisgICAgcnVuc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICA7OworCisgICo9KikKKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKAorICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKKyAgICBlc2FjCisgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgorZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisJCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAorCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyIHJ1bnN0YXRlZGlyCitkbworICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OworICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8CiskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKK2ZpCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBjLWFyZXMgMS4xMi4wIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKworVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCisKK1RvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKK1ZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCisKK0RlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgorCitDb25maWd1cmF0aW9uOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCisgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcworICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcgLi4uJyBtZXNzYWdlcworICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCisgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorCitJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQorCitCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CithbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KKworRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisKK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLXJ1bnN0YXRlZGlyPURJUiAgICAgICBtb2RpZmlhYmxlIHBlci1wcm9jZXNzIGRhdGEgW0xPQ0FMU1RBVEVESVIvcnVuXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKyAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvYy1hcmVzXQorICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRgorCitQcm9ncmFtIG5hbWVzOgorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworCitTeXN0ZW0gdHlwZXM6CisgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCisgIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorX0FDRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorICBjYXNlICRhY19pbml0X2hlbHAgaW4KKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGMtYXJlcyAxLjEyLjA6Ijs7CisgICBlc2FjCisgIGNhdCA8PFxfQUNFT0YKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwgKGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgorICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTEiKQorICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIikKKyAgLS1lbmFibGUtZGVidWcgICAgICAgICAgRW5hYmxlIGRlYnVnIGJ1aWxkIG9wdGlvbnMKKyAgLS1kaXNhYmxlLWRlYnVnICAgICAgICAgRGlzYWJsZSBkZWJ1ZyBidWlsZCBvcHRpb25zCisgIC0tZW5hYmxlLW9wdGltaXplKD1PUFQpIEVuYWJsZSBjb21waWxlciBvcHRpbWl6YXRpb25zIChkZWZhdWx0PS1PMikKKyAgLS1kaXNhYmxlLW9wdGltaXplICAgICAgRGlzYWJsZSBjb21waWxlciBvcHRpbWl6YXRpb25zCisgIC0tZW5hYmxlLXdhcm5pbmdzICAgICAgIEVuYWJsZSBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3MKKyAgLS1kaXNhYmxlLXdhcm5pbmdzICAgICAgRGlzYWJsZSBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3MKKyAgLS1lbmFibGUtd2Vycm9yICAgICAgICAgRW5hYmxlIGNvbXBpbGVyIHdhcm5pbmdzIGFzIGVycm9ycworICAtLWRpc2FibGUtd2Vycm9yICAgICAgICBEaXNhYmxlIGNvbXBpbGVyIHdhcm5pbmdzIGFzIGVycm9ycworICAtLWVuYWJsZS1jdXJsZGVidWcgICAgICBFbmFibGUgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmcKKyAgLS1kaXNhYmxlLWN1cmxkZWJ1ZyAgICAgRGlzYWJsZSBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZworICAtLWVuYWJsZS1zeW1ib2wtaGlkaW5nICBFbmFibGUgaGlkaW5nIG9mIGxpYnJhcnkgaW50ZXJuYWwgc3ltYm9scworICAtLWRpc2FibGUtc3ltYm9sLWhpZGluZyBEaXNhYmxlIGhpZGluZyBvZiBsaWJyYXJ5IGludGVybmFsIHN5bWJvbHMKKyAgLS1lbmFibGUtZXhwb3NlLXN0YXRpY3MgRW5hYmxlIGV4cG9zdXJlIG9mIGludGVybmFsIHN0YXRpYyBmdW5jdGlvbnMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RpbmcKKyAgLS1kaXNhYmxlLWV4cG9zZS1zdGF0aWNzCisgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgZXhwb3N1cmUgb2YgaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGluZworICAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlICBXaGV0aGVyIHRvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIHN1cHBvcnQKKyAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQorICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZW5hYmxlLWxpYmdjYyAgICAgICAgIHVzZSBsaWJnY2Mgd2hlbiBsaW5raW5nCisgIC0tZW5hYmxlLW5vbmJsb2NraW5nICAgIEVuYWJsZSBub24tYmxvY2tpbmcgY29tbXVuaWNhdGlvbnMKKyAgLS1kaXNhYmxlLW5vbmJsb2NraW5nICAgRGlzYWJsZSBub24tYmxvY2tpbmcgY29tbXVuaWNhdGlvbnMKKyAgLS1lbmFibGUtdGVzdHMgICAgICAgICAgYnVpbGQgdGVzdCBzdWl0ZQorCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLWdjb3Y9R0NPViAgICAgICAgdXNlIGdpdmVuIEdDT1YgZm9yIGNvdmVyYWdlIChHQ09WPWdjb3YpLgorICAtLXdpdGgtcGljWz1QS0dTXSAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgLS13aXRoLWFpeC1zb25hbWU9YWl4fHN2cjR8Ym90aAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIChha2EgIlNPTkFNRSIpIHZhcmlhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBvbiBBSVgsIFtkZWZhdWx0PWFpeF0uCisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRoLXN5c3Jvb3RbPURJUl0gICAgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIgKG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgIC0td2l0aC1yYW5kb209RklMRSAgICAgIHJlYWQgcmFuZG9tbmVzcyBmcm9tIEZJTEUgKGRlZmF1bHQ9L2Rldi91cmFuZG9tKQorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAorICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKyAgTFRfU1lTX0xJQlJBUllfUEFUSAorICAgICAgICAgICAgICBVc2VyLWRlZmluZWQgcnVuLXRpbWUgbGlicmFyeSBzZWFyY2ggcGF0aC4KKyAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgorCitVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAoraXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgorCitSZXBvcnQgYnVncyB0byA8Yy1hcmVzIG1haWxpbmcgbGlzdDogaHR0cDovL2Nvb2wuaGF4eC5zZS9tYWlsbWFuL2xpc3RpbmZvL2MtYXJlcz4uCitfQUNFT0YKK2FjX3N0YXR1cz0kPworZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxzZQorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcX0FDRU9GCitjLWFyZXMgY29uZmlndXJlIDEuMTIuMAorZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5CisKK0NvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCitfQUNFT0YKKyAgZXhpdAorZmkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2N4eF90cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCisjIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9ydW4gTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLiBBc3N1bWVzCisjIHRoYXQgZXhlY3V0YWJsZXMgKmNhbiogYmUgcnVuLgorYWNfZm5fY190cnlfcnVuICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyAgICAgICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgICAgIGFjX3JldHZhbD0kYWNfc3RhdHVzCitmaQorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X3J1bgorCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSAkMiBpbm5vY3VvdXNfJDIKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgJDIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworI2lmIGRlZmluZWQgX19zdHViXyQyIHx8IGRlZmluZWQgX19zdHViX19fJDIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gJDIgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKKworIyBhY19mbl9jeHhfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2NwcAorCisjIGFjX2ZuX2N4eF90cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2xpbmsKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1c2luZworIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAjKCgKKyAgeWVzOm5vOiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyggJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGMtYXJlcyBtYWlsaW5nIGxpc3Q6IGh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jLWFyZXMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAorCisjIGFjX2ZuX2NfY2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQorIyB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX3R5cGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludCBtYWluICh2b2lkKQoreworaWYgKHNpemVvZiAoJDIpKQorCSByZXR1cm4gMDsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludCBtYWluICh2b2lkKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGV2YWwgIiQzPXllcyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX3R5cGUKKworIyBhY19mbl9jX2NoZWNrX21lbWJlciBMSU5FTk8gQUdHUiBNRU1CRVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCBpZiB0aGUgZmllbGQgTUVNQkVSIGV4aXN0cyBpbiB0eXBlIEFHR1IsIGFmdGVyIGluY2x1ZGluZworIyBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX21lbWJlciAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyLiQzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4kMy4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQgbWFpbiAodm9pZCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKGFjX2FnZ3IuJDMpCityZXR1cm4gMDsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDQ9eWVzIgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNQoraW50IG1haW4gKHZvaWQpCit7CitzdGF0aWMgJDIgYWNfYWdncjsKK2lmIChzaXplb2YgYWNfYWdnci4kMykKK3JldHVybiAwOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkND15ZXMiCitlbHNlCisgIGV2YWwgIiQ0PW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDQKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfbWVtYmVyCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSBjLWFyZXMgJGFzX21lIDEuMTIuMCwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICAkICQwICRACisKK19BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCit7CitjYXQgPDxfQVNVTkFNRQorIyMgLS0tLS0tLS0tICMjCisjIyBQbGF0Zm9ybS4gIyMKKyMjIC0tLS0tLS0tLSAjIworCitob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKworX0FTVU5BTUUKKworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK30gPiY1CisKK2NhdCA+JjUgPDxfQUNFT0YKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgQ29yZSB0ZXN0cy4gIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKK19BQ0VPRgorCisKKyMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCisjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCithY19jb25maWd1cmVfYXJncz0KK2FjX2NvbmZpZ3VyZV9hcmdzMD0KK2FjX2NvbmZpZ3VyZV9hcmdzMT0KK2FjX211c3Rfa2VlcF9uZXh0PWZhbHNlCitmb3IgYWNfcGFzcyBpbiAxIDIKK2RvCisgIGZvciBhY19hcmcKKyAgZG8KKyAgICBjYXNlICRhY19hcmcgaW4KKyAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7CisgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICAgIGNvbnRpbnVlIDs7CisgICAgKlwnKikKKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGNhc2UgJGFjX3Bhc3MgaW4KKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OworICAgIDIpCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MxICIgJyRhY19hcmcnIgorICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCisJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorICAgICAgZWxzZQorCWNhc2UgJGFjX2FyZyBpbgorCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCitkb25lCit7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9CisKKyMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgordHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisgIHsKKyAgICBlY2hvCisKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ2FjaGUgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICBlY2hvCisgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICBzZWQgLW4gXAorCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKQorICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgZG8KKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgICAgY2FzZSAkYWNfdmFsIGluCisgICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICBlc2FjCisgICAgICAkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgZG9uZSB8IHNvcnQKKyAgICBlY2hvCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCisgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICAgIGVjaG8KKyAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisgICAgICBkbworCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorCWNhc2UgJGFjX3ZhbCBpbgorCSpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKwllc2FjCisJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgICAgZG9uZSB8IHNvcnQKKyAgICAgIGVjaG8KKyAgICBmaQorCisgICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCisgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0gIyMKKyMjIGNvbmZkZWZzLmguICMjCisjIyAtLS0tLS0tLS0tLSAjIyIKKyAgICAgIGVjaG8KKyAgICAgIGNhdCBjb25mZGVmcy5oCisgICAgICBlY2hvCisgICAgZmkKKyAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgJGFzX2VjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCisgIH0gPiY1CisgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICBleGl0ICRleGl0X3N0YXR1cworJyAwCitmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgYXNfZm5fZXhpdCAxJyAkYWNfc2lnbmFsCitkb25lCithY19zaWduYWw9MAorCisjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKKworJGFzX2VjaG8gIi8qIGNvbmZkZWZzLmggKi8iID4gY29uZmRlZnMuaAorCisjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCitfQUNFT0YKKworCisjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KKyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCithY19zaXRlX2ZpbGUxPU5PTkUKK2FjX3NpdGVfZmlsZTI9Tk9ORQoraWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAjIFdlIGRvIG5vdCB3YW50IGEgUEFUSCBzZWFyY2ggZm9yIGNvbmZpZy5zaXRlLgorICBjYXNlICRDT05GSUdfU0lURSBpbiAjKCgKKyAgICAtKikgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OworICAgICopICAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgIGVzYWMKK2VsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitlbHNlCisgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZmkKK2ZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCitkbworICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1CisgICAgLiAiJGFjX3NpdGVfZmlsZSIgXAorICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworICAgIGVzYWMKKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKyAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OworICAgIGVzYWMKKyAgZmkKK2RvbmUKK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CitmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisKKworCisKKyMgdXNpbmcgY2FyZXMtb3ZlcnJpZGUubTQKKworCisKK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgYXJlc19jb25maWcuaCBhcmVzX2J1aWxkLmgiCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICIgPiY2OyB9CisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tYWludGFpbmVyX21vZGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAorZWxzZQorICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vCitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY1CiskYXNfZWNobyAiJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQorICAgaWYgdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllczsgdGhlbgorICBNQUlOVEFJTkVSX01PREVfVFJVRT0KKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPScjJworZWxzZQorICBNQUlOVEFJTkVSX01PREVfVFJVRT0nIycKKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPQorZmkKKworICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsKK2ZpCisKK2Nhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gIyAoKCgKKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKK2VzYWMKK2FtX21ha2U9JHtNQUtFLW1ha2V9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiAkYXNfZWNobyAnVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY2OyB9CitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICAgIEFNX1Y9JyQoViknCisgIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCitlbHNlCisgIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCisgIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKK2ZpCitBTV9CQUNLU0xBU0g9J1wnCisKKworCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZGVidWcgYnVpbGQgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBidWlsZCBvcHRpb25zLi4uICIgPiY2OyB9CisgIE9QVF9ERUJVR19CVUlMRD0iZGVmYXVsdCIKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVidWc7IE9QVF9ERUJVR19CVUlMRD0kZW5hYmxldmFsCitmaQorCisgIGNhc2UgIiRPUFRfREVCVUdfQlVJTEQiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X2RlYnVnPSJubyIKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgICAgICAgIHdhbnRfZGVidWc9Im5vIgorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgd2FudF9kZWJ1Zz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfZGVidWciID4mNQorJGFzX2VjaG8gIiR3YW50X2RlYnVnIiA+JjY7IH0KKworCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGNvbXBpbGVyIG9wdGltaXplciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBjb21waWxlciBvcHRpbWl6ZXIuLi4gIiA+JjY7IH0KKyAgT1BUX0NPTVBJTEVSX09QVElNSVpFPSJkZWZhdWx0IgorICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3B0aW1pemUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3B0aW1pemUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vcHRpbWl6ZTsgT1BUX0NPTVBJTEVSX09QVElNSVpFPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9DT01QSUxFUl9PUFRJTUlaRSIgaW4KKyAgICBubykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRfb3B0aW1pemU9Im5vIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkd2FudF9kZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgICAgICB3YW50X29wdGltaXplPSJhc3N1bWVfbm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub3Qgc3BlY2lmaWVkIChhc3N1bWluZyBubykiID4mNQorJGFzX2VjaG8gIm5vdCBzcGVjaWZpZWQgKGFzc3VtaW5nIG5vKSIgPiY2OyB9CisgICAgICBlbHNlCisgICAgICAgIHdhbnRfb3B0aW1pemU9ImFzc3VtZV95ZXMiCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub3Qgc3BlY2lmaWVkIChhc3N1bWluZyB5ZXMpIiA+JjUKKyRhc19lY2hvICJub3Qgc3BlY2lmaWVkIChhc3N1bWluZyB5ZXMpIiA+JjY7IH0KKyAgICAgIGZpCisgICAgICA7OworICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50X29wdGltaXplPSJ5ZXMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgOzsKKyAgZXNhYworCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzLi4uICIgPiY2OyB9CisgIE9QVF9DT01QSUxFUl9XQVJOSU5HUz0iZGVmYXVsdCIKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdhcm5pbmdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3dhcm5pbmdzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfd2FybmluZ3M7IE9QVF9DT01QSUxFUl9XQVJOSU5HUz0kZW5hYmxldmFsCitmaQorCisgIGNhc2UgIiRPUFRfQ09NUElMRVJfV0FSTklOR1MiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X3dhcm5pbmdzPSJubyIKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgIHdhbnRfd2FybmluZ3M9IiR3YW50X2RlYnVnIgorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgd2FudF93YXJuaW5ncz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfd2FybmluZ3MiID4mNQorJGFzX2VjaG8gIiR3YW50X3dhcm5pbmdzIiA+JjY7IH0KKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBjb21waWxlciB3YXJuaW5ncyBhcyBlcnJvcnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3JzLi4uICIgPiY2OyB9CisgIE9QVF9DT01QSUxFUl9XRVJST1I9ImRlZmF1bHQiCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS13ZXJyb3Igd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd2Vycm9yK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfd2Vycm9yOyBPUFRfQ09NUElMRVJfV0VSUk9SPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9DT01QSUxFUl9XRVJST1IiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X3dlcnJvcj0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICB3YW50X3dlcnJvcj0ibm8iCisgICAgICA7OworICAgICopCisgICAgICAgICAgICB3YW50X3dlcnJvcj0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfd2Vycm9yIiA+JjUKKyRhc19lY2hvICIkd2FudF93ZXJyb3IiID4mNjsgfQorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nLi4uICIgPiY2OyB9CisgIE9QVF9DVVJMREVCVUdfQlVJTEQ9ImRlZmF1bHQiCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jdXJsZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY3VybGRlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY3VybGRlYnVnOyBPUFRfQ1VSTERFQlVHX0JVSUxEPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9DVVJMREVCVUdfQlVJTEQiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X2N1cmxkZWJ1Zz0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICB3YW50X2N1cmxkZWJ1Zz0ibm8iCisgICAgICA7OworICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50X2N1cmxkZWJ1Zz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfY3VybGRlYnVnIiA+JjUKKyRhc19lY2hvICIkd2FudF9jdXJsZGVidWciID4mNjsgfQorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGhpZGluZyBvZiBsaWJyYXJ5IGludGVybmFsIHN5bWJvbHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgaGlkaW5nIG9mIGxpYnJhcnkgaW50ZXJuYWwgc3ltYm9scy4uLiAiID4mNjsgfQorICBPUFRfU1lNQk9MX0hJRElORz0iZGVmYXVsdCIKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5bWJvbC1oaWRpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3ltYm9sX2hpZGluZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N5bWJvbF9oaWRpbmc7IE9QVF9TWU1CT0xfSElESU5HPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9TWU1CT0xfSElESU5HIiBpbgorICAgIG5vKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudF9zeW1ib2xfaGlkaW5nPSJubyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgd2FudF9zeW1ib2xfaGlkaW5nPSJ5ZXMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgd2FudF9zeW1ib2xfaGlkaW5nPSJ5ZXMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgOzsKKyAgZXNhYworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGV4cG9zZSBpbnRlcm5hbCBzdGF0aWMgZnVuY3Rpb25zIGZvciB0ZXN0aW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZXhwb3NlIGludGVybmFsIHN0YXRpYyBmdW5jdGlvbnMgZm9yIHRlc3RpbmcuLi4gIiA+JjY7IH0KKyAgT1BUX0VYUE9TRV9TVEFUSUNTPSJkZWZhdWx0IgorICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXhwb3NlLXN0YXRpY3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZXhwb3NlX3N0YXRpY3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9leHBvc2Vfc3RhdGljczsgT1BUX0VYUE9TRV9TVEFUSUNTPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9FWFBPU0VfU1RBVElDUyIgaW4KKyAgICBubykKKyAgICAgICAgICAgIHdhbnRfZXhwb3NlX3N0YXRpY3M9Im5vIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICB3YW50X2V4cG9zZV9zdGF0aWNzPSJubyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgd2FudF9leHBvc2Vfc3RhdGljcz0ieWVzIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJHdhbnRfZXhwb3NlX3N0YXRpY3MiID0gInllcyI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDQVJFU19FWFBPU0VfU1RBVElDUyAxCitfQUNFT0YKKworICBmaQorCisKKyMKKyMgQ2hlY2sgdGhhdCAnWENfQ09ORklHVVJFX1BSRUFNQkxFJyBoYXMgYWxyZWFkeSBydW4uCisjCisKK2lmIHRlc3QgLXogIiR4Y19jb25maWd1cmVfcHJlYW1ibGVfcmVzdWx0IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAieGNfY29uZmlndXJlX3ByZWFtYmxlX3Jlc3VsdCBub3Qgc2V0IChpbnRlcm5hbCBwcm9ibGVtKSIgIiRMSU5FTk8iIDUKK2ZpCisKKyMKKyMgQ2hlY2sgdGhhdCAnUEFUSF9TRVBBUkFUT1InIGhhcyBhbHJlYWR5IGJlZW4gc2V0LgorIworCitpZiB0ZXN0IC16ICIkeGNfUEFUSF9TRVBBUkFUT1IiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJ4Y19QQVRIX1NFUEFSQVRPUiBub3Qgc2V0IChpbnRlcm5hbCBwcm9ibGVtKSIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIkUEFUSF9TRVBBUkFUT1IiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJQQVRIX1NFUEFSQVRPUiBub3Qgc2V0IChpbnRlcm5hbCBvciBjb25maWcuc2l0ZSBwcm9ibGVtKSIgIiRMSU5FTk8iIDUKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwYXRoIHNlcGFyYXRvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcGF0aCBzZXBhcmF0b3IuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEFUSF9TRVBBUkFUT1IiID4mNQorJGFzX2VjaG8gIiRQQVRIX1NFUEFSQVRPUiIgPiY2OyB9CitpZiB0ZXN0ICJ4JFBBVEhfU0VQQVJBVE9SIiAhPSAieCR4Y19QQVRIX1NFUEFSQVRPUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5pdGlhbCBwYXRoIHNlcGFyYXRvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5pdGlhbCBwYXRoIHNlcGFyYXRvci4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhjX1BBVEhfU0VQQVJBVE9SIiA+JjUKKyRhc19lY2hvICIkeGNfUEFUSF9TRVBBUkFUT1IiID4mNjsgfQorICBhc19mbl9lcnJvciAkPyAicGF0aCBzZXBhcmF0b3IgbWlzbWF0Y2ggKGludGVybmFsIG9yIGNvbmZpZy5zaXRlIHByb2JsZW0pIiAiJExJTkVOTyIgNQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInNlZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc2VkOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRTRUQgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfU0VEPSIkU0VEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZHVtbXk9IiRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfU0VEPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCIgJiYgYWNfY3ZfcGF0aF9TRUQ9Im5vdF9mb3VuZCIKKyAgOzsKK2VzYWMKK2ZpCitTRUQ9JGFjX2N2X3BhdGhfU0VECitpZiB0ZXN0IC1uICIkU0VEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNFRCIgPiY1CiskYXNfZWNobyAiJFNFRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitpZiB0ZXN0IC16ICIkU0VEIiB8fCB0ZXN0ICIkU0VEIiA9ICJub3RfZm91bmQiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJzZWQgbm90IGZvdW5kIGluIFBBVEguIENhbm5vdCBjb250aW51ZSB3aXRob3V0IHNlZC4iICIkTElORU5PIiA1CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ3JlcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ3JlcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJEdSRVAgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJEdSRVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiICYmIGFjX2N2X3BhdGhfR1JFUD0ibm90X2ZvdW5kIgorICA7OworZXNhYworZmkKK0dSRVA9JGFjX2N2X3BhdGhfR1JFUAoraWYgdGVzdCAtbiAiJEdSRVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR1JFUCIgPiY1CiskYXNfZWNobyAiJEdSRVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworaWYgdGVzdCAteiAiJEdSRVAiIHx8IHRlc3QgIiRHUkVQIiA9ICJub3RfZm91bmQiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJncmVwIG5vdCBmb3VuZCBpbiBQQVRILiBDYW5ub3QgY29udGludWUgd2l0aG91dCBncmVwLiIgIiRMSU5FTk8iIDUKK2ZpCisKKworaWYgZWNobyBhIHwgKCRHUkVQIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KKyAgRUdSRVA9IiRHUkVQIC1FIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVHUkVQIiA+JjUKKyRhc19lY2hvICIkRUdSRVAiID4mNjsgfQorZWxzZQorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImVncmVwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBlZ3JlcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRFR1JFUCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJEVHUkVQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZHVtbXk9IiRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiICYmIGFjX2N2X3BhdGhfRUdSRVA9Im5vdF9mb3VuZCIKKyAgOzsKK2VzYWMKK2ZpCitFR1JFUD0kYWNfY3ZfcGF0aF9FR1JFUAoraWYgdGVzdCAtbiAiJEVHUkVQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVHUkVQIiA+JjUKKyRhc19lY2hvICIkRUdSRVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRFR1JFUCIgfHwgdGVzdCAiJEVHUkVQIiA9ICJub3RfZm91bmQiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJlZ3JlcCBub3QgZm91bmQgaW4gUEFUSC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgZWdyZXAuIiAiJExJTkVOTyIgNQorZmkKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRBUiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZHVtbXk9IiRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfQVI9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitBUj0kYWNfY3ZfcGF0aF9BUgoraWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKKyRhc19lY2hvICIkQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0FSIjsgdGhlbgorICBhY19wdF9BUj0kQVIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfQVIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfQVI9IiRhY19wdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2R1bW15PSIkUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbiIKK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0FSPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfQVI9JGFjX2N2X3BhdGhfYWNfcHRfQVIKK2lmIHRlc3QgLW4gIiRhY19wdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfQVIiID0geDsgdGhlbgorICAgIEFSPSJub3RfZm91bmQiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX3B0X0FSCisgIGZpCitlbHNlCisgIEFSPSIkYWNfY3ZfcGF0aF9BUiIKK2ZpCisKK2lmIHRlc3QgLXogIiRBUiIgfHwgdGVzdCAiJEFSIiA9ICJub3RfZm91bmQiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJhciBub3QgZm91bmQgaW4gUEFUSC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgYXIuIiAiJExJTkVOTyIgNQorZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfU0VEIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorCisKKworCisJIyBhbGxvdyB0byBvdmVycmlkZSBnY292IGxvY2F0aW9uCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ2NvdiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ2NvditzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ2NvdjsgX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEg9JHdpdGhfZ2NvdgorZWxzZQorICBfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSD1nY292CitmaQorCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBjb2RlIGNvdmVyYWdlIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCB3aXRoIGNvZGUgY292ZXJhZ2Ugc3VwcG9ydC4uLiAiID4mNjsgfQorCSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NvZGVfY292ZXJhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jb2RlX2NvdmVyYWdlOworZWxzZQorICBlbmFibGVfY29kZV9jb3ZlcmFnZT1ubworZmkKKworCisJIGlmIHRlc3QgeCRlbmFibGVfY29kZV9jb3ZlcmFnZSA9IHh5ZXM7IHRoZW4KKyAgQ09ERV9DT1ZFUkFHRV9FTkFCTEVEX1RSVUU9CisgIENPREVfQ09WRVJBR0VfRU5BQkxFRF9GQUxTRT0nIycKK2Vsc2UKKyAgQ09ERV9DT1ZFUkFHRV9FTkFCTEVEX1RSVUU9JyMnCisgIENPREVfQ09WRVJBR0VfRU5BQkxFRF9GQUxTRT0KK2ZpCisKKwlDT0RFX0NPVkVSQUdFX0VOQUJMRUQ9JGVuYWJsZV9jb2RlX2NvdmVyYWdlCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9jb2RlX2NvdmVyYWdlIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX2NvZGVfY292ZXJhZ2UiID4mNjsgfQorCisJaWYgIHRlc3QgIiRlbmFibGVfY29kZV9jb3ZlcmFnZSIgPSAieWVzIiA7IHRoZW4gOgorCisJCSMgY2hlY2sgZm9yIGdjb3YKKwkJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9JF9BWF9DT0RFX0NPVkVSQUdFX0dDT1ZfUFJPR19XSVRIIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fSRfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfR0NPVis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRHQ09WIjsgdGhlbgorICBhY19jdl9wcm9nX0dDT1Y9IiRHQ09WIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfR0NPVj0iJHthY190b29sX3ByZWZpeH0kX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEgiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorR0NPVj0kYWNfY3ZfcHJvZ19HQ09WCitpZiB0ZXN0IC1uICIkR0NPViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHQ09WIiA+JjUKKyRhc19lY2hvICIkR0NPViIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfR0NPViI7IHRoZW4KKyAgYWNfY3RfR0NPVj0kR0NPVgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJF9BWF9DT0RFX0NPVkVSQUdFX0dDT1ZfUFJPR19XSVRIOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9HQ09WKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0dDT1YiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfR0NPVj0iJGFjX2N0X0dDT1YiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9HQ09WPSIkX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEgiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfR0NPVj0kYWNfY3ZfcHJvZ19hY19jdF9HQ09WCitpZiB0ZXN0IC1uICIkYWNfY3RfR0NPViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9HQ09WIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfR0NPViIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0dDT1YiID0geDsgdGhlbgorICAgIEdDT1Y9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgR0NPVj0kYWNfY3RfR0NPVgorICBmaQorZWxzZQorICBHQ09WPSIkYWNfY3ZfcHJvZ19HQ09WIgorZmkKKworCQlpZiB0ZXN0ICJYJEdDT1YiID0gIlg6IjsgdGhlbiA6CisgIGFzX2ZuX2Vycm9yICQ/ICJnY292IGlzIG5lZWRlZCB0byBkbyBjb3ZlcmFnZSIgIiRMSU5FTk8iIDUKK2ZpCisKKworCQkJCWlmICB0ZXN0ICIkR0NDIiA9ICJubyIgOyB0aGVuIDoKKworCQkJYXNfZm5fZXJyb3IgJD8gIm5vdCBjb21waWxpbmcgd2l0aCBnY2MsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBnY292IGNvZGUgY292ZXJhZ2UiICIkTElORU5PIiA1CisKK2ZpCisKKwkJIyBMaXN0IG9mIHN1cHBvcnRlZCBsY292IHZlcnNpb25zLgorCQlsY292X3ZlcnNpb25fbGlzdD0iMS42IDEuNyAxLjggMS45IDEuMTAgMS4xMSIKKworCQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxjb3YiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxjb3Y7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0xDT1YrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTENPViI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MQ09WPSIkTENPViIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0xDT1Y9Imxjb3YiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTENPVj0kYWNfY3ZfcHJvZ19MQ09WCitpZiB0ZXN0IC1uICIkTENPViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMQ09WIiA+JjUKKyRhc19lY2hvICIkTENPViIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisJCSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2VuaHRtbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2VuaHRtbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfR0VOSFRNTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRHRU5IVE1MIjsgdGhlbgorICBhY19jdl9wcm9nX0dFTkhUTUw9IiRHRU5IVE1MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfR0VOSFRNTD0iZ2VuaHRtbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitHRU5IVE1MPSRhY19jdl9wcm9nX0dFTkhUTUwKK2lmIHRlc3QgLW4gIiRHRU5IVE1MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdFTkhUTUwiID4mNQorJGFzX2VjaG8gIiRHRU5IVE1MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworCQlpZiAgdGVzdCAiJExDT1YiIDsgdGhlbiA6CisKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxjb3YgdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGNvdiB2ZXJzaW9uLi4uICIgPiY2OyB9CitpZiAke2F4X2N2X2xjb3ZfdmVyc2lvbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKwkJCQlheF9jdl9sY292X3ZlcnNpb249aW52YWxpZAorCQkJCWxjb3ZfdmVyc2lvbj1gJExDT1YgLXYgMj4vZGV2L251bGwgfCAkU0VEIC1lICdzL14uKiAvLydgCisJCQkJZm9yIGxjb3ZfY2hlY2tfdmVyc2lvbiBpbiAkbGNvdl92ZXJzaW9uX2xpc3Q7IGRvCisJCQkJCWlmIHRlc3QgIiRsY292X3ZlcnNpb24iID0gIiRsY292X2NoZWNrX3ZlcnNpb24iOyB0aGVuCisJCQkJCQlheF9jdl9sY292X3ZlcnNpb249IiRsY292X2NoZWNrX3ZlcnNpb24gKG9rKSIKKwkJCQkJZmkKKwkJCQlkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X2xjb3ZfdmVyc2lvbiIgPiY1CiskYXNfZWNobyAiJGF4X2N2X2xjb3ZfdmVyc2lvbiIgPiY2OyB9CisKK2Vsc2UKKworCQkJbGNvdl9tc2c9IlRvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIHJlcG9ydGluZyB5b3UgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxjb3YgdmVyc2lvbnMgaW5zdGFsbGVkOiAkbGNvdl92ZXJzaW9uX2xpc3QiCisJCQlhc19mbl9lcnJvciAkPyAiJGxjb3ZfbXNnIiAiJExJTkVOTyIgNQorCitmaQorCisJCWNhc2UgJGF4X2N2X2xjb3ZfdmVyc2lvbiBpbgorCQkJIiJ8aW52YWxpZCkKKwkJCQlsY292X21zZz0iWW91IG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBvZiBsY292OiAkbGNvdl92ZXJzaW9uX2xpc3QgKGZvdW5kOiAkbGNvdl92ZXJzaW9uKS4iCisJCQkJYXNfZm5fZXJyb3IgJD8gIiRsY292X21zZyIgIiRMSU5FTk8iIDUKKwkJCQlMQ09WPSJleGl0IDA7IgorCQkJOzsKKwkJZXNhYworCisJCWlmICB0ZXN0IC16ICIkR0VOSFRNTCIgOyB0aGVuIDoKKworCQkJYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIGdlbmh0bWwgZnJvbSB0aGUgbGNvdiBwYWNrYWdlIiAiJExJTkVOTyIgNQorCitmaQorCisJCQkJQ09ERV9DT1ZFUkFHRV9DRkxBR1M9Ii1PMCAtZyAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisJCUNPREVfQ09WRVJBR0VfTERGTEFHUz0iLWxnY292IgorCisKKworCitDT0RFX0NPVkVSQUdFX1JVTEVTPScKKyMgQ29kZSBjb3ZlcmFnZQorIworIyBPcHRpb25hbDoKKyMgIC0gQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlk6IFRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIGNvZGUgY292ZXJhZ2UgcmVwb3J0aW5nLgorIyAgICAoRGVmYXVsdDogJCh0b3BfYnVpbGRkaXIpKQorIyAgLSBDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFOiBGaWxlbmFtZSBhbmQgcGF0aCBmb3IgdGhlIC5pbmZvIGZpbGUgZ2VuZXJhdGVkCisjICAgIGJ5IGxjb3YgZm9yIGNvZGUgY292ZXJhZ2UuIChEZWZhdWx0OgorIyAgICAkKFBBQ0tBR0VfTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pLWNvdmVyYWdlLmluZm8pCisjICAtIENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWTogRGlyZWN0b3J5IGZvciBnZW5lcmF0ZWQgY29kZSBjb3ZlcmFnZQorIyAgICByZXBvcnRzIHRvIGJlIGNyZWF0ZWQuIChEZWZhdWx0OgorIyAgICAkKFBBQ0tBR0VfTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pLWNvdmVyYWdlKQorIyAgLSBDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19HQ09WUEFUSDogLS1nY292LXRvb2wgcGF0aHRvZ2NvdgorIyAgLSBDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19ERUZBVUxUOiBFeHRyYSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGxjb3YgaW5zdGFuY2UuCisjICAgIChEZWZhdWx0OiAkQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfR0NPVlBBVEgpCisjICAtIENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TOiBFeHRyYSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGxjb3YgaW5zdGFuY2UuCisjICAgIChEZWZhdWx0OiAkQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfREVGQVVMVCkKKyMgIC0gQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlM6IEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgZ2VuaHRtbAorIyAgICBpbnN0YW5jZS4gKERlZmF1bHQ6IGVtcHR5KQorIyAgLSBDT0RFX0NPVkVSQUdFX0lHTk9SRV9QQVRURVJOOiBFeHRyYSBnbG9iIHBhdHRlcm4gb2YgZmlsZXMgdG8gaWdub3JlCisjCisjIFRoZSBnZW5lcmF0ZWQgcmVwb3J0IHdpbGwgYmUgdGl0bGVkIHVzaW5nIHRoZSAkKFBBQ0tBR0VfTkFNRSkgYW5kCisjICQoUEFDS0FHRV9WRVJTSU9OKS4gSW4gb3JkZXIgdG8gYWRkIHRoZSBjdXJyZW50IGdpdCBoYXNoIHRvIHRoZSB0aXRsZSwKKyMgdXNlIHRoZSBnaXQtdmVyc2lvbi1nZW4gc2NyaXB0LCBhdmFpbGFibGUgb25saW5lLgorCisjIE9wdGlvbmFsIHZhcmlhYmxlcworQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkgPz0gJCh0b3BfYnVpbGRkaXIpCitDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFID89ICQoUEFDS0FHRV9OQU1FKS0kKFBBQ0tBR0VfVkVSU0lPTiktY292ZXJhZ2UuaW5mbworQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRElSRUNUT1JZID89ICQoUEFDS0FHRV9OQU1FKS0kKFBBQ0tBR0VfVkVSU0lPTiktY292ZXJhZ2UKK0NPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0dDT1ZQQVRIID89IC0tZ2Nvdi10b29sICIkKEdDT1YpIgorQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfREVGQVVMVCA/PSAkKENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0dDT1ZQQVRIKQorQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlMgPz0gJChDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19ERUZBVUxUKQorQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlMgPz0KK0NPREVfQ09WRVJBR0VfSUdOT1JFX1BBVFRFUk4gPz0KKworY29kZV9jb3ZlcmFnZV9xdWlldCA9ICQoY29kZV9jb3ZlcmFnZV9xdWlldF8kKFYpKQorY29kZV9jb3ZlcmFnZV9xdWlldF8gPQorY29kZV9jb3ZlcmFnZV9xdWlldF8wID0gLS1xdWlldAorCisjIFVzZSByZWN1cnNpdmUgbWFrZXMgaW4gb3JkZXIgdG8gaWdub3JlIGVycm9ycyBkdXJpbmcgY2hlY2sKK2NoZWNrLWNvZGUtY292ZXJhZ2U6CisJLSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIC1rIGNoZWNrCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY29kZS1jb3ZlcmFnZS1jYXB0dXJlCisKKyMgQ2FwdHVyZSBjb2RlIGNvdmVyYWdlIGRhdGEKK2NvZGUtY292ZXJhZ2UtY2FwdHVyZTogY29kZS1jb3ZlcmFnZS1jYXB0dXJlLWhvb2sKKwkkKExDT1YpICQoY29kZV9jb3ZlcmFnZV9xdWlldCkgLS1kaXJlY3RvcnkgJChDT0RFX0NPVkVSQUdFX0RJUkVDVE9SWSkgLS1jYXB0dXJlIC0tb3V0cHV0LWZpbGUgIiQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkudG1wIiAtLXRlc3QtbmFtZSAiJChQQUNLQUdFX05BTUUpLSQoUEFDS0FHRV9WRVJTSU9OKSIgLS1uby1jaGVja3N1bSAtLWNvbXBhdC1saWJ0b29sICQoQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlMpCisJJChMQ09WKSAkKGNvZGVfY292ZXJhZ2VfcXVpZXQpIC0tZGlyZWN0b3J5ICQoQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkpIC0tcmVtb3ZlICIkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcCIgIi90bXAvKiIgJChDT0RFX0NPVkVSQUdFX0lHTk9SRV9QQVRURVJOKSAtLW91dHB1dC1maWxlICIkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIgorCS1Acm0gLWYgJChDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFKS50bXAKKwlMQU5HPUMgJChHRU5IVE1MKSAkKGNvZGVfY292ZXJhZ2VfcXVpZXQpIC0tcHJlZml4ICQoQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkpIC0tb3V0cHV0LWRpcmVjdG9yeSAiJChDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlkpIiAtLXRpdGxlICIkKFBBQ0tBR0VfTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pIENvZGUgQ292ZXJhZ2UiIC0tbGVnZW5kIC0tc2hvdy1kZXRhaWxzICIkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIiAkKENPREVfQ09WRVJBR0VfR0VOSFRNTF9PUFRJT05TKQorCUBlY2hvICJmaWxlOi8vJChhYnNfYnVpbGRkaXIpLyQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRElSRUNUT1JZKS9pbmRleC5odG1sIgorCisjIEhvb2sgcnVsZSBleGVjdXRlZCBiZWZvcmUgY29kZS1jb3ZlcmFnZS1jYXB0dXJlLCBvdmVycmlkYWJsZSBieSB0aGUgdXNlcgorY29kZS1jb3ZlcmFnZS1jYXB0dXJlLWhvb2s6CisKK2NsZWFuOiBjb2RlLWNvdmVyYWdlLWNsZWFuCitjb2RlLWNvdmVyYWdlLWNsZWFuOgorCS0kKExDT1YpIC0tZGlyZWN0b3J5ICQodG9wX2J1aWxkZGlyKSAtegorCS1ybSAtcmYgJChDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFKSAkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcCAkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSkKKwktZmluZCAuIC1uYW1lICIqLmdjZGEiIC1vIC1uYW1lICIqLmdjb3YiIC1kZWxldGUKKworR0lUSUdOT1JFRklMRVMgPz0KK0dJVElHTk9SRUZJTEVTICs9ICQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkgJChDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlkpCisKK0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgPz0KK0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgKz0gLS1kaXNhYmxlLWNvZGUtY292ZXJhZ2UKKworLlBIT05ZOiBjaGVjay1jb2RlLWNvdmVyYWdlIGNvZGUtY292ZXJhZ2UtY2FwdHVyZSBjb2RlLWNvdmVyYWdlLWNhcHR1cmUtaG9vayBjb2RlLWNvdmVyYWdlLWNsZWFuCisnCisKKworZmkKKworCisKKworaWYgdGVzdCAtZiAke3NyY2Rpcn0vYXJlc19idWlsZC5oOyB0aGVuCisgIHJtIC1mICR7c3JjZGlyfS9hcmVzX2J1aWxkLmgKK2ZpCisKKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CitmaQorCisjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgT1MgIiR7aG9zdH0iCitfQUNFT0YKKworCisKKyAgeGNfcHJvZ19jY19wcmV2X0lGUz0kSUZTCisgIHhjX3Byb2dfY2NfcHJldl9MSUJTPSRMSUJTCisgIHhjX3Byb2dfY2NfcHJldl9DRkxBR1M9JENGTEFHUworICB4Y19wcm9nX2NjX3ByZXZfTERGTEFHUz0kTERGTEFHUworICB4Y19wcm9nX2NjX3ByZXZfQ1BQRkxBR1M9JENQUEZMQUdTCisKKworCisgIHhjX2JhZF92YXJfbGlicz1ubworICBmb3IgeGNfd29yZCBpbiAkTElCUzsgZG8KKyAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgIC1sKiB8IC0tbGlicmFyeT0qKQorICAgICAgICA6CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICB4Y19iYWRfdmFyX2xpYnM9eWVzCisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfbGlicyA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXNpbmcgTElCUzogJExJQlMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXNpbmcgTElCUzogJExJQlMiID4mNjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBMSUJTIGVycm9yOiBMSUJTIG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBsaWJyYXJpZXMgKC1sbmFtZSkuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IExJQlMgZXJyb3I6IExJQlMgbWF5IG9ubHkgYmUgdXNlZCB0byBzcGVjaWZ5IGxpYnJhcmllcyAoLWxuYW1lKS4iID4mNjt9CisgIGZpCisKKworICB4Y19iYWRfdmFyX2xkZmxhZ3M9bm8KKyAgZm9yIHhjX3dvcmQgaW4gJExERkxBR1M7IGRvCisgICAgY2FzZSAiJHhjX3dvcmQiIGluCisgICAgICAtRCopCisgICAgICAgIHhjX2JhZF92YXJfbGRmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1VKikKKyAgICAgICAgeGNfYmFkX3Zhcl9sZGZsYWdzPXllcworICAgICAgICA7OworICAgICAgLUkqKQorICAgICAgICB4Y19iYWRfdmFyX2xkZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9sZGZsYWdzPXllcworICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICBpZiB0ZXN0ICR4Y19iYWRfdmFyX2xkZmxhZ3MgPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVzaW5nIExERkxBR1M6ICRMREZMQUdTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVzaW5nIExERkxBR1M6ICRMREZMQUdTIiA+JjY7fQorICAgIHhjX2JhZF92YXJfbXNnPSJMREZMQUdTIGVycm9yOiBMREZMQUdTIG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBsaW5rZXIgZmxhZ3MsIG5vdCIKKyAgICBmb3IgeGNfd29yZCBpbiAkTERGTEFHUzsgZG8KKyAgICAgIGNhc2UgIiR4Y193b3JkIiBpbgorICAgICAgICAtRCopCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkeGNfYmFkX3Zhcl9tc2cgbWFjcm8gZGVmaW5pdGlvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBtYWNybyBkZWZpbml0aW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLVUqKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIG1hY3JvIHN1cHByZXNzaW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIG1hY3JvIHN1cHByZXNzaW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLUkqKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIGluY2x1ZGUgZGlyZWN0b3JpZXMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZCIgPiY2O30KKyAgICAgICAgICA7OworICAgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJpZXMuIFVzZSBMSUJTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcmllcy4gVXNlIExJQlMgZm9yOiAkeGNfd29yZCIgPiY2O30KKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgZmkKKworCisgIHhjX2JhZF92YXJfY3BwZmxhZ3M9bm8KKyAgZm9yIHhjX3dvcmQgaW4gJENQUEZMQUdTOyBkbworICAgIGNhc2UgIiR4Y193b3JkIiBpbgorICAgICAgLXJwYXRoKikKKyAgICAgICAgeGNfYmFkX3Zhcl9jcHBmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1MKiB8IC0tbGlicmFyeS1wYXRoPSopCisgICAgICAgIHhjX2JhZF92YXJfY3BwZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9jcHBmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgaWYgdGVzdCAkeGNfYmFkX3Zhcl9jcHBmbGFncyA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXNpbmcgQ1BQRkxBR1M6ICRDUFBGTEFHUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1c2luZyBDUFBGTEFHUzogJENQUEZMQUdTIiA+JjY7fQorICAgIHhjX2JhZF92YXJfbXNnPSJDUFBGTEFHUyBlcnJvcjogQ1BQRkxBR1MgbWF5IG9ubHkgYmUgdXNlZCB0byBzcGVjaWZ5IEMgcHJlcHJvY2Vzc29yIGZsYWdzLCBub3QiCisgICAgZm9yIHhjX3dvcmQgaW4gJENQUEZMQUdTOyBkbworICAgICAgY2FzZSAiJHhjX3dvcmQiIGluCisgICAgICAgIC1ycGF0aCopCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkeGNfYmFkX3Zhcl9tc2cgbGlicmFyeSBydW50aW1lIGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IHJ1bnRpbWUgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLUwqIHwgLS1saWJyYXJ5LXBhdGg9KikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICAgIC1sKiB8IC0tbGlicmFyeT0qKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcmllcy4gVXNlIExJQlMgZm9yOiAkeGNfd29yZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkeGNfYmFkX3Zhcl9tc2cgbGlicmFyaWVzLiBVc2UgTElCUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICBmaQorCisKKyAgeGNfYmFkX3Zhcl9jZmxhZ3M9bm8KKyAgZm9yIHhjX3dvcmQgaW4gJENGTEFHUzsgZG8KKyAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgIC1EKikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtVSopCisgICAgICAgIHhjX2JhZF92YXJfY2ZsYWdzPXllcworICAgICAgICA7OworICAgICAgLUkqKQorICAgICAgICB4Y19iYWRfdmFyX2NmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1ycGF0aCopCisgICAgICAgIHhjX2JhZF92YXJfY2ZsYWdzPXllcworICAgICAgICA7OworICAgICAgLUwqIHwgLS1saWJyYXJ5LXBhdGg9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfY2ZsYWdzID0geWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1c2luZyBDRkxBR1M6ICRDRkxBR1MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXNpbmcgQ0ZMQUdTOiAkQ0ZMQUdTIiA+JjY7fQorICAgIHhjX2JhZF92YXJfbXNnPSJDRkxBR1MgZXJyb3I6IENGTEFHUyBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgQyBjb21waWxlciBmbGFncywgbm90IgorICAgIGZvciB4Y193b3JkIGluICRDRkxBR1M7IGRvCisgICAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgICAgLUQqKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIG1hY3JvIGRlZmluaXRpb25zLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkeGNfYmFkX3Zhcl9tc2cgbWFjcm8gZGVmaW5pdGlvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICAgIC1VKikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBtYWNybyBzdXBwcmVzc2lvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBtYWNybyBzdXBwcmVzc2lvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICAgIC1JKikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkeGNfYmFkX3Zhcl9tc2cgaW5jbHVkZSBkaXJlY3Rvcmllcy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLXJwYXRoKikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IHJ1bnRpbWUgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcnkgcnVudGltZSBkaXJlY3Rvcmllcy4gVXNlIExERkxBR1MgZm9yOiAkeGNfd29yZCIgPiY2O30KKyAgICAgICAgICA7OworICAgICAgICAtTCogfCAtLWxpYnJhcnktcGF0aD0qKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcnkgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcnkgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLWwqIHwgLS1saWJyYXJ5PSopCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkeGNfYmFkX3Zhcl9tc2cgbGlicmFyaWVzLiBVc2UgTElCUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJpZXMuIFVzZSBMSUJTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgIGZpCisKKyAgaWYgdGVzdCAkeGNfYmFkX3Zhcl9saWJzID0geWVzIHx8CisgICAgIHRlc3QgJHhjX2JhZF92YXJfY2ZsYWdzID0geWVzIHx8CisgICAgIHRlc3QgJHhjX2JhZF92YXJfbGRmbGFncyA9IHllcyB8fAorICAgICB0ZXN0ICR4Y19iYWRfdmFyX2NwcGZsYWdzID0geWVzOyB0aGVuCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJDYW4gbm90IGNvbnRpbnVlLiBGaXggZXJyb3JzIG1lbnRpb25lZCBpbW1lZGlhdGVseSBhYm92ZSB0aGlzIGxpbmUuIiAiJExJTkVOTyIgNQorICBmaQorCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitpZiAke2FjX2N2X3BhdGhfaW5zdGFsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisgID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11JTlNUQUxMW1xcL10qIHwgXAorICAvdXNyL3VjYi8qICkgOzsKKyAgKikKKyAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorICAgICMgYnkgZGVmYXVsdC4KKyAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwlpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorCSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKKworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKyRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKKyMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCithbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKK2ZpCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAgICAgICBjb250aW51ZQorICAgICBmaQorICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBzaGlmdAorICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICBmaQorZmkKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZmkKKworZmkKKworCit0ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQorYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKworIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKworYWNfcm1maWxlcz0KK2ZvciBhY19maWxlIGluICRhY19maWxlcworZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKyAgZXNhYworZG9uZQorcm0gLWYgJGFjX3JtZmlsZXMKKworaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisjIEF1dG9jb25mLgorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCitkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKKwk7OworICAgIFthYl0ub3V0ICkKKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorCSMgY2VydGFpbmx5IHJpZ2h0LgorCWJyZWFrOzsKKyAgICAqLiogKQorCWlmIHRlc3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5vOworCXRoZW4gOjsgZWxzZQorCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCWZpCisJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCisJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisJIyBhY3R1YWxseSB3b3JraW5nLgorCWJyZWFrOzsKKyAgICAqICkKKwlicmVhazs7CisgIGVzYWMKK2RvbmUKK3Rlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorCitlbHNlCisgIGFjX2ZpbGU9JycKK2ZpCitpZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4gKHZvaWQpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgICBmaQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9vYmpleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagoraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gKSA7OworICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorICAgICAgIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kT0JKRVhUCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0cnVjdCBzdGF0OworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6CisKK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X3Byb2dfY2NfY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgorICAjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KKyAgIyBGb2xsb3dpbmcgQUNfUFJPR19DQ19DX08sIHdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZQorICAjIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywKKyAgIyB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCisgIGFtX2N2X3Byb2dfY2NfY19vPXllcworICBmb3IgYW1faSBpbiAxIDI7IGRvCisgICAgaWYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQiID4mNQorICAgKCRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0KSA+JjUgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSBcCisgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0OyB0aGVuCisgICAgICA6IE9LCisgICAgZWxzZQorICAgICAgYW1fY3ZfcHJvZ19jY19jX289bm8KKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBybSAtZiBjb3JlIGNvbmZ0ZXN0KgorICB1bnNldCBhbV9pCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9wcm9nX2NjX2NfbyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3Byb2dfY2NfY19vIiA+JjY7IH0KK2lmIHRlc3QgIiRhbV9jdl9wcm9nX2NjX2NfbyIgIT0geWVzOyB0aGVuCisgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgorICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAorICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKyAgSUZTPSR4Y19wcm9nX2NjX3ByZXZfSUZTCisgIExJQlM9JHhjX3Byb2dfY2NfcHJldl9MSUJTCisgIENGTEFHUz0keGNfcHJvZ19jY19wcmV2X0NGTEFHUworICBMREZMQUdTPSR4Y19wcm9nX2NjX3ByZXZfTERGTEFHUworICBDUFBGTEFHUz0keGNfcHJvZ19jY19wcmV2X0NQUEZMQUdTCisKKworCisKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRDQ0MiOyB0aGVuCisgICAgQ1hYPSRDQ0MKKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NYWD0kYWNfY3ZfcHJvZ19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYIiA+JjUKKyRhc19lY2hvICIkQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgYWNfY3RfQ1hYPSRDWFgKKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAoraWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ1hYIiA9IHg7IHRoZW4KKyAgICBDWFg9ImcrKyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDWFg9JGFjX2N0X0NYWAorICBmaQorZmkKKworICBmaQorZmkKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHWFg9eWVzCitlbHNlCisgIEdYWD0KK2ZpCithY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jeHhfZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KKyAgIENYWEZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitlbHNlCisgIENYWEZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKwkgQ1hYRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCisgIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0KKyAgZmkKK2ZpCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKyAgICBheF9jeHhfY29tcGlsZV9jeHgxMV9yZXF1aXJlZD1mYWxzZQorICBhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorICBhY19zdWNjZXNzPW5vCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKzExIGZlYXR1cmVzIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKzExIGZlYXR1cmVzIGJ5IGRlZmF1bHQuLi4gIiA+JjY7IH0KK2lmICR7YXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTErOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNoZWNrCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA8PSBzaXplb2YoVCksICJub3QgYmlnIGVub3VnaCIpOworICAgIH07CisKKyAgICBzdHJ1Y3QgQmFzZSB7CisgICAgdmlydHVhbCB2b2lkIGYoKSB7fQorICAgIH07CisgICAgc3RydWN0IENoaWxkIDogcHVibGljIEJhc2UgeworICAgIHZpcnR1YWwgdm9pZCBmKCkgb3ZlcnJpZGUge30KKyAgICB9OworCisgICAgdHlwZWRlZiBjaGVjazxjaGVjazxib29sPj4gcmlnaHRfYW5nbGVfYnJhY2tldHM7CisKKyAgICBpbnQgYTsKKyAgICBkZWNsdHlwZShhKSBiOworCisgICAgdHlwZWRlZiBjaGVjazxpbnQ+IGNoZWNrX3R5cGU7CisgICAgY2hlY2tfdHlwZSBjOworICAgIGNoZWNrX3R5cGUmJiBjciA9IHN0YXRpY19jYXN0PGNoZWNrX3R5cGUmJj4oYyk7CisKKyAgICBhdXRvIGQgPSBhOworICAgIGF1dG8gbCA9IFtdKCl7fTsKKworICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTM3MjgxODQvdGVtcGxhdGUtYWxpYXNlcy1hbmQtc2ZpbmFlCisgICAgLy8gQ2xhbmcgMy4xIGZhaWxzIHdpdGggaGVhZGVycyBvZiBsaWJzdGQrKyA0LjguMyB3aGVuIHVzaW5nIHN0ZDo6ZnVuY3Rpb24gYmVjYXVzZSBvZiB0aGlzCisgICAgbmFtZXNwYWNlIHRlc3RfdGVtcGxhdGVfYWxpYXNfc2ZpbmFlIHsKKyAgICAgICAgc3RydWN0IGZvbyB7fTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICB1c2luZyBtZW1iZXIgPSB0eXBlbmFtZSBUOjptZW1iZXJfdHlwZTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICB2b2lkIGZ1bmMoLi4uKSB7fQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHZvaWQgZnVuYyhtZW1iZXI8VD4qKSB7fQorCisgICAgICAgIHZvaWQgdGVzdCgpOworCisgICAgICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgICAgIGZ1bmM8Zm9vPigwKTsKKyAgICAgICAgfQorICAgIH0KKworX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTE9eWVzCitlbHNlCisgIGF4X2N2X2N4eF9jb21waWxlX2N4eDExPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9jdl9jeHhfY29tcGlsZV9jeHgxMSIgPiY1CiskYXNfZWNobyAiJGF4X2N2X2N4eF9jb21waWxlX2N4eDExIiA+JjY7IH0KKyAgaWYgdGVzdCB4JGF4X2N2X2N4eF9jb21waWxlX2N4eDExID0geHllczsgdGhlbgorICAgIGFjX3N1Y2Nlc3M9eWVzCisgIGZpCisKKworCisgICAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICBmb3Igc3dpdGNoIGluIC1zdGQ9YysrMTEgLXN0ZD1jKysweDsgZG8KKyAgICAgIGNhY2hldmFyPWAkYXNfZWNobyAiYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTFfJHN3aXRjaCIgfCAkYXNfdHJfc2hgCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBzdXBwb3J0cyBDKysxMSBmZWF0dXJlcyB3aXRoICRzd2l0Y2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKzExIGZlYXR1cmVzIHdpdGggJHN3aXRjaC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskY2FjaGV2YXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCisgICAgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTICRzd2l0Y2giCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNoZWNrCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA8PSBzaXplb2YoVCksICJub3QgYmlnIGVub3VnaCIpOworICAgIH07CisKKyAgICBzdHJ1Y3QgQmFzZSB7CisgICAgdmlydHVhbCB2b2lkIGYoKSB7fQorICAgIH07CisgICAgc3RydWN0IENoaWxkIDogcHVibGljIEJhc2UgeworICAgIHZpcnR1YWwgdm9pZCBmKCkgb3ZlcnJpZGUge30KKyAgICB9OworCisgICAgdHlwZWRlZiBjaGVjazxjaGVjazxib29sPj4gcmlnaHRfYW5nbGVfYnJhY2tldHM7CisKKyAgICBpbnQgYTsKKyAgICBkZWNsdHlwZShhKSBiOworCisgICAgdHlwZWRlZiBjaGVjazxpbnQ+IGNoZWNrX3R5cGU7CisgICAgY2hlY2tfdHlwZSBjOworICAgIGNoZWNrX3R5cGUmJiBjciA9IHN0YXRpY19jYXN0PGNoZWNrX3R5cGUmJj4oYyk7CisKKyAgICBhdXRvIGQgPSBhOworICAgIGF1dG8gbCA9IFtdKCl7fTsKKworICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTM3MjgxODQvdGVtcGxhdGUtYWxpYXNlcy1hbmQtc2ZpbmFlCisgICAgLy8gQ2xhbmcgMy4xIGZhaWxzIHdpdGggaGVhZGVycyBvZiBsaWJzdGQrKyA0LjguMyB3aGVuIHVzaW5nIHN0ZDo6ZnVuY3Rpb24gYmVjYXVzZSBvZiB0aGlzCisgICAgbmFtZXNwYWNlIHRlc3RfdGVtcGxhdGVfYWxpYXNfc2ZpbmFlIHsKKyAgICAgICAgc3RydWN0IGZvbyB7fTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICB1c2luZyBtZW1iZXIgPSB0eXBlbmFtZSBUOjptZW1iZXJfdHlwZTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICB2b2lkIGZ1bmMoLi4uKSB7fQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHZvaWQgZnVuYyhtZW1iZXI8VD4qKSB7fQorCisgICAgICAgIHZvaWQgdGVzdCgpOworCisgICAgICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgICAgIGZ1bmM8Zm9vPigwKTsKKyAgICAgICAgfQorICAgIH0KKworX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAkY2FjaGV2YXI9eWVzCitlbHNlCisgIGV2YWwgJGNhY2hldmFyPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCitmaQorZXZhbCBhY19yZXM9XCQkY2FjaGV2YXIKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICAgICAgaWYgZXZhbCB0ZXN0IHhcJCRjYWNoZXZhciA9IHh5ZXM7IHRoZW4KKyAgICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkc3dpdGNoIgorICAgICAgICBhY19zdWNjZXNzPXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICBpZiB0ZXN0IHgkYXhfY3h4X2NvbXBpbGVfY3h4MTFfcmVxdWlyZWQgPSB4dHJ1ZTsgdGhlbgorICAgIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0aGVuCisgICAgICBhc19mbl9lcnJvciAkPyAiKioqIEEgY29tcGlsZXIgd2l0aCBzdXBwb3J0IGZvciBDKysxMSBsYW5ndWFnZSBmZWF0dXJlcyBpcyByZXF1aXJlZC4iICIkTElORU5PIiA1CisgICAgZmkKKyAgZWxzZQorICAgIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0aGVuCisgICAgICBIQVZFX0NYWDExPTAKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogTm8gY29tcGlsZXIgd2l0aCBDKysxMSBzdXBwb3J0IHdhcyBmb3VuZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBObyBjb21waWxlciB3aXRoIEMrKzExIHN1cHBvcnQgd2FzIGZvdW5kIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIEhBVkVfQ1hYMTE9MQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NYWDExIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKworCisgIGZpCisKKworYW1fX2FwaV92ZXJzaW9uPScxLjE1JworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gIiA+JjY7IH0KKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbXFxcIlwjXCRcJlwnXGAkYW1fbGZdKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiICIkTElORU5PIiA1OzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnNhZmUgc3JjZGlyIHZhbHVlOiAnJHNyY2RpciciICIkTElORU5PIiA1OzsKK2VzYWMKKworIyBEbyAnc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworIyBkaXJlY3RvcnkpLgoraWYgKAorICAgYW1faGFzX3NsZXB0PW5vCisgICBmb3IgYW1fdHJ5IGluIDEgMjsgZG8KKyAgICAgZWNobyAidGltZXN0YW1wLCBzbGVwdDogJGFtX2hhc19zbGVwdCIgPiBjb25mdGVzdC5maWxlCisgICAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVuCisJIyAtTCBkaWRuJ3Qgd29yay4KKwlzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAorICAgICBmaQorICAgICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorCSYmIHRlc3QgIiQqIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisJIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorCSMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKwkjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisJIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorCWFzX2ZuX2Vycm9yICQ/ICJscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCisgIGFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CisgICAgIGZpCisgICAgIGlmIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUgfHwgdGVzdCAkYW1fdHJ5IC1lcSAyOyB0aGVuCisgICAgICAgYnJlYWsKKyAgICAgZmkKKyAgICAgIyBKdXN0IGluIGNhc2UuCisgICAgIHNsZWVwIDEKKyAgICAgYW1faGFzX3NsZXB0PXllcworICAgZG9uZQorICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIGFzX2ZuX2Vycm9yICQ/ICJuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiAiJExJTkVOTyIgNQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisjIElmIHdlIGRpZG4ndCBzbGVlcCwgd2Ugc3RpbGwgbmVlZCB0byBlbnN1cmUgdGltZSBzdGFtcHMgb2YgY29uZmlnLnN0YXR1cyBhbmQKKyMgZ2VuZXJhdGVkIGZpbGVzIGFyZSBzdHJpY3RseSBuZXdlci4KK2FtX3NsZWVwX3BpZD0KK2lmIGdyZXAgJ3NsZXB0OiBubycgY29uZnRlc3QuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgKCBzbGVlcCAxICkgJgorICBhbV9zbGVlcF9waWQ9JCEKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmZpbGUKKwordGVzdCAiJHByb2dyYW1fcHJlZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXiYkcHJvZ3JhbV9wcmVmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCit0ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZcJCYkcHJvZ3JhbV9zdWZmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBEb3VibGUgYW55IFwgb3IgJC4KKyMgQnkgZGVmYXVsdCB3YXMgYHMseCx4JywgcmVtb3ZlIGl0IGlmIHVzZWxlc3MuCithY19zY3JpcHQ9J3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8nCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWAkYXNfZWNobyAiJHByb2dyYW1fdHJhbnNmb3JtX25hbWUiIHwgc2VkICIkYWNfc2NyaXB0ImAKKworaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KK2ZpCisKK2lmIHRlc3QgeCIke2luc3RhbGxfc2grc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nICdzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gIm1ha2UgaW5zdGFsbC1zdHJpcCIuICBIb3dldmVyICdzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSAnU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgorICBpZiAke2FjX2N2X3BhdGhfbWtkaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbworCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwkgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIHx8IGNvbnRpbnVlCisJICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKAorCSAgICAgJ21rZGlyIChHTlUgY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoZmlsZXV0aWxzKSAnNC4xKikKKwkgICAgICAgYWNfY3ZfcGF0aF9ta2Rpcj0kYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0CisJICAgICAgIGJyZWFrIDM7OworCSAgIGVzYWMKKwkgZG9uZQorICAgICAgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorCisgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCisgICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgTUtESVJfUCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUtESVJfUCIgPiY1CiskYXNfZWNobyAiJE1LRElSX1AiID4mNjsgfQorCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCitybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorCitERVBESVI9IiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiCisKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKKworCithbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9CithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tICdtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkX2FtX3Jlc3VsdCIgPiY2OyB9CitybSAtZiBjb25maW5jIGNvbmZtZgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKKyAgYW1fX25vZGVwPSdfbm8nCitmaQorIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgIFN0YXJ0IG9mIGF1dG9tYWtlIGluaXRpYWxpemF0aW9uIGNvZGUgICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgorICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAorICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgIGFtX19pc3JjPScgLUkkKHNyY2RpciknCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgIiRMSU5FTk8iIDUKKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCisKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorIFBBQ0tBR0U9J2MtYXJlcycKKyBWRVJTSU9OPScxLjEyLjAnCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFICIkUEFDS0FHRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iCitfQUNFT0YKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9CisKKworQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQorCisKK01BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQorCisjIEZvciBiZXR0ZXIgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFRvIGJlIHJlbW92ZWQgb25jZSBBdXRvbWFrZSAxLjkueAorIyBkaWVzIG91dCBmb3IgZ29vZC4gIEZvciBtb3JlIGJhY2tncm91bmQsIHNlZToKKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDAxLmh0bWw+CisjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAxNC5odG1sPgorbWtkaXJfcD0nJChNS0RJUl9QKScKKworIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0IChhbmQgcG9zc2libHkgdGhlIFRBUCBkcml2ZXIpLiAgVGhlCisjIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24gc29tZSBwbGF0Zm9ybXMuCisjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBZZXMsIGl0J3Mgc3RpbGwgdXNlZAorIyBpbiB0aGUgd2lsZCA6LSggIFdlIHNob3VsZCBmaW5kIGEgcHJvcGVyIHdheSB0byBkZXByZWNhdGUgaXQgLi4uCitBTVRBUj0nJCR7VEFSLXRhcn0nCisKKworIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorX2FtX3Rvb2xzPSdnbnV0YXIgIHBheCBjcGlvIG5vbmUnCisKK2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nCisKKworCisKKworZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEIi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWMKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCisgICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgQWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rICctYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorZmkKKworCitkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEIi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorZmkKKworCisKKyMgUE9TSVggd2lsbCBzYXkgaW4gYSBmdXR1cmUgdmVyc2lvbiB0aGF0IHJ1bm5pbmcgInJtIC1mIiB3aXRoIG5vIGFyZ3VtZW50CisjIGlzIE9LOyBhbmQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIG1ha2UgdGhhdCBhc3N1bXB0aW9uIGluIG91ciBNYWtlZmlsZQorIyByZWNpcGVzLiAgU28gdXNlIGFuIGFnZ3Jlc3NpdmUgcHJvYmUgdG8gY2hlY2sgdGhhdCB0aGUgdXNhZ2Ugd2Ugd2FudCBpcworIyBhY3R1YWxseSBzdXBwb3J0ZWQgImluIHRoZSB3aWxkIiB0byBhbiBhY2NlcHRhYmxlIGRlZ3JlZS4KKyMgU2VlIGF1dG9tYWtlIGJ1ZyMxMDgyOC4KKyMgVG8gbWFrZSBhbnkgaXNzdWUgbW9yZSB2aXNpYmxlLCBjYXVzZSB0aGUgcnVubmluZyBjb25maWd1cmUgdG8gYmUgYWJvcnRlZAorIyBieSBkZWZhdWx0IGlmIHRoZSAncm0nIHByb2dyYW0gaW4gdXNlIGRvZXNuJ3QgbWF0Y2ggb3VyIGV4cGVjdGF0aW9uczsgdGhlCisjIHVzZXIgY2FuIHN0aWxsIG92ZXJyaWRlIHRoaXMgdGhvdWdoLgoraWYgcm0gLWYgJiYgcm0gLWZyICYmIHJtIC1yZjsgdGhlbiA6IE9LOyBlbHNlCisgIGNhdCA+JjIgPDwnRU5EJworT29wcyEKKworWW91ciAncm0nIHByb2dyYW0gc2VlbXMgdW5hYmxlIHRvIHJ1biB3aXRob3V0IGZpbGUgb3BlcmFuZHMgc3BlY2lmaWVkCitvbiB0aGUgY29tbWFuZCBsaW5lLCBldmVuIHdoZW4gdGhlICctZicgb3B0aW9uIGlzIHByZXNlbnQuICBUaGlzIGlzIGNvbnRyYXJ5Cit0byB0aGUgYmVoYXZpb3VyIG9mIG1vc3Qgcm0gcHJvZ3JhbXMgb3V0IHRoZXJlLCBhbmQgbm90IGNvbmZvcm1pbmcgd2l0aAordGhlIHVwY29taW5nIFBPU0lYIHN0YW5kYXJkOiA8aHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9NTQyPgorCitQbGVhc2UgdGVsbCBidWctYXV0b21ha2VAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSB2YWx1ZQorb2YgeW91ciAkUEFUSCBhbmQgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLiAgVGhpcworY2FuIGhlbHAgdXMgaW1wcm92ZSBmdXR1cmUgYXV0b21ha2UgdmVyc2lvbnMuCisKK0VORAorICBpZiB0ZXN0IHgiJEFDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIiA9IHgieWVzIjsgdGhlbgorICAgIGVjaG8gJ0NvbmZpZ3VyYXRpb24gd2lsbCBwcm9jZWVkIGFueXdheSwgc2luY2UgeW91IGhhdmUgc2V0IHRoZScgPiYyCisgICAgZWNobyAnQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0gdmFyaWFibGUgdG8gInllcyInID4mMgorICAgIGVjaG8gPiYyCisgIGVsc2UKKyAgICBjYXQgPiYyIDw8J0VORCcKK0Fib3J0aW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIHRvIGVuc3VyZSB5b3UgdGFrZSBub3RpY2Ugb2YgdGhlIGlzc3VlLgorCitZb3UgY2FuIGRvd25sb2FkIGFuZCBpbnN0YWxsIEdOVSBjb3JldXRpbHMgdG8gZ2V0IGFuICdybScgaW1wbGVtZW50YXRpb24KK3RoYXQgYmVoYXZlcyBwcm9wZXJseTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jb3JldXRpbHMvPi4KKworSWYgeW91IHdhbnQgdG8gY29tcGxldGUgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB1c2luZyB5b3VyIHByb2JsZW1hdGljCisncm0nIGFueXdheSwgZXhwb3J0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTQordG8gInllcyIsIGFuZCByZS1ydW4gY29uZmlndXJlLgorCitFTkQKKyAgICBhc19mbl9lcnJvciAkPyAiWW91ciAncm0nIHByb2dyYW0gaXMgYmFkLCBzb3JyeS4iICIkTElORU5PIiA1CisgIGZpCitmaQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAgRW5kIG9mIGF1dG9tYWtlIGluaXRpYWxpemF0aW9uIGNvZGUgICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9HUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0VHUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisKKworCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgT1MgaXMgQUlYICh0byBkZWZpbmUgX0FMTF9TT1VSQ0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIE9TIGlzIEFJWCAodG8gZGVmaW5lIF9BTExfU09VUkNFKS4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZmRlZiBfQUlYCisgICB5ZXNfdGhpc19pc19haXgKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXNfdGhpc19pc19haXgiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICRhc19lY2hvICIjZGVmaW5lIF9BTExfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworCisKKyAgICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgX1RIUkVBRF9TQUZFIGlzIGFscmVhZHkgZGVmaW5lZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBfVEhSRUFEX1NBRkUgaXMgYWxyZWFkeSBkZWZpbmVkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisjaWZkZWYgX1RIUkVBRF9TQUZFCisgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0bXBfdGhyZWFkX3NhZmVfaW5pdGlhbGx5X2RlZmluZWQ9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdG1wX3RocmVhZF9zYWZlX2luaXRpYWxseV9kZWZpbmVkPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0bXBfdGhyZWFkX3NhZmVfaW5pdGlhbGx5X2RlZmluZWQiID0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgX1RIUkVBRF9TQUZFIGlzIGFjdHVhbGx5IG5lZWRlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBfVEhSRUFEX1NBRkUgaXMgYWN0dWFsbHkgbmVlZGVkLi4uICIgPiY2OyB9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFsxMjNdLiogfCBhaXg0LlswMTJdLiopCisgICAgICAgICAgICB0bXBfbmVlZF90aHJlYWRfc2FmZT0ibm8iCisgICAgICA7OworICAgIGFpeCopCisgICAgICAgICAgICB0bXBfbmVlZF90aHJlYWRfc2FmZT0ieWVzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgdG1wX25lZWRfdGhyZWFkX3NhZmU9Im5vIgorICAgICAgOzsKKyAgZXNhYworCisgICAgaWYgdGVzdCAiJHRtcF9uZWVkX3RocmVhZF9zYWZlIiA9ICJ5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBfVEhSRUFEX1NBRkUgaXMgb253YXJkcyBkZWZpbmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIF9USFJFQURfU0FGRSBpcyBvbndhcmRzIGRlZmluZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRtcF90aHJlYWRfc2FmZV9pbml0aWFsbHlfZGVmaW5lZCIgPSAieWVzIiB8fAorICAgIHRlc3QgIiR0bXBfbmVlZF90aHJlYWRfc2FmZSIgPSAieWVzIjsgdGhlbgorCisKKyRhc19lY2hvICIjZGVmaW5lIE5FRURfVEhSRUFEX1NBRkUgMSIgPj5jb25mZGVmcy5oCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjaWZuZGVmIF9USFJFQURfU0FGRQorIyAgZGVmaW5lIF9USFJFQURfU0FGRQorI2VuZGlmCitfRU9GCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCisgICMKKworCisgICAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIF9SRUVOVFJBTlQgaXMgYWxyZWFkeSBkZWZpbmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIF9SRUVOVFJBTlQgaXMgYWxyZWFkeSBkZWZpbmVkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisjaWZkZWYgX1JFRU5UUkFOVAorICAgICAgaW50IGR1bW15PTE7CisjZWxzZQorICAgICAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdG1wX3JlZW50cmFudF9pbml0aWFsbHlfZGVmaW5lZD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0bXBfcmVlbnRyYW50X2luaXRpYWxseV9kZWZpbmVkPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0bXBfcmVlbnRyYW50X2luaXRpYWxseV9kZWZpbmVkIiA9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIF9SRUVOVFJBTlQgaXMgYWN0dWFsbHkgbmVlZGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIF9SRUVOVFJBTlQgaXMgYWN0dWFsbHkgbmVlZGVkLi4uICIgPiY2OyB9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHNvbGFyaXMqKQorICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisgICAgICA7OworICAgICopCisgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9Im5vIgorICAgICAgOzsKKyAgZXNhYworCisgICAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgaWYoMCAhPSBlcnJubykKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2Vycm5vPSJ5ZXMiCisKK2Vsc2UKKworICAgIHRtcF9lcnJubz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJHRtcF9lcnJubyIgPSAieWVzIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZmRlZiBlcnJubworICAgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRtcF9lcnJubz0iZXJybm9fbWFjcm9fZGVmaW5lZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZmRlZiBlcnJubworICAgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHRtcF9lcnJubz0iZXJybm9fbWFjcm9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGdtdGltZV9yIGlubm9jdW91c19nbXRpbWVfcgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBnbXRpbWVfcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ210aW1lX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ210aW1lX3IgfHwgZGVmaW5lZCBfX3N0dWJfX19nbXRpbWVfcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnbXRpbWVfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2dtdGltZV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHRtcF9nbXRpbWVfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkdG1wX2dtdGltZV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnbXRpbWVfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgdG1wX2dtdGltZV9yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ210aW1lX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgICAgdG1wX2dtdGltZV9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgbG9jYWx0aW1lX3IgaW5ub2N1b3VzX2xvY2FsdGltZV9yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGxvY2FsdGltZV9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBsb2NhbHRpbWVfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9sb2NhbHRpbWVfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX2xvY2FsdGltZV9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGxvY2FsdGltZV9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfbG9jYWx0aW1lX3I9InllcyIKKworZWxzZQorCisgICAgdG1wX2xvY2FsdGltZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfbG9jYWx0aW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImxvY2FsdGltZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB0bXBfbG9jYWx0aW1lX3I9InByb3RvX2RlY2xhcmVkIgorCitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJsb2NhbHRpbWVfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgICB0bXBfbG9jYWx0aW1lX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKworICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJlcnJvcl9yIGlubm9jdW91c19zdHJlcnJvcl9yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cmVycm9yX3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmVycm9yX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RyZXJyb3JfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cmVycm9yX3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3RyZXJyb3JfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX3N0cmVycm9yX3I9InllcyIKKworZWxzZQorCisgICAgdG1wX3N0cmVycm9yX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJHRtcF9zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cmVycm9yX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHRtcF9zdHJlcnJvcl9yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJlcnJvcl9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICAgIHRtcF9zdHJlcnJvcl9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RydG9rX3IgaW5ub2N1b3VzX3N0cnRva19yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cnRva19yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJ0b2tfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJ0b2tfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cnRva19yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cnRva19yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfc3RydG9rX3I9InllcyIKKworZWxzZQorCisgICAgdG1wX3N0cnRva19yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfc3RydG9rX3IiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RydG9rX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHRtcF9zdHJ0b2tfcj0icHJvdG9fZGVjbGFyZWQiCisKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RydG9rX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgICAgdG1wX3N0cnRva19yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgaW5ldF9udG9hX3IgaW5ub2N1b3VzX2luZXRfbnRvYV9yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGluZXRfbnRvYV9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBpbmV0X250b2FfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9pbmV0X250b2FfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX2luZXRfbnRvYV9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGluZXRfbnRvYV9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfaW5ldF9udG9hX3I9InllcyIKKworZWxzZQorCisgICAgdG1wX2luZXRfbnRvYV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfaW5ldF9udG9hX3IiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJpbmV0X250b2FfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgdG1wX2luZXRfbnRvYV9yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImluZXRfbnRvYV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICAgIHRtcF9pbmV0X250b2Ffcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGdldGhvc3RieWFkZHJfciBpbm5vY3VvdXNfZ2V0aG9zdGJ5YWRkcl9yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGdldGhvc3RieWFkZHJfcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5YWRkcl9yICgpOworI2lmIGRlZmluZWQgX19zdHViX2dldGhvc3RieWFkZHJfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX2dldGhvc3RieWFkZHJfcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnZXRob3N0YnlhZGRyX3IgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9nZXRob3N0YnlhZGRyX3I9InllcyIKKworZWxzZQorCisgICAgdG1wX2dldGhvc3RieWFkZHJfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkdG1wX2dldGhvc3RieWFkZHJfciIgPSAieWVzIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RieWFkZHJfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgdG1wX2dldGhvc3RieWFkZHJfcj0icHJvdG9fZGVjbGFyZWQiCisKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRob3N0YnlhZGRyX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgICAgdG1wX2dldGhvc3RieWFkZHJfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGdldGhvc3RieW5hbWVfciBpbm5vY3VvdXNfZ2V0aG9zdGJ5bmFtZV9yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGdldGhvc3RieW5hbWVfcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5bmFtZV9yICgpOworI2lmIGRlZmluZWQgX19zdHViX2dldGhvc3RieW5hbWVfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX2dldGhvc3RieW5hbWVfcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnZXRob3N0YnluYW1lX3IgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9nZXRob3N0YnluYW1lX3I9InllcyIKKworZWxzZQorCisgICAgdG1wX2dldGhvc3RieW5hbWVfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkdG1wX2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RieW5hbWVfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgdG1wX2dldGhvc3RieW5hbWVfcj0icHJvdG9fZGVjbGFyZWQiCisKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRob3N0YnluYW1lX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgICAgdG1wX2dldGhvc3RieW5hbWVfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGdldHByb3RvYnluYW1lX3IgaW5ub2N1b3VzX2dldHByb3RvYnluYW1lX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0cHJvdG9ieW5hbWVfcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0cHJvdG9ieW5hbWVfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9nZXRwcm90b2J5bmFtZV9yIHx8IGRlZmluZWQgX19zdHViX19fZ2V0cHJvdG9ieW5hbWVfcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnZXRwcm90b2J5bmFtZV9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZ2V0cHJvdG9ieW5hbWVfcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfZ2V0cHJvdG9ieW5hbWVfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkdG1wX2dldHByb3RvYnluYW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRwcm90b2J5bmFtZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB0bXBfZ2V0cHJvdG9ieW5hbWVfcj0icHJvdG9fZGVjbGFyZWQiCisKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRwcm90b2J5bmFtZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICAgIHRtcF9nZXRwcm90b2J5bmFtZV9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0c2VydmJ5cG9ydF9yIGlubm9jdW91c19nZXRzZXJ2Ynlwb3J0X3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0c2VydmJ5cG9ydF9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRzZXJ2Ynlwb3J0X3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ2V0c2VydmJ5cG9ydF9yIHx8IGRlZmluZWQgX19zdHViX19fZ2V0c2VydmJ5cG9ydF9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldHNlcnZieXBvcnRfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2dldHNlcnZieXBvcnRfcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ2V0c2VydmJ5cG9ydF9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB0bXBfZ2V0c2VydmJ5cG9ydF9yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldHNlcnZieXBvcnRfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgICB0bXBfZ2V0c2VydmJ5cG9ydF9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKworICAgIGZpCisgICAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAieWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgX1JFRU5UUkFOVCBpcyBvbndhcmRzIGRlZmluZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgX1JFRU5UUkFOVCBpcyBvbndhcmRzIGRlZmluZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRtcF9yZWVudHJhbnRfaW5pdGlhbGx5X2RlZmluZWQiID0gInllcyIgfHwKKyAgICB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJ5ZXMiOyB0aGVuCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9SRUVOVFJBTlQgMSIgPj5jb25mZGVmcy5oCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjaWZuZGVmIF9SRUVOVFJBTlQKKyMgIGRlZmluZSBfUkVFTlRSQU5UCisjZW5kaWYKK19FT0YKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKyAgIworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sYXJnZWZpbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGFyZ2VmaWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbGFyZ2VmaWxlOworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiICE9IG5vOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zeXNfbGFyZ2VmaWxlX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz1ubworICAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBhY19zYXZlX0NDPSRDQworICAgICAgIHdoaWxlIDo7IGRvCisJICMgSVJJWCA2LjIgYW5kIGxhdGVyIGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQsCisJICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgorCSBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorCSBDQz0iJENDIC1uMzIiCisJIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz0nIC1uMzInOyBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgYnJlYWsKKyAgICAgICBkb25lCisgICAgICAgQ0M9JGFjX3NhdmVfQ0MKKyAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiICE9IG5vOyB0aGVuCisgICAgQ0M9JENDJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MKKyAgZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubzsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz02NDsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9dW5rbm93bgorICBicmVhaworZG9uZQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY2OyB9CitjYXNlICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyBpbiAjKAorICBubyB8IHVua25vd24pIDs7CisgICopCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cworX0FDRU9GCis7OworZXNhYworcm0gLXJmIGNvbmZ0ZXN0KgorICBpZiB0ZXN0ICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyA9IHVua25vd247IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc3lzX2xhcmdlX2ZpbGVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9bm87IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNkZWZpbmUgX0xBUkdFX0ZJTEVTIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkgLSAxICsgKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz11bmtub3duCisgIGJyZWFrCitkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNjsgfQorY2FzZSAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0xBUkdFX0ZJTEVTICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMKK19BQ0VPRgorOzsKK2VzYWMKK3JtIC1yZiBjb25mdGVzdCoKKyAgZmkKKworCitmaQorCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgc29sYXJpcyopCisKKyRhc19lY2hvICIjZGVmaW5lIEVUQ19JTkVUIDEiID4+Y29uZmRlZnMuaAorCisgICAgOzsKK2VzYWMKKworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi40LjYnCittYWNyb19yZXZpc2lvbj0nMi40LjYnCisKKworCisKKworCisKKworCisKKworCisKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKKworIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCitFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIiCit9CisKK2Nhc2UgJEVDSE8gaW4KKyAgcHJpbnRmKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50ZiIgPiY1CiskYXNfZWNobyAicHJpbnRmIiA+JjY7IH0gOzsKKyAgcHJpbnQqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnQgLXIiID4mNQorJGFzX2VjaG8gInByaW50IC1yIiA+JjY7IH0gOzsKKyAgKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNhdCIgPiY1CiskYXNfZWNobyAiY2F0IiA+JjY7IH0gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfU0VEIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorCit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRkdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9GR1JFUD0iJEdSRVAgLUYiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9GR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9GR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRkdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZworICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworZWxzZQorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0kbHRfY3ZfcGF0aF9MRAoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9OTSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09JE5NCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJIyBNU1lTIGNvbnZlcnRzIC9kZXYvbnVsbCB0byBOVUwsIE1pbkdXIG5tIHRyZWF0cyBOVUwgYXMgZW1wdHkKKwljYXNlICRidWlsZF9vcyBpbgorCW1pbmd3KikgbHRfYmFkX2ZpbGU9Y29uZnRlc3Qubm0vbm9maWxlIDs7CisJKikgbHRfYmFkX2ZpbGU9L2Rldi9udWxsIDs7CisJZXNhYworCWNhc2UgYCIkdG1wX25tIiAtQiAkbHRfYmFkX2ZpbGUgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSokbHRfYmFkX2ZpbGUqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhayAyCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhayAyCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCBubyAhPSAiJGx0X2N2X3BhdGhfTk0iOyB0aGVuCisgIE5NPSRsdF9jdl9wYXRoX05NCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJERVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KK2lmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQorJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgorICBhY19jdF9EVU1QQklOPSREVU1QQklOCisgIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisgIGZpCitmaQorCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCA6ICE9ICIkRFVNUEJJTiI7IHRoZW4KKyAgICBOTT0kRFVNUEJJTgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X25tX2ludGVyZmFjZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mNSkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JjUpCisgIGNhdCBjb25mdGVzdC5vdXQgPiY1CisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X25tX2ludGVyZmFjZSIgPiY2OyB9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitmaQorCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX21heF9jbWRfbGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICBpPTAKKyAgdGVzdHN0cmluZz1BQkNECisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zMiopCisgICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbCSBdLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiAmJiBcCisgICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDg7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0IFhgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgMTcgIT0gIiRpIiAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworCitmaQorCitpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKKworCisKKworCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKKworZmkKKwordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX3JlbG9hZF9mbGFnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR3bC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyAndW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHRoYXQgcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlICdmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciAncGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFs0LTldKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbNDVdKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldXC5bMC05XSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVswLTldWzAtOV0qIFZlcnNpb24gWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7Oworb3MyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoOworICAjIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKyAgICA7OworICAqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworICAgIDs7CisgIGVzYWMKKyAgOzsKKyopCisgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworICA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICBmb3IgYWNfcHJvZyBpbiBhcgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2ZpCisKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcl9hdF9maWxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgIGlmIHRlc3QgMCAtZXEgIiRhY19zdGF0dXMiOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCWlmIHRlc3QgMCAtbmUgIiRhY19zdGF0dXMiOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9hcl9hdF9maWxlIjsgdGhlbgorICBhcmNoaXZlcl9saXN0X3NwZWM9CitlbHNlCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorZmkKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorCisKKworCisKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYml0cmlnKiB8IG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbQkNERUdSU1RdJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbQkNEVF0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tBQkNER0lTVFddJworICA7OworaHB1eCopCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbQkNERUdRUlNUXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbQkRSVF0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tBQkRUXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbREZOU1RVXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7Citlc2FjCisKK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICMgR2V0cyBsaXN0IG9mIGRhdGEgc3ltYm9scyB0byBpbXBvcnQuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0ic2VkIC1uIC1lICdzL15JIC4qIFwoLipcKSQvXDEvcCciCisgICMgQWRqdXN0IHRoZSBiZWxvdyBnbG9iYWwgc3ltYm9sIHRyYW5zZm9ybXMgdG8gZml4dXAgaW1wb3J0ZWQgdmFyaWFibGVzLgorICBsdF9jZGVjbF9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC9leHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgXDE7L3AnIgorICBsdF9jX25hbWVfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciCisgIGx0X2NfbmFtZV9saWJfaG9vaz0iXAorICAtZSAncy9eSSAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnXAorICAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgMH0sL3AnIgorZWxzZQorICAjIERpc2FibGUgaG9va3MgYnkgZGVmYXVsdC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PQorICBsdF9jZGVjbF9ob29rPQorICBsdF9jX25hbWVfaG9vaz0KKyAgbHRfY19uYW1lX2xpYl9ob29rPQorZmkKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiJcCiskbHRfY2RlY2xfaG9va1wKKyIgLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4iXAorJGx0X2NfbmFtZV9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIHdpdGggbGliIHByZWZpeCBhbmQKKyMgc3ltYm9sIGFkZHJlc3MuCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4iXAorJGx0X2NfbmFtZV9saWJfaG9va1wKKyIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiwKKyAgICAjIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgZm9yIGFueSBpbXBvcnRlZCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICAvXiAqU3ltYm9sIG5hbWUgKjogL3tzcGxpdChcJCAwLHNuLFwiOlwiKTsgc2k9c3Vic3RyKHNuWzJdLDIpfTsiXAorIiAgICAgL14gKlR5cGUgKjogY29kZS97cHJpbnQgXCJUXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCisiICAgICAvXiAqVHlwZSAqOiBkYXRhL3twcmludCBcIklcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPVwiRFwifTsgXCQgMH4vXChcKS4qXHwve2Y9XCJUXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCxhLC9cfHxcci8pOyBzcGxpdChhWzJdLHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IGYsc1sxXSxzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCBmLHRbMV0sc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3RcIiI7IH0gPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZCBfX29zZl9fCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisJICBMSUJTPWNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCB5ZXMgPSAiJHBpcGVfd29ya3MiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCisKK2ZpCisKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CitmaQorCisjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNyb290IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zeXNyb290OworZWxzZQorICB3aXRoX3N5c3Jvb3Q9bm8KK2ZpCisKKworbHRfc3lzcm9vdD0KK2Nhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfc3lzcm9vdCIgPiY1CiskYXNfZWNobyAiJHdpdGhfc3lzcm9vdCIgPiY2OyB9CisgICBhc19mbl9lcnJvciAkPyAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKyAgIDs7Citlc2FjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHdvcmtpbmcgZGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgd29ya2luZyBkZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2x0X0REKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcHJpbnRmIDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmID5jb25mdGVzdC5pCitjYXQgY29uZnRlc3QuaSBjb25mdGVzdC5pID5jb25mdGVzdDIuaQorOiAke2x0X0REOj0kRER9CitpZiB0ZXN0IC16ICIkbHRfREQiOyB0aGVuCisgIGFjX3BhdGhfbHRfRERfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGRkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9sdF9ERD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfbHRfREQiIHx8IGNvbnRpbnVlCitpZiAiJGFjX3BhdGhfbHRfREQiIGJzPTMyIGNvdW50PTEgPGNvbmZ0ZXN0Mi5pID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KKyAgY21wIC1zIGNvbmZ0ZXN0LmkgY29uZnRlc3Qub3V0IFwKKyAgJiYgYWNfY3ZfcGF0aF9sdF9ERD0iJGFjX3BhdGhfbHRfREQiIGFjX3BhdGhfbHRfRERfZm91bmQ9OgorZmkKKyAgICAgICRhY19wYXRoX2x0X0REX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9sdF9ERCI7IHRoZW4KKyAgICA6CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfbHRfREQ9JGx0X0RECitmaQorCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0Mi5pIGNvbmZ0ZXN0Lm91dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9sdF9ERCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfbHRfREQiID4mNjsgfQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHRydW5jYXRlIGJpbmFyeSBwaXBlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gdHJ1bmNhdGUgYmluYXJ5IHBpcGVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RydW5jYXRlX2Jpbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHByaW50ZiAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiA+Y29uZnRlc3QuaQorY2F0IGNvbmZ0ZXN0LmkgY29uZnRlc3QuaSA+Y29uZnRlc3QyLmkKK2x0X2N2X3RydW5jYXRlX2Jpbj0KK2lmICIkYWNfY3ZfcGF0aF9sdF9ERCIgYnM9MzIgY291bnQ9MSA8Y29uZnRlc3QyLmkgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgorICBjbXAgLXMgY29uZnRlc3QuaSBjb25mdGVzdC5vdXQgXAorICAmJiBsdF9jdl90cnVuY2F0ZV9iaW49IiRhY19jdl9wYXRoX2x0X0REIGJzPTQwOTYgY291bnQ9MSIKK2ZpCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0Mi5pIGNvbmZ0ZXN0Lm91dAordGVzdCAteiAiJGx0X2N2X3RydW5jYXRlX2JpbiIgJiYgbHRfY3ZfdHJ1bmNhdGVfYmluPSIkU0VEIC1lIDRxIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdHJ1bmNhdGVfYmluIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiA+JjY7IH0KKworCisKKworCisKKworIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCitmdW5jX2NjX2Jhc2VuYW1lICgpCit7CisgICAgZm9yIGNjX3RlbXAgaW4gJCoiIjsgZG8KKyAgICAgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICAgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgICAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgICAgICBcLSopIDs7CisgICAgICAgICopIGJyZWFrOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgZnVuY19jY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCit9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworZmkKKwordGVzdCBubyA9ICIkZW5hYmxlX2xpYnRvb2xfbG9jayIgfHwgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IG1vZGUKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9MzIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9NjQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworbWlwczY0Ki0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnI2xpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGVtdWw9ZWxmCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKjMyLWJpdCopCisJZW11bD0iJHtlbXVsfTMyIgorCTs7CisgICAgICAqNjQtYml0KikKKwllbXVsPSIke2VtdWx9NjQiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk1TQiopCisJZW11bD0iJHtlbXVsfWJ0c21pcCIKKwk7OworICAgICAgKkxTQiopCisJZW11bD0iJHtlbXVsfWx0c21pcCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTjMyKikKKwllbXVsPSIke2VtdWx9bjMyIgorCTs7CisgICAgZXNhYworICAgIExEPSIke0xELWxkfSAtbSAkZW11bCIKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjYXNlcyBvbmx5IGNvdmVyIHRoZQorICAjIHNpdHVhdGlvbnMgd2hlcmUgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIChzdWNoIGFzIHdoZW4KKyAgIyBkb2luZyAzMi1iaXQgY29tcGlsYXRpb24gZm9yIGEgaG9zdCB3aGVyZSBsZCBkZWZhdWx0cyB0byA2NC1iaXQsIG9yCisgICMgdmljZSB2ZXJzYSk7IHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbm8gbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCBkbworICAjIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKwkgICAgICAqeDg2LTY0KikKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3g4Nl82NCIKKwkJOzsKKwkgICAgICAqKQorCQlMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJCTs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIHBvd2VycGM2NGxlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMmxwcGNsaW51eCIKKwkgICAgOzsKKwkgIHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcG93ZXJwY2xlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NGxwcGMiCisJICAgIDs7CisJICBwb3dlcnBjLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0kQ0ZMQUdTCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfY2NfbmVlZHNfYmVsZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKyAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKKyAgZmkKKyAgOzsKKyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKQorICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKnx4ODZfNjQtKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIExEPSR7TEQtbGR9X3NvbDIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9JGVuYWJsZV9saWJ0b29sX2xvY2sKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorICAgIE1BTklGRVNUX1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorICBmaQorZWxzZQorICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorZmkKKwordGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KK2lmIHRlc3QgeWVzICE9ICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIjsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCisKKworCisKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCitpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKyAgICBEU1lNVVRJTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKyAgZmkKK2Vsc2UKKyAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX05NRURJVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCitpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1CiskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKK2lmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKyAgICBOTUVESVQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKyAgZmkKK2Vsc2UKKyAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTElQTz0kYWNfY3ZfcHJvZ19MSVBPCitpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgYWNfY3RfTElQTz0kTElQTworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCitpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorICAgIExJUE89IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTElQTz0kYWNfY3RfTElQTworICBmaQorZWxzZQorICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKK2lmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CiskYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w9JE9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKyAgICBPVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKyAgZmkKK2Vsc2UKKyAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAoraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCisgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKyAgICBPVE9PTDY0PSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKyAgZmkKK2Vsc2UKKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCSMgSWYgdGhlcmUgaXMgYSBub24tZW1wdHkgZXJyb3IgbG9nLCBhbmQgInNpbmdsZV9tb2R1bGUiCisJIyBhcHBlYXJzIGluIGl0LCBhc3N1bWUgdGhlIGZsYWcgY2F1c2VkIGEgbGlua2VyIHdhcm5pbmcKKyAgICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgc2luZ2xlX21vZHVsZSBjb25mdGVzdC5lcnI7IHRoZW4KKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KKwkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTERGTEFHUz0kc2F2ZV9MREZMQUdTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZm9yY2VfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9CisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdWywuXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCisgICAgZmkKKyAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworCisjIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKKyMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKKyMgaGF2aW5nIGEgZm9ybWF0OgorIyAiRElSWzpESVJdOiIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCisjICI6RElSWzpESVJdIgorIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgorIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCisjICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSWzpESVJdIgorIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCitmdW5jX211bmdlX3BhdGhfbGlzdCAoKQoreworICAgIGNhc2UgeCQyIGluCisgICAgeCkKKyAgICAgICAgOzsKKyAgICAqOikKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYCBcJCQxXCIKKyAgICAgICAgOzsKKyAgICB4OiopCisgICAgICAgIGV2YWwgJDE9XCJcJCQxIGAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgKjo6KikKKyAgICAgICAgZXZhbCAkMT1cIlwkJDFcIGAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcJCQxXCIKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKKyAgICAgICAgOzsKKyAgICBlc2FjCit9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCitmdW5jX3N0cmlwbmFtZV9jbmYgKCkKK3sKKyAgY2FzZSAkMiBpbgorICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAicyVeJDElJTsgcyVcXFxcJDJcJCUlImA7OworICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAicyVeJDElJTsgcyUkMlwkJSUiYDs7CisgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyAgRGV0ZXJtaW5lIGxpYnRvb2wgZGVmYXVsdCBiZWhhdmlvciAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisjCisjIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZW5hYmxlIHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcmllcyBvbiBzeXN0ZW1zCisjIHdoZXJlIGxpYnRvb2wga25vd3MgaG93IHRvIGJ1aWxkIGJvdGggbGlicmFyeSB2ZXJzaW9ucywgYW5kIGRvZXMgbm90CisjIHJlcXVpcmUgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcnVucyBmb3IgZWFjaCBmbGF2b3IuCisjCisKK3hjX2x0X3dhbnRfZW5hYmxlX3NoYXJlZD0neWVzJworeGNfbHRfd2FudF9lbmFibGVfc3RhdGljPSd5ZXMnCisKKyMKKyMgVXNlciBtYXkgaGF2ZSBkaXNhYmxlZCBzaGFyZWQgb3Igc3RhdGljIGxpYnJhcmllcy4KKyMKK2Nhc2UgIngkZW5hYmxlX3NoYXJlZCIgaW4gIyAoCisgIHhubykKKyAgICB4Y19sdF93YW50X2VuYWJsZV9zaGFyZWQ9J25vJworICAgIDs7Citlc2FjCitjYXNlICJ4JGVuYWJsZV9zdGF0aWMiIGluICMgKAorICB4bm8pCisgICAgeGNfbHRfd2FudF9lbmFibGVfc3RhdGljPSdubycKKyAgICA7OworZXNhYworaWYgdGVzdCAieCR4Y19sdF93YW50X2VuYWJsZV9zaGFyZWQiID0gJ3hubycgJiYKKyAgdGVzdCAieCR4Y19sdF93YW50X2VuYWJsZV9zdGF0aWMiID0gJ3hubyc7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNhbiBub3QgZGlzYWJsZSBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgc2ltdWx0YW5lb3VzbHkiICIkTElORU5PIiA1CitmaQorCisjCisjIERlZmF1bHQgYmVoYXZpb3Igb24gc3lzdGVtcyB0aGF0IHJlcXVpcmUgaW5kZXBlbmRlbnQgY29uZmlndXJhdGlvbgorIyBhbmQgYnVpbGQgcnVucyBmb3Igc2hhcmVkIGFuZCBzdGF0aWMgaXMgdG8gZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMKKyMgYW5kIGRpc2FibGUgc3RhdGljIG9uZXMuIE9uIHRoZXNlIHN5c3RlbXMgb3B0aW9uICctLWRpc2FibGUtc2hhcmVkJworIyBtdXN0IGJlIHVzZWQgaW4gb3JkZXIgdG8gYnVpbGQgYSBwcm9wZXIgc3RhdGljIGxpYnJhcnkuCisjCisKK2lmIHRlc3QgIngkeGNfbHRfd2FudF9lbmFibGVfc2hhcmVkIiA9ICd4eWVzJyAmJgorICB0ZXN0ICJ4JHhjX2x0X3dhbnRfZW5hYmxlX3N0YXRpYyIgPSAneHllcyc7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbiAjICgKKyAgICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IG9zMiogfCBhaXgqKQorICAgICAgeGNfbHRfd2FudF9lbmFibGVfc3RhdGljPSdubycKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMKKyMgTWFrZSBsaWJ0b29sIGF3YXJlIG9mIGN1cnJlbnQgc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyeSBwcmVmZXJlbmNlcworIyB0YWtpbmcgaW4gYWNjb3VudCB0aGF0LCBkZXBlbmRpbmcgb24gaG9zdCBjaGFyYWN0ZXJpc3RpY3MsIGxpYnRvb2wKKyMgbWF5IG1vZGlmeSB0aGVzZSBvcHRpb24gcHJlZmVyZW5jZXMgbGF0ZXIgaW4gdGhpcyBjb25maWd1cmUgc2NyaXB0LgorIworCitlbmFibGVfc2hhcmVkPSR4Y19sdF93YW50X2VuYWJsZV9zaGFyZWQKK2VuYWJsZV9zdGF0aWM9JHhjX2x0X3dhbnRfZW5hYmxlX3N0YXRpYworCisjCisjIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYnVpbGQgUElDIG9iamVjdHMgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kCisjIG5vbi1QSUMgb2JqZWN0cyBmb3Igc3RhdGljIGxpYnJhcmllcy4KKyMKKworeGNfbHRfd2FudF93aXRoX3BpYz0nZGVmYXVsdCcKKworIworIyBVc2VyIG1heSBoYXZlIHNwZWNpZmllZCBQSUMgcHJlZmVyZW5jZS4KKyMKKworY2FzZSAieCR3aXRoX3BpYyIgaW4gIyAoKAorICB4bm8pCisgICAgeGNfbHRfd2FudF93aXRoX3BpYz0nbm8nCisgICAgOzsKKyAgeHllcykKKyAgICB4Y19sdF93YW50X3dpdGhfcGljPSd5ZXMnCisgICAgOzsKK2VzYWMKKworIworIyBEZWZhdWx0IGJlaGF2aW9yIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IG91dAorIyBvZiBub24tUElDIGNvbXBpbGVkIG9iamVjdHMgd2lsbCBmYWlsIHdpdGggZm9sbG93aW5nIGxpbmtlciBlcnJvcgorIyAicmVsb2NhdGlvbiBSX1g4Nl82NF8zMiBjYW4gbm90IGJlIHVzZWQgd2hlbiBtYWtpbmcgYSBzaGFyZWQgb2JqZWN0IgorIyBpcyB0byBidWlsZCBQSUMgb2JqZWN0cyBldmVuIGZvciBzdGF0aWMgbGlicmFyaWVzLiBUaGlzIGJlaGF2aW9yIG1heQorIyBiZSBvdmVycmlkZW4gdXNpbmcgJ2NvbmZpZ3VyZSAtLWRpc2FibGUtc2hhcmVkIC0td2l0aG91dC1waWMnLgorIworCitpZiB0ZXN0ICJ4JHhjX2x0X3dhbnRfd2l0aF9waWMiID0gJ3hkZWZhdWx0JzsgdGhlbgorICBjYXNlICRob3N0X2NwdSBpbiAjICgKKyAgICB4ODZfNjQgfCBhbWQ2NCB8IGlhNjQpCisgICAgICBjYXNlICRob3N0X29zIGluICMgKAorICAgICAgICBsaW51eCogfCBmcmVlYnNkKikKKyAgICAgICAgICB4Y19sdF93YW50X3dpdGhfcGljPSd5ZXMnCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMKKyMgTWFrZSBsaWJ0b29sIGF3YXJlIG9mIGN1cnJlbnQgUElDIHByZWZlcmVuY2UgdGFraW5nIGluIGFjY291bnQgdGhhdCwKKyMgZGVwZW5kaW5nIG9uIGhvc3QgY2hhcmFjdGVyaXN0aWNzLCBsaWJ0b29sIG1heSBtb2RpZnkgUElDIGRlZmF1bHQKKyMgYmVoYXZpb3IgdG8gZml0IGhvc3Qgc3lzdGVtIGlkaW9zeW5jcmFzaWVzIGxhdGVyIGluIHRoaXMgc2NyaXB0LgorIworCit3aXRoX3BpYz0keGNfbHRfd2FudF93aXRoX3BpYworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgIFN0YXJ0IG9mIGxpYnRvb2wgY29kZSAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworCisKKyMgU2V0IG9wdGlvbnMKK2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVM9JGFjX2N2X3Byb2dfQVMKK2lmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUyIgPiY1CiskYXNfZWNobyAiJEFTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKyAgYWNfY3RfQVM9JEFTCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCitpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKyAgICBBUz0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVM9JGFjX2N0X0FTCisgIGZpCitlbHNlCisgIEFTPSIkYWNfY3ZfcHJvZ19BUyIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworCisKKworCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCisKKyAgICAgICAgZW5hYmxlX2Rsb3Blbj1ubworCisKKworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zaGFyZWQ9eWVzCitmaQorCisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7CisgICAgKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KKwkgIHBpY19tb2RlPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgcGljX21vZGU9ZGVmYXVsdAorZmkKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQorY2FzZSAkaG9zdCwkZW5hYmxlX3NoYXJlZCBpbgorcG93ZXIqLSotYWl4WzUtOV0qLHllcykKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZS4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFpeC1zb25hbWUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FpeF9zb25hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FpeF9zb25hbWU7IGNhc2UgJHdpdGh2YWwgaW4KKyAgICBhaXh8c3ZyNHxib3RoKQorICAgICAgOzsKKyAgICAqKQorICAgICAgYXNfZm5fZXJyb3IgJD8gIlVua25vd24gYXJndW1lbnQgdG8gLS13aXRoLWFpeC1zb25hbWUiICIkTElORU5PIiA1CisgICAgICA7OworICAgIGVzYWMKKyAgICBsdF9jdl93aXRoX2FpeF9zb25hbWU9JHdpdGhfYWl4X3NvbmFtZQorZWxzZQorICBpZiAke2x0X2N2X3dpdGhfYWl4X3NvbmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3dpdGhfYWl4X3NvbmFtZT1haXgKK2ZpCisKKyAgICB3aXRoX2FpeF9zb25hbWU9JGx0X2N2X3dpdGhfYWl4X3NvbmFtZQorZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfYWl4X3NvbmFtZSIgPiY1CiskYXNfZWNobyAiJHdpdGhfYWl4X3NvbmFtZSIgPiY2OyB9CisgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorICAgICMgRm9yIHRoZSBBSVggd2F5IG9mIG11bHRpbGliLCB3ZSBuYW1lIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIKKyAgICAjIGJhc2VkIG9uIHRoZSBiaXR3aWR0aCB1c2VkLCB0cmFkaXRpb25hbGx5ICdzaHIubycgb3IgJ3Nocl82NC5vJywKKyAgICAjIGFuZCAnc2hyLmltcCcgb3IgJ3Nocl82NC5pbXAnLCByZXNwZWN0aXZlbHksIGZvciB0aGUgSW1wb3J0IEZpbGUuCisgICAgIyBFdmVuIHdoZW4gR05VIGNvbXBpbGVycyBpZ25vcmUgT0JKRUNUX01PREUgYnV0IG5lZWQgJy1tYWl4NjQnIGZsYWcsCisgICAgIyB0aGUgQUlYIHRvb2xjaGFpbiB3b3JrcyBiZXR0ZXIgd2l0aCBPQkpFQ1RfTU9ERSBzZXQgKGRlZmF1bHQgMzIpLgorICAgIGlmIHRlc3QgNjQgPSAiJHtPQkpFQ1RfTU9ERS0zMn0iOyB0aGVuCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHJfNjQKKyAgICBlbHNlCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHIKKyAgICBmaQorICBmaQorICA7OworKikKKyAgd2l0aF9haXhfc29uYW1lPWFpeAorICA7OworZXNhYworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9JGx0bWFpbgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CitvYmpkaXI9JGx0X2N2X29iamRpcgorCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKK29sZF9DQz0kQ0MKK29sZF9DRkxBR1M9JENGTEFHUworCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK2Z1bmNfY2NfYmFzZW5hbWUgJGNvbXBpbGVyCitjY19iYXNlbmFtZT0kZnVuY19jY19iYXNlbmFtZV9yZXN1bHQKKworCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvIiR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKworCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmaWxlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvImZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKKyAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKworbHRfc2F2ZV9DQz0kQ0MKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQorCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorZWxzZQorICAgIDoKK2ZpCisKK2ZpCisKKworCisKKworCisgIGx0X3Byb2dfY29tcGlsZXJfd2w9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorCisKKyAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3MyKikKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLXN0YXRpYycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctWGxpbmtlciAnCisgICAgICBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSItWGNvbXBpbGVyICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgbmFnZm9yKikKKyAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3MyKikKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLXN0YXRpYycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisJOzsKKyAgICAgIG5hZ2ZvciopCisJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJOzsKKyAgICAgIHRjYyopCisJIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgWzEtN10uKiB8ICpTdW4qRm9ydHJhbipcIDguWzAtM10qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICA7OworICAgICAgICAqSW50ZWwqXCBbQ0ZdKkNvbXBpbGVyKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKwkgIDs7CisJKlBvcnRsYW5kXCBHcm91cCopCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mcGljJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXBpYycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIjsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCitmaQorCitmaQorCisKKworCisKKworCisKKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubworICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiOyB0aGVuCisgICAgOgorZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorZmkKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworaGFyZF9saW5rcz1ub3R0ZXN0ZWQKK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgcnVucGF0aF92YXI9CisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgYXJjaGl2ZV9jbWRzPQorICBhcmNoaXZlX2V4cHN5bV9jbWRzPQorICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KKyAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubworICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9CisgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgaGFyZGNvZGVfbWludXNfTD1ubworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGluaGVyaXRfcnBhdGg9bm8KKyAgbGlua19hbGxfZGVwbGlicz11bmtub3duCisgIG1vZHVsZV9jbWRzPQorICBtb2R1bGVfZXhwc3ltX2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIGluY2x1ZGVfZXhwc3ltcz0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgJyAoJyBhbmQgJykkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogJ2F8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyAnYScgYW5kICdiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgJ2QnLgorICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqIHwgYml0cmlnKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQorICAgIGxpbmtfYWxsX2RlcGxpYnM9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHdsJworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKF4pXCspXHNcKy8vJyAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGZpfgorICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBzaHJleHRfY21kcz0uZGxsCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwlwcmVmaXhfY21kcz0iJFNFRCJ+CisJaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCisJICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKKwlmaX4KKwlwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KKwljYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMworICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcworCSAgOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXRjYyopCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1yZHluYW1pYycKKwkgIDs7CisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2Fubm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCBubyA9ICIkbGRfc2hsaWJzIjsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0KKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEdOVSBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHRvIEFJWCBubS4KKwkjIFdpdGhvdXQgdGhlICItbCIgb3B0aW9uLCBvciB3aXRoIHRoZSAiLUIiIG9wdGlvbiwgQUlYIG5tIHRyZWF0cworCSMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzCisJIyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJIyBXaGlsZSB0aGUgJ3dlYWsnIGtleXdvcmQgaXMgaWdub3JlZCBpbiB0aGUgRXhwb3J0IEZpbGUsIHdlIG5lZWQKKwkjIGl0IGluIHRoZSBJbXBvcnQgRmlsZSBmb3IgdGhlICdhaXgtc29uYW1lJyBmZWF0dXJlLCBzbyB3ZSBoYXZlCisJIyB0byByZXBsYWNlIHRoZSAiLUIiIG9wdGlvbiB3aXRoICItUCIgZm9yIEFJWCBubS4KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IGlmIChcJCAyID09ICJXIikgeyBwcmludCBcJCAzICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMyB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW15CXSpcKSQvUFwxLydcJydgIC1QQ3BnbCAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgJiYgKHN1YnN0cihcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgaGF2ZSBydW50aW1lIGxpbmtpbmcgZW5hYmxlZCwgYW5kIHVzZSBpdCBmb3IgZXhlY3V0YWJsZXMuCisJIyBGb3Igc2hhcmVkIGxpYnJhcmllcywgd2UgZW5hYmxlL2Rpc2FibGUgcnVudGltZSBsaW5raW5nCisJIyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGNyZWF0ZWQgLQorCSMgd2hlbiAid2l0aF9haXhfc29uYW1lLGFpeF91c2VfcnVudGltZWxpbmtpbmciIGlzOgorCSMgImFpeCxubyIgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKwkjICJhaXgseWVzIiAgbGliLnNvICAgICAgICAgIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisJIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQorCSMgImJvdGgsbm8iICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzCisJIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcworCSMgImJvdGgseWVzIiBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKwkjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vCisJIyAic3ZyNCwqIiAgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKwljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0IHgtYnJ0bCA9ICJ4JGxkX2ZsYWciIHx8IHRlc3QgeC1XbCwtYnJ0bCA9ICJ4JGxkX2ZsYWciKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAjIFdpdGggYWl4LXNvbmFtZT1zdnI0LCB3ZSBjcmVhdGUgdGhlIGxpYi5zby5WIHNoYXJlZCBhcmNoaXZlcyBvbmx5LAorCSAgICAjIHNvIHdlIGRvbid0IGhhdmUgbGliLmEgc2hhcmVkIGxpYnMgdG8gbGluayBvdXIgZXhlY3V0YWJsZXMuCisJICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWJydGwiCisJICBmaQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgYXJjaGl2ZV9jbWRzPScnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGZpbGVfbGlzdF9zcGVjPSckd2wtZiwnCisgICAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAgIGFpeCwqKSA7OyAjIHRyYWRpdGlvbmFsLCBubyBpbXBvcnQgZmlsZQorICAgICAgc3ZyNCwqIHwgKix5ZXMpICMgdXNlIGltcG9ydCBmaWxlCisJIyBUaGUgSW1wb3J0IEZpbGUgZGVmaW5lcyB3aGF0IHRvIGhhcmRjb2RlLgorCWhhcmRjb2RlX2RpcmVjdD1ubworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubworCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHdsLUcnCisJZmkKKwkjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCisJIyBzaGFyZWQgbGlicmFyeSwgb3IgdGhlIGxpbmtlciBtYXkgZXZlbnR1YWxseSBmaW5kIHNoYXJlZCBsaWJyYXJpZXMKKwkjIC93aXRoLyBJbXBvcnQgRmlsZSAtIHdlIGRvIG5vdCB3YW50IHRvIG1peCB0aGVtLgorCXNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKKwlzaGFyZWRfZmxhZ19zdnI0PSctc2hhcmVkICR3bC1HJworICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJworCSAgZmkKKwkgIHNoYXJlZF9mbGFnX2FpeD0nJHdsLWJNOlNSRScKKwkgIHNoYXJlZF9mbGFnX3N2cjQ9JyR3bC1HJworCWZpCisgICAgICBmaQorCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZworICAgICAgZWxzZQorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89L3Vzci9saWI6L2xpYgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCisKKwkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAkd2wtYmVybm90b2snCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1iZXJvaycKKwkgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICBlbHNlCisJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJworCSAgZmkKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKKwkgICMgLWJydGwgYWZmZWN0cyBtdWx0aXBsZSBsaW5rZXIgc2V0dGluZ3MsIC1iZXJvayBkb2VzIG5vdCBhbmQgaXMgb3ZlcnJpZGRlbiBsYXRlcgorCSAgY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQ9J2BmdW5jX2VjaG9fYWxsICIkY29tcGlsZXJfZmxhZ3MgIiB8ICRTRUQgLWUgInMlLWJydGxcXChbLCBdXFwpJS1iZXJva1xcMSVnImAnCisJICBpZiB0ZXN0IHN2cjQgIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JENDICckc2hhcmVkX2ZsYWdfYWl4JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZScKKwkgIGZpCisJICBpZiB0ZXN0IGFpeCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCisJICBlbHNlCisJICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRNViAgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkb3V0cHV0X29iamRpcicKKwkgIGZpCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpWzQ1XSopCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0uZGxsCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KKyAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgIGZpfgorICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworCWV4Y2x1ZGVfZXhwc3ltcz0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKwkjIERvbid0IHVzZSByYW5saWIKKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjfgorICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0uZGxsCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworCisgIGVsc2UKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworICBmaQorICBsaW5rX2FsbF9kZXBsaWJzPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZz0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2RzeW11dGlsIgorICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2RzeW11dGlsIgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisKKyAgZWxzZQorICBsZF9zaGxpYnM9bm8KKyAgZmkKKworICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyLiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgLWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCWhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKworCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0CisJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX19iKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj1ubworICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICBMREZMQUdTPSIkTERGTEFHUyAtYiIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiI7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKK2Vsc2UKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCitmaQorCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCSAgOzsKKwkqKQorCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAkd2wtZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsL2Rldi9udWxsIgorCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKK2Vsc2UKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAkd2wtZXhwb3J0c19maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWZpCisJbGlua19hbGxfZGVwbGlicz1ubworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaW5oZXJpdF9ycGF0aD15ZXMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgbGludXgqKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIHRjYyopCisJIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKKwlsZF9zaGxpYnM9eWVzCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCogfCBiaXRyaWcqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKKwllbHNlCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCwkbGliZGlyJworCWZpCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIHNocmV4dF9jbWRzPS5kbGwKKyAgICAgIGFyY2hpdmVfY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhleHAgJGxpYm9ianMgfCAkU0VEIC8iX0RMTF9Jbml0VGVybSIvZCA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCXByZWZpeF9jbWRzPSIkU0VEIn4KKwlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KKwkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOworCWZpfgorCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgorCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLWlucHV0ICR3bCRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwl3bGFyYz0nJHdsJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPSckd2wnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCAnJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCBzZXF1ZW50ID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgcmVsb2FkX2NtZHM9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR3bC16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHdsLXosdGV4dCcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSckd2wteixub2RlZnMnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLVIsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHNuaSA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtQmxhcmdlZHluc3ltJworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQordGVzdCBubyA9ICIkbGRfc2hsaWJzIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorCisKKworCisKKworCisKKworCisKKworCisKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKworICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHMgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAkUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKwlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKKwkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworCSAgY29tcGlsZXJfZmxhZ3M9LXYKKwkgIGxpbmtlcl9mbGFncz0tdgorCSAgdmVyc3RyaW5nPQorCSAgb3V0cHV0X29iamRpcj0uCisJICBsaWJuYW1lPWNvbmZ0ZXN0CisJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCSAgdGhlbgorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworCSAgZWxzZQorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgIGZpCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjY7IH0KKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8sL0xSLycgOzsKKyAgICAqKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovJyA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0nc3w9XChbQS1aYS16XTpcKXxcMXxnJyA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0nc3w9L3wvfGcnIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5Li4uCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9L2AkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgIyAuLi5idXQgaWYgc29tZSBwYXRoIGNvbXBvbmVudCBhbHJlYWR5IGVuZHMgd2l0aCB0aGUgbXVsdGlsaWIgZGlyIHdlIGFzc3VtZQorICAjIHRoYXQgYWxsIGlzIGZpbmUgYW5kIHRydXN0IC1wcmludC1zZWFyY2gtZGlycyBhcyBpcyAoR0NDIDQuMj8gb3IgbmV3ZXIpLgorICBjYXNlICIkbHRfbXVsdGlfb3NfZGlyOyAkbHRfc2VhcmNoX3BhdGhfc3BlYyAiIGluCisgICIvOyAiKiB8ICIvLjsgIiogfCAiLy4vOyAiKiB8ICoiJGx0X211bHRpX29zX2RpciAiKiB8ICoiJGx0X211bHRpX29zX2Rpci8gIiopCisgICAgbHRfbXVsdGlfb3NfZGlyPQorICAgIDs7CisgIGVzYWMKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxpZiB0ZXN0IC1uICIkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCitCRUdJTiB7UlMgPSAiICI7IEZTID0gIi98XG4iO30geworICBsdF9mb28gPSAiIjsKKyAgbHRfY291bnQgPSAwOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2ZvbyA9ICIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9CisgIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKKyAgICAgICRTRUQgJ3N8L1woW0EtWmEtel06XCl8XDF8ZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9LnNvCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIDs7CisKK2FpeFs0LTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBVc2luZyBJbXBvcnQgRmlsZXMgYXMgYXJjaGl2ZSBtZW1iZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0CisgICAgIyBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGFyY2hpdmVzIG9uIEFJWC4gV2hpbGUKKyAgICAjIHRoaXMgd291bGQgd29yayBmb3IgYm90aCB3aXRoIGFuZCB3aXRob3V0IHJ1bnRpbWUgbGlua2luZywgaXQgd2lsbAorICAgICMgcHJldmVudCBzdGF0aWMgbGlua2luZyBvZiBzdWNoIGFyY2hpdmVzLiBTbyB3ZSBkbyBmaWxlbmFtZS1iYXNlZAorICAgICMgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB3aXRoIC5zbyBleHRlbnNpb24gb25seSwgd2hpY2ggaXMgdXNlZAorICAgICMgd2hlbiBib3RoIHJ1bnRpbWUgbGlua2luZyBhbmQgc2hhcmVkIGxpbmtpbmcgaXMgZW5hYmxlZC4KKyAgICAjIFVuZm9ydHVuYXRlbHksIHJ1bnRpbWUgbGlua2luZyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB3ZSBkbworICAgICMgbm90IHdhbnQgdGhpcyB0byBiZSB0aGUgZGVmYXVsdCBldmVudHVhbGx5LiBBbHNvLCB3ZSB1c2UgdGhlCisgICAgIyB2ZXJzaW9uZWQgLnNvIGxpYnMgZm9yIGV4ZWN1dGFibGVzIG9ubHkgaWYgdGhlcmUgaXMgdGhlIC1icnRsCisgICAgIyBsaW5rZXIgZmxhZyBpbiBMREZMQUdTIGFzIHdlbGwsIG9yIC0td2l0aC1haXgtc29uYW1lPXN2cjQgb25seS4KKyAgICAjIFRvIGFsbG93IGZvciBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIHN1cHBvcnQsIHdlIG5lZWQgdG8gY3JlYXRlCisgICAgIyBsaWJOQU1FLnNvLlYgYXMgYW4gYXJjaGl2ZSBmaWxlLCBjb250YWluaW5nOgorICAgICMgKikgYW4gSW1wb3J0IEZpbGUsIHJlZmVycmluZyB0byB0aGUgdmVyc2lvbmVkIGZpbGVuYW1lIG9mIHRoZQorICAgICMgICAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIsIHRlbGxpbmcgdGhlCisgICAgIyAgICBiaXR3aWR0aCAoMzIgb3IgNjQpIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgYW5kIHByb3ZpZGluZyB0aGUKKyAgICAjICAgIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGV2ZW50dWFsbHkKKyAgICAjICAgIGRlY29yYXRlZCB3aXRoIHRoZSAnd2Vhaycga2V5d29yZAorICAgICMgKikgdGhlIHNoYXJlZCBvYmplY3Qgd2l0aCB0aGUgRl9MT0FET05MWSBmbGFnIHNldCwgdG8gcmVhbGx5IGF2b2lkCisgICAgIyAgICBpdCBiZWluZyBzZWVuIGJ5IHRoZSBsaW5rZXIuCisgICAgIyBBdCBydW4gdGltZSB3ZSBiZXR0ZXIgdXNlIHRoZSByZWFsIGZpbGUgcmF0aGVyIHRoYW4gYW5vdGhlciBzeW1saW5rLAorICAgICMgYnV0IGZvciBsaW5rIHRpbWUgd2UgY3JlYXRlIHRoZSBzeW1saW5rIGxpYk5BTUUuc28gLT4gbGliTkFNRS5zby5WCisKKyAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBhaXgseWVzKSAjIHRyYWRpdGlvbmFsIGxpYnRvb2wKKyAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggdW52ZXJzaW9uYWJsZSBsaWIuc28nCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICA7OworICAgIGFpeCxubykgIyB0cmFkaXRpb25hbCBBSVggb25seQorICAgICAgZHluYW1pY19saW5rZXI9J0FJWCBsaWIuYShsaWIuc28uViknCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgIDs7CisgICAgc3ZyNCwqKSAjIGZ1bGwgc3ZyNCBvbmx5CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgICA7OworICAgICoseWVzKSAjIGJvdGgsIHByZWZlciBzdnI0CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSwgbGliLmEobGliLnNvLlYpIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuYSBuZWVkcyBleHRyYSBoYW5kbGluZworICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0iJHJlYWxuYW1lIn5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJGxpbmtuYW1lIn4kaW5zdGFsbF9zaGFyZWRfcHJvZyAiJGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQifnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCisgICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2ZvciBuIGluICRsaWJyYXJ5X25hbWVzICRvbGRfbGlicmFyeTsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJG4ifnRlc3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiID0gIiRuIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKKyAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICAgIDs7CisgICAgKixubykgIyBib3RoLCBwcmVmZXIgYWl4CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5hKGxpYi5zby5WKSwgbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLnNvLlYgYW5kIHN5bWxpbmsgbGliTkFNRS5zbyBuZWVkIGV4dHJhIGhhbmRsaW5nCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCAkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRkbG5hbWUgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0kcmVhbG5hbWV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJGxpbmtuYW1lIn4oY2QgIiRkZXN0ZGlyIiAmJiAkTE5fUyAtZiAkZGxuYW1lICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28pJworICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSJ+Zm9yIG4gaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRuIn5mdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyInCisgICAgICA7OworICAgIGVzYWMKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kTElCCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsyM10uKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIuKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDMyCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDY0CisgICAgZmkKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbMy05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworbGludXgqYW5kcm9pZCopCisgIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgZmluaXNoX2NtZHM9CisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCisgICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisKKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIGlmICR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisKK2ZpCisKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIElkZWFsbHksIHdlIGNvdWxkIHVzZSBsZGNvbmZpZyB0byByZXBvcnQgKmFsbCogZGlyZWN0b3JlcyB3aGljaCBhcmUKKyAgIyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLCBob3dldmVyIHRoaXMgaXMgc3RpbGwgbm90IHBvc3NpYmxlLiAgQXNpZGUgZnJvbSBub3QKKyAgIyBiZWluZyBjZXJ0YWluIC9zYmluL2xkY29uZmlnIGlzIGF2YWlsYWJsZSwgY29tbWFuZAorICAjICdsZGNvbmZpZyAtTiAtWCAtdiB8IGdyZXAgXi8nIG9uIDY0Yml0IEZlZG9yYSBkb2VzIG5vdCByZXBvcnQgL3Vzci9saWI2NCwKKyAgIyBldmVuIHRob3VnaCBpdCBpcyBzZWFyY2hlZCBhdCBydW4tdGltZS4gIFRyeSB0byBkbyB0aGUgYmVzdCBndWVzcyBieQorICAjIGFwcGVuZGluZyBsZC5zby5jb25mIGNvbnRlbnRzIChhbmQgaW5jbHVkZXMpIHRvIHRoZSBzZWFyY2ggcGF0aC4KKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2RlbGYqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBuZWVkX3ZlcnNpb249bm8KKyAgZWxzZQorICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgZmkKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIE9TLzIgY2FuIG9ubHkgbG9hZCBhIERMTCB3aXRoIGEgYmFzZSBuYW1lIG9mIDggY2hhcmFjdGVycyBvciBsZXNzLgorICBzb25hbWVfc3BlYz0nYHRlc3QgLW4gIiRvczJkbGxuYW1lIiAmJiBsaWJuYW1lPSIkb3MyZGxsbmFtZSI7CisgICAgdj0kKCRFQ0hPICRyZWxlYXNlJHZlcnN1ZmZpeCB8IHRyIC1kIC4tKTsKKyAgICBuPSQoJEVDSE8gJGxpYm5hbWUgfCBjdXQgLWIgLSQoKDggLSAkeyN2fSkpIHwgdHIgLiBfKTsKKyAgICAkRUNITyAkbiR2YCRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1fZGxsLiRsaWJleHQnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1CRUdJTkxJQlBBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICBmaScKKyAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAkUk0gXCRkbHBhdGgnCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPXNjbworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworZmkKKworaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKK2ZpCisKKyMgcmVtZW1iZXIgdW5hdWdtZW50ZWQgc3lzX2xpYl9kbHNlYXJjaF9wYXRoIGNvbnRlbnQgZm9yIGxpYnRvb2wgc2NyaXB0IGRlY2xzLi4uCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIC4uLiBidXQgaXQgbmVlZHMgTFRfU1lTX0xJQlJBUllfUEFUSCBtdW5naW5nIGZvciBvdGhlciBjb25maWd1cmUtdGltZSBjb2RlCitmdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAiJExUX1NZU19MSUJSQVJZX1BBVEgiCisKKyMgdG8gYmUgdXNlZCBhcyBkZWZhdWx0IExUX1NZU19MSUJSQVJZX1BBVEggdmFsdWUgaW4gZ2VuZXJhdGVkIGxpYnRvb2wKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9JExUX1NZU19MSUJSQVJZX1BBVEgKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CisgICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCBubyAhPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgJiYKKyAgICAgdGVzdCBubyAhPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQorCitpZiB0ZXN0IHJlbGluayA9ICIkaGFyZGNvZGVfYWN0aW9uIiB8fAorICAgdGVzdCB5ZXMgPSAiJGluaGVyaXRfcnBhdGgiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8CisgICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorCisKKworCisKKworICBpZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZGxvcGVuICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsCitlbHNlCisKKyAgICBsdF9jdl9kbG9wZW49ZHlsZAorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworCitmaQorCisgICAgOzsKKworICB0cGYqKQorICAgICMgRG9uJ3QgdHJ5IHRvIHJ1biBhbnkgbGluayB0ZXN0cyBmb3IgVFBGLiAgV2Uga25vdyBpdCdzIGltcG9zc2libGUKKyAgICAjIGJlY2F1c2UgVFBGIGlzIGEgY3Jvc3MtY29tcGlsZXIsIGFuZCB3ZSBrbm93IGhvdyB3ZSBvcGVuIERTT3MuCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgICAgOzsKKworICAqKQorICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobF9sb2FkIiAiYWNfY3ZfZnVuY19zaGxfbG9hZCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPXNobF9sb2FkCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxkX3NobF9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNobF9sb2FkICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc2hsX2xvYWQgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49c2hsX2xvYWQgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKK2Vsc2UKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxvcGVuCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZGxvcGVuICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzdmxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbHN2bGQKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxkX2xpbmsgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBkbGRfbGluayAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1kbGRfbGluayBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZAorZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCBubyA9ICIkbHRfY3ZfZGxvcGVuIjsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworICAgIHRlc3QgeWVzID0gIiRhY19jdl9oZWFkZXJfZGxmY25faCIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0kTElCUworICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAJICBpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNpYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGY9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CisKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2liaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KKyAgICBmaQorCisgICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBMSUJTPSRzYXZlX0xJQlMKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworICAjIFJlcG9ydCB3aGF0IGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4WzQtOV0qKQorICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKKyAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CisKKworCisKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSRsdF9zYXZlX0NDCisKKyAgICAgIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKKyAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KKyAgYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1hYQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKworZmkKKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorZWxzZQorICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFhDUFAiID4mNQorJGFzX2VjaG8gIiRDWFhDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2Vsc2UKKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCitmaQorCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCithcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPQorY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD1ubworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2RpcmVjdF9DWFg9bm8KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9bm8KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CitoYXJkY29kZV9taW51c19MX0NYWD1ubworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KK2luaGVyaXRfcnBhdGhfQ1hYPW5vCittb2R1bGVfY21kc19DWFg9Cittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQorbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgorb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKK3JlbG9hZF9mbGFnX0NYWD0kcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzX0NYWD0kcmVsb2FkX2NtZHMKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfQ1hYPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIjsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltdKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgQ0ZMQUdTPSRDWFhGTEFHUworICBjb21waWxlcj0kQ0MKKyAgY29tcGlsZXJfQ1hYPSRDQworICBmdW5jX2NjX2Jhc2VuYW1lICRjb21waWxlcgorY2NfYmFzZW5hbWU9JGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0CisKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQorICAgIGZpCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZworICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworZWxzZQorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0kbHRfY3ZfcGF0aF9MRAoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPSckd2wnCisKKyAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CisJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgIGxkX3NobGlic19DWFg9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbNC05XSopCisgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgorICAgICAgICAgICMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZworICAgICAgICAgICMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KKyAgICAgICAgICAjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKKyAgICAgICAgICAjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKyAgICAgICAgICAjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcworICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKyAgICAgICAgICAjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubworICAgICAgICAgICMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgaWYgdGVzdCBzdnI0LG5vID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKKwkgICAgICAjIHNvIHdlIGRvbid0IGhhdmUgbGliLmEgc2hhcmVkIGxpYnMgdG8gbGluayBvdXIgZXhlY3V0YWJsZXMuCisJICAgICAgIyBXZSBoYXZlIHRvIGZvcmNlIHJ1bnRpbWUgbGlua2luZyBpbiB0aGlzIGNhc2UuCisJICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWJydGwiCisJICAgIGZpCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJworICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgIGZpbGVfbGlzdF9zcGVjX0NYWD0nJHdsLWYsJworICAgICAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAgICAgYWl4LCopIDs7CSMgbm8gaW1wb3J0IGZpbGUKKyAgICAgICAgc3ZyNCwqIHwgKix5ZXMpICMgdXNlIGltcG9ydCBmaWxlCisgICAgICAgICAgIyBUaGUgSW1wb3J0IEZpbGUgZGVmaW5lcyB3aGF0IHRvIGhhcmRjb2RlLgorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKyAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSRzaGFyZWRfZmxhZycgJHdsLUcnCisJICBmaQorCSAgIyBOZWVkIHRvIGVuc3VyZSBydW50aW1lIGxpbmtpbmcgaXMgZGlzYWJsZWQgZm9yIHRoZSB0cmFkaXRpb25hbAorCSAgIyBzaGFyZWQgbGlicmFyeSwgb3IgdGhlIGxpbmtlciBtYXkgZXZlbnR1YWxseSBmaW5kIHNoYXJlZCBsaWJyYXJpZXMKKwkgICMgL3dpdGgvIEltcG9ydCBGaWxlIC0gd2UgZG8gbm90IHdhbnQgdG8gbWl4IHRoZW0uCisJICBzaGFyZWRfZmxhZ19haXg9Jy1zaGFyZWQnCisJICBzaGFyZWRfZmxhZ19zdnI0PSctc2hhcmVkICR3bC1HJworICAgICAgICBlbHNlCisgICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworICAgICAgICAgIGVsc2UKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCisJICAgIGZpCisJICAgIHNoYXJlZF9mbGFnX2FpeD0nJHdsLWJNOlNSRScKKwkgICAgc2hhcmVkX2ZsYWdfc3ZyND0nJHdsLUcnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtYmV4cGFsbCcKKyAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworCSMgZXhwb3J0LgorICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworCWlmIHRlc3QgYWl4LHllcyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICAjIFRoZSAiLUciIGxpbmtlciBmbGFnIGFsbG93cyB1bmRlZmluZWQgc3ltYm9scy4KKyAgICAgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJub3RvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKK2ZpCisKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisKKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZworICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIteiBub2RlZnMiCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9L3Vzci9saWI6L2xpYgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCitmaQorCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtYmVybm90b2snCisJICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1iZXJvaycKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgICBlbHNlCisJICAgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckY29udmVuaWVuY2UnCisJICAgIGZpCisJICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZH4kTUtESVIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCisJICAgICMgLWJydGwgYWZmZWN0cyBtdWx0aXBsZSBsaW5rZXIgc2V0dGluZ3MsIC1iZXJvayBkb2VzIG5vdCBhbmQgaXMgb3ZlcnJpZGRlbiBsYXRlcgorCSAgICBjb21waWxlcl9mbGFnc19maWx0ZXJlZD0nYGZ1bmNfZWNob19hbGwgIiRjb21waWxlcl9mbGFncyAiIHwgJFNFRCAtZSAicyUtYnJ0bFxcKFssIF1cXCklLWJlcm9rXFwxJWciYCcKKwkgICAgaWYgdGVzdCBzdnI0ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAgICMgbGlicmFyaWVzLiBOZWVkIC1ibm9ydGwgbGF0ZSwgd2UgbWF5IGhhdmUgLWJydGwgaW4gTERGTEFHUy4KKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iJGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIid+JENDICckc2hhcmVkX2ZsYWdfYWl4JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZScKKwkgICAgZmkKKwkgICAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCInfiRDQyAnJHNoYXJlZF9mbGFnX3N2cjQnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JFNUUklQIC1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vfiggZnVuY19lY2hvX2FsbCAiIyEgJHNvbmFtZSgkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiOyBpZiB0ZXN0IHNocl82NCA9ICIkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiMgNjQiOyBlbHNlIGZ1bmNfZWNob19hbGwgIiMgMzIiOyBmaTsgY2F0ICRleHBvcnRfc3ltYm9scyApID4gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcH4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcCcKKwkgICAgZWxzZQorCSAgICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiJ34kTVYgICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJG91dHB1dF9vYmpkaXInCisJICAgIGZpCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWVsc2UKKwkgIGxkX3NobGlic19DWFg9bm8KKwlmaQorCTs7CisKKyAgICAgIGNob3J1cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgKikKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgbGRfc2hsaWJzX0NYWD1ubworCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorCSxjbCogfCBubyxjbCopCisJICAjIE5hdGl2ZSBNU1ZDCisJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisJICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCSAgbGliZXh0PWxpYgorCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJICBzaHJleHRfY21kcz0uZGxsCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOworICAgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKyAgICAgICAgICAgIGZpfgorICAgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgICAgbGlua25hbWVzPScKKwkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJworCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisJICAjIERvbid0IHVzZSByYW5saWIKKwkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCisJICBwb3N0bGlua19jbWRzX0NYWD0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhY34KKyAgICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisgICAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCisJICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCisgICAgICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgIGZpCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworCisgIGVsc2UKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JycKKyAgZmkKKyAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfY21kc19DWFg9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgICAgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZHN5bXV0aWwiCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIGZpCisKKyAgZWxzZQorICBsZF9zaGxpYnNfQ1hYPW5vCisgIGZpCisKKwk7OworCisgICAgICBvczIqKQorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisJaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJc2hyZXh0X2NtZHM9LmRsbAorCWFyY2hpdmVfY21kc19DWFg9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICBlbXhleHAgJGxpYm9ianMgfCAkU0VEIC8iX0RMTF9Jbml0VGVybSIvZCA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgcHJlZml4X2NtZHM9IiRTRUQifgorCSAgaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCisJICAgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOworCSAgZml+CisJICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgIGVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKwlvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0NYWD0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZDIuKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQorCSMgc3dpdGNoIHRvIEVMRgorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QtZWxmKikKKyAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAgICAgIyBjb252ZW50aW9ucworICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBoYWlrdSopCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bCtiICR3bCRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAtZiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgLWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wrYiAkd2wkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisgICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKwkgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgaWE2NCopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgICopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICBpYTY0KikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgZXNhYworCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaW50ZXJpeFszLTldKikKKwloYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCisJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgIGVsc2UKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorICAgICAgICBpbmhlcml0X3JwYXRoX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIGFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IC1mIFwkdGVtcGxpYiAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IC1mIFwkdGVtcGxpYiAkbGliJworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqICkKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisJICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSAgICAgICoiVmVyc2lvbiA3LiIqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgICAgICAgdG1wX2lkeW49CisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkJZXNhYworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICBlc2FjCisJICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFsxLTVdLiogfCAqcGdjcHBcIFsxLTVdLiopCisJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiAtZiBcJHRlbXBsaWIgJGxpYicKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisgICAgICAgICAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAkd2wtaW5wdXQgJHdsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifgorICAgICAgICAgICAgICAgICAgJFJNICRsaWIuZXhwJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworCQk7OworCSAgICBlc2FjCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgIG9zZjMqKQorCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKwkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLU0gJHdsJGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCSAgICAgICopCisJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuCisJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wteiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgJy1HJyBOT1QgJy1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1HIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZmkKKworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCQkqKQorCQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR3bC16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSckd2wteix0ZXh0JworCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHdsLXosbm9kZWZzJworCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SLCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCisJbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorICAgICAgICAgICAgICAnIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIKKwkgICAgcmVsb2FkX2NtZHNfQ1hYPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorICAgICAgICAgICAgICAnIiRyZWxvYWRfY21kc19DWFgiCisJICAgIDs7CisJICAqKQorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQorICAgIHRlc3Qgbm8gPSAiJGxkX3NobGlic19DWFgiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIEdDQ19DWFg9JEdYWAorICAgIExEX0NYWD0kTEQKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitwcmVkZXBfb2JqZWN0c19DWFg9Citwb3N0ZGVwX29iamVjdHNfQ1hYPQorcHJlZGVwc19DWFg9Citwb3N0ZGVwc19DWFg9Citjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorCisKK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworKlwgLWZ1c2UtbGlua2VyLXBsdWdpbipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXVzZS1saW5rZXItcGx1Z2luIiA7OworZXNhYworCitpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAkcHJldiRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCB4LUwgPSAiJHAiIHx8CisgICAgICAgICAgdGVzdCB4LVIgPSAiJHAiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICBmaQorICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgIGVzYWMKKyAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgorCSBjYXNlICRwcmV2IGluCisJIC1MIHwgLVIpCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiOyB0aGVuCisJICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSRwcmV2JHAKKwkgICBlbHNlCisJICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9ICRwcmV2JHAiCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwc19DWFg9JHByZXYkcAorCSBlbHNlCisJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHByZXYkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIHByZXY9CisgICAgICAgOzsKKworICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgaWYgdGVzdCAteiAiJHByZWRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9JHAKKwkgZWxzZQorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHByZWRlcF9vYmplY3RzX0NYWCAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRwb3N0ZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9JHAKKwkgZWxzZQorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitjYXNlICRob3N0X29zIGluCitpbnRlcml4WzMtOV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIHByZWRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcHNfQ1hYPQorICA7OworZXNhYworCisKK2Nhc2UgIiAkcG9zdGRlcHNfQ1hYICIgaW4KKyoiIC1sYyAiKikgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vIDs7Citlc2FjCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0KK2lmIHRlc3QgLW4gIiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0iOyB0aGVuCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD1gZWNobyAiICR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0iIHwgJFNFRCAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKworCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3MyKikKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR3bC1zdGF0aWMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZuby1jb21tb24nCisgICAgICA7OworICAgICpkamdwcCopCisgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqcW54KiB8ICpudG8qKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeFs0LTldKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCWVsc2UKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgQ1hYKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHdsLWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICBmaQorCSAgICA7OworCSAgYUNDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHdsLWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKwkgICAgOzsKKwkgIGljcGMqICkKKwkgICAgIyBJbnRlbCBDKyssIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorCSAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKwkgICAgOzsKKwkgIHBnQ0MqIHwgcGdjcHAqKQorCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgeGxjKiB8IHhsQyogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubworZmkKKworZmkKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFggZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYXCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPW5vCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIjsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CitmaQorCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9bm90dGVzdGVkCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiICYmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQorICBpZiB0ZXN0IG5vID0gIiRoYXJkX2xpbmtzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbNC05XSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCisgICAgIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKKyAgICAjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcworICAgICMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgICMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCisgICAgIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQorICAgICMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCisgICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgaWYgKFwkIDIgPT0gIlciKSB7IHByaW50IFwkIDMgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAzIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW15CXSpcKSQvUFwxLydcJydgIC1QQ3BnbCAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgJiYgKHN1YnN0cihcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSRsdGRsbF9jbWRzCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIGNsKikKKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251IHwgZ251KikKKyAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD1ubworICAgIDs7CisgICopCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICA7OworICBlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQordGVzdCBubyA9ICIkbGRfc2hsaWJzX0NYWCIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit3aXRoX2dudV9sZF9DWFg9JHdpdGhfZ251X2xkCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisKKyAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0NYWCBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAkUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKwlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisJICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCSAgdGhlbgorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKworbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9LnNvCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIDs7CisKK2FpeFs0LTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBVc2luZyBJbXBvcnQgRmlsZXMgYXMgYXJjaGl2ZSBtZW1iZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0CisgICAgIyBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGFyY2hpdmVzIG9uIEFJWC4gV2hpbGUKKyAgICAjIHRoaXMgd291bGQgd29yayBmb3IgYm90aCB3aXRoIGFuZCB3aXRob3V0IHJ1bnRpbWUgbGlua2luZywgaXQgd2lsbAorICAgICMgcHJldmVudCBzdGF0aWMgbGlua2luZyBvZiBzdWNoIGFyY2hpdmVzLiBTbyB3ZSBkbyBmaWxlbmFtZS1iYXNlZAorICAgICMgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB3aXRoIC5zbyBleHRlbnNpb24gb25seSwgd2hpY2ggaXMgdXNlZAorICAgICMgd2hlbiBib3RoIHJ1bnRpbWUgbGlua2luZyBhbmQgc2hhcmVkIGxpbmtpbmcgaXMgZW5hYmxlZC4KKyAgICAjIFVuZm9ydHVuYXRlbHksIHJ1bnRpbWUgbGlua2luZyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB3ZSBkbworICAgICMgbm90IHdhbnQgdGhpcyB0byBiZSB0aGUgZGVmYXVsdCBldmVudHVhbGx5LiBBbHNvLCB3ZSB1c2UgdGhlCisgICAgIyB2ZXJzaW9uZWQgLnNvIGxpYnMgZm9yIGV4ZWN1dGFibGVzIG9ubHkgaWYgdGhlcmUgaXMgdGhlIC1icnRsCisgICAgIyBsaW5rZXIgZmxhZyBpbiBMREZMQUdTIGFzIHdlbGwsIG9yIC0td2l0aC1haXgtc29uYW1lPXN2cjQgb25seS4KKyAgICAjIFRvIGFsbG93IGZvciBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIHN1cHBvcnQsIHdlIG5lZWQgdG8gY3JlYXRlCisgICAgIyBsaWJOQU1FLnNvLlYgYXMgYW4gYXJjaGl2ZSBmaWxlLCBjb250YWluaW5nOgorICAgICMgKikgYW4gSW1wb3J0IEZpbGUsIHJlZmVycmluZyB0byB0aGUgdmVyc2lvbmVkIGZpbGVuYW1lIG9mIHRoZQorICAgICMgICAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIsIHRlbGxpbmcgdGhlCisgICAgIyAgICBiaXR3aWR0aCAoMzIgb3IgNjQpIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgYW5kIHByb3ZpZGluZyB0aGUKKyAgICAjICAgIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGV2ZW50dWFsbHkKKyAgICAjICAgIGRlY29yYXRlZCB3aXRoIHRoZSAnd2Vhaycga2V5d29yZAorICAgICMgKikgdGhlIHNoYXJlZCBvYmplY3Qgd2l0aCB0aGUgRl9MT0FET05MWSBmbGFnIHNldCwgdG8gcmVhbGx5IGF2b2lkCisgICAgIyAgICBpdCBiZWluZyBzZWVuIGJ5IHRoZSBsaW5rZXIuCisgICAgIyBBdCBydW4gdGltZSB3ZSBiZXR0ZXIgdXNlIHRoZSByZWFsIGZpbGUgcmF0aGVyIHRoYW4gYW5vdGhlciBzeW1saW5rLAorICAgICMgYnV0IGZvciBsaW5rIHRpbWUgd2UgY3JlYXRlIHRoZSBzeW1saW5rIGxpYk5BTUUuc28gLT4gbGliTkFNRS5zby5WCisKKyAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBhaXgseWVzKSAjIHRyYWRpdGlvbmFsIGxpYnRvb2wKKyAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggdW52ZXJzaW9uYWJsZSBsaWIuc28nCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICA7OworICAgIGFpeCxubykgIyB0cmFkaXRpb25hbCBBSVggb25seQorICAgICAgZHluYW1pY19saW5rZXI9J0FJWCBsaWIuYShsaWIuc28uViknCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgIDs7CisgICAgc3ZyNCwqKSAjIGZ1bGwgc3ZyNCBvbmx5CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgICA7OworICAgICoseWVzKSAjIGJvdGgsIHByZWZlciBzdnI0CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSwgbGliLmEobGliLnNvLlYpIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuYSBuZWVkcyBleHRyYSBoYW5kbGluZworICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0iJHJlYWxuYW1lIn5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJGxpbmtuYW1lIn4kaW5zdGFsbF9zaGFyZWRfcHJvZyAiJGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQifnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCisgICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2ZvciBuIGluICRsaWJyYXJ5X25hbWVzICRvbGRfbGlicmFyeTsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJG4ifnRlc3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiID0gIiRuIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKKyAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICAgIDs7CisgICAgKixubykgIyBib3RoLCBwcmVmZXIgYWl4CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5hKGxpYi5zby5WKSwgbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLnNvLlYgYW5kIHN5bWxpbmsgbGliTkFNRS5zbyBuZWVkIGV4dHJhIGhhbmRsaW5nCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCAkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRkbG5hbWUgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0kcmVhbG5hbWV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJGxpbmtuYW1lIn4oY2QgIiRkZXN0ZGlyIiAmJiAkTE5fUyAtZiAkZGxuYW1lICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28pJworICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSJ+Zm9yIG4gaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRuIn5mdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyInCisgICAgICA7OworICAgIGVzYWMKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsyM10uKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIuKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDMyCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDY0CisgICAgZmkKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbMy05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworbGludXgqYW5kcm9pZCopCisgIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgZmluaXNoX2NtZHM9CisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCisgICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bF9DWFhcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWFwiIgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBJZGVhbGx5LCB3ZSBjb3VsZCB1c2UgbGRjb25maWcgdG8gcmVwb3J0ICphbGwqIGRpcmVjdG9yZXMgd2hpY2ggYXJlCisgICMgc2VhcmNoZWQgZm9yIGxpYnJhcmllcywgaG93ZXZlciB0aGlzIGlzIHN0aWxsIG5vdCBwb3NzaWJsZS4gIEFzaWRlIGZyb20gbm90CisgICMgYmVpbmcgY2VydGFpbiAvc2Jpbi9sZGNvbmZpZyBpcyBhdmFpbGFibGUsIGNvbW1hbmQKKyAgIyAnbGRjb25maWcgLU4gLVggLXYgfCBncmVwIF4vJyBvbiA2NGJpdCBGZWRvcmEgZG9lcyBub3QgcmVwb3J0IC91c3IvbGliNjQsCisgICMgZXZlbiB0aG91Z2ggaXQgaXMgc2VhcmNoZWQgYXQgcnVuLXRpbWUuICBUcnkgdG8gZG8gdGhlIGJlc3QgZ3Vlc3MgYnkKKyAgIyBhcHBlbmRpbmcgbGQuc28uY29uZiBjb250ZW50cyAoYW5kIGluY2x1ZGVzKSB0byB0aGUgc2VhcmNoIHBhdGguCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkZWxmKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKiB8IGJpdHJpZyopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisgICAgbmVlZF92ZXJzaW9uPW5vCisgIGVsc2UKKyAgICBuZWVkX3ZlcnNpb249eWVzCisgIGZpCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0uZGxsCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBPUy8yIGNhbiBvbmx5IGxvYWQgYSBETEwgd2l0aCBhIGJhc2UgbmFtZSBvZiA4IGNoYXJhY3RlcnMgb3IgbGVzcy4KKyAgc29uYW1lX3NwZWM9J2B0ZXN0IC1uICIkb3MyZGxsbmFtZSIgJiYgbGlibmFtZT0iJG9zMmRsbG5hbWUiOworICAgIHY9JCgkRUNITyAkcmVsZWFzZSR2ZXJzdWZmaXggfCB0ciAtZCAuLSk7CisgICAgbj0kKCRFQ0hPICRsaWJuYW1lIHwgY3V0IC1iIC0kKCg4IC0gJHsjdn0pKSB8IHRyIC4gXyk7CisgICAgJEVDSE8gJG4kdmAkc2hhcmVkX2V4dCcKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9X2RsbC4kbGliZXh0JworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9QkVHSU5MSUJQQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyAkRUNITyBcJGRsbmFtZSdcJydgfgorICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgZmknCisgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyAkRUNITyBcJGRsbmFtZSdcJydgfgorICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgJFJNIFwkZGxwYXRoJworICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1zY28KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3Rlc3Qgbm8gPSAiJGR5bmFtaWNfbGlua2VyIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKK2ZpCisKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCitmaQorCisjIHJlbWVtYmVyIHVuYXVnbWVudGVkIHN5c19saWJfZGxzZWFyY2hfcGF0aCBjb250ZW50IGZvciBsaWJ0b29sIHNjcmlwdCBkZWNscy4uLgorY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aD0kc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyAuLi4gYnV0IGl0IG5lZWRzIExUX1NZU19MSUJSQVJZX1BBVEggbXVuZ2luZyBmb3Igb3RoZXIgY29uZmlndXJlLXRpbWUgY29kZQorZnVuY19tdW5nZV9wYXRoX2xpc3Qgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgIiRMVF9TWVNfTElCUkFSWV9QQVRIIgorCisjIHRvIGJlIHVzZWQgYXMgZGVmYXVsdCBMVF9TWVNfTElCUkFSWV9QQVRIIHZhbHVlIGluIGdlbmVyYXRlZCBsaWJ0b29sCitjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRMVF9TWVNfTElCUkFSWV9QQVRICisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uX0NYWD0KK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9DWFgiIHx8CisgICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCI7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3Qgbm8gIT0gIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAmJgorICAgICB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb25fQ1hYPXVuc3VwcG9ydGVkCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjUKKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgcmVsaW5rID0gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiB8fAorICAgdGVzdCB5ZXMgPSAiJGluaGVyaXRfcnBhdGhfQ1hYIjsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8fAorICAgICB0ZXN0IG5vID0gIiRlbmFibGVfc2hhcmVkIjsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisKKworCisKKworICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgIExEQ1hYPSRMRAorICBMRD0kbHRfc2F2ZV9MRAorICBHQ0M9JGx0X3NhdmVfR0NDCisgIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKyAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECisgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIgorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgorCisKKworCisjIE9ubHkgZXhwYW5kIG9uY2U6CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAgRW5kIG9mIGxpYnRvb2wgY29kZSAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjCisjIFZlcmlmeSBpZiBmaW5hbGx5IGxpYnRvb2wgc2hhcmVkIGxpYnJhcmllcyB3aWxsIGJlIGJ1aWx0CisjCisKK2Nhc2UgIngkZW5hYmxlX3NoYXJlZCIgaW4gIyAoKAorICB4eWVzIHwgeG5vKQorICAgIHhjX2x0X2J1aWxkX3NoYXJlZD0kZW5hYmxlX3NoYXJlZAorICAgIDs7CisgICopCisgICAgYXNfZm5fZXJyb3IgJD8gInVuZXhwZWN0ZWQgbGlidG9vbCBlbmFibGVfc2hhcmVkIHZhbHVlOiAkZW5hYmxlX3NoYXJlZCIgIiRMSU5FTk8iIDUKKyAgICA7OworZXNhYworCisjCisjIFZlcmlmeSBpZiBmaW5hbGx5IGxpYnRvb2wgc3RhdGljIGxpYnJhcmllcyB3aWxsIGJlIGJ1aWx0CisjCisKK2Nhc2UgIngkZW5hYmxlX3N0YXRpYyIgaW4gIyAoKAorICB4eWVzIHwgeG5vKQorICAgIHhjX2x0X2J1aWxkX3N0YXRpYz0kZW5hYmxlX3N0YXRpYworICAgIDs7CisgICopCisgICAgYXNfZm5fZXJyb3IgJD8gInVuZXhwZWN0ZWQgbGlidG9vbCBlbmFibGVfc3RhdGljIHZhbHVlOiAkZW5hYmxlX3N0YXRpYyIgIiRMSU5FTk8iIDUKKyAgICA7OworZXNhYworCisjCisjIFZlcmlmeSBpZiBsaWJ0b29sIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIGxpbmtlZCB1c2luZyBmbGFnIC12ZXJzaW9uLWluZm8KKyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCAtdmVyc2lvbi1pbmZvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIC12ZXJzaW9uLWluZm8uLi4gIiA+JjY7IH0KK3hjX2x0X3NobGliX3VzZV92ZXJzaW9uX2luZm89J3llcycKK2lmIHRlc3QgIngkdmVyc2lvbl90eXBlIiA9ICd4bm9uZSc7IHRoZW4KKyAgeGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mbz0nbm8nCitmaQorY2FzZSAkaG9zdF9vcyBpbiAjICgKKyAgYW1pZ2FvcyopCisgICAgeGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mbz0neWVzJworICAgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhjX2x0X3NobGliX3VzZV92ZXJzaW9uX2luZm8iID4mNQorJGFzX2VjaG8gIiR4Y19sdF9zaGxpYl91c2VfdmVyc2lvbl9pbmZvIiA+JjY7IH0KKworIworIyBWZXJpZnkgaWYgbGlidG9vbCBzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBiZSBsaW5rZWQgdXNpbmcgZmxhZyAtbm8tdW5kZWZpbmVkCisjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggLW5vLXVuZGVmaW5lZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCAtbm8tdW5kZWZpbmVkLi4uICIgPiY2OyB9Cit4Y19sdF9zaGxpYl91c2Vfbm9fdW5kZWZpbmVkPSdubycKK2lmIHRlc3QgIngkYWxsb3dfdW5kZWZpbmVkIiA9ICd4bm8nOyB0aGVuCisgIHhjX2x0X3NobGliX3VzZV9ub191bmRlZmluZWQ9J3llcycKK2VsaWYgdGVzdCAieCRhbGxvd191bmRlZmluZWRfZmxhZyIgPSAneHVuc3VwcG9ydGVkJzsgdGhlbgorICB4Y19sdF9zaGxpYl91c2Vfbm9fdW5kZWZpbmVkPSd5ZXMnCitmaQorY2FzZSAkaG9zdF9vcyBpbiAjICgKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgb3MyKiB8IGFpeCopCisgICAgeGNfbHRfc2hsaWJfdXNlX25vX3VuZGVmaW5lZD0neWVzJworICAgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhjX2x0X3NobGliX3VzZV9ub191bmRlZmluZWQiID4mNQorJGFzX2VjaG8gIiR4Y19sdF9zaGxpYl91c2Vfbm9fdW5kZWZpbmVkIiA+JjY7IH0KKworIworIyBWZXJpZnkgaWYgbGlidG9vbCBzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBiZSBsaW5rZWQgdXNpbmcgZmxhZyAtbWltcHVyZS10ZXh0CisjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggLW1pbXB1cmUtdGV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCAtbWltcHVyZS10ZXh0Li4uICIgPiY2OyB9Cit4Y19sdF9zaGxpYl91c2VfbWltcHVyZV90ZXh0PSdubycKK2Nhc2UgJGhvc3Rfb3MgaW4gIyAoCisgIHNvbGFyaXMyKikKKyAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAneHllcyc7IHRoZW4KKyAgICAgIHhjX2x0X3NobGliX3VzZV9taW1wdXJlX3RleHQ9J3llcycKKyAgICBmaQorICAgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhjX2x0X3NobGliX3VzZV9taW1wdXJlX3RleHQiID4mNQorJGFzX2VjaG8gIiR4Y19sdF9zaGxpYl91c2VfbWltcHVyZV90ZXh0IiA+JjY7IH0KKworIworIyBGaW5kIG91dCB3ZXRoZXIgbGlidG9vbCBsaWJyYXJpZXMgd291bGQgYmUgYnVpbHQgd2l0IFBJQworIworCitjYXNlICJ4JHBpY19tb2RlIiBpbiAjICgoKCgKKyAgeGRlZmF1bHQpCisgICAgeGNfbHRfYnVpbGRfc2hhcmVkX3dpdGhfcGljPSd5ZXMnCisgICAgeGNfbHRfYnVpbGRfc3RhdGljX3dpdGhfcGljPSdubycKKyAgICA7OworICB4eWVzKQorICAgIHhjX2x0X2J1aWxkX3NoYXJlZF93aXRoX3BpYz0neWVzJworICAgIHhjX2x0X2J1aWxkX3N0YXRpY193aXRoX3BpYz0neWVzJworICAgIDs7CisgIHhubykKKyAgICB4Y19sdF9idWlsZF9zaGFyZWRfd2l0aF9waWM9J25vJworICAgIHhjX2x0X2J1aWxkX3N0YXRpY193aXRoX3BpYz0nbm8nCisgICAgOzsKKyAgKikKKyAgICB4Y19sdF9idWlsZF9zaGFyZWRfd2l0aF9waWM9J3Vua25vd24nCisgICAgeGNfbHRfYnVpbGRfc3RhdGljX3dpdGhfcGljPSd1bmtub3duJworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5leHBlY3RlZCBsaWJ0b29sIHBpY19tb2RlIHZhbHVlOiAkcGljX21vZGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5leHBlY3RlZCBsaWJ0b29sIHBpY19tb2RlIHZhbHVlOiAkcGljX21vZGUiID4mMjt9CisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIFBJQy4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR4Y19sdF9idWlsZF9zaGFyZWRfd2l0aF9waWMiID4mNQorJGFzX2VjaG8gIiR4Y19sdF9idWlsZF9zaGFyZWRfd2l0aF9waWMiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgd2l0aCBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIHdpdGggUElDLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhjX2x0X2J1aWxkX3N0YXRpY193aXRoX3BpYyIgPiY1CiskYXNfZWNobyAiJHhjX2x0X2J1aWxkX3N0YXRpY193aXRoX3BpYyIgPiY2OyB9CisKKyMKKyMgVmVyaWZ5IGlmIGxpYnRvb2wgc2hhcmVkIGxpYnJhcmllcyB3aWxsIGJlIGJ1aWx0IHdoaWxlIHN0YXRpYyBub3QgYnVpbHQKKyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgb25seSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgb25seS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHhjX2x0X2J1aWxkX3NoYXJlZCIgPSAneWVzJyAmJgorICB0ZXN0ICIkeGNfbHRfYnVpbGRfc3RhdGljIiA9ICdubyc7IHRoZW4KKyAgeGNfbHRfYnVpbGRfc2hhcmVkX29ubHk9J3llcycKK2Vsc2UKKyAgeGNfbHRfYnVpbGRfc2hhcmVkX29ubHk9J25vJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeGNfbHRfYnVpbGRfc2hhcmVkX29ubHkiID4mNQorJGFzX2VjaG8gIiR4Y19sdF9idWlsZF9zaGFyZWRfb25seSIgPiY2OyB9CisKKyMKKyMgVmVyaWZ5IGlmIGxpYnRvb2wgc3RhdGljIGxpYnJhcmllcyB3aWxsIGJlIGJ1aWx0IHdoaWxlIHNoYXJlZCBub3QgYnVpbHQKKyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgb25seSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgb25seS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHhjX2x0X2J1aWxkX3N0YXRpYyIgPSAneWVzJyAmJgorICB0ZXN0ICIkeGNfbHRfYnVpbGRfc2hhcmVkIiA9ICdubyc7IHRoZW4KKyAgeGNfbHRfYnVpbGRfc3RhdGljX29ubHk9J3llcycKK2Vsc2UKKyAgeGNfbHRfYnVpbGRfc3RhdGljX29ubHk9J25vJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeGNfbHRfYnVpbGRfc3RhdGljX29ubHkiID4mNQorJGFzX2VjaG8gIiR4Y19sdF9idWlsZF9zdGF0aWNfb25seSIgPiY2OyB9CisKKworCisKKyMKKyMgQXV0b21ha2UgY29uZGl0aW9uYWxzIGJhc2VkIG9uIGxpYnRvb2wgcmVsYXRlZCBjaGVja3MKKyMKKworIGlmIHRlc3QgIngkeGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mbyIgPSAneHllcyc7IHRoZW4KKyAgQ0FSRVNfTFRfU0hMSUJfVVNFX1ZFUlNJT05fSU5GT19UUlVFPQorICBDQVJFU19MVF9TSExJQl9VU0VfVkVSU0lPTl9JTkZPX0ZBTFNFPScjJworZWxzZQorICBDQVJFU19MVF9TSExJQl9VU0VfVkVSU0lPTl9JTkZPX1RSVUU9JyMnCisgIENBUkVTX0xUX1NITElCX1VTRV9WRVJTSU9OX0lORk9fRkFMU0U9CitmaQorCisgaWYgdGVzdCAieCR4Y19sdF9zaGxpYl91c2Vfbm9fdW5kZWZpbmVkIiA9ICd4eWVzJzsgdGhlbgorICBDQVJFU19MVF9TSExJQl9VU0VfTk9fVU5ERUZJTkVEX1RSVUU9CisgIENBUkVTX0xUX1NITElCX1VTRV9OT19VTkRFRklORURfRkFMU0U9JyMnCitlbHNlCisgIENBUkVTX0xUX1NITElCX1VTRV9OT19VTkRFRklORURfVFJVRT0nIycKKyAgQ0FSRVNfTFRfU0hMSUJfVVNFX05PX1VOREVGSU5FRF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICJ4JHhjX2x0X3NobGliX3VzZV9taW1wdXJlX3RleHQiID0gJ3h5ZXMnOyB0aGVuCisgIENBUkVTX0xUX1NITElCX1VTRV9NSU1QVVJFX1RFWFRfVFJVRT0KKyAgQ0FSRVNfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVF9GQUxTRT0nIycKK2Vsc2UKKyAgQ0FSRVNfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVF9UUlVFPScjJworICBDQVJFU19MVF9TSExJQl9VU0VfTUlNUFVSRV9URVhUX0ZBTFNFPQorZmkKKworCisjCisjIER1ZSB0byBsaWJ0b29sIGFuZCBhdXRvbWFrZSBtYWNoaW5lcnkgbGltaXRhdGlvbnMgb2Ygbm90IGFsbG93aW5nCisjIHNwZWNpZnlpbmcgc2VwYXJhdGUgQ1BQRkxBR1Mgb3IgQ0ZMQUdTIHdoZW4gY29tcGlsaW5nIG9iamVjdHMgZm9yCisjIGluY2x1c2lvbiBvZiB0aGVzZSBpbiBzaGFyZWQgb3Igc3RhdGljIGxpYnJhcmllcywgd2UgYXJlIGZvcmNlZCB0bworIyBidWlsZCB1c2luZyBzZXBhcmF0ZSBjb25maWd1cmUgcnVucyBmb3Igc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzCisjIG9uIHN5c3RlbXMgd2hlcmUgZGlmZmVyZW50IENQUEZMQUdTIG9yIENGTEFHUyBhcmUgbWFuZGF0b3J5IGluIG9yZGVyCisjIHRvIGNvbXBpbGUgb2JqZWN0cyBmb3IgZWFjaCBraW5kIG9mIGxpYnJhcnkuIE5vdGljZSB0aGF0IHJlbHlpbmcgb24KKyMgdGhlICctRFBJQycgQ0ZMQUcgdGhhdCBsaWJ0b29sIHByb3ZpZGVzIGlzIG5vdCB2YWxpZCBnaXZlbiB0aGF0IHRoZQorIyB1c2VyIG1pZ2h0IGZvciBleGFtcGxlIGNob29zZSB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIHdpdGggUElDLgorIworCisjCisjIE1ha2Ugb3VyIE1ha2VmaWxlLmFtIGZpbGVzIHVzZSB0aGUgc3RhdGljbGliIENQUEZMQUcgb25seSB3aGVuIHN0cmljdGx5CisjIHRhcmdldGluZyBhIHN0YXRpYyBsaWJyYXJ5IGFuZCBub3QgYnVpbGRpbmcgaXRzIHNoYXJlZCBjb3VudGVycGFydC4KKyMKKworIGlmIHRlc3QgIngkeGNfbHRfYnVpbGRfc3RhdGljX29ubHkiID0gJ3h5ZXMnOyB0aGVuCisgIFVTRV9DUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQl9UUlVFPQorICBVU0VfQ1BQRkxBR19DQVJFU19TVEFUSUNMSUJfRkFMU0U9JyMnCitlbHNlCisgIFVTRV9DUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQl9UUlVFPScjJworICBVU0VfQ1BQRkxBR19DQVJFU19TVEFUSUNMSUJfRkFMU0U9CitmaQorCisKKyMKKyMgTWFrZSBzdGF0aWNsaWIgQ1BQRkxBRyB2YXJpYWJsZSBhbmQgaXRzIGRlZmluaXRpb24gdmlzaWJsZSBpbiBvdXRwdXQKKyMgZmlsZXMgdW5jb25kaXRpb25hbGx5LCBwcm92aWRpbmcgYW4gZW1wdHkgZGVmaW5pdGlvbiB1bmxlc3Mgc3RyaWN0bHkKKyMgdGFyZ2V0aW5nIGEgc3RhdGljIGxpYnJhcnkgYW5kIG5vdCBidWlsZGluZyBpdHMgc2hhcmVkIGNvdW50ZXJwYXJ0LgorIworCitDUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQj0KK2lmIHRlc3QgIngkeGNfbHRfYnVpbGRfc3RhdGljX29ubHkiID0gJ3h5ZXMnOyB0aGVuCisgIENQUEZMQUdfQ0FSRVNfU1RBVElDTElCPSctRENBUkVTX1NUQVRJQ0xJQicKK2ZpCisKKworCisKKyAgIworICBjb21waWxlcl9pZD0idW5rbm93biIKKyAgY29tcGlsZXJfbnVtPSIwIgorICAjCisgIGZsYWdzX2RiZ19hbGw9InVua25vd24iCisgIGZsYWdzX2RiZ195ZXM9InVua25vd24iCisgIGZsYWdzX2RiZ19vZmY9InVua25vd24iCisgIGZsYWdzX29wdF9hbGw9InVua25vd24iCisgIGZsYWdzX29wdF95ZXM9InVua25vd24iCisgIGZsYWdzX29wdF9vZmY9InVua25vd24iCisgICMKKyAgZmxhZ3NfcHJlZmVyX2NwcGZsYWdzPSJubyIKKyAgIworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgREVDL0NvbXBhcS9IUCBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIERFQy9Db21wYXEvSFAgQy4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19ERUNDCitDVVJMX0RFRl9UT0tFTiBfX0RFQ0MKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fREVDQyI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fREVDQz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fREVDQz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0RFQ0M9JHRtcF9leHAKKworICBmaQorCisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX0RFQ0NfVkVSCitDVVJMX0RFRl9UT0tFTiBfX0RFQ0NfVkVSCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfX0RFQ0NfVkVSIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19ERUNDX1ZFUj1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fREVDQ19WRVI9eWVzCisgICAgY3VybF9jdl9kZWZfX19ERUNDX1ZFUj0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19ERUNDIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19ERUNDX1ZFUiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IkRFQ19DIgorICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1nMCAtZzEgLWcyIC1nMyIKKyAgICBmbGFnc19kYmdfeWVzPSItZzIiCisgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PMyAtTzQiCisgICAgZmxhZ3Nfb3B0X3llcz0iLU8xIgorICAgIGZsYWdzX29wdF9vZmY9Ii1PMCIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBIUC1VWCBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIEhQLVVYIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fSFBfY2MKK0NVUkxfREVGX1RPS0VOIF9fSFBfY2MKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fSFBfY2MiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0hQX2NjPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19IUF9jYz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0hQX2NjPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0hQX2NjIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iSFBfVVhfQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtcyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSItcyIKKyAgICBmbGFnc19vcHRfYWxsPSItTyArTzAgK08xICtPMiArTzMgK080IgorICAgIGZsYWdzX29wdF95ZXM9IitPMiIKKyAgICBmbGFnc19vcHRfb2ZmPSIrTzAiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgSUJNIEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgSUJNIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fSUJNQ19fCitDVVJMX0RFRl9UT0tFTiBfX0lCTUNfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19JQk1DX18iOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0lCTUNfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fSUJNQ19fPXllcworICAgIGN1cmxfY3ZfZGVmX19fSUJNQ19fPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0lCTUNfXyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IklCTV9DIgorICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1nMCAtZzEgLWcyIC1nMyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSIiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gLU8wIC1PMSAtTzIgLU8zIC1PNCAtTzUiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFub29wdGltaXplIgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9MCIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTEiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT0yIgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9MyIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTQiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT01IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICBmbGFnc19vcHRfb2ZmPSItcW5vb3B0aW1pemUiCisgICAgZmxhZ3NfcHJlZmVyX2NwcGZsYWdzPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBJbnRlbCBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIEludGVsIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKK0NVUkxfREVGX1RPS0VOIF9fSU5URUxfQ09NUElMRVIKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fSU5URUxfQ09NUElMRVIiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0lOVEVMX0NPTVBJTEVSPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19JTlRFTF9DT01QSUxFUj15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0lOVEVMX0NPTVBJTEVSPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0lOVEVMX0NPTVBJTEVSIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9udW09IiRjdXJsX2N2X2RlZl9fX0lOVEVMX0NPTVBJTEVSIgorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX191bml4X18KK0NVUkxfREVGX1RPS0VOIF9fdW5peF9fCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICIiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX3VuaXhfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fdW5peF9fPXllcworICAgIGN1cmxfY3ZfZGVmX19fdW5peF9fPSR0bXBfZXhwCisKKyAgZmkKKworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fdW5peF9fIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBjb21waWxlcl9pZD0iSU5URUxfVU5JWF9DIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIgorICAgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgICBmbGFnc19kYmdfb2ZmPSItZzAiCisgICAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9zIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICAgIGVsc2UKKyAgICAgIGNvbXBpbGVyX2lkPSJJTlRFTF9XSU5ET1dTX0MiCisgICAgICBmbGFnc19kYmdfYWxsPSIvWkkgL1ppIC96SSAvemkgL1pEIC9aZCAvekQgL3pkIC9aNyAvejcgL095IC9PeS0iCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWciCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6bm9uZSIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzptaW5pbWFsIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgL2RlYnVnOnBhcnRpYWwiCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6ZnVsbCIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzpzZW1hbnRpY19zdGVwcGluZyIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzpleHRlbmRlZCIKKyAgICAgIGZsYWdzX2RiZ195ZXM9Ii9aaSAvT3ktIgorICAgICAgZmxhZ3NfZGJnX29mZj0iL2RlYnVnOm5vbmUgL095LSIKKyAgICAgIGZsYWdzX29wdF9hbGw9Ii9PIC9PMCAvTzEgL08yIC9PMyAvT2QgL09nIC9PZy0gL09pIC9PaS0iCisgICAgICBmbGFnc19vcHRfeWVzPSIvTzIiCisgICAgICBmbGFnc19vcHRfb2ZmPSIvT2QiCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIGNsYW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIGNsYW5nLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NsYW5nX18KK0NVUkxfREVGX1RPS0VOIF9fY2xhbmdfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19jbGFuZ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19jbGFuZ19fPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19jbGFuZ19fPXllcworICAgIGN1cmxfY3ZfZGVmX19fY2xhbmdfXz0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19jbGFuZ19fIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iQ0xBTkciCisgICAgY2xhbmd2ZXI9YCRDQyAtZHVtcHZlcnNpb25gCisgICAgY2xhbmd2aGk9YGVjaG8gJGNsYW5ndmVyIHwgY3V0IC1kIC4gLWYxYAorICAgIGNsYW5ndmxvPWBlY2hvICRjbGFuZ3ZlciB8IGN1dCAtZCAuIC1mMmAKKyAgICBjb21waWxlcl9udW09YChleHByICRjbGFuZ3ZoaSAiKiIgMTAwICsgJGNsYW5ndmxvKSAyPi9kZXYvbnVsbGAKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdnZGIiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdzdGFicyIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ3N0YWJzKyIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ2NvZmYiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWd4Y29mZiIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ2R3YXJmLTIiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWd2bXMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PcyAtTzMgLU80IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PcyIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIEdOVSBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIEdOVSBDLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX0dOVUNfXworQ1VSTF9ERUZfVE9LRU4gX19HTlVDX18KKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fR05VQ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX189bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0dOVUNfXz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0dOVUNfXz0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX18iID0gInllcyIgJiYKKyAgICB0ZXN0ICIkY29tcGlsZXJfaWQiID0gInVua25vd24iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iR05VX0MiCisgICAgZ2NjdmVyPWAkQ0MgLWR1bXB2ZXJzaW9uYAorICAgIGdjY3ZoaT1gZWNobyAkZ2NjdmVyIHwgY3V0IC1kIC4gLWYxYAorICAgIGdjY3Zsbz1gZWNobyAkZ2NjdmVyIHwgY3V0IC1kIC4gLWYyYAorICAgIGNvbXBpbGVyX251bT1gKGV4cHIgJGdjY3ZoaSAiKiIgMTAwICsgJGdjY3ZsbykgMj4vZGV2L251bGxgCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nZ2RiIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nc3RhYnMiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdzdGFicysiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdjb2ZmIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1neGNvZmYiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdkd2FyZi0yIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1ndm1zIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9zIgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfV0lOMzIKK0NVUkxfREVGX1RPS0VOIF9XSU4zMgorI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX1dJTjMyIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX1dJTjMyPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX1dJTjMyPXllcworICAgIGN1cmxfY3ZfZGVmX19XSU4zMj0kdG1wX2V4cAorCisgIGZpCisKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBMQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgTENDLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX0xDQ19fCitDVVJMX0RFRl9UT0tFTiBfX0xDQ19fCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfX0xDQ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19MQ0NfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fTENDX189eWVzCisgICAgY3VybF9jdl9kZWZfX19MQ0NfXz0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19MQ0NfXyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IkxDQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSIiCisgICAgZmxhZ3Nfb3B0X2FsbD0iIgorICAgIGZsYWdzX29wdF95ZXM9IiIKKyAgICBmbGFnc19vcHRfb2ZmPSIiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBTR0kgTUlQU3BybyBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIFNHSSBNSVBTcHJvIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fR05VQ19fCitDVVJMX0RFRl9UT0tFTiBfX0dOVUNfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19HTlVDX18iOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0dOVUNfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fPXllcworICAgIGN1cmxfY3ZfZGVmX19fR05VQ19fPSR0bXBfZXhwCisKKyAgZmkKKworCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX0NPTVBJTEVSX1ZFUlNJT04KK0NVUkxfREVGX1RPS0VOIF9DT01QSUxFUl9WRVJTSU9OCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfQ09NUElMRVJfVkVSU0lPTiI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19DT01QSUxFUl9WRVJTSU9OPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX0NPTVBJTEVSX1ZFUlNJT049eWVzCisgICAgY3VybF9jdl9kZWZfX0NPTVBJTEVSX1ZFUlNJT049JHRtcF9leHAKKworICBmaQorCisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfU0dJX0NPTVBJTEVSX1ZFUlNJT04KK0NVUkxfREVGX1RPS0VOIF9TR0lfQ09NUElMRVJfVkVSU0lPTgorI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX1NHSV9DT01QSUxFUl9WRVJTSU9OIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX1NHSV9DT01QSUxFUl9WRVJTSU9OPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX1NHSV9DT01QSUxFUl9WRVJTSU9OPXllcworICAgIGN1cmxfY3ZfZGVmX19TR0lfQ09NUElMRVJfVkVSU0lPTj0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX18iID0gIm5vIiAmJgorICAgICh0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fU0dJX0NPTVBJTEVSX1ZFUlNJT04iID0gInllcyIgfHwKKyAgICAgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX0NPTVBJTEVSX1ZFUlNJT04iID0gInllcyIpOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iU0dJX01JUFNQUk9fQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PMyAtT2Zhc3QiCisgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgIGZsYWdzX29wdF9vZmY9Ii1PMCIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIFNHSSBNSVBTIEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgU0dJIE1JUFMgQy4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19HTlVDX18KK0NVUkxfREVGX1RPS0VOIF9fR05VQ19fCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfX0dOVUNfXyI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX189eWVzCisgICAgY3VybF9jdl9kZWZfX19HTlVDX189JHRtcF9leHAKKworICBmaQorCisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX3NnaQorQ1VSTF9ERUZfVE9LRU4gX19zZ2kKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fc2dpIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19zZ2k9bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX3NnaT15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX3NnaT0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX18iID0gIm5vIiAmJgorICAgIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fc2dpIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IlNHSV9NSVBTX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9mYXN0IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgU3VuUHJvIEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgU3VuUHJvIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fU1VOUFJPX0MKK0NVUkxfREVGX1RPS0VOIF9fU1VOUFJPX0MKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fU1VOUFJPX0MiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX1NVTlBST19DPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19TVU5QUk9fQz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX1NVTlBST19DPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX1NVTlBST19DIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iU1VOUFJPX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLXMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLXMiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gLXhPIC14TzEgLXhPMiAteE8zIC14TzQgLXhPNSIKKyAgICBmbGFnc19vcHRfeWVzPSIteE8yIgorICAgIGZsYWdzX29wdF9vZmY9IiIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBUaW55IEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgVGlueSBDLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX1RJTllDX18KK0NVUkxfREVGX1RPS0VOIF9fVElOWUNfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19USU5ZQ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19USU5ZQ19fPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19USU5ZQ19fPXllcworICAgIGN1cmxfY3ZfZGVmX19fVElOWUNfXz0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19USU5ZQ19fIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iVElOWV9DIgorICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1iIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9IiIKKyAgICBmbGFnc19vcHRfYWxsPSIiCisgICAgZmxhZ3Nfb3B0X3llcz0iIgorICAgIGZsYWdzX29wdF9vZmY9IiIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBXYXRjb20gQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBpcyBXYXRjb20gQy4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19XQVRDT01DX18KK0NVUkxfREVGX1RPS0VOIF9fV0FUQ09NQ19fCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfX1dBVENPTUNfXyI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fV0FUQ09NQ19fPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19XQVRDT01DX189eWVzCisgICAgY3VybF9jdl9kZWZfX19XQVRDT01DX189JHRtcF9leHAKKworICBmaQorCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fV0FUQ09NQ19fIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fVU5JWF9fCitDVVJMX0RFRl9UT0tFTiBfX1VOSVhfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19VTklYX18iOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX1VOSVhfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fVU5JWF9fPXllcworICAgIGN1cmxfY3ZfZGVmX19fVU5JWF9fPSR0bXBfZXhwCisKKyAgZmkKKworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fVU5JWF9fIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBjb21waWxlcl9pZD0iV0FUQ09NX1VOSVhfQyIKKyAgICAgIGZsYWdzX2RiZ19hbGw9Ii1nMSAtZzErIC1nMiAtZzMiCisgICAgICBmbGFnc19kYmdfeWVzPSItZzIiCisgICAgICBmbGFnc19kYmdfb2ZmPSIiCisgICAgICBmbGFnc19vcHRfYWxsPSItTzAgLU8xIC1PMiAtTzMiCisgICAgICBmbGFnc19vcHRfeWVzPSItTzIiCisgICAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgICAgZWxzZQorICAgICAgY29tcGlsZXJfaWQ9IldBVENPTV9XSU5ET1dTX0MiCisgICAgICBmbGFnc19kYmdfYWxsPSIiCisgICAgICBmbGFnc19kYmdfeWVzPSIiCisgICAgICBmbGFnc19kYmdfb2ZmPSIiCisgICAgICBmbGFnc19vcHRfYWxsPSIiCisgICAgICBmbGFnc19vcHRfeWVzPSIiCisgICAgICBmbGFnc19vcHRfb2ZmPSIiCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJ1bmtub3duIjsgdGhlbgorICBjYXQgPDxfRU9GIDE+JjIKKyoqKgorKioqIFdhcm5pbmc6IFRoaXMgY29uZmlndXJlIHNjcmlwdCBkb2VzIG5vdCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorKioqIGNvbXBpbGVyIHlvdSBhcmUgdXNpbmcsIHJlbGF0aXZlIHRvIHRoZSBmbGFncyByZXF1aXJlZCB0byBlbmFibGUgb3IKKyoqKiBkaXNhYmxlIGdlbmVyYXRpb24gb2YgZGVidWcgaW5mbywgb3B0aW1pemF0aW9uIG9wdGlvbnMgb3Igd2FybmluZ3MuCisqKioKKyoqKiBXaGF0ZXZlciBzZXR0aW5ncyBhcmUgcHJlc2VudCBpbiBDRkxBR1Mgd2lsbCBiZSB1c2VkIGZvciB0aGlzIHJ1bi4KKyoqKgorKioqIElmIHlvdSB3aXNoIHRvIGhlbHAgdGhlIGMtYXJlcyBwcm9qZWN0IHRvIGJldHRlciBzdXBwb3J0IHlvdXIgY29tcGlsZXIKKyoqKiB5b3UgY2FuIHJlcG9ydCB0aGlzIGFuZCB0aGUgcmVxdWlyZWQgaW5mbyBvbiB0aGUgYy1hcmVzIGRldmVsb3BtZW50CisqKiogbWFpbGluZyBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzLworKioqCitfRU9GCisgIGZpCisKKworc3F1ZWV6ZSgpIHsKKyAgX3Nxel9yZXN1bHQ9IiIKKyAgZXZhbCBfc3F6X2lucHV0PVwkJDEKKyAgZm9yIF9zcXpfdG9rZW4gaW4gJF9zcXpfaW5wdXQ7IGRvCisgICAgaWYgdGVzdCAteiAiJF9zcXpfcmVzdWx0IjsgdGhlbgorICAgICAgX3Nxel9yZXN1bHQ9IiRfc3F6X3Rva2VuIgorICAgIGVsc2UKKyAgICAgIF9zcXpfcmVzdWx0PSIkX3Nxel9yZXN1bHQgJF9zcXpfdG9rZW4iCisgICAgZmkKKyAgZG9uZQorICBldmFsICQxPVwkX3Nxel9yZXN1bHQKKyAgcmV0dXJuIDAKK30KKworCisgICAgICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiR05VX0MiIHx8CisgICAgICB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkNMQU5HIjsgdGhlbgorCisgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkdOVV9DIiB8fAorICAgIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiQ0xBTkciOyB0aGVuCisgICAgdG1wX2hhc19pbmNsdWRlPSJubyIKKyAgICB0bXBfY2hnX0ZMQUdTPSIkQ0ZMQUdTIgorICAgIGZvciB3b3JkMSBpbiAkdG1wX2NoZ19GTEFHUzsgZG8KKyAgICAgIGNhc2UgIiR3b3JkMSIgaW4KKyAgICAgICAgLUkqKQorICAgICAgICAgIHRtcF9oYXNfaW5jbHVkZT0ieWVzIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiR0bXBfaGFzX2luY2x1ZGUiID0gInllcyI7IHRoZW4KKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy9eLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy8gLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIENGTEFHUz0iJHRtcF9jaGdfRkxBR1MiCisgICAgICBzcXVlZXplIENGTEFHUworICAgIGZpCisgICAgdG1wX2hhc19pbmNsdWRlPSJubyIKKyAgICB0bXBfY2hnX0ZMQUdTPSIkQ1BQRkxBR1MiCisgICAgZm9yIHdvcmQxIGluICR0bXBfY2hnX0ZMQUdTOyBkbworICAgICAgY2FzZSAiJHdvcmQxIiBpbgorICAgICAgICAtSSopCisgICAgICAgICAgdG1wX2hhc19pbmNsdWRlPSJ5ZXMiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgaWYgdGVzdCAiJHRtcF9oYXNfaW5jbHVkZSIgPSAieWVzIjsgdGhlbgorICAgICAgdG1wX2NoZ19GTEFHUz1gZWNobyAiJHRtcF9jaGdfRkxBR1MiIHwgIiRTRUQiICdzL14tSS8gLWlzeXN0ZW0gL2cnYAorICAgICAgdG1wX2NoZ19GTEFHUz1gZWNobyAiJHRtcF9jaGdfRkxBR1MiIHwgIiRTRUQiICdzLyAtSS8gLWlzeXN0ZW0gL2cnYAorICAgICAgQ1BQRkxBR1M9IiR0bXBfY2hnX0ZMQUdTIgorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgIGZpCisgIGZpCisKKyAgICBmaQorICAgICMKKyAgICB0bXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRtcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfQ1BQRkxBR1M9IiIKKyAgICB0bXBfQ0ZMQUdTPSIiCisgICAgIworICAgIGNhc2UgIiRjb21waWxlcl9pZCIgaW4KKyAgICAgICAgIworICAgICAgQ0xBTkcpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVF1bnVzZWQtYXJndW1lbnRzIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBERUNfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1zdGQxIgorICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1ub2Fuc2lfYWxpYXMiCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXdhcm5wcm90b3MiCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLW1zZ19mYXRhbCB0b29mZXdhcmdzLHRvb21hbnlhcmdzIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBHTlVfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBIUF9VWF9DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTICtXIDQyMjcsNDI1NSIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgSUJNX0MpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXF0aHJlYWRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXFub2Fuc2lhbGlhcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtcWhhbHQ9ZSIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgSU5URUxfVU5JWF9DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtc3RkPWdudTg5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC13ZSAxNDAsMTQ3LDE2NSwyNjYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC13ZCAyNzksOTgxLDE0NjkiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1dJTkRPV1NfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBMQ0MpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtbiIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgU0dJX01JUFNfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBTR0lfTUlQU1BST19DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNVTlBST19DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFRJTllfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBXQVRDT01fVU5JWF9DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFdBVENPTV9XSU5ET1dTX0MpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgIGVzYWMKKyAgICAjCisgICAgc3F1ZWV6ZSB0bXBfQ1BQRkxBR1MKKyAgICBzcXVlZXplIHRtcF9DRkxBR1MKKyAgICAjCisgICAgaWYgdGVzdCAhIC16ICIkdG1wX0NGTEFHUyIgfHwgdGVzdCAhIC16ICIkdG1wX0NQUEZMQUdTIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIHNvbWUgYmFzaWMgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIHNvbWUgYmFzaWMgb3B0aW9ucy4uLiAiID4mNjsgfQorICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyAkdG1wX0NQUEZMQUdTIgorICAgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTICR0bXBfQ0ZMQUdTIgorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgICAgc3F1ZWV6ZSBDRkxBR1MKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0idW5rbm93biIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGludCBpID0gMTsKKyAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgIGVjaG8gIiAiID4mNgorICAgIHNlZCAncy9eL2NjLWZhaWw6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgc2VkICdzL14vbGluay1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyMgICAgICAgaWZkZWYgX19TVERDX18KKyMgICAgICAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgICAgICAgZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBleGl0KGkpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9InllcyIKKworZWxzZQorCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgICAgZWNobyAiICIgPiY2CisgICAgICBlY2hvICJydW4tZmFpbDogdGVzdCBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjYKKyAgICAgIGVjaG8gIiAiID4mNgorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNvbXBpbGVyIG9wdGlvbnMgYWRkZWQ6ICR0bXBfQ0ZMQUdTICR0bXBfQ1BQRkxBR1MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHUyIgPiY2O30KKworICBlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTIiA+JjI7fQorICAgICAgICAgICAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKworICBmaQorCisgICAgZmkKKyAgICAjCisgIGZpCisKKworICAgICAgICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIHRtcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICMKKyAgICB0bXBfb3B0aW9ucz0iIgorICAgIHRtcF9DRkxBR1M9IiRDRkxBR1MiCisgICAgdG1wX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisKKyAgICBhY192YXJfc3RyaXBwZWQ9IiIKKyAgZm9yIHdvcmQxIGluICR0bXBfQ0ZMQUdTOyBkbworICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJubyIKKyAgICBmb3Igd29yZDIgaW4gJGZsYWdzX2RiZ19hbGw7IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX3N0cmlwX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiRhY192YXJfc3RyaXBfd29yZCIgPSAibm8iOyB0aGVuCisgICAgICBhY192YXJfc3RyaXBwZWQ9IiRhY192YXJfc3RyaXBwZWQgJHdvcmQxIgorICAgIGZpCisgIGRvbmUKKyAgICB0bXBfQ0ZMQUdTPSIkYWNfdmFyX3N0cmlwcGVkIgorICBzcXVlZXplIHRtcF9DRkxBR1MKKworCisgICAgYWNfdmFyX3N0cmlwcGVkPSIiCisgIGZvciB3b3JkMSBpbiAkdG1wX0NQUEZMQUdTOyBkbworICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJubyIKKyAgICBmb3Igd29yZDIgaW4gJGZsYWdzX2RiZ19hbGw7IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX3N0cmlwX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiRhY192YXJfc3RyaXBfd29yZCIgPSAibm8iOyB0aGVuCisgICAgICBhY192YXJfc3RyaXBwZWQ9IiRhY192YXJfc3RyaXBwZWQgJHdvcmQxIgorICAgIGZpCisgIGRvbmUKKyAgICB0bXBfQ1BQRkxBR1M9IiRhY192YXJfc3RyaXBwZWQiCisgIHNxdWVlemUgdG1wX0NQUEZMQUdTCisKKyAgICAjCisgICAgaWYgdGVzdCAiJHdhbnRfZGVidWciID0gInllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgYWNjZXB0cyBkZWJ1ZyBlbmFibGluZyBvcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgZGVidWcgZW5hYmxpbmcgb3B0aW9ucy4uLiAiID4mNjsgfQorICAgICAgdG1wX29wdGlvbnM9IiRmbGFnc19kYmdfeWVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJHdhbnRfZGVidWciID0gIm5vIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIGRlYnVnIGRpc2FibGluZyBvcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgZGVidWcgZGlzYWJsaW5nIG9wdGlvbnMuLi4gIiA+JjY7IH0KKyAgICAgIHRtcF9vcHRpb25zPSIkZmxhZ3NfZGJnX29mZiIKKyAgICBmaQorICAgICMKKyAgICBpZiB0ZXN0ICIkZmxhZ3NfcHJlZmVyX2NwcGZsYWdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAkdG1wX29wdGlvbnMiCisgICAgICBDRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgIGVsc2UKKyAgICAgIENQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIgorICAgICAgQ0ZMQUdTPSIkdG1wX0NGTEFHUyAkdG1wX29wdGlvbnMiCisgICAgZmkKKyAgICBzcXVlZXplIENQUEZMQUdTCisgICAgc3F1ZWV6ZSBDRkxBR1MKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0idW5rbm93biIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGludCBpID0gMTsKKyAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgIGVjaG8gIiAiID4mNgorICAgIHNlZCAncy9eL2NjLWZhaWw6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgc2VkICdzL14vbGluay1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyMgICAgICAgaWZkZWYgX19TVERDX18KKyMgICAgICAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgICAgICAgZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBleGl0KGkpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9InllcyIKKworZWxzZQorCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgICAgZWNobyAiICIgPiY2CisgICAgICBlY2hvICJydW4tZmFpbDogdGVzdCBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjYKKyAgICAgIGVjaG8gIiAiID4mNgorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9vcHRpb25zIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNvbXBpbGVyIG9wdGlvbnMgYWRkZWQ6ICR0bXBfb3B0aW9ucyIgPiY2O30KKworICBlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX29wdGlvbnMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9vcHRpb25zIiA+JjI7fQorICAgICAgICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyIKKyAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKworICBmaQorCisgICAgIworICBmaQorCisKKyAgICAgICAgIworICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiICE9ICJ1bmtub3duIjsgdGhlbgorICAgICMKKyAgICB0bXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgdG1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAjCisgICAgdG1wX29wdGlvbnM9IiIKKyAgICB0bXBfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIGhvbm9yX29wdGltaXplX29wdGlvbj0ieWVzIgorICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICBpZiB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAiYXNzdW1lX25vIiB8fAorICAgICAgIHRlc3QgIiR3YW50X29wdGltaXplIiA9ICJhc3N1bWVfeWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBvcHRpbWl6ZXIgYXNzdW1lZCBzZXR0aW5nIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgb3B0aW1pemVyIGFzc3VtZWQgc2V0dGluZyBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisKKworICBhY192YXJfbWF0Y2hfd29yZD0ibm8iCisgIGZvciB3b3JkMSBpbiAkdG1wX0NGTEFHUzsgZG8KKyAgICBmb3Igd29yZDIgaW4gJGZsYWdzX29wdF9hbGw7IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX21hdGNoX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisKKyAgaWYgdGVzdCAiJGFjX3Zhcl9tYXRjaF93b3JkIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICAgICAgaG9ub3Jfb3B0aW1pemVfb3B0aW9uPSJubyIKKworCisgIGZpCisKKworCisgIGFjX3Zhcl9tYXRjaF93b3JkPSJubyIKKyAgZm9yIHdvcmQxIGluICR0bXBfQ1BQRkxBR1M7IGRvCisgICAgZm9yIHdvcmQyIGluICRmbGFnc19vcHRfYWxsOyBkbworICAgICAgaWYgdGVzdCAiJHdvcmQxIiA9ICIkd29yZDIiOyB0aGVuCisgICAgICAgIGFjX3Zhcl9tYXRjaF93b3JkPSJ5ZXMiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorCisgIGlmIHRlc3QgIiRhY192YXJfbWF0Y2hfd29yZCIgPSAieWVzIjsgdGhlbgorCisgICAgICAgIGhvbm9yX29wdGltaXplX29wdGlvbj0ibm8iCisKKworICBmaQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhvbm9yX29wdGltaXplX29wdGlvbiIgPiY1CiskYXNfZWNobyAiJGhvbm9yX29wdGltaXplX29wdGlvbiIgPiY2OyB9CisgICAgICBpZiB0ZXN0ICIkaG9ub3Jfb3B0aW1pemVfb3B0aW9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIiR3YW50X29wdGltaXplIiA9ICJhc3N1bWVfeWVzIjsgdGhlbgorICAgICAgICAgIHdhbnRfb3B0aW1pemU9InllcyIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gImFzc3VtZV9ubyI7IHRoZW4KKyAgICAgICAgICB3YW50X29wdGltaXplPSJubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICAjCisgICAgaWYgdGVzdCAiJGhvbm9yX29wdGltaXplX29wdGlvbiIgPSAieWVzIjsgdGhlbgorCisgICAgYWNfdmFyX3N0cmlwcGVkPSIiCisgIGZvciB3b3JkMSBpbiAkdG1wX0NGTEFHUzsgZG8KKyAgICBhY192YXJfc3RyaXBfd29yZD0ibm8iCisgICAgZm9yIHdvcmQyIGluICRmbGFnc19vcHRfYWxsOyBkbworICAgICAgaWYgdGVzdCAiJHdvcmQxIiA9ICIkd29yZDIiOyB0aGVuCisgICAgICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJ5ZXMiCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0ICIkYWNfdmFyX3N0cmlwX3dvcmQiID0gIm5vIjsgdGhlbgorICAgICAgYWNfdmFyX3N0cmlwcGVkPSIkYWNfdmFyX3N0cmlwcGVkICR3b3JkMSIKKyAgICBmaQorICBkb25lCisgICAgdG1wX0NGTEFHUz0iJGFjX3Zhcl9zdHJpcHBlZCIKKyAgc3F1ZWV6ZSB0bXBfQ0ZMQUdTCisKKworICAgIGFjX3Zhcl9zdHJpcHBlZD0iIgorICBmb3Igd29yZDEgaW4gJHRtcF9DUFBGTEFHUzsgZG8KKyAgICBhY192YXJfc3RyaXBfd29yZD0ibm8iCisgICAgZm9yIHdvcmQyIGluICRmbGFnc19vcHRfYWxsOyBkbworICAgICAgaWYgdGVzdCAiJHdvcmQxIiA9ICIkd29yZDIiOyB0aGVuCisgICAgICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJ5ZXMiCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0ICIkYWNfdmFyX3N0cmlwX3dvcmQiID0gIm5vIjsgdGhlbgorICAgICAgYWNfdmFyX3N0cmlwcGVkPSIkYWNfdmFyX3N0cmlwcGVkICR3b3JkMSIKKyAgICBmaQorICBkb25lCisgICAgdG1wX0NQUEZMQUdTPSIkYWNfdmFyX3N0cmlwcGVkIgorICBzcXVlZXplIHRtcF9DUFBGTEFHUworCisgICAgICBpZiB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAieWVzIjsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgb3B0aW1pemVyIGVuYWJsaW5nIG9wdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgYWNjZXB0cyBvcHRpbWl6ZXIgZW5hYmxpbmcgb3B0aW9ucy4uLiAiID4mNjsgfQorICAgICAgICB0bXBfb3B0aW9ucz0iJGZsYWdzX29wdF95ZXMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gIm5vIjsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgb3B0aW1pemVyIGRpc2FibGluZyBvcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgb3B0aW1pemVyIGRpc2FibGluZyBvcHRpb25zLi4uICIgPiY2OyB9CisgICAgICAgIHRtcF9vcHRpb25zPSIkZmxhZ3Nfb3B0X29mZiIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkZmxhZ3NfcHJlZmVyX2NwcGZsYWdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIENQUEZMQUdTPSIkdG1wX0NQUEZMQUdTICR0bXBfb3B0aW9ucyIKKyAgICAgICAgQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgIGVsc2UKKyAgICAgICAgQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MiCisgICAgICAgIENGTEFHUz0iJHRtcF9DRkxBR1MgJHRtcF9vcHRpb25zIgorICAgICAgZmkKKyAgICAgIHNxdWVlemUgQ1BQRkxBR1MKKyAgICAgIHNxdWVlemUgQ0ZMQUdTCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9InVua25vd24iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpbnQgaSA9IDE7CisgICAgICByZXR1cm4gaTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9InllcyIKKworZWxzZQorCisgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICBlY2hvICIgIiA+JjYKKyAgICBzZWQgJ3MvXi9jYy1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGkgPSAxOworICAgICAgICByZXR1cm4gaTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ibm8iCisgICAgICBlY2hvICIgIiA+JjYKKyAgICAgIHNlZCAncy9eL2xpbmstZmFpbDogLycgY29uZnRlc3QuZXJyID4mNgorICAgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjICAgICAgIGlmZGVmIF9fU1REQ19fCisjICAgICAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisjICAgICAgIGVuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgZXhpdChpKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgZWNobyAicnVuLWZhaWw6IHRlc3QgcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjb21waWxlciBvcHRpb25zIGFkZGVkOiAkdG1wX29wdGlvbnMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9vcHRpb25zIiA+JjY7fQorCisgIGVsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX29wdGlvbnMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9vcHRpb25zIiA+JjI7fQorICAgICAgICAgICAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKworICBmaQorCisgICAgZmkKKyAgICAjCisgIGZpCisKKworICAgICAgICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIHRtcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9DUFBGTEFHUz0iIgorICAgIHRtcF9DRkxBR1M9IiIKKyAgICAjCisgICAgY2FzZSAiJGNvbXBpbGVyX2lkIiBpbgorICAgICAgICAjCisgICAgICBDTEFORykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1wZWRhbnRpYyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2FsbCAtV2V4dHJhIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdzaGFkb3ciCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdpbmxpbmUgLVduZXN0ZWQtZXh0ZXJucyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV21pc3NpbmctZGVjbGFyYXRpb25zIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1wcm90b3R5cGVzIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tbG9uZy1sb25nIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XZmxvYXQtZXF1YWwiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1tdWx0aWNoYXIgLVdzaWduLWNvbXBhcmUiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd1bmRlZiIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLWZvcm1hdC1ub25saXRlcmFsIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XZW5kaWYtbGFiZWxzIC1Xc3RyaWN0LXByb3RvdHlwZXMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdjYXN0LWFsaWduIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tc3lzdGVtLWhlYWRlcnMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdzaG9ydGVuLTY0LXRvLTMyIgorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDEiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VudXNlZCIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBERUNfQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtbXNnX2VuYWJsZSBsZXZlbDMiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIEdOVV9DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiB8fAorICAgICAgICAgICAgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDAiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtcGVkYW50aWMiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XYWxsIC1XIgorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDQiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3BvaW50ZXItYXJpdGggLVd3cml0ZS1zdHJpbmdzIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiB8fAorICAgICAgICAgICAgICB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjMwMCI7IHRoZW4KKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd1bnVzZWQgLVdzaGFkb3ciCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjIwNyI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XaW5saW5lIC1XbmVzdGVkLWV4dGVybnMiCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiIHx8CisgICAgICAgICAgICAgIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV21pc3NpbmctZGVjbGFyYXRpb25zIgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV21pc3NpbmctcHJvdG90eXBlcyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMjk1IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1sb25nLWxvbmciCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMjk2IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdmbG9hdC1lcXVhbCIKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tbXVsdGljaGFyIC1Xc2lnbi1jb21wYXJlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd1bmRlZiIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIyOTciOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLWZvcm1hdC1ub25saXRlcmFsIgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjMwMCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjMwMyI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XZW5kaWYtbGFiZWxzIC1Xc3RyaWN0LXByb3RvdHlwZXMiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzA0IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiNDAwIjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdzdHJpY3QtYWxpYXNpbmc9MyIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICI0MDIiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Nhc3QtYWxpZ24iCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiNDAzIjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd0eXBlLWxpbWl0cyAtV29sZC1zdHlsZS1kZWNsYXJhdGlvbiIKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1wYXJhbWV0ZXItdHlwZSAtV2VtcHR5LWJvZHkiCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Nsb2JiZXJlZCAtV2lnbm9yZWQtcXVhbGlmaWVycyIKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XY29udmVyc2lvbiAtV25vLXNpZ24tY29udmVyc2lvbiAtV3ZsYSIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICI0MDUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fV0lOMzIiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQiCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICBmaQorICAgICAgICAjCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDAiOyB0aGVuCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1zeXN0ZW0taGVhZGVycyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjEwNCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLXVudXNlZCAtV25vLXNoYWRvdyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjIwNyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLW1pc3NpbmctZGVjbGFyYXRpb25zIgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLW1pc3NpbmctcHJvdG90eXBlcyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgSFBfVVhfQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyArdzEiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElCTV9DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1VOSVhfQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1ndCAiNjAwIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XYWxsIC13MiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2NoZWNrIgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XY29tbWVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2RlcHJlY2F0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdwNjQiCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdwb2ludGVyLWFyaXRoIgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XcmV0dXJuLXR5cGUiCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdzaGFkb3ciCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVd1bmluaXRpYWxpemVkIgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XdW51c2VkLWZ1bmN0aW9uIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZuby1zdHJpY3QtYWxpYXNpbmciCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZwLW1vZGVsIHByZWNpc2UiCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDAwIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtdmVjLXJlcG9ydDAiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1dJTkRPV1NfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBMQ0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNHSV9NSVBTX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZ1bGx3YXJuIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBTR0lfTUlQU1BST19DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mdWxsd2FybiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC13b2ZmIDEyMDkiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNVTlBST19DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC12IgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBUSU5ZX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdhbGwiCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xd3JpdGUtc3RyaW5ncyIKKyAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd1bnN1cHBvcnRlZCIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgV0FUQ09NX1VOSVhfQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2FsbCAtV2V4dHJhIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBXQVRDT01fV0lORE9XU19DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICBlc2FjCisgICAgIworICAgIHNxdWVlemUgdG1wX0NQUEZMQUdTCisgICAgc3F1ZWV6ZSB0bXBfQ0ZMQUdTCisgICAgIworICAgIGlmIHRlc3QgISAteiAiJHRtcF9DRkxBR1MiIHx8IHRlc3QgISAteiAiJHRtcF9DUFBGTEFHUyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgYWNjZXB0cyBzdHJpY3Qgd2FybmluZyBvcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgc3RyaWN0IHdhcm5pbmcgb3B0aW9ucy4uLiAiID4mNjsgfQorICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyAkdG1wX0NQUEZMQUdTIgorICAgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTICR0bXBfQ0ZMQUdTIgorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgICAgc3F1ZWV6ZSBDRkxBR1MKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0idW5rbm93biIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGludCBpID0gMTsKKyAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgIGVjaG8gIiAiID4mNgorICAgIHNlZCAncy9eL2NjLWZhaWw6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgc2VkICdzL14vbGluay1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyMgICAgICAgaWZkZWYgX19TVERDX18KKyMgICAgICAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgICAgICAgZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBleGl0KGkpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9InllcyIKKworZWxzZQorCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgICAgZWNobyAiICIgPiY2CisgICAgICBlY2hvICJydW4tZmFpbDogdGVzdCBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjYKKyAgICAgIGVjaG8gIiAiID4mNgorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNvbXBpbGVyIG9wdGlvbnMgYWRkZWQ6ICR0bXBfQ0ZMQUdTICR0bXBfQ1BQRkxBR1MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHUyIgPiY2O30KKworICBlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTIiA+JjI7fQorICAgICAgICAgICAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKworICBmaQorCisgICAgZmkKKyAgICAjCisgIGZpCisKKworaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJJTlRFTF9VTklYX0MiOyB0aGVuCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDAwIjsgdGhlbgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXNoYXJlZC1pbnRlbCIKKyAgZWxpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjkwMCI7IHRoZW4KKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1pLWR5bmFtaWMiCisgIGZpCisgICMKK2ZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGhhbHRzIG9uIGNvbXBpbGF0aW9uIGVycm9ycyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBoYWx0cyBvbiBjb21waWxhdGlvbiBlcnJvcnMuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gImNvbXBpbGVyIGRvZXMgbm90IGhhbHQgb24gY29tcGlsYXRpb24gZXJyb3JzLiIgIiRMSU5FTk8iIDUKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGhhbHRzIG9uIG5lZ2F0aXZlIHNpemVkIGFycmF5cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBoYWx0cyBvbiBuZWdhdGl2ZSBzaXplZCBhcnJheXMuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgIHR5cGVkZWYgY2hhciBiYWRfdFtzaXplb2YoY2hhcikgPT0gc2l6ZW9mKGludCkgPyAtMSA6IC0xIF07CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBiYWRfdCBkdW1teTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhc19mbl9lcnJvciAkPyAiY29tcGlsZXIgZG9lcyBub3QgaGFsdCBvbiBuZWdhdGl2ZSBzaXplZCBhcnJheXMuIiAiJExJTkVOTyIgNQorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaGFsdHMgb24gZnVuY3Rpb24gcHJvdG90eXBlIG1pc21hdGNoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGhhbHRzIG9uIGZ1bmN0aW9uIHByb3RvdHlwZSBtaXNtYXRjaC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICBpbnQgcmFuZChpbnQgbik7CisgICAgICBpbnQgcmFuZChpbnQgbikKKyAgICAgIHsKKyAgICAgICAgaWYobikKKyAgICAgICAgICByZXR1cm4gKytuOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIG47CisgICAgICB9CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpbnQgaVsyXTsKKyAgICAgIGludCBqID0gcmFuZChpWzBdKTsKKyAgICAgIGlmKGopCisgICAgICAgIHJldHVybiBqOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb21waWxlciBkb2VzIG5vdCBoYWx0IG9uIGZ1bmN0aW9uIHByb3RvdHlwZSBtaXNtYXRjaC4iICIkTElORU5PIiA1CisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIGhpZGluZyBsaWJyYXJ5IGludGVybmFsIHN5bWJvbHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgaGlkaW5nIGxpYnJhcnkgaW50ZXJuYWwgc3ltYm9scy4uLiAiID4mNjsgfQorICBzdXBwb3J0c19zeW1ib2xfaGlkaW5nPSJubyIKKyAgc3ltYm9sX2hpZGluZ19DRkxBR1M9IiIKKyAgc3ltYm9sX2hpZGluZ19FWFRFUk49IiIKKyAgdG1wX0NGTEFHUz0iIgorICB0bXBfRVhURVJOPSIiCisgIGNhc2UgIiRjb21waWxlcl9pZCIgaW4KKyAgICBDTEFORykKKyAgICAgICAgICAgIHRtcF9FWFRFUk49Il9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoXCJkZWZhdWx0XCIpKSkiCisgICAgICB0bXBfQ0ZMQUdTPSItZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgc3VwcG9ydHNfc3ltYm9sX2hpZGluZz0ieWVzIgorICAgICAgOzsKKyAgICBHTlVfQykKKyAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzA0IjsgdGhlbgorICAgICAgICBpZiAkQ0MgLS1oZWxwIC0tdmVyYm9zZSAyPiYxIHwgZ3JlcCBmdmlzaWJpbGl0eT0gPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgdG1wX0VYVEVSTj0iX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fIChcImRlZmF1bHRcIikpKSIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSItZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgICAgIHN1cHBvcnRzX3N5bWJvbF9oaWRpbmc9InllcyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICA7OworICAgIElOVEVMX1VOSVhfQykKKyAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiOTAwIjsgdGhlbgorICAgICAgICBpZiAkQ0MgLS1oZWxwIC0tdmVyYm9zZSAyPiYxIHwgZ3JlcCBmdmlzaWJpbGl0eT0gPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjICAgICAgICAgICAgIGluY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgICAgIHByaW50ZigiaWNjIGZ2aXNpYmlsaXR5IGJ1ZyB0ZXN0Iik7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgICB0bXBfRVhURVJOPSJfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKFwiZGVmYXVsdFwiKSkpIgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgICAgICAgIHN1cHBvcnRzX3N5bWJvbF9oaWRpbmc9InllcyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgU1VOUFJPX0MpCisgICAgICBpZiAkQ0MgMj4mMSB8IGdyZXAgZmxhZ3MgPi9kZXYvbnVsbCAmJiAkQ0MgLWZsYWdzIHwgZ3JlcCB4bGRzY29wZT0gPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAgdG1wX0VYVEVSTj0iX19nbG9iYWwiCisgICAgICAgIHRtcF9DRkxBR1M9Ii14bGRzY29wZT1oaWRkZW4iCisgICAgICAgIHN1cHBvcnRzX3N5bWJvbF9oaWRpbmc9InllcyIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRzdXBwb3J0c19zeW1ib2xfaGlkaW5nIiA9ICJ5ZXMiOyB0aGVuCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyAkdG1wX0NGTEFHUyIKKyAgICBzcXVlZXplIENGTEFHUworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICR0bXBfRVhURVJOIGNoYXIgKmR1bW15KGNoYXIgKmJ1ZmYpOworICAgICAgICBjaGFyICpkdW1teShjaGFyICpidWZmKQorICAgICAgICB7CisgICAgICAgICBpZihidWZmKQorICAgICAgICAgICByZXR1cm4gKytidWZmOworICAgICAgICAgZWxzZQorICAgICAgICAgICByZXR1cm4gYnVmZjsKKyAgICAgICAgfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBjaGFyIGJbMTZdOworICAgICAgICBjaGFyICpyID0gZHVtbXkoJmJbMF0pOworICAgICAgICBpZihyKQorICAgICAgICAgIHJldHVybiAoaW50KSpyOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgc3VwcG9ydHNfc3ltYm9sX2hpZGluZz0ieWVzIgorICAgICAgaWYgdGVzdCAtZiBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgZ3JlcCAndmlzaWJpbGl0eScgY29uZnRlc3QuZXJyID4vZGV2L251bGwKKyAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAiMCI7IHRoZW4KKyAgICAgICAgICBzdXBwb3J0c19zeW1ib2xfaGlkaW5nPSJubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisKK2Vsc2UKKworICAgICAgc3VwcG9ydHNfc3ltYm9sX2hpZGluZz0ibm8iCisgICAgICBlY2hvICIgIiA+JjYKKyAgICAgIHNlZCAncy9eL2NjLXNyYzogLycgY29uZnRlc3QuJGFjX2V4dCA+JjYKKyAgICAgIHNlZCAncy9eL2NjLWVycjogLycgY29uZnRlc3QuZXJyID4mNgorICAgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MiCisgIGZpCisgIGlmIHRlc3QgIiRzdXBwb3J0c19zeW1ib2xfaGlkaW5nIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBzeW1ib2xfaGlkaW5nX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgc3ltYm9sX2hpZGluZ19FWFRFUk49IiR0bXBfRVhURVJOIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCisKKworCisgICAgICBjYXJlc19idWlsZGRpcj1gcHdkYAorICBzdXBwb3J0c19jdXJsZGVidWc9InVua25vd24iCisgIGlmIHRlc3QgIiR3YW50X2N1cmxkZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInhubyIgJiYKKyAgICAgIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVua25vd24gZW5hYmxlX3NoYXJlZCBzZXR0aW5nLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bmtub3duIGVuYWJsZV9zaGFyZWQgc2V0dGluZy4iID4mMjt9CisgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgIGZpCisgICAgaWYgdGVzdCAieCRlbmFibGVfc3RhdGljIiAhPSAieG5vIiAmJgorICAgICAgdGVzdCAieCRlbmFibGVfc3RhdGljIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5rbm93biBlbmFibGVfc3RhdGljIHNldHRpbmcuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVua25vd24gZW5hYmxlX3N0YXRpYyBzZXR0aW5nLiIgPiYyO30KKyAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkc3VwcG9ydHNfY3VybGRlYnVnIiAhPSAibm8iOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIiAmJgorICAgICAgICB0ZXN0ICJ4JHhjX2x0X3NobGliX3VzZV9ub191bmRlZmluZWQiID0gJ3h5ZXMnOyB0aGVuCisgICAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogc2hhcmVkIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgc3ltYm9scy4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogc2hhcmVkIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgc3ltYm9scy4iID4mMjt9CisgICAgICBmaQorICAgICAgaWYgdGVzdCAhIC1mICIkc3JjZGlyLy4uL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5kaXN0IjsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGMtYXJlcyBzb3VyY2Ugbm90IGVtYmVkZGVkIGluIGN1cmwncyBDVlMgdHJlZS4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogYy1hcmVzIHNvdXJjZSBub3QgZW1iZWRkZWQgaW4gY3VybCdzIENWUyB0cmVlLiIgPiYyO30KKyAgICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICAgIGVsaWYgdGVzdCAhIC1mICIkc3JjZGlyLy4uL2luY2x1ZGUvY3VybC9NYWtlZmlsZS5pbiI7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjdXJsJ3MgYnVpbGRjb25mIGhhcyBub3QgYmVlbiBydW4uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGN1cmwncyBidWlsZGNvbmYgaGFzIG5vdCBiZWVuIHJ1bi4iID4mMjt9CisgICAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgICBlbGlmIHRlc3QgISAtZiAiJGNhcmVzX2J1aWxkZGlyLy4uL2xpYmN1cmwucGMiIHx8CisgICAgICAgIHRlc3QgISAtZiAiJGNhcmVzX2J1aWxkZGlyLy4uL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCI7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjdXJsJ3MgY29uZmlndXJlIGhhcyBub3QgYmVlbiBydW4uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGN1cmwncyBjb25maWd1cmUgaGFzIG5vdCBiZWVuIHJ1bi4iID4mMjt9CisgICAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgICBlbGlmIHRlc3QgISAtZiAiJGNhcmVzX2J1aWxkZGlyLy4uL2xpYi9jdXJsX2NvbmZpZy5oIjsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGxpYmN1cmwncyBjdXJsX2NvbmZpZy5oIGlzIG1pc3NpbmcuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpYmN1cmwncyBjdXJsX2NvbmZpZy5oIGlzIG1pc3NpbmcuIiA+JjI7fQorICAgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgICAgZWxpZiB0ZXN0ICEgLWYgIiRjYXJlc19idWlsZGRpci8uLi9jb25maWcuc3RhdHVzIjsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGN1cmwncyBjb25maWcuc3RhdHVzIGlzIG1pc3NpbmcuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGN1cmwncyBjb25maWcuc3RhdHVzIGlzIG1pc3NpbmcuIiA+JjI7fQorICAgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRzdXBwb3J0c19jdXJsZGVidWciICE9ICJubyI7IHRoZW4KKyAgICAgICAgZ3JlcCAnXiNkZWZpbmUgVVNFX0FSRVMnICIkY2FyZXNfYnVpbGRkaXIvLi4vbGliL2N1cmxfY29uZmlnLmgiID4vZGV2L251bGwKKyAgICAgICAgaWYgdGVzdCAiJD8iIC1uZSAiMCI7IHRoZW4KKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGxpYmN1cmwgY29uZmlndXJlZCB3aXRob3V0IGMtYXJlcyBzdXBwb3J0LiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaWJjdXJsIGNvbmZpZ3VyZWQgd2l0aG91dCBjLWFyZXMgc3VwcG9ydC4iID4mMjt9CisgICAgICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkc3VwcG9ydHNfY3VybGRlYnVnIiAhPSAibm8iOyB0aGVuCisgICAgICAgIGdyZXAgJ0NQUEZMQUdTLipDVVJMREVCVUcnICIkY2FyZXNfYnVpbGRkaXIvLi4vY29uZmlnLnN0YXR1cyIgPi9kZXYvbnVsbAorICAgICAgICBpZiB0ZXN0ICIkPyIgLW5lICIwIjsgdGhlbgorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbGliY3VybCBjb25maWd1cmVkIHdpdGhvdXQgY3VybGRlYnVnIHN1cHBvcnQuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpYmN1cmwgY29uZmlndXJlZCB3aXRob3V0IGN1cmxkZWJ1ZyBzdXBwb3J0LiIgPiYyO30KKyAgICAgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR3YW50X2N1cmxkZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmcgY2FuIGJlIGVuYWJsZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmcgY2FuIGJlIGVuYWJsZWQuLi4gIiA+JjY7IH0KKyAgICB0ZXN0ICIkc3VwcG9ydHNfY3VybGRlYnVnIiA9ICJubyIgfHwgc3VwcG9ydHNfY3VybGRlYnVnPSJ5ZXMiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRzdXBwb3J0c19jdXJsZGVidWciID4mNQorJGFzX2VjaG8gIiRzdXBwb3J0c19jdXJsZGVidWciID4mNjsgfQorICAgIGlmIHRlc3QgIiRzdXBwb3J0c19jdXJsZGVidWciID0gIm5vIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYW5ub3QgZW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW5ub3QgZW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nLiIgPiYyO30KKyAgICAgIHdhbnRfY3VybGRlYnVnPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR3YW50X2N1cmxkZWJ1ZyIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBCVUlMRElOR19MSUJDVVJMIDEiID4+Y29uZmRlZnMuaAorCisgICAgQ1BQRkxBR1M9Ii1EQ1VSTERFQlVHICRDUFBGTEFHUyIKKyAgICBzcXVlZXplIENQUEZMQUdTCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHdhbnRfZGVidWciID0gInllcyI7IHRoZW4KKyAgICBDUFBGTEFHUz0iLURERUJVR0JVSUxEICRDUFBGTEFHUyIKKyAgICBzcXVlZXplIENQUEZMQUdTCisgIGZpCisKKyBpZiB0ZXN0IHgkd2FudF9jdXJsZGVidWcgPSB4eWVzOyB0aGVuCisgIENVUkxERUJVR19UUlVFPQorICBDVVJMREVCVUdfRkFMU0U9JyMnCitlbHNlCisgIENVUkxERUJVR19UUlVFPScjJworICBDVVJMREVCVUdfRkFMU0U9CitmaQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2luZG93cy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3aW5kb3dzLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTkRPV1NfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT0yKldJTlZFUjsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lORE9XU19IIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgdGFyZ2V0IGlzIGEgbmF0aXZlIFdpbmRvd3Mgb25lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgdGFyZ2V0IGlzIGEgbmF0aXZlIFdpbmRvd3Mgb25lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X25hdGl2ZV93aW5kb3dzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA9ICJubyI7IHRoZW4KKyAgICAgIGFjX2N2X25hdGl2ZV93aW5kb3dzPSJubyIKKyAgICBlbHNlCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykgfHwgXAorICAgKGRlZmluZWQoX01TQ19WRVIpICYmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpKSkKKyAgICAgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICAgICAgTm90IGEgbmF0aXZlIFdpbmRvd3MgYnVpbGQgdGFyZ2V0LgorI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIGFjX2N2X25hdGl2ZV93aW5kb3dzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgICBhY19jdl9uYXRpdmVfd2luZG93cz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9uYXRpdmVfd2luZG93cyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiA+JjY7IH0KKyAgIGlmIHRlc3QgIngkYWNfY3ZfbmF0aXZlX3dpbmRvd3MiID0geHllczsgdGhlbgorICBET0lOR19OQVRJVkVfV0lORE9XU19UUlVFPQorICBET0lOR19OQVRJVkVfV0lORE9XU19GQUxTRT0nIycKK2Vsc2UKKyAgRE9JTkdfTkFUSVZFX1dJTkRPV1NfVFJVRT0nIycKKyAgRE9JTkdfTkFUSVZFX1dJTkRPV1NfRkFMU0U9CitmaQorCisKK2Nhc2UgWC0iJGFjX2N2X25hdGl2ZV93aW5kb3dzIiBpbgorICBYLXllcykKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbnNvY2suaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2luc29jay5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl93aW5zb2NrX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jay5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pCisgICAgICAgIEhBVkVfV0lOU09DS19IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PVdTQUNsZWFudXAoKTsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5zb2NrX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2luc29ja19oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lOU09DS19IIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbnNvY2syLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbnNvY2syLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3dpbnNvY2syX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKSB8fCBkZWZpbmVkKF9fTUlOR1czMkNFX18pCisgICAgICAgIEhBVkVfV0lOU09DSzJfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT0yKklQUFJPVE9fRVNQOworI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd3MydGNwaXAuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd3MydGNwaXAuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfd3MydGNwaXBfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykgfHwgZGVmaW5lZChfX01JTkdXMzJDRV9fKQorICAgICAgICBIQVZFX1dTMlRDUElQX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9MipJUF9QS1RJTkZPOworI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfd3MydGNwaXBfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dTMlRDUElQX0ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworICAgIDs7CisgICopCisgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ibm8iCisgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9Im5vIgorICAgIGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oPSJubyIKKyAgICA7OworZXNhYworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIFgvT3BlbiBuZXR3b3JrIGxpYnJhcnkgaXMgcmVxdWlyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgWC9PcGVuIG5ldHdvcmsgbGlicmFyeSBpcyByZXF1aXJlZC4uLiAiID4mNjsgfQorICB0c3RfbGliX3huZXRfcmVxdWlyZWQ9Im5vIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50IG1haW4gKHZvaWQpCit7CisjaWYgZGVmaW5lZChfX2hwdXgpICYmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgJiYgKF9YT1BFTl9TT1VSQ0UgPj0gNjAwKQorICByZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoX19ocHV4KSAmJiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQpCisgIHJldHVybiAwOworI2Vsc2UKKyAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorfQorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdHN0X2xpYl94bmV0X3JlcXVpcmVkPSJ5ZXMiCisgICAgTElCUz0iJExJQlMgLWx4bmV0IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHN0X2xpYl94bmV0X3JlcXVpcmVkIiA+JjUKKyRhc19lY2hvICIkdHN0X2xpYl94bmV0X3JlcXVpcmVkIiA+JjY7IH0KKworCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRob3N0YnluYW1lIiAiYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID0geHllczsgdGhlbiA6CisgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKworZWxzZQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5zbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPSB4eWVzOyB0aGVuIDoKKyAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTPSIkTElCUyAtbG5zbCIKKworZmkKKworCitmaQorCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIgordGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxzb2NrZXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxzb2NrZXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGhvc3RieW5hbWUgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnZXRob3N0YnluYW1lICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUiID0geHllczsgdGhlbiA6CisgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sc29ja2V0IgorCitmaQorCitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSB3aXRoIGJvdGggbnNsIGFuZCBzb2NrZXQgbGlicyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSB3aXRoIGJvdGggbnNsIGFuZCBzb2NrZXQgbGlicy4uLiAiID4mNjsgfQorICBteV9hY19zYXZlX0xJQlM9JExJQlMKKyAgTElCUz0iLWxuc2wgLWxzb2NrZXQgJExJQlMiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBnZXRob3N0YnluYW1lKCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIExJQlM9JG15X2FjX3NhdmVfTElCUworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIgordGhlbgorICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giID0gInllcyI7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgKi0qLW1pbmd3MzJjZSopCisgICAgICAgICAgd2luc29ja19MSUI9Ii1sd2luc29jayIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHdpbnNvY2tfTElCPSItbHdzb2NrMzIiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSAieWVzIjsgdGhlbgorICAgICAgd2luc29ja19MSUI9Ii1sd3MyXzMyIgorICAgIGZpCisgICAgaWYgdGVzdCAhIC16ICIkd2luc29ja19MSUIiOyB0aGVuCisgICAgICBteV9hY19zYXZlX0xJQlM9JExJQlMKKyAgICAgIExJQlM9IiR3aW5zb2NrX0xJQiAkTElCUyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gJHdpbnNvY2tfTElCIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluICR3aW5zb2NrX0xJQi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBnZXRob3N0YnluYW1lKCJ3d3cuZHVtbXlzaXRlLmNvbSIpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgd2luc29ja19MSUI9IiIKKyAgICAgICAgTElCUz0kbXlfYWNfc2F2ZV9MSUJTCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGZvciBNaW5peCAzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGZvciBNaW5peCAzLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisvKiBPbGRlciBNaW5peCB2ZXJzaW9ucyBtYXkgbmVlZCA8bmV0L2dlbi9uZXRkYi5oPiBoZXJlIGluc3RlYWQgKi8KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgZ2V0aG9zdGJ5bmFtZSgid3d3LmR1bW15c2l0ZS5jb20iKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBmb3IgZUNvcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBmb3IgZUNvcy4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGdldGhvc3RieW5hbWUoInd3dy5kdW1teXNpdGUuY29tIik7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIgordGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuZXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuZXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX25ldF9nZXRob3N0YnluYW1lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxuZXQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGhvc3RieW5hbWUgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnZXRob3N0YnluYW1lICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbmV0X2dldGhvc3RieW5hbWU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9uZXRfZ2V0aG9zdGJ5bmFtZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbmV0X2dldGhvc3RieW5hbWUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbmV0X2dldGhvc3RieW5hbWUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbmV0X2dldGhvc3RieW5hbWUiID0geHllczsgdGhlbiA6CisgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sbmV0IgorCitmaQorCitmaQorCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY291bGRuJ3QgZmluZCBsaWJyYXJpZXMgZm9yIGdldGhvc3RieW5hbWUoKSIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0gInhhcHBsZSI7IHRoZW4gOgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlQaG9uZSB0YXJnZXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlQaG9uZSB0YXJnZXQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlICJUYXJnZXRDb25kaXRpb25hbHMuaCIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBUQVJHRVRfT1NfSVBIT05FID09IDAKKyNlcnJvciBOb3QgYW4gaVBob25lIHRhcmdldAorI2VuZGlmCityZXR1cm4gMDsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyByZXNfc2VydmljZW5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyByZXNfc2VydmljZW5hbWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX3Jlc19zZXJ2aWNlbmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJlc19zZXJ2aWNlbmFtZSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHJlc19zZXJ2aWNlbmFtZSAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgcmVzb2x2OyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX3Jlc19zZXJ2aWNlbmFtZT0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX3Jlc19zZXJ2aWNlbmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfcmVzX3NlcnZpY2VuYW1lKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfcmVzX3NlcnZpY2VuYW1lPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfcmVzX3NlcnZpY2VuYW1lIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3Jlc19zZXJ2aWNlbmFtZSIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9yZXNfc2VydmljZW5hbWUKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworCiskYXNfZWNobyAiI2RlZmluZSBDQVJFU19VU0VfTElCUkVTT0xWIDEiID4+Y29uZmRlZnMuaAorCisKK2Vsc2UKKworICAgICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGxpYnJlc29sdiB3aGljaCBpcyByZXF1aXJlZCBmb3IgaVBob25lIHRhcmdldHMiICIkTElORU5PIiA1CisKK2ZpCisKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyY2FzZWNtcCIgImFjX2N2X2Z1bmNfc3RyY2FzZWNtcCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJjYXNlY21wIiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHJjYXNlY21wIGluIC1scmVzb2x2ZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RyY2FzZWNtcCBpbiAtbHJlc29sdmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3Jlc29sdmVfc3RyY2FzZWNtcCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scmVzb2x2ZSAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RyY2FzZWNtcCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cmNhc2VjbXAgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXA9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXA9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3Jlc29sdmVfc3RyY2FzZWNtcCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXAiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUkVTT0xWRSAxCitfQUNFT0YKKworICBMSUJTPSItbHJlc29sdmUgJExJQlMiCisKK2ZpCisKK2ZpCisKKworaWYgdGVzdCAiJGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXAiID0gIiRhY19jdl9mdW5jX3N0cmNhc2VjbXAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cmNhc2VjbXAgaW4gLWxyZXNvbHZlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJjYXNlY21wIGluIC1scmVzb2x2ZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZXNvbHZlIC1sbnNsICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmNhc2VjbXAgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJjYXNlY21wICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wPXllcworZWxzZQorICBhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3Jlc29sdmVfc3RyY2FzZWNtcCIgPSB4eWVzOyB0aGVuIDoKKyAgTElCUz0iLWxyZXNvbHZlICRMSUJTIgorZmkKKworZmkKK2FjX2N2X2Z1bmNfc3RyY2FzZWNtcD0ibm8iCisKKworY2FyZXNfaW5jbHVkZXNfd2luc29jazI9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyMgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjICAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjICBlbHNlCisjICAgIGlmZGVmIEhBVkVfV0lOU09DS19ICisjICAgICAgaW5jbHVkZSA8d2luc29jay5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbmRvd3MuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2luZG93cy5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl93aW5kb3dzX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykKKyAgICAgICAgSEFWRV9XSU5ET1dTX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9MipXSU5WRVI7CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9InllcyIKKworZWxzZQorCisgICAgICBhY19jdl9oZWFkZXJfd2luZG93c19oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2luZG93c19oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPiY2OyB9CisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2luc29jay5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3aW5zb2NrLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3dpbnNvY2tfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykKKyAgICAgICAgSEFWRV9XSU5TT0NLX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9V1NBQ2xlYW51cCgpOworI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfd2luc29ja19oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giID4mNjsgfQorICBjYXNlICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5TT0NLX0ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2luc29jazIuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2luc29jazIuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfd2luc29jazJfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykKKyAgICAgICAgSEFWRV9XSU5TT0NLMl9IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqSVBQUk9UT19FU1A7CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID4mNjsgfQorICBjYXNlICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjb25uZWN0IGluIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB0c3RfY29ubmVjdF9zYXZlX0xJQlM9IiRMSUJTIgorICB0c3RfY29ubmVjdF9uZWVkX0xJQlM9InVua25vd24iCisgIGZvciB0c3RfbGliIGluICcnICctbHNvY2tldCcgOyBkbworICAgIGlmIHRlc3QgIiR0c3RfY29ubmVjdF9uZWVkX0xJQlMiID0gInVua25vd24iOyB0aGVuCisgICAgICBMSUJTPSIkdHN0X2xpYiAkdHN0X2Nvbm5lY3Rfc2F2ZV9MSUJTIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgICAjaWZuZGVmIEhBVkVfV0lORE9XU19ICisgICAgICAgICAgICBpbnQgY29ubmVjdChpbnQsIHZvaWQqLCBpbnQpOworICAgICAgICAgICNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIGlmKDAgIT0gY29ubmVjdCgwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB0c3RfY29ubmVjdF9uZWVkX0xJQlM9IiR0c3RfbGliIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICBkb25lCisgIExJQlM9IiR0c3RfY29ubmVjdF9zYXZlX0xJQlMiCisgICMKKyAgY2FzZSBYLSIkdHN0X2Nvbm5lY3RfbmVlZF9MSUJTIiBpbgorICAgIFgtdW5rbm93bikKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBjYW5ub3QgZmluZCBjb25uZWN0IiA+JjUKKyRhc19lY2hvICJjYW5ub3QgZmluZCBjb25uZWN0IiA+JjY7IH0KKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBjb25uZWN0IGZ1bmN0aW9uIGluIGxpYnJhcmllcy4iICIkTElORU5PIiA1CisgICAgICA7OworICAgIFgtKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIDs7CisgICAgKikKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHN0X2Nvbm5lY3RfbmVlZF9MSUJTIiA+JjUKKyRhc19lY2hvICIkdHN0X2Nvbm5lY3RfbmVlZF9MSUJTIiA+JjY7IH0KKyAgICAgIExJQlM9IiR0c3RfY29ubmVjdF9uZWVkX0xJQlMgJHRzdF9jb25uZWN0X3NhdmVfTElCUyIKKyAgICAgIDs7CisgIGVzYWMKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl90aW1lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKK2lmICgoc3RydWN0IHRtICopIDApCityZXR1cm4gMDsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3RpbWU9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl90aW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisgICAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvdGltZS5oIHRpbWUuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1vbm90b25pYyBjbG9ja19nZXR0aW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtb25vdG9uaWMgY2xvY2tfZ2V0dGltZS4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICh2b2lkKWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisgICAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgIworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNsb2NrX2dldHRpbWUgaW4gbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjbG9ja19nZXR0aW1lIGluIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgICMKKyAgICBjdXJsX2N2X3NhdmVfTElCUz0iJExJQlMiCisgICAgY3VybF9jdl9nY2xrX0xJQlM9InVua25vd24iCisgICAgIworICAgIGZvciB4X3hsaWJzIGluICcnICctbHJ0JyAnLWxwb3NpeDQnIDsgZG8KKyAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2djbGtfTElCUyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJHhfeGxpYnMiOyB0aGVuCisgICAgICAgICAgTElCUz0iJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgICBlbHNlCisgICAgICAgICAgTElCUz0iJHhfeGxpYnMgJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgICBmaQorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICAgICAgICh2b2lkKWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgIGN1cmxfY3ZfZ2Nsa19MSUJTPSIkeF94bGlicyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBmaQorICAgIGRvbmUKKyAgICAjCisgICAgTElCUz0iJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICMKKyAgICBjYXNlIFgtIiRjdXJsX2N2X2djbGtfTElCUyIgaW4KKyAgICAgIFgtdW5rbm93bikKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNhbm5vdCBmaW5kIGNsb2NrX2dldHRpbWUiID4mNQorJGFzX2VjaG8gImNhbm5vdCBmaW5kIGNsb2NrX2dldHRpbWUiID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgd2lsbCBub3QgYmUgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIHdpbGwgbm90IGJlIGRlZmluZWQiID4mMjt9CisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ibm8iCisgICAgICAgIDs7CisgICAgICBYLSkKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIGFkZGl0aW9uYWwgbGliIHJlcXVpcmVkIiA+JjUKKyRhc19lY2hvICJubyBhZGRpdGlvbmFsIGxpYiByZXF1aXJlZCIgPiY2OyB9CisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ieWVzIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAteiAiJGN1cmxfY3Zfc2F2ZV9MSUJTIjsgdGhlbgorICAgICAgICAgIExJQlM9IiRjdXJsX2N2X2djbGtfTElCUyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIExJQlM9IiRjdXJsX2N2X2djbGtfTElCUyAkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgICAgIGZpCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3VybF9jdl9nY2xrX0xJQlMiID4mNQorJGFzX2VjaG8gIiRjdXJsX2N2X2djbGtfTElCUyIgPiY2OyB9CisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ieWVzIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAjCisgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICAgIHRlc3QgIiRhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWUiID0gInllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbW9ub3RvbmljIGNsb2NrX2dldHRpbWUgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbW9ub3RvbmljIGNsb2NrX2dldHRpbWUgd29ya3MuLi4gIiA+JjY7IH0KKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisgICAgICAgICAgaWYgKDAgPT0gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykpCisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXQoMSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgd2lsbCBub3QgYmUgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIHdpbGwgbm90IGJlIGRlZmluZWQiID4mMjt9CisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ibm8iCisgICAgICAgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICBmaQorICAgICMKKyAgICBjYXNlICIkYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lIiBpbgorICAgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgMQorX0FDRU9GCisKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgIworICBmaQorICAjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBsaWJnY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byB1c2UgbGliZ2NjLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliZ2NjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmdjYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmdjYzsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIHllcykKKyAgICAgICAgTElCUz0iJExJQlMgLWxnY2MiCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICAqKSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2ZpCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1hbGxvYy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtYWxsb2MuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfbWFsbG9jX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX21hbGxvY19oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX21hbGxvY19oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfbWFsbG9jX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfbWFsbG9jX2giID4mNjsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX21hbGxvY19oIiA9ICJ5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCitfQUNFT0YKKworICAgICMKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB2b2lkICpwID0gbWFsbG9jKDEwKTsKKyAgICAgICAgdm9pZCAqcSA9IGNhbGxvYygxMCwxMCk7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIGZyZWUocSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21hbGxvY19oPSJubyIKKworZWxzZQorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21hbGxvY19oPSJ5ZXMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAjCisgICAgY2FzZSAiJGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWFsbG9jX2giIGluCisgICAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVFRF9NQUxMT0NfSCAxCitfQUNFT0YKKworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1lbW9yeS5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtZW1vcnkuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfbWVtb3J5X2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxtZW1vcnkuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX21lbW9yeV9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX21lbW9yeV9oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfbWVtb3J5X2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfbWVtb3J5X2giID4mNjsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX21lbW9yeV9oIiA9ICJ5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCitfQUNFT0YKKworICAgICMKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB2b2lkICpwID0gbWFsbG9jKDEwKTsKKyAgICAgICAgdm9pZCAqcSA9IGNhbGxvYygxMCwxMCk7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIGZyZWUocSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21lbW9yeV9oPSJubyIKKworZWxzZQorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21lbW9yeV9oPSJ5ZXMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAjCisgICAgY2FzZSAiJGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWVtb3J5X2giIGluCisgICAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVFRF9NRU1PUllfSCAxCitfQUNFT0YKKworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworCitmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIFwKKyAgICAgICBzeXMvdGltZS5oIFwKKyAgICAgICBzeXMvc2VsZWN0LmggXAorICAgICAgIHN5cy9zb2NrZXQuaCBcCisgICAgICAgc3lzL2lvY3RsLmggXAorICAgICAgIHN5cy9wYXJhbS5oIFwKKyAgICAgICBzeXMvdWlvLmggXAorICAgICAgIGFzc2VydC5oIFwKKyAgICAgICBuZXRkYi5oIFwKKyAgICAgICBuZXRpbmV0L2luLmggXAorICAgICAgIG5ldGluZXQvdGNwLmggXAorICAgICAgIG5ldC9pZi5oIFwKKyAgICAgICBlcnJuby5oIFwKKyAgICAgICBzb2NrZXQuaCBcCisgICAgICAgc3RyaW5ncy5oIFwKKyAgICAgICBzdGRib29sLmggXAorICAgICAgIHRpbWUuaCBcCisgICAgICAgbGltaXRzLmggXAorICAgICAgIGFycGEvbmFtZXNlci5oIFwKKyAgICAgICBhcnBhL25hbWVzZXJfY29tcGF0LmggXAorICAgICAgIGFycGEvaW5ldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb25zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzIHNvcnQgb2YgdGhpbmcuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IGNzID0geyAwLCAwIH07CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKKyAgY2hhciAqKnBwYzsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzIHNvcnQgb2YgdGhpbmcuICAqLworICAgIGNoYXIgdHg7CisgICAgY2hhciAqdCA9ICZ0eDsKKyAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworCisgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZywgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH0gYng7CisgICAgc3RydWN0IHMgKmIgPSAmYng7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICAgIGlmICghZm9vKSByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2NvbnN0PXllcworZWxzZQorICBhY19jdl9jX2NvbnN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb25zdCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgY29uc3QgLyoqLyIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpemVfdCIgImFjX2N2X3R5cGVfc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2l6ZV90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgc2l6ZV90IHVuc2lnbmVkIGludAorX0FDRU9GCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3RpbWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK2ludCBtYWluICh2b2lkKQoreworaWYgKChzdHJ1Y3QgdG0gKikgMCkKK3JldHVybiAwOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfdGltZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3RpbWU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3RpbWUgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvdGltZS5oIHRpbWUuaCBzeXMvc29ja2V0LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHJ1Y3QgdGltZXZhbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RydWN0IHRpbWV2YWwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc3RydWN0X3RpbWV2YWwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1RJTUVfSAorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHM7CisgICAgICAgIHRzLnR2X3NlYyAgPSAwOworICAgICAgICB0cy50dl91c2VjID0gMDsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X3N0cnVjdF90aW1ldmFsPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3Zfc3RydWN0X3RpbWV2YWw9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N0cnVjdF90aW1ldmFsIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc3RydWN0X3RpbWV2YWwiID4mNjsgfQorICBjYXNlICIkYWNfY3Zfc3RydWN0X3RpbWV2YWwiIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJsb25nIGxvbmciICJhY19jdl90eXBlX2xvbmdfbG9uZyIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX2xvbmdfbG9uZyIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MT05HTE9ORyAxIiA+PmNvbmZkZWZzLmgKKworICAgbG9uZ2xvbmc9InllcyIKKworZmkKKworCitpZiB0ZXN0ICJ4eWVzIiA9ICJ4JGxvbmdsb25nIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIG51bWJlckxMIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIG51bWJlckxMIHdvcmtzLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBsb25nIGxvbmcgdmFsID0gMTAwMExMOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTEwgMSIgPj5jb25mZGVmcy5oCisKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworIyBjaGVjayBmb3Igc3NpemVfdAorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic3NpemVfdCIgImFjX2N2X3R5cGVfc3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NzaXplX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgc3NpemVfdCBpbnQiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgY2hlY2sgZm9yIGJvb2wgdHlwZQorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiYm9vbCIgImFjX2N2X3R5cGVfYm9vbCIgIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1REQk9PTF9ICisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9ib29sIiA9IHh5ZXM7IHRoZW4gOgorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQk9PTF9UIDEiID4+Y29uZmRlZnMuaAorCisKK2ZpCisKKworCitjYXJlc19pbmNsdWRlc193czJ0Y3BpcD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorIyAgaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgICAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGVuZGlmCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgICAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgICAgaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjICAgICAgIGluY2x1ZGUgPHdzMnRjcGlwLmg+CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2luZG93cy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3aW5kb3dzLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTkRPV1NfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT0yKldJTlZFUjsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lORE9XU19IIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3aW5zb2NrMi5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3aW5zb2NrMi5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl93aW5zb2NrMl9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykgfHwgZGVmaW5lZChfX01JTkdXMzJDRV9fKQorICAgICAgICBIQVZFX1dJTlNPQ0syX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9MipJUFBST1RPX0VTUDsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9InllcyIKKworZWxzZQorCisgICAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPiY2OyB9CisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdzMnRjcGlwLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdzMnRjcGlwLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykKKyAgICAgICAgSEFWRV9XUzJUQ1BJUF9IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqSVBfUEtUSU5GTzsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2g9InllcyIKKworZWxzZQorCisgICAgICBhY19jdl9oZWFkZXJfd3MydGNwaXBfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgPiY2OyB9CisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XUzJUQ1BJUF9IIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworCitjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0PSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCitjYXJlc19wcmVwcm9jZXNzX2NhbGxjb252PSJcCisvKiBwcmVwcm9jZXNzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyMgIGRlZmluZSBGVU5DQUxMQ09OViBfX3N0ZGNhbGwKKyNlbHNlCisjICBkZWZpbmUgRlVOQ0FMTENPTlYKKyNlbmRpZgorLyogcHJlcHJvY2VzcyBlbmQgKi8iCisKKworICAgICAgICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyZXNfc29ja2xlbl90IGRhdGEgdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJlc19zb2NrbGVuX3QgZGF0YSB0eXBlLi4uICIgPiY2OyB9CisgIGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdD0idW5rbm93biIKKyAgZm9yIGFyZzEgaW4gaW50IFNPQ0tFVDsgZG8KKyAgICBmb3IgYXJnMiBpbiAnc3RydWN0IHNvY2thZGRyJyB2b2lkOyBkbworICAgICAgZm9yIHQgaW4gc29ja2xlbl90IGludCBzaXplX3QgJ3Vuc2lnbmVkIGludCcgbG9uZyAndW5zaWduZWQgbG9uZycgdm9pZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgICAgICAgJGNhcmVzX3ByZXByb2Nlc3NfY2FsbGNvbnYKKyAgICAgICAgICAgICAgZXh0ZXJuIGludCBGVU5DQUxMQ09OViBnZXRwZWVybmFtZSgkYXJnMSwgJGFyZzIgKiwgJHQgKik7CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgICAgICR0ICpsZW5wdHIgPSAwOworICAgICAgICAgICAgICBpZigwICE9IGdldHBlZXJuYW1lKDAsIDAsIGxlbnB0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgICBjYXJlc190eXBlb2ZfYXJlc19zb2NrbGVuX3Q9IiR0IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICBkb25lCisgIGZvciB0IGluIHNvY2tsZW5fdCBpbnQ7IGRvCisgICAgaWYgdGVzdCAiJGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdCIgPSAidm9pZCI7IHRoZW4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgICB0eXBlZGVmICR0IGFyZXNfc29ja2xlbl90OworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIGFyZXNfc29ja2xlbl90IGR1bW15OworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICBjYXJlc190eXBlb2ZfYXJlc19zb2NrbGVuX3Q9IiR0IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgZG9uZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdCIgPiY1CiskYXNfZWNobyAiJGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdCIgPiY2OyB9CisgIGlmIHRlc3QgIiRjYXJlc190eXBlb2ZfYXJlc19zb2NrbGVuX3QiID0gInZvaWQiIHx8CisgICAgdGVzdCAiJGNhcmVzX3R5cGVvZl9hcmVzX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgZGF0YSB0eXBlIGZvciBhcmVzX3NvY2tsZW5fdC4iICIkTElORU5PIiA1CisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGFyZXNfc29ja2xlbl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgYXJlc19zb2NrbGVuX3QuLi4gIiA+JjY7IH0KKyAgY2FyZXNfc2l6ZW9mX2FyZXNfc29ja2xlbl90PSJ1bmtub3duIgorICBjYXJlc19wdWxsX2hlYWRlcnNfc29ja2xlbl90PSJ1bmtub3duIgorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giID0gInllcyI7IHRoZW4KKyAgICB0c3RfcHVsbF9oZWFkZXJfY2hlY2tzPSdub25lIHdzMnRjcGlwJworICAgIHRzdF9zaXplX2NoZWNrcz0nNCcKKyAgZWxzZQorICAgIHRzdF9wdWxsX2hlYWRlcl9jaGVja3M9J25vbmUgc3lzdHlwZXMgc3lzc29ja2V0JworICAgIHRzdF9zaXplX2NoZWNrcz0nNCA4IDInCisgIGZpCisgIGZvciB0c3Rfc2l6ZSBpbiAkdHN0X3NpemVfY2hlY2tzOyBkbworICAgIGZvciB0c3RfcHVsbF9oZWFkZXJzIGluICR0c3RfcHVsbF9oZWFkZXJfY2hlY2tzOyBkbworICAgICAgaWYgdGVzdCAiJGNhcmVzX3NpemVvZl9hcmVzX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgY2FzZSAkdHN0X3B1bGxfaGVhZGVycyBpbgorICAgICAgICAgIHdzMnRjcGlwKQorICAgICAgICAgICAgdG1wX2luY2x1ZGVzPSIkY2FyZXNfaW5jbHVkZXNfd3MydGNwaXAiCisgICAgICAgICAgICA7OworICAgICAgICAgIHN5c3R5cGVzKQorICAgICAgICAgICAgdG1wX2luY2x1ZGVzPSIkY2FyZXNfaW5jbHVkZXNfc3lzX3R5cGVzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgICBzeXNzb2NrZXQpCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0IgorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgdG1wX2luY2x1ZGVzPSIiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgICAkdG1wX2luY2x1ZGVzCisgICAgICAgICAgICB0eXBlZGVmICRjYXJlc190eXBlb2ZfYXJlc19zb2NrbGVuX3QgYXJlc19zb2NrbGVuX3Q7CisgICAgICAgICAgICB0eXBlZGVmIGNoYXIgZHVtbXlfYXJyW3NpemVvZihhcmVzX3NvY2tsZW5fdCkgPT0gJHRzdF9zaXplID8gMSA6IC0xXTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgIGFyZXNfc29ja2xlbl90IGR1bW15OworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgIGNhcmVzX3NpemVvZl9hcmVzX3NvY2tsZW5fdD0iJHRzdF9zaXplIgorICAgICAgICAgIGNhcmVzX3B1bGxfaGVhZGVyc19zb2NrbGVuX3Q9IiR0c3RfcHVsbF9oZWFkZXJzIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhcmVzX3NpemVvZl9hcmVzX3NvY2tsZW5fdCIgPiY1CiskYXNfZWNobyAiJGNhcmVzX3NpemVvZl9hcmVzX3NvY2tsZW5fdCIgPiY2OyB9CisgIGlmIHRlc3QgIiRjYXJlc19zaXplb2ZfYXJlc19zb2NrbGVuX3QiID0gInVua25vd24iOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIG91dCBzaXplIG9mIGFyZXNfc29ja2xlbl90LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgIworICBjYXNlICRjYXJlc19wdWxsX2hlYWRlcnNfc29ja2xlbl90IGluCisgICAgd3MydGNwaXApCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENBUkVTX1BVTExfV1MyVENQSVBfSCAxCitfRU9GCisKKyAgICAgIDs7CisgICAgc3lzdHlwZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENBUkVTX1BVTExfU1lTX1RZUEVTX0ggMQorX0VPRgorCisgICAgICA7OworICAgIHN5c3NvY2tldCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ0FSRVNfUFVMTF9TWVNfVFlQRVNfSCAxCitfRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ0FSRVNfUFVMTF9TWVNfU09DS0VUX0ggMQorX0VPRgorCisgICAgICA7OworICBlc2FjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENBUkVTX1RZUEVPRl9BUkVTX1NPQ0tMRU5fVCAkY2FyZXNfdHlwZW9mX2FyZXNfc29ja2xlbl90CitfRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ0FSRVNfU0laRU9GX0FSRVNfU09DS0xFTl9UICRjYXJlc19zaXplb2ZfYXJlc19zb2NrbGVuX3QKK19FT0YKKworCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbl9hZGRyX3QiICJhY19jdl90eXBlX2luX2FkZHJfdCIgIgorI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbl9hZGRyX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbl9hZGRyX3QgZXF1aXZhbGVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5fYWRkcl90IGVxdWl2YWxlbnQuLi4gIiA+JjY7IH0KK2lmICR7Y3VybF9jdl9pbl9hZGRyX3RfZXF1aXYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjdXJsX2N2X2luX2FkZHJfdF9lcXVpdj0idW5rbm93biIKKyAgICAgIGZvciB0IGluICJ1bnNpZ25lZCBsb25nIiBpbnQgc2l6ZV90IHVuc2lnbmVkIGxvbmc7IGRvCisgICAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2luX2FkZHJfdF9lcXVpdiIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgICAgICR0IGRhdGEgPSBpbmV0X2FkZHIgKCIxLjIuMy40Iik7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgICBjdXJsX2N2X2luX2FkZHJfdF9lcXVpdj0iJHQiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBmaQorICAgICAgZG9uZQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjdXJsX2N2X2luX2FkZHJfdF9lcXVpdiIgPiY1CiskYXNfZWNobyAiJGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2IiA+JjY7IH0KKyAgICBjYXNlICIkY3VybF9jdl9pbl9hZGRyX3RfZXF1aXYiIGluCisgICAgICB1bmtub3duKQorICAgICAgICBhc19mbl9lcnJvciAkPyAiQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBpbl9hZGRyX3QiICIkTElORU5PIiA1CisgICAgICAgIDs7CisgICAgICAqKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGluX2FkZHJfdCAkY3VybF9jdl9pbl9hZGRyX3RfZXF1aXYKK19BQ0VPRgorCisgICAgICAgIDs7CisgICAgZXNhYworCitmaQorCisKKworCisgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSIgImFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UiICIKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisKKyAgZm9yIGFjX2hlYWRlciBpbiBzaWduYWwuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic2lnbmFsLmgiICJhY19jdl9oZWFkZXJfc2lnbmFsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3NpZ25hbF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaWdfYXRvbWljX3QiICJhY19jdl90eXBlX3NpZ19hdG9taWNfdCIgIgorI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2lnX2F0b21pY190IiA9IHh5ZXM7IHRoZW4gOgorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEiID4+Y29uZmRlZnMuaAorCisKK2ZpCisKKyAgY2FzZSAiJGFjX2N2X3R5cGVfc2lnX2F0b21pY190IiBpbgorICAgIHllcykKKyAgICAgICMKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnX2F0b21pY190IGlzIGFscmVhZHkgZGVmaW5lZCBhcyB2b2xhdGlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlLi4uICIgPiY2OyB9CisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgZHVtbXkgPSAwOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgYWNfY3Zfc2lnX2F0b21pY190X3ZvbGF0aWxlPSJubyIKKworZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIGFjX2N2X3NpZ19hdG9taWNfdF92b2xhdGlsZT0ieWVzIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICMKKyAgICAgIGlmIHRlc3QgIiRhY19jdl9zaWdfYXRvbWljX3Rfdm9sYXRpbGUiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfc2lnbmFsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiAqKHNpZ25hbCAoMCwgMCkpICgwKSA9PSAxOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl90eXBlX3NpZ25hbD1pbnQKK2Vsc2UKKyAgYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl90eXBlX3NpZ25hbCIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVUU0lHVFlQRSAkYWNfY3ZfdHlwZV9zaWduYWwKK19BQ0VPRgorCisKKworCisgICAgICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmVjdiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcmVjdi4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgcmVjdigwLCAwLCAwLCAwKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGN1cmxfY3ZfcmVjdj0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBjdXJsX2N2X3JlY3Y9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9yZWN2IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0eXBlcyBvZiBhcmdzIGFuZCByZXR1cm4gdHlwZSBmb3IgcmVjdiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0eXBlcyBvZiBhcmdzIGFuZCByZXR1cm4gdHlwZSBmb3IgcmVjdi4uLiAiID4mNjsgfQoraWYgJHtjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY3VybF9jdl9mdW5jX3JlY3ZfYXJncz0idW5rbm93biIKKyAgICAgIGZvciByZWN2X3JldHYgaW4gJ2ludCcgJ3NzaXplX3QnOyBkbworICAgICAgICBmb3IgcmVjdl9hcmcxIGluICdpbnQnICdzc2l6ZV90JyAnU09DS0VUJzsgZG8KKyAgICAgICAgICBmb3IgcmVjdl9hcmcyIGluICdjaGFyIConICd2b2lkIConOyBkbworICAgICAgICAgICAgZm9yIHJlY3ZfYXJnMyBpbiAnc2l6ZV90JyAnaW50JyAnc29ja2xlbl90JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgZm9yIHJlY3ZfYXJnNCBpbiAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3JlY3ZfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBSRUNWQ0FMTENPTlYgUEFTQ0FMCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZGVmaW5lIFJFQ1ZDQUxMQ09OVgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuICRyZWN2X3JldHYgUkVDVkNBTExDT05WCisgICAgICAgICAgICAgICAgICAgICAgcmVjdigkcmVjdl9hcmcxLCAkcmVjdl9hcmcyLCAkcmVjdl9hcmczLCAkcmVjdl9hcmc0KTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgICAgICAgICAgICAkcmVjdl9hcmcxIHM9MDsKKyAgICAgICAgICAgICAgICAgICAgICAkcmVjdl9hcmcyIGJ1Zj0wOworICAgICAgICAgICAgICAgICAgICAgICRyZWN2X2FyZzMgbGVuPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHJlY3ZfYXJnNCBmbGFncz0wOworICAgICAgICAgICAgICAgICAgICAgICRyZWN2X3JldHYgcmVzID0gcmVjdihzLCBidWYsIGxlbiwgZmxhZ3MpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzPSIkcmVjdl9hcmcxLCRyZWN2X2FyZzIsJHJlY3ZfYXJnMywkcmVjdl9hcmc0LCRyZWN2X3JldHYiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MiID4mNQorJGFzX2VjaG8gIiRjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIiA+JjY7IH0gIyBBQy1DQUNIRS1DSEVDSworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgJD8gIkNhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHJlY3YgYXJncyIgIiRMSU5FTk8iIDUKKyAgICBlbHNlCisgICAgICByZWN2X3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorICAgICAgSUZTPSRyZWN2X3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxICQxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyICQyCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczICQzCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0ICQ0CitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWICQ1CitfQUNFT0YKKworICAgICAgIworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUkVDViAxCitfQUNFT0YKKworICAgICAgYWNfY3ZfZnVuY19yZWN2PSJ5ZXMiCisgICAgZmkKKyAgZWxzZQorICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gbGluayBmdW5jdGlvbiByZWN2IiAiJExJTkVOTyIgNQorICBmaQorCisKKyAgICAgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciByZWN2ZnJvbSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcmVjdmZyb20uLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIHJlY3Zmcm9tKDAsIDAsIDAsIDAsIDAsIDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY3VybF9jdl9yZWN2ZnJvbT0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBjdXJsX2N2X3JlY3Zmcm9tPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfcmVjdmZyb20iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHR5cGVzIG9mIGFyZ3MgYW5kIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0eXBlcyBvZiBhcmdzIGFuZCByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uLi4gIiA+JjY7IH0KK2lmICR7Y3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncz0idW5rbm93biIKKyAgICAgIGZvciByZWN2ZnJvbV9yZXR2IGluICdpbnQnICdzc2l6ZV90JzsgZG8KKyAgICAgICAgZm9yIHJlY3Zmcm9tX2FyZzEgaW4gJ2ludCcgJ3NzaXplX3QnICdTT0NLRVQnOyBkbworICAgICAgICAgIGZvciByZWN2ZnJvbV9hcmcyIGluICdjaGFyIConICd2b2lkIConOyBkbworICAgICAgICAgICAgZm9yIHJlY3Zmcm9tX2FyZzMgaW4gJ3NpemVfdCcgJ2ludCcgJ3NvY2tsZW5fdCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgIGZvciByZWN2ZnJvbV9hcmc0IGluICdpbnQnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICAgIGZvciByZWN2ZnJvbV9hcmc1IGluICdzdHJ1Y3Qgc29ja2FkZHIgKicgJ3ZvaWQgKicgJ2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqJzsgZG8KKyAgICAgICAgICAgICAgICAgIGZvciByZWN2ZnJvbV9hcmc2IGluICdzb2NrbGVuX3QgKicgJ2ludCAqJyAndW5zaWduZWQgaW50IConICdzaXplX3QgKicgJ3ZvaWQgKic7IGRvCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNkZWZpbmUgUkVDVkZST01DQUxMQ09OViBQQVNDQUwKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNkZWZpbmUgUkVDVkZST01DQUxMQ09OVgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiAkcmVjdmZyb21fcmV0diBSRUNWRlJPTUNBTExDT05WCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Zmcm9tKCRyZWN2ZnJvbV9hcmcxLCAkcmVjdmZyb21fYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzMsICRyZWN2ZnJvbV9hcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnNSwgJHJlY3Zmcm9tX2FyZzYpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnMSBzPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmcyIGJ1Zj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnMyBsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzQgZmxhZ3M9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzUgYWRkcj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnNiBhZGRybGVuPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9yZXR2IHJlcz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSByZWN2ZnJvbShzLCBidWYsIGxlbiwgZmxhZ3MsIGFkZHIsIGFkZHJsZW4pOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3M9IiRyZWN2ZnJvbV9hcmcxLCRyZWN2ZnJvbV9hcmcyLCRyZWN2ZnJvbV9hcmczLCRyZWN2ZnJvbV9hcmc0LCRyZWN2ZnJvbV9hcmc1LCRyZWN2ZnJvbV9hcmc2LCRyZWN2ZnJvbV9yZXR2IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzIiA+JjUKKyRhc19lY2hvICIkY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3MiID4mNjsgfSAjIEFDLUNBQ0hFLUNIRUNLCisgICAgIyBOZWFybHkgbGFzdCBtaW51dGUgY2hhbmdlIGZvciB0aGlzIHJlbGVhc2Ugc3RhcnRzIGhlcmUKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19yZWN2ZnJvbT0ieWVzIgorICAgICMgTmVhcmx5IGxhc3QgbWludXRlIGNoYW5nZSBmb3IgdGhpcyByZWxlYXNlIGVuZHMgaGVyZQorICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3IgcmVjdmZyb20gYXJncyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciByZWN2ZnJvbSBhcmdzIiA+JjI7fQorICAgIGVsc2UKKyAgICAgIHJlY3Zmcm9tX3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kcmVjdmZyb21fcHJldl9JRlMKKyAgICAgIHNoaWZ0CisgICAgICAjCisgICAgICByZWN2ZnJvbV9wdHJ0X2FyZzI9JDIKKyAgICAgIHJlY3Zmcm9tX3F1YWxfcHRydF9hcmc1PSQ1CisgICAgICByZWN2ZnJvbV9wdHJ0X2FyZzY9JDYKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgJDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczICQzCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCAkNAorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgJDcKK19BQ0VPRgorCisgICAgICAjCisgICAgICBwcmV2X3NoX29wdHM9JC0KKyAgICAgICMKKyAgICAgIGNhc2UgJHByZXZfc2hfb3B0cyBpbgorICAgICAgICAqZiopCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZXQgLWYKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgY2FzZSAiJHJlY3Zmcm9tX3F1YWxfcHRydF9hcmc1IiBpbgorICAgICAgICBjb25zdCopCisgICAgICAgICAgcmVjdmZyb21fcXVhbF9hcmc1PWNvbnN0CisgICAgICAgICAgcmVjdmZyb21fcHRydF9hcmc1PWBlY2hvICRyZWN2ZnJvbV9xdWFsX3B0cnRfYXJnNSB8IHNlZCAncy9eY29uc3QgLy8nYAorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHJlY3Zmcm9tX3F1YWxfYXJnNT0KKyAgICAgICAgICByZWN2ZnJvbV9wdHJ0X2FyZzU9JHJlY3Zmcm9tX3F1YWxfcHRydF9hcmc1CisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICByZWN2ZnJvbV90eXBlX2FyZzI9YGVjaG8gJHJlY3Zmcm9tX3B0cnRfYXJnMiB8IHNlZCAncy8gXCovLydgCisgICAgICByZWN2ZnJvbV90eXBlX2FyZzU9YGVjaG8gJHJlY3Zmcm9tX3B0cnRfYXJnNSB8IHNlZCAncy8gXCovLydgCisgICAgICByZWN2ZnJvbV90eXBlX2FyZzY9YGVjaG8gJHJlY3Zmcm9tX3B0cnRfYXJnNiB8IHNlZCAncy8gXCovLydgCisgICAgICAjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyICRyZWN2ZnJvbV90eXBlX2FyZzIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fUVVBTF9BUkc1ICRyZWN2ZnJvbV9xdWFsX2FyZzUKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1ICRyZWN2ZnJvbV90eXBlX2FyZzUKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2ICRyZWN2ZnJvbV90eXBlX2FyZzYKK19BQ0VPRgorCisgICAgICAjCisgICAgICBpZiB0ZXN0ICIkcmVjdmZyb21fdHlwZV9hcmcyIiA9ICJ2b2lkIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEKK19BQ0VPRgorCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHJlY3Zmcm9tX3R5cGVfYXJnNSIgPSAidm9pZCI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzVfSVNfVk9JRCAxCitfQUNFT0YKKworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRyZWN2ZnJvbV90eXBlX2FyZzYiID0gInZvaWQiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUQgMQorX0FDRU9GCisKKyAgICAgIGZpCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0ICtmCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEKK19BQ0VPRgorCisgICAgICBhY19jdl9mdW5jX3JlY3Zmcm9tPSJ5ZXMiCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIGxpbmsgZnVuY3Rpb24gcmVjdmZyb20iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIGxpbmsgZnVuY3Rpb24gcmVjdmZyb20iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBZb3VyIHN5c3RlbSB3aWxsIGJlIHZ1bG5lcmFibGUgdG8gc29tZSBmb3JtcyBvZiBETlMgY2FjaGUgcG9pc29uaW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFlvdXIgc3lzdGVtIHdpbGwgYmUgdnVsbmVyYWJsZSB0byBzb21lIGZvcm1zIG9mIEROUyBjYWNoZSBwb2lzb25pbmciID4mMjt9CisgIGZpCisKKworICAgICAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNlbmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNlbmQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIHNlbmQoMCwgMCwgMCwgMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjdXJsX2N2X3NlbmQ9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgY3VybF9jdl9zZW5kPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3Zfc2VuZCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHNlbmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHNlbmQuLi4gIiA+JjY7IH0KK2lmICR7Y3VybF9jdl9mdW5jX3NlbmRfYXJncys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3M9InVua25vd24iCisgICAgICBmb3Igc2VuZF9yZXR2IGluICdpbnQnICdzc2l6ZV90JzsgZG8KKyAgICAgICAgZm9yIHNlbmRfYXJnMSBpbiAnaW50JyAnc3NpemVfdCcgJ1NPQ0tFVCc7IGRvCisgICAgICAgICAgZm9yIHNlbmRfYXJnMiBpbiAnY2hhciAqJyAndm9pZCAqJyAnY29uc3QgY2hhciAqJyAnY29uc3Qgdm9pZCAqJzsgZG8KKyAgICAgICAgICAgIGZvciBzZW5kX2FyZzMgaW4gJ3NpemVfdCcgJ2ludCcgJ3NvY2tsZW5fdCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgIGZvciBzZW5kX2FyZzQgaW4gJ2ludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNkZWZpbmUgU0VORENBTExDT05WIFBBU0NBTAorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2RlZmluZSBTRU5EQ0FMTENPTlYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiAkc2VuZF9yZXR2IFNFTkRDQUxMQ09OVgorICAgICAgICAgICAgICAgICAgICAgIHNlbmQoJHNlbmRfYXJnMSwgJHNlbmRfYXJnMiwgJHNlbmRfYXJnMywgJHNlbmRfYXJnNCk7CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgICAgICAgICAgICAgJHNlbmRfYXJnMSBzPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHNlbmRfYXJnMyBsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgICAkc2VuZF9hcmc0IGZsYWdzPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHNlbmRfcmV0diByZXMgPSBzZW5kKHMsIDAsIGxlbiwgZmxhZ3MpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzPSIkc2VuZF9hcmcxLCRzZW5kX2FyZzIsJHNlbmRfYXJnMywkc2VuZF9hcmc0LCRzZW5kX3JldHYiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MiID4mNQorJGFzX2VjaG8gIiRjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzIiA+JjY7IH0gIyBBQy1DQUNIRS1DSEVDSworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgJD8gIkNhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHNlbmQgYXJncyIgIiRMSU5FTk8iIDUKKyAgICBlbHNlCisgICAgICBzZW5kX3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorICAgICAgSUZTPSRzZW5kX3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworICAgICAgc2VuZF9xdWFsX3R5cGVfYXJnMj0kMgorICAgICAgIworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxICQxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczICQzCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTkRfVFlQRV9BUkc0ICQ0CitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTkRfVFlQRV9SRVRWICQ1CitfQUNFT0YKKworICAgICAgIworICAgICAgcHJldl9zaF9vcHRzPSQtCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0IC1mCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIGNhc2UgIiRzZW5kX3F1YWxfdHlwZV9hcmcyIiBpbgorICAgICAgICBjb25zdCopCisgICAgICAgICAgc2VuZF9xdWFsX2FyZzI9Y29uc3QKKyAgICAgICAgICBzZW5kX3R5cGVfYXJnMj1gZWNobyAkc2VuZF9xdWFsX3R5cGVfYXJnMiB8IHNlZCAncy9eY29uc3QgLy8nYAorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNlbmRfcXVhbF9hcmcyPQorICAgICAgICAgIHNlbmRfdHlwZV9hcmcyPSRzZW5kX3F1YWxfdHlwZV9hcmcyCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgJHNlbmRfcXVhbF9hcmcyCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcyICRzZW5kX3R5cGVfYXJnMgorX0FDRU9GCisKKyAgICAgICMKKyAgICAgIGNhc2UgJHByZXZfc2hfb3B0cyBpbgorICAgICAgICAqZiopCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZXQgK2YKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0VORCAxCitfQUNFT0YKKworICAgICAgYWNfY3ZfZnVuY19zZW5kPSJ5ZXMiCisgICAgZmkKKyAgZWxzZQorICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gbGluayBmdW5jdGlvbiBzZW5kIiAiJExJTkVOTyIgNQorICBmaQorCisKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBNU0dfTk9TSUdOQUwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1TR19OT1NJR05BTC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9tc2dfbm9zaWduYWwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGZsYWc9TVNHX05PU0lHTkFMOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfbXNnX25vc2lnbmFsPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfbXNnX25vc2lnbmFsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9tc2dfbm9zaWduYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9tc2dfbm9zaWduYWwiID4mNjsgfQorICBjYXNlICIkYWNfY3ZfbXNnX25vc2lnbmFsIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX01TR19OT1NJR05BTCAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKworY2FyZXNfaW5jbHVkZXNfc29ja2V0PSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TT0NLRVRfSAorIyAgaW5jbHVkZSA8c29ja2V0Lmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzb2NrZXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAgICMKKyAgdHN0X2xpbmtzX2Nsb3Nlc29ja2V0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fY2xvc2Vzb2NrZXQ9InVua25vd24iCisgIHRzdF9jb21waV9jbG9zZXNvY2tldD0idW5rbm93biIKKyAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0PSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY2xvc2Vzb2NrZXQgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjbG9zZXNvY2tldCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjYXJlc19pbmNsdWRlc19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gY2xvc2Vzb2NrZXQoMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2Nsb3Nlc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19jbG9zZXNvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNsb3Nlc29ja2V0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY2xvc2Vzb2NrZXQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImNsb3Nlc29ja2V0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fY2xvc2Vzb2NrZXQ9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjbG9zZXNvY2tldCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNsb3Nlc29ja2V0IGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3NvY2tldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGNsb3Nlc29ja2V0KDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9jbG9zZXNvY2tldD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0PSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfY2xvc2Vzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNsb3Nlc29ja2V0IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY2xvc2Vzb2NrZXQgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfY2xvc2Vzb2NrZXQiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19jbG9zZXNvY2tldD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY2xvc2Vzb2NrZXQgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjbG9zZXNvY2tldCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfY2xvc2Vzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ0xPU0VTT0NLRVQgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0PSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0PSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBDbG9zZVNvY2tldCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIENsb3NlU29ja2V0IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IENsb3NlU29ja2V0KDApKQorICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19jbG9zZXNvY2tldF9jYW1lbD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Nsb3Nlc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBDbG9zZVNvY2tldCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIENsb3NlU29ja2V0IGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkNsb3NlU29ja2V0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2Nsb3Nlc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBDbG9zZVNvY2tldCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIENsb3NlU29ja2V0IGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IENsb3NlU29ja2V0KDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9jbG9zZXNvY2tldF9jYW1lbD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIENsb3NlU29ja2V0IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgQ2xvc2VTb2NrZXQgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWwiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19jbG9zZXNvY2tldF9jYW1lbD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0X2NhbWVsPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgQ2xvc2VTb2NrZXQgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBDbG9zZVNvY2tldCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ0xPU0VTT0NLRVRfQ0FNRUwgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0X2NhbWVsPSJubyIKKyAgZmkKKworCisgICAgICAgICMKKyAgdHN0X2xpbmtzX2Nvbm5lY3Q9InVua25vd24iCisgIHRzdF9wcm90b19jb25uZWN0PSJ1bmtub3duIgorICB0c3RfY29tcGlfY29ubmVjdD0idW5rbm93biIKKyAgdHN0X2FsbG93X2Nvbm5lY3Q9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb25uZWN0IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29ubmVjdCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IGNvbm5lY3QoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2Nvbm5lY3Q9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2Nvbm5lY3Q9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Nvbm5lY3QiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbm5lY3QgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb25uZWN0IGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjYXJlc19pbmNsdWRlc19zb2NrZXQKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiY29ubmVjdCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19jb25uZWN0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fY29ubmVjdD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fY29ubmVjdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29ubmVjdCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbm5lY3QgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gY29ubmVjdCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfY29ubmVjdD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2Nvbm5lY3Q9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9jb25uZWN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb25uZWN0IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29ubmVjdCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19jb25uZWN0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfY29ubmVjdD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Nvbm5lY3Q9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb25uZWN0IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29ubmVjdCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY29ubmVjdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2Nvbm5lY3QiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9jb25uZWN0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfY29ubmVjdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DT05ORUNUIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19jb25uZWN0PSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2Nvbm5lY3Q9Im5vIgorICBmaQorCisKK2NhcmVzX2luY2x1ZGVzX2ZjbnRsPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCB1bmlzdGQuaCBmY250bC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjYXJlc19pbmNsdWRlc19mY250bAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgIworICB0c3RfbGlua3NfZmNudGw9InVua25vd24iCisgIHRzdF9wcm90b19mY250bD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2ZjbnRsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZmNudGw9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmY250bCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZjbnRsIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZmNudGwgaW5ub2N1b3VzX2ZjbnRsCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGZjbnRsCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBmY250bCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9mY250bCB8fCBkZWZpbmVkIF9fc3R1Yl9fX2ZjbnRsCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGZjbnRsICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19mY250bD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZmNudGw9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZjbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmY250bCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZjbnRsIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjYXJlc19pbmNsdWRlc19mY250bAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmY250bCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19mY250bD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2ZjbnRsPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mY250bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZmNudGwgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmY250bCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX2ZjbnRsCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gZmNudGwoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2ZjbnRsPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZmNudGw9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mY250bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZmNudGwgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmY250bCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19mY250bCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2ZjbnRsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZmNudGw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmY250bCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZjbnRsIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mY250bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZjbnRsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZmNudGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mY250bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9GQ05UTCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfZmNudGw9InllcyIKKworICAjCisgIHRzdF9jb21waV9mY250bF9vX25vbmJsb2NrPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZmNudGxfb19ub25ibG9jaz0idW5rbm93biIKKyAgIworICBjYXNlICRob3N0X29zIGluCisgICAgc3Vub3M0KiB8IGFpeDMqIHwgYmVvcyopCisgICAgICAgICAgICBjYXJlc19kaXNhbGxvd19mY250bF9vX25vbmJsb2NrPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgICMKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfZmNudGwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIE9fTk9OQkxPQ0sgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmY250bCBPX05PTkJMT0NLIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfZmNudGwKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBmY250bCgwLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mY250bF9vX25vbmJsb2NrPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZmNudGxfb19ub25ibG9jaz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZjbnRsX29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIE9fTk9OQkxPQ0sgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmY250bCBPX05PTkJMT0NLIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2ZjbnRsX29fbm9uYmxvY2siICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mY250bF9vX25vbmJsb2NrPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZmNudGxfb19ub25ibG9jaz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIE9fTk9OQkxPQ0sgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmY250bCBPX05PTkJMT0NLIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mY250bF9vX25vbmJsb2NrIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZmNudGxfb19ub25ibG9jayIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9GQ05UTF9PX05PTkJMT0NLIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19mY250bF9vX25vbmJsb2NrPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2ZjbnRsX29fbm9uYmxvY2s9Im5vIgorICBmaQorCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2ZjbnRsPSJubyIKKyAgZmkKKworCitjYXJlc19pbmNsdWRlc19uZXRkYj0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIG5ldGRiLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGNhcmVzX2luY2x1ZGVzX25ldGRiCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAgICAgIworICB0c3RfbGlua3NfZnJlZWFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZnJlZWFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfY29tcGlfZnJlZWFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZnJlZWFkZHJpbmZvPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjYXJlc19pbmNsdWRlc193czJ0Y3BpcAorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgZnJlZWFkZHJpbmZvKDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZnJlZWFkZHJpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mcmVlYWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZyZWVhZGRyaW5mbyBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZyZWVhZGRyaW5mbyBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZWFkZHJpbmZvIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZnJlZWFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmcmVlYWRkcmluZm8gaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmcmVlYWRkcmluZm8gaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjYXJlc19pbmNsdWRlc193czJ0Y3BpcAorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgZnJlZWFkZHJpbmZvKDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mcmVlYWRkcmluZm89InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mcmVlYWRkcmluZm89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mcmVlYWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZyZWVhZGRyaW5mbyB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZyZWVhZGRyaW5mbyB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19mcmVlYWRkcmluZm8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mcmVlYWRkcmluZm89InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mcmVlYWRkcmluZm89Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmcmVlYWRkcmluZm8gbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmcmVlYWRkcmluZm8gbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2ZyZWVhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZyZWVhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2ZyZWVhZGRyaW5mbz0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19mcmVlYWRkcmluZm89Im5vIgorICBmaQorCisKK2NhcmVzX2luY2x1ZGVzX3N0ZGxpYj0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3RkbGliLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGNhcmVzX2luY2x1ZGVzX3N0ZGxpYgorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCitjYXJlc19pbmNsdWRlc19zdHJpbmc9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzdHJpbmcuaCBzdHJpbmdzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGNhcmVzX2luY2x1ZGVzX3N0cmluZworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgICAgICAgICAgICMKKyAgdHN0X2xpbmtzX2dldGFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0YWRkcmluZm89InVua25vd24iCisgIHRzdF9jb21waV9nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X3dvcmtzX2dldGFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0YWRkcmluZm89InVua25vd24iCisgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGFkZHJpbmZvIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IGdldGFkZHJpbmZvKDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19nZXRhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0YWRkcmluZm89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGFkZHJpbmZvIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjYXJlc19pbmNsdWRlc193czJ0Y3BpcAorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRhZGRyaW5mbyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2dldGFkZHJpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGdldGFkZHJpbmZvKDAsIDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2dldGFkZHJpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGFkZHJpbmZvIHNlZW1zIHRvIHdvcmsiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gc2VlbXMgdG8gd29yay4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7CisgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqYWkgPSAwOworICAgICAgICBpbnQgZXJyb3I7CisKKyAgICAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7CisgICAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgICAgICAgZXJyb3IgPSBnZXRhZGRyaW5mbygiMTI3LjAuMC4xIiwgMCwgJmhpbnRzLCAmYWkpOworICAgICAgICBpZihlcnJvciB8fCAhYWkpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgZXhpdCgwKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19nZXRhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2dldGFkZHJpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19nZXRhZGRyaW5mbyIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRhZGRyaW5mbyB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19nZXRhZGRyaW5mbyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0YWRkcmluZm89Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGFkZHJpbmZvIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0YWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2dldGFkZHJpbmZvIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ibm8iCisgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mb190aHJlYWRzYWZlPSJubyIKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gaXMgdGhyZWFkc2FmZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBpcyB0aHJlYWRzYWZlLi4uICIgPiY2OyB9CisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4WzEyMzRdLiogfCBhaXg1LlswMV0uKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgYWl4KikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICAgIGRhcndpblsxMjM0NV0uKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgZGFyd2luKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICAgIGZyZWVic2RbMTIzNF0uKiB8IGZyZWVic2Q1LlsxMjM0XSopCisgICAgICAgICAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJubyIKKyAgICAgICAgOzsKKyAgICAgIGZyZWVic2QqKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgaHB1eFsxMjM0NTY3ODldLiogfCBocHV4MTAuKiB8IGhwdXgxMS4wKiB8IGhwdXgxMS4xMCopCisgICAgICAgICAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJubyIKKyAgICAgICAgOzsKKyAgICAgIGhwdXgqKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgbmV0YnNkWzEyM10uKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgbmV0YnNkKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICAgICpic2QqKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBzb2xhcmlzMiopCisgICAgICAgICAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgIiR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID0gInVua25vd24iICYmCisgICAgICAgdGVzdCAiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID0gInVua25vd24iOyB0aGVuCisKKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisjaWZkZWYgaF9lcnJubworICByZXR1cm4gMDsKKyNlbHNlCisgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKK30KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRzdF9zeW1ib2xfZGVmaW5lZD0ieWVzIgorCitlbHNlCisKKyAgICB0c3Rfc3ltYm9sX2RlZmluZWQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0c3Rfc3ltYm9sX2RlZmluZWQiID0gInllcyI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX2hfZXJybm89eWVzCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfaF9lcnJubz1ubworCisgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX2hfZXJybm8iID0gInllcyI7IHRoZW4KKyAgICAgICAgdHN0X2hfZXJybm9fbWFjcm89InllcyIKKyAgICAgIGVsc2UKKyAgICAgICAgdHN0X2hfZXJybm9fbWFjcm89Im5vIgorICAgICAgZmkKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBoX2Vycm5vID0gMjsKKyAgICAgICAgICBpZigwICE9IGhfZXJybm8pCisgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgdHN0X2hfZXJybm9fbW9kaWZpYWJsZV9sdmFsdWU9InllcyIKKworZWxzZQorCisgICAgICAgIHRzdF9oX2Vycm5vX21vZGlmaWFibGVfbHZhbHVlPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgJiYgKF9QT1NJWF9DX1NPVVJDRSA+PSAyMDA4MDlMKQorICAgICAgICAgIHJldHVybiAwOworI2VsaWYgZGVmaW5lZChfWE9QRU5fU09VUkNFKSAmJiAoX1hPUEVOX1NPVVJDRSA+PSA3MDApCisgICAgICAgICAgcmV0dXJuIDA7CisjZWxzZQorICAgICAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgdHN0X2hfZXJybm9fc2JzX2lzc3VlXzc9InllcyIKKworZWxzZQorCisgICAgICAgIHRzdF9oX2Vycm5vX3Nic19pc3N1ZV83PSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgaWYgdGVzdCAiJHRzdF9oX2Vycm5vX21hY3JvIiA9ICJubyIgJiYKKyAgICAgICAgIHRlc3QgIiR0c3RfaF9lcnJub19tb2RpZmlhYmxlX2x2YWx1ZSIgPSAibm8iICYmCisgICAgICAgICB0ZXN0ICIkdHN0X2hfZXJybm9fc2JzX2lzc3VlXzciID0gIm5vIjsgdGhlbgorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgZWxzZQorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgIGZpCisgICAgZmkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPiY1CiskYXNfZWNobyAiJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPiY2OyB9CisgICAgaWYgdGVzdCAiJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSAxCitfQUNFT0YKKworICAgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mb190aHJlYWRzYWZlPSJ5ZXMiCisgICAgZWxzZQorICAgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mb190aHJlYWRzYWZlPSJubyIKKyAgICBmaQorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19nZXRlbnY9InVua25vd24iCisgIHRzdF9wcm90b19nZXRlbnY9InVua25vd24iCisgIHRzdF9jb21waV9nZXRlbnY9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRlbnY9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRlbnYgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRlbnYgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBnZXRlbnYgaW5ub2N1b3VzX2dldGVudgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBnZXRlbnYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGVudiAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9nZXRlbnYgfHwgZGVmaW5lZCBfX3N0dWJfX19nZXRlbnYKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZ2V0ZW52ICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19nZXRlbnY9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGVudj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0ZW52IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRlbnYgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRlbnYgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0ZGxpYgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRlbnYiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0ZW52PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0ZW52PSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRlbnYiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGVudiBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGVudiBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0ZGxpYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGdldGVudigwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0ZW52PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0ZW52PSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0ZW52IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRlbnYgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRlbnYgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfZ2V0ZW52IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0ZW52PSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0ZW52PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0ZW52IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0ZW52IG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRlbnYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRlbnYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRlbnYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRlbnYiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VURU5WIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19nZXRlbnY9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZ2V0ZW52PSJubyIKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19nZXRob3N0YnlhZGRyPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHI9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkciBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5YWRkcigwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkcj0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkciBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ2V0aG9zdGJ5YWRkciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnlhZGRyPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcj0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkciBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBnZXRob3N0YnlhZGRyKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieWFkZHIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2dldGhvc3RieWFkZHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0aG9zdGJ5YWRkcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0YnlhZGRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieWFkZHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRob3N0YnlhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieWFkZHI9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5YWRkcj0ibm8iCisgIGZpCisKKworICAgICAgIworICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZT0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RieW5hbWU9InVua25vd24iCisgIHRzdF9jb21waV9nZXRob3N0YnluYW1lPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZT0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieW5hbWUgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IGdldGhvc3RieW5hbWUoMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RieW5hbWU9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RieW5hbWU9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieW5hbWUgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RieW5hbWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdGJ5bmFtZT0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RieW5hbWU9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieW5hbWUgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5bmFtZSgwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZT0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2dldGhvc3RieW5hbWU9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9nZXRob3N0YnluYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZSB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19nZXRob3N0YnluYW1lIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZT0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2dldGhvc3RieW5hbWU9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZSBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieW5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRob3N0YnluYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9Im5vIgorICBmaQorCisKK2NhcmVzX2luY2x1ZGVzX3VuaXN0ZD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGNhcmVzX2luY2x1ZGVzX3VuaXN0ZAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgICAgICMKKyAgdHN0X2xpbmtzX2dldGhvc3RuYW1lPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aG9zdG5hbWU9InVua25vd24iCisgIHRzdF9jb21waV9nZXRob3N0bmFtZT0idW5rbm93biIKKyAgdHN0X2FsbG93X2dldGhvc3RuYW1lPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdG5hbWUgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0bmFtZSBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjYXJlc19pbmNsdWRlc191bmlzdGQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gZ2V0aG9zdG5hbWUoMCwgMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RuYW1lPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19nZXRob3N0bmFtZT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RuYW1lIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdG5hbWUgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfdW5pc3RkCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RuYW1lIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RuYW1lPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdG5hbWU9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0bmFtZSBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RuYW1lIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3VuaXN0ZAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGdldGhvc3RuYW1lKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRob3N0bmFtZT0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2dldGhvc3RuYW1lPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRob3N0bmFtZSBhcmcgMiBkYXRhIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RuYW1lIGFyZyAyIGRhdGEgdHlwZS4uLiAiID4mNjsgfQorICAgIHRzdF9nZXRob3N0bmFtZV90eXBlX2FyZzI9InVua25vd24iCisgICAgZm9yIHRzdF9hcmcxIGluICdjaGFyIConICd1bnNpZ25lZCBjaGFyIConICd2b2lkIConOyBkbworICAgICAgZm9yIHRzdF9hcmcyIGluICdpbnQnICd1bnNpZ25lZCBpbnQnICdzaXplX3QnOyBkbworICAgICAgICBpZiB0ZXN0ICIkdHN0X2dldGhvc3RuYW1lX3R5cGVfYXJnMiIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3VuaXN0ZAorICAgICAgICAgICAgICAkY2FyZXNfcHJlcHJvY2Vzc19jYWxsY29udgorICAgICAgICAgICAgICBleHRlcm4gaW50IEZVTkNBTExDT05WIGdldGhvc3RuYW1lKCR0c3RfYXJnMSwgJHRzdF9hcmcyKTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgICAgaWYoMCAhPSBnZXRob3N0bmFtZSgwLCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgIHRzdF9nZXRob3N0bmFtZV90eXBlX2FyZzI9IiR0c3RfYXJnMiIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHRzdF9nZXRob3N0bmFtZV90eXBlX2FyZzIiID4mNQorJGFzX2VjaG8gIiR0c3RfZ2V0aG9zdG5hbWVfdHlwZV9hcmcyIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkdHN0X2dldGhvc3RuYW1lX3R5cGVfYXJnMiIgIT0gInVua25vd24iOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR0VUSE9TVE5BTUVfVFlQRV9BUkcyICR0c3RfZ2V0aG9zdG5hbWVfdHlwZV9hcmcyCitfQUNFT0YKKworICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9nZXRob3N0bmFtZSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdG5hbWUgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0bmFtZSB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19nZXRob3N0bmFtZSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2dldGhvc3RuYW1lPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0aG9zdG5hbWU9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0bmFtZSBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RuYW1lIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RuYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdG5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRob3N0bmFtZSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdG5hbWU9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdG5hbWU9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19nZXRzZXJ2Ynlwb3J0X3I9InVua25vd24iCisgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9InVua25vd24iCisgIHRzdF9jb21waV9nZXRzZXJ2Ynlwb3J0X3I9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRzZXJ2Ynlwb3J0X3I9InVua25vd24iCisgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBnZXRzZXJ2Ynlwb3J0X3IgaW5ub2N1b3VzX2dldHNlcnZieXBvcnRfcgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBnZXRzZXJ2Ynlwb3J0X3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldHNlcnZieXBvcnRfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9nZXRzZXJ2Ynlwb3J0X3IgfHwgZGVmaW5lZCBfX3N0dWJfX19nZXRzZXJ2Ynlwb3J0X3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZ2V0c2VydmJ5cG9ydF9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldHNlcnZieXBvcnRfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldHNlcnZieXBvcnRfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNCBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNCBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjQiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNSBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNSBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjUiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNiBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNiBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjYiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfZ2V0c2VydmJ5cG9ydF9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUU0VSVkJZUE9SVF9SIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR0VUU0VSVkJZUE9SVF9SX0FSR1MgJHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3IKK19BQ0VPRgorCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3IiIC1lcSAiNCI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgR0VUU0VSVkJZUE9SVF9SX0JVRlNJWkUgc2l6ZW9mKHN0cnVjdCBzZXJ2ZW50X2RhdGEpIiA+PmNvbmZkZWZzLmgKKworICAgIGVsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgR0VUU0VSVkJZUE9SVF9SX0JVRlNJWkUgNDA5NiIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorICAgIGFjX2N2X2Z1bmNfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2dldHNlcnZieXBvcnRfcj0ibm8iCisgIGZpCisKKworY2FyZXNfaW5jbHVkZXNfYXJwYV9pbmV0PSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCBuZXRpbmV0L2luLmggYXJwYS9pbmV0LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgICAgICMKKyAgdHN0X2xpbmtzX2luZXRfbmV0X3B0b249InVua25vd24iCisgIHRzdF9wcm90b19pbmV0X25ldF9wdG9uPSJ1bmtub3duIgorICB0c3RfY29tcGlfaW5ldF9uZXRfcHRvbj0idW5rbm93biIKKyAgdHN0X3dvcmtzX2luZXRfbmV0X3B0b249InVua25vd24iCisgIHRzdF9hbGxvd19pbmV0X25ldF9wdG9uPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9uZXRfcHRvbiBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbmV0X3B0b24gY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBpbmV0X25ldF9wdG9uIGlubm9jdW91c19pbmV0X25ldF9wdG9uCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGluZXRfbmV0X3B0b24KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfbmV0X3B0b24gKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfaW5ldF9uZXRfcHRvbiB8fCBkZWZpbmVkIF9fc3R1Yl9fX2luZXRfbmV0X3B0b24KK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gaW5ldF9uZXRfcHRvbiAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfaW5ldF9uZXRfcHRvbj0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfaW5ldF9uZXRfcHRvbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9uZXRfcHRvbiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9uZXRfcHRvbiBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbmV0X3B0b24gaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJpbmV0X25ldF9wdG9uIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2luZXRfbmV0X3B0b249InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pbmV0X25ldF9wdG9uPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pbmV0X25ldF9wdG9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X25ldF9wdG9uIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9uZXRfcHRvbiBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGluZXRfbmV0X3B0b24oMCwgMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2luZXRfbmV0X3B0b249InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pbmV0X25ldF9wdG9uPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9uZXRfcHRvbiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9uZXRfcHRvbiBzZWVtcyB0byB3b3JrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbmV0X3B0b24gc2VlbXMgdG8gd29yay4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjYXJlc19pbmNsdWRlc19hcnBhX2luZXQKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB1bnNpZ25lZCBjaGFyIGlwdjZhWzE2KzFdOworICAgICAgICB1bnNpZ25lZCBjaGFyIGlwdjRhWzQrMV07CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjZuZXQxID0gImZlODA6OjIxNDo0ZmZmOmZlMGI6NzZjOCI7CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjZuZXQyID0gIjo6ZmZmZTo3ZjAwOjEiOworICAgICAgICBjb25zdCBjaGFyICppcHY2bmV0MyA9ICI3ZjIwOjE6Oi82NCI7CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjZuZXQ0ID0gIjdmMjA6MTo6LzIxNDc0ODM2NDkiOworICAgICAgICBjb25zdCBjaGFyICppcHY0bmV0MSA9ICIxOTIuMTY4LjEwMC4xIjsKKyAgICAgICAgY29uc3QgY2hhciAqaXB2NG5ldDIgPSAiMTkyLjE2OC4xMDAvMzIiOworICAgICAgICBjb25zdCBjaGFyICppcHY0bmV0MyA9ICIxOTIuMTY4LjEwMC4xLzIxNDc0ODM2NDkiOworICAgICAgICAvKiAtICovCisgICAgICAgIG1lbXNldChpcHY0YSwgMSwgc2l6ZW9mKGlwdjRhKSk7CisgICAgICAgIGlmKDMyICE9IGluZXRfbmV0X3B0b24oQUZfSU5FVCwgaXB2NG5ldDEsIGlwdjRhLCA0KSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY0YVsweDAwXSAhPSAweGMwKSB8fAorICAgICAgICAgICAgKGlwdjRhWzB4MDFdICE9IDB4YTgpIHx8CisgICAgICAgICAgICAoaXB2NGFbMHgwMl0gIT0gMHg2NCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsweDAzXSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjRhWzB4MDRdICE9IDB4MDEpICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgbWVtc2V0KGlwdjRhLCAxLCBzaXplb2YoaXB2NGEpKTsKKyAgICAgICAgaWYoMzIgIT0gaW5ldF9uZXRfcHRvbihBRl9JTkVULCBpcHY0bmV0MiwgaXB2NGEsIDQpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjRhWzB4MDBdICE9IDB4YzApIHx8CisgICAgICAgICAgICAoaXB2NGFbMHgwMV0gIT0gMHhhOCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsweDAyXSAhPSAweDY0KSB8fAorICAgICAgICAgICAgKGlwdjRhWzB4MDNdICE9IDB4MDApIHx8CisgICAgICAgICAgICAoaXB2NGFbMHgwNF0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NGEsIDEsIHNpemVvZihpcHY0YSkpOworICAgICAgICBpZigtMSAhPSBpbmV0X25ldF9wdG9uKEFGX0lORVQsIGlwdjRuZXQzLCBpcHY0YSwgNCkpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIG1lbXNldChpcHY2YSwgMSwgc2l6ZW9mKGlwdjZhKSk7CisgICAgICAgIGlmKDEyOCAhPSBpbmV0X25ldF9wdG9uKEFGX0lORVQ2LCBpcHY2bmV0MSwgaXB2NmEsIDE2KSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY2YVsweDAwXSAhPSAweGZlKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDFdICE9IDB4ODApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwOF0gIT0gMHgwMikgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA5XSAhPSAweDE0KSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGFdICE9IDB4NGYpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwYl0gIT0gMHhmZikgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBjXSAhPSAweGZlKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGRdICE9IDB4MGIpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwZV0gIT0gMHg3NikgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBmXSAhPSAweGM4KSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MTBdICE9IDB4MDEpICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY2YVsweDAyXSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwM10gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDRdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA1XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwNl0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDddICE9IDB4MCkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NmEsIDAsIHNpemVvZihpcHY2YSkpOworICAgICAgICBpcHY2YVsweDEwXSA9IDB4MDE7CisgICAgICAgIGlmKDEyOCAhPSBpbmV0X25ldF9wdG9uKEFGX0lORVQ2LCBpcHY2bmV0MiwgaXB2NmEsIDE2KSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY2YVsweDBhXSAhPSAweGZmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGJdICE9IDB4ZmUpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwY10gIT0gMHg3ZikgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBmXSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MTBdICE9IDB4MDEpICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY2YVsweDAwXSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwMV0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDJdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDAzXSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwNF0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDVdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA2XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwN10gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDhdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA5XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwZF0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGVdICE9IDB4MCkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NmEsIDEsIHNpemVvZihpcHY2YSkpOworICAgICAgICBpZig2NCAhPSBpbmV0X25ldF9wdG9uKEFGX0lORVQ2LCBpcHY2bmV0MywgaXB2NmEsIDE2KSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKCAoaXB2NmFbMHgwMF0gIT0gMHg3ZikgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDAxXSAhPSAweDIwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDNdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwOF0gIT0gMHgwMSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA5XSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGFdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwYl0gIT0gMHgwMSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBjXSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGRdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwZV0gIT0gMHgwMSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBmXSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MTBdICE9IDB4MDEpICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKCAoaXB2NmFbMHgwMl0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDRdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA1XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwNl0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDddICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA3XSAhPSAweDApICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgbWVtc2V0KGlwdjZhLCAxLCBzaXplb2YoaXB2NmEpKTsKKyAgICAgICAgaWYoLTEgIT0gaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgaXB2Nm5ldDQsIGlwdjZhLCAxNikpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGV4aXQoMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3Rfd29ya3NfaW5ldF9uZXRfcHRvbj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2luZXRfbmV0X3B0b249Im5vIgorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9uZXRfcHRvbiIgPSAieWVzIiAmJgorICAgIHRlc3QgIiR0c3Rfd29ya3NfaW5ldF9uZXRfcHRvbiIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9uZXRfcHRvbiB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbmV0X3B0b24gdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfaW5ldF9uZXRfcHRvbiIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfbmV0X3B0b249InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pbmV0X25ldF9wdG9uPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9uZXRfcHRvbiBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbmV0X3B0b24gbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2luZXRfbmV0X3B0b24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19pbmV0X25ldF9wdG9uIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9uZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2luZXRfbmV0X3B0b24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF93b3Jrc19pbmV0X25ldF9wdG9uIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lORVRfTkVUX1BUT04gMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2luZXRfbmV0X3B0b249InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfaW5ldF9uZXRfcHRvbj0ibm8iCisgIGZpCisKKworICAgICAgICAjCisgIHRzdF9saW5rc19pbmV0X250b3A9InVua25vd24iCisgIHRzdF9wcm90b19pbmV0X250b3A9InVua25vd24iCisgIHRzdF9jb21waV9pbmV0X250b3A9InVua25vd24iCisgIHRzdF93b3Jrc19pbmV0X250b3A9InVua25vd24iCisgIHRzdF9hbGxvd19pbmV0X250b3A9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X250b3AgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X250b3AgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBpbmV0X250b3AgaW5ub2N1b3VzX2luZXRfbnRvcAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBpbmV0X250b3AKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfbnRvcCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9pbmV0X250b3AgfHwgZGVmaW5lZCBfX3N0dWJfX19pbmV0X250b3AKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gaW5ldF9udG9wICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19pbmV0X250b3A9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2luZXRfbnRvcD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9udG9wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X250b3AgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X250b3AgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJpbmV0X250b3AiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW5ldF9udG9wPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW5ldF9udG9wPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pbmV0X250b3AiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvcCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbnRvcCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGluZXRfbnRvcCgwLCAwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X250b3Agc2VlbXMgdG8gd29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X250b3Agc2VlbXMgdG8gd29yay4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjYXJlc19pbmNsdWRlc19hcnBhX2luZXQKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBjaGFyIGlwdjZyZXNbc2l6ZW9mKCJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiKV07CisgICAgICAgIGNoYXIgaXB2NHJlc1tzaXplb2YgIjI1NS4yNTUuMjU1LjI1NSJdOworICAgICAgICB1bnNpZ25lZCBjaGFyIGlwdjZhWzI2XTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY0YVs1XTsKKyAgICAgICAgY2hhciAqaXB2NnB0ciA9IDA7CisgICAgICAgIGNoYXIgKmlwdjRwdHIgPSAwOworICAgICAgICAvKiAtICovCisgICAgICAgIGlwdjRyZXNbMF0gPSAnXDAnOworICAgICAgICBpcHY0YVswXSA9IDB4YzA7CisgICAgICAgIGlwdjRhWzFdID0gMHhhODsKKyAgICAgICAgaXB2NGFbMl0gPSAweDY0OworICAgICAgICBpcHY0YVszXSA9IDB4MDE7CisgICAgICAgIGlwdjRhWzRdID0gMHgwMTsKKyAgICAgICAgLyogLSAqLworICAgICAgICBpcHY0cHRyID0gaW5ldF9udG9wKEFGX0lORVQsIGlwdjRhLCBpcHY0cmVzLCBzaXplb2YoaXB2NHJlcykpOworICAgICAgICBpZighaXB2NHB0cikKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKGlwdjRwdHIgIT0gaXB2NHJlcykKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKCFpcHY0cHRyWzBdKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYobWVtY21wKGlwdjRyZXMsICIxOTIuMTY4LjEwMC4xIiwgMTMpICE9IDApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGlwdjZyZXNbMF0gPSAnXDAnOworICAgICAgICBtZW1zZXQoaXB2NmEsIDAsIHNpemVvZihpcHY2YSkpOworICAgICAgICBpcHY2YVswXSA9IDB4ZmU7CisgICAgICAgIGlwdjZhWzFdID0gMHg4MDsKKyAgICAgICAgaXB2NmFbOF0gPSAweDAyOworICAgICAgICBpcHY2YVs5XSA9IDB4MTQ7CisgICAgICAgIGlwdjZhWzEwXSA9IDB4NGY7CisgICAgICAgIGlwdjZhWzExXSA9IDB4ZmY7CisgICAgICAgIGlwdjZhWzEyXSA9IDB4ZmU7CisgICAgICAgIGlwdjZhWzEzXSA9IDB4MGI7CisgICAgICAgIGlwdjZhWzE0XSA9IDB4NzY7CisgICAgICAgIGlwdjZhWzE1XSA9IDB4Yzg7CisgICAgICAgIGlwdjZhWzI1XSA9IDB4MDE7CisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaXB2NnB0ciA9IGluZXRfbnRvcChBRl9JTkVUNiwgaXB2NmEsIGlwdjZyZXMsIHNpemVvZihpcHY2cmVzKSk7CisgICAgICAgIGlmKCFpcHY2cHRyKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYoaXB2NnB0ciAhPSBpcHY2cmVzKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYoIWlwdjZwdHJbMF0pCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZihtZW1jbXAoaXB2NnJlcywgImZlODA6OjIxNDo0ZmZmOmZlMGI6NzZjOCIsIDI0KSAhPSAwKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBleGl0KDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2luZXRfbnRvcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2luZXRfbnRvcD0ibm8iCisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pbmV0X250b3AiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfbnRvcCIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9udG9wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9udG9wIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2luZXRfbnRvcCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfbnRvcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfbnRvcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvcCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbnRvcCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfaW5ldF9udG9wIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lORVRfTlRPUCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfaW5ldF9udG9wPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2luZXRfbnRvcD0ibm8iCisgIGZpCisKKworICAgICAgICAjCisgIHRzdF9saW5rc19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9wcm90b19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9jb21waV9pbmV0X3B0b249InVua25vd24iCisgIHRzdF93b3Jrc19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9hbGxvd19pbmV0X3B0b249InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X3B0b24gY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X3B0b24gY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBpbmV0X3B0b24gaW5ub2N1b3VzX2luZXRfcHRvbgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBpbmV0X3B0b24KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfcHRvbiAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9pbmV0X3B0b24gfHwgZGVmaW5lZCBfX3N0dWJfX19pbmV0X3B0b24KK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gaW5ldF9wdG9uICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19pbmV0X3B0b249InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2luZXRfcHRvbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9wdG9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X3B0b24gaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X3B0b24gaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJpbmV0X3B0b24iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW5ldF9wdG9uPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW5ldF9wdG9uPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pbmV0X3B0b24iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfcHRvbiBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfcHRvbiBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGluZXRfcHRvbigwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW5ldF9wdG9uPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW5ldF9wdG9uPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9wdG9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X3B0b24gc2VlbXMgdG8gd29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X3B0b24gc2VlbXMgdG8gd29yay4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjYXJlc19pbmNsdWRlc19hcnBhX2luZXQKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB1bnNpZ25lZCBjaGFyIGlwdjZhWzE2KzFdOworICAgICAgICB1bnNpZ25lZCBjaGFyIGlwdjRhWzQrMV07CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjZzcmMgPSAiZmU4MDo6MjE0OjRmZmY6ZmUwYjo3NmM4IjsKKyAgICAgICAgY29uc3QgY2hhciAqaXB2NHNyYyA9ICIxOTIuMTY4LjEwMC4xIjsKKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NGEsIDEsIHNpemVvZihpcHY0YSkpOworICAgICAgICBpZigxICE9IGluZXRfcHRvbihBRl9JTkVULCBpcHY0c3JjLCBpcHY0YSkpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGlmKCAoaXB2NGFbMF0gIT0gMHhjMCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsxXSAhPSAweGE4KSB8fAorICAgICAgICAgICAgKGlwdjRhWzJdICE9IDB4NjQpIHx8CisgICAgICAgICAgICAoaXB2NGFbM10gIT0gMHgwMSkgfHwKKyAgICAgICAgICAgIChpcHY0YVs0XSAhPSAweDAxKSApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIG1lbXNldChpcHY2YSwgMSwgc2l6ZW9mKGlwdjZhKSk7CisgICAgICAgIGlmKDEgIT0gaW5ldF9wdG9uKEFGX0lORVQ2LCBpcHY2c3JjLCBpcHY2YSkpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGlmKCAoaXB2NmFbMF0gICE9IDB4ZmUpIHx8CisgICAgICAgICAgICAoaXB2NmFbMV0gICE9IDB4ODApIHx8CisgICAgICAgICAgICAoaXB2NmFbOF0gICE9IDB4MDIpIHx8CisgICAgICAgICAgICAoaXB2NmFbOV0gICE9IDB4MTQpIHx8CisgICAgICAgICAgICAoaXB2NmFbMTBdICE9IDB4NGYpIHx8CisgICAgICAgICAgICAoaXB2NmFbMTFdICE9IDB4ZmYpIHx8CisgICAgICAgICAgICAoaXB2NmFbMTJdICE9IDB4ZmUpIHx8CisgICAgICAgICAgICAoaXB2NmFbMTNdICE9IDB4MGIpIHx8CisgICAgICAgICAgICAoaXB2NmFbMTRdICE9IDB4NzYpIHx8CisgICAgICAgICAgICAoaXB2NmFbMTVdICE9IDB4YzgpIHx8CisgICAgICAgICAgICAoaXB2NmFbMTZdICE9IDB4MDEpICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY2YVsyXSAgIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzNdICAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbNF0gICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVs1XSAgIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzZdICAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbN10gICE9IDB4MCkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBleGl0KDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2luZXRfcHRvbj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2luZXRfcHRvbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pbmV0X3B0b24iID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfcHRvbiIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9wdG9uIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9wdG9uIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2luZXRfcHRvbiIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfcHRvbj0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfcHRvbj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfcHRvbiBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfcHRvbiBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9wdG9uIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW5ldF9wdG9uIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9wdG9uIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW5ldF9wdG9uIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfaW5ldF9wdG9uIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lORVRfUFRPTiAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfaW5ldF9wdG9uPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2luZXRfcHRvbj0ibm8iCisgIGZpCisKKworY2FyZXNfaW5jbHVkZXNfc3Ryb3B0cz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyMgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJPUFRTX0gKKyMgIGluY2x1ZGUgPHN0cm9wdHMuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHVuaXN0ZC5oIHN5cy9zb2NrZXQuaCBzeXMvaW9jdGwuaCBzdHJvcHRzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICAgICMKKyAgdHN0X2xpbmtzX2lvY3RsPSJ1bmtub3duIgorICB0c3RfcHJvdG9faW9jdGw9InVua25vd24iCisgIHRzdF9jb21waV9pb2N0bD0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3RsPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGwgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGlvY3RsIGlubm9jdW91c19pb2N0bAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBpb2N0bAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgaW9jdGwgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfaW9jdGwgfHwgZGVmaW5lZCBfX3N0dWJfX19pb2N0bAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBpb2N0bCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfaW9jdGw9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2lvY3RsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGwgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3Ryb3B0cworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJpb2N0bCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pb2N0bD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2lvY3RsPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGwgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBpb2N0bCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3RsIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3RsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGw9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGwgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3RsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW9jdGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pb2N0bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lPQ1RMIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bD0ieWVzIgorCisgICMKKyAgdHN0X2NvbXBpX2lvY3RsX2Zpb25iaW89InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bF9maW9uYmlvPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCBGSU9OQklPIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGwgRklPTkJJTyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBpb2N0bCgwLCBGSU9OQklPLCAmZmxhZ3MpKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bF9maW9uYmlvPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxfZmlvbmJpbz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsX2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIEZJT05CSU8gdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBGSU9OQklPIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3RsX2Zpb25iaW8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bF9maW9uYmlvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIEZJT05CSU8gbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBGSU9OQklPIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9maW9uYmlvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bF9maW9uYmlvPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2lvY3RsX2Zpb25iaW89Im5vIgorICBmaQorCisKKyAgIworICB0c3RfY29tcGlfaW9jdGxfc2lvY2dpZmFkZHI9InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bF9zaW9jZ2lmYWRkcj0idW5rbm93biIKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGwgU0lPQ0dJRkFERFIgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBTSU9DR0lGQUREUiBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKyAgICAgICAgI2luY2x1ZGUgPG5ldC9pZi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgICAgICBpZigwICE9IGlvY3RsKDAsIFNJT0NHSUZBRERSLCAmaWZyKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxfc2lvY2dpZmFkZHI9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsX3Npb2NnaWZhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCBTSU9DR0lGQUREUiB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3RsIFNJT0NHSUZBRERSIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHI9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bF9zaW9jZ2lmYWRkcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIFNJT0NHSUZBRERSIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGwgU0lPQ0dJRkFERFIgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsX3Npb2NnaWZhZGRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU9DVExfU0lPQ0dJRkFERFIgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2lvY3RsX3Npb2NnaWZhZGRyPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2lvY3RsX3Npb2NnaWZhZGRyPSJubyIKKyAgZmkKKworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19pb2N0bD0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0PSJ1bmtub3duIgorICB0c3RfcHJvdG9faW9jdGxzb2NrZXQ9InVua25vd24iCisgIHRzdF9jb21waV9pb2N0bHNvY2tldD0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3Rsc29ja2V0PSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bHNvY2tldCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19pb2N0bHNvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImlvY3Rsc29ja2V0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW9jdGxzb2NrZXQ9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bHNvY2tldCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBpb2N0bHNvY2tldCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXQ9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bHNvY2tldCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3Rsc29ja2V0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXQ9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldD0ieWVzIgorCisgICMKKyAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW89InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9maW9uYmlvPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bHNvY2tldCBGSU9OQklPIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgRklPTkJJTyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGludCBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfZmlvbmJpbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9maW9uYmlvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bHNvY2tldCBGSU9OQklPIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgRklPTkJJTyB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19pb2N0bHNvY2tldF9maW9uYmlvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfZmlvbmJpbz0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW89Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bHNvY2tldCBGSU9OQklPIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgRklPTkJJTyBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfZmlvbmJpbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU9DVExTT0NLRVRfRklPTkJJTyAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXRfZmlvbmJpbz0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9maW9uYmlvPSJubyIKKyAgZmkKKworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldD0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfcHJvdG9faW9jdGxzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBJb2N0bFNvY2tldCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIElvY3RsU29ja2V0IGlubm9jdW91c19Jb2N0bFNvY2tldAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBJb2N0bFNvY2tldAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgSW9jdGxTb2NrZXQgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfSW9jdGxTb2NrZXQgfHwgZGVmaW5lZCBfX3N0dWJfX19Jb2N0bFNvY2tldAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBJb2N0bFNvY2tldCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfaW9jdGxzb2NrZXRfY2FtZWw9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBJb2N0bFNvY2tldCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3Ryb3B0cworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJJb2N0bFNvY2tldCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBJb2N0bFNvY2tldCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBJb2N0bFNvY2tldCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBJb2N0bFNvY2tldCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIElvY3RsU29ja2V0IHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWw9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIElvY3RsU29ja2V0IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorCisgICMKKyAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBJb2N0bFNvY2tldCBGSU9OQklPIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgRklPTkJJTyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgbG9uZyBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBJb2N0bFNvY2tldCBGSU9OQklPIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgRklPTkJJTyB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBJb2N0bFNvY2tldCBGSU9OQklPIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgRklPTkJJTyBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTyAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJubyIKKyAgZmkKKworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbD0ibm8iCisgIGZpCisKKworICAgICAgIworICB0c3RfbGlua3Nfc2V0c29ja29wdD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NldHNvY2tvcHQ9InVua25vd24iCisgIHRzdF9jb21waV9zZXRzb2Nrb3B0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfc2V0c29ja29wdD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNldHNvY2tvcHQgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzZXRzb2Nrb3B0IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc2V0c29ja29wdD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc2V0c29ja29wdD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2V0c29ja29wdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2V0c29ja29wdCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNldHNvY2tvcHQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzZXRzb2Nrb3B0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3NldHNvY2tvcHQ9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zZXRzb2Nrb3B0PSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zZXRzb2Nrb3B0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzZXRzb2Nrb3B0IGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2V0c29ja29wdCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc2V0c29ja29wdD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NldHNvY2tvcHQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zZXRzb2Nrb3B0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzZXRzb2Nrb3B0IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2V0c29ja29wdCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19zZXRzb2Nrb3B0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc2V0c29ja29wdD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NldHNvY2tvcHQ9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzZXRzb2Nrb3B0IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2V0c29ja29wdCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2V0c29ja29wdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3NldHNvY2tvcHQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zZXRzb2Nrb3B0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc2V0c29ja29wdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TRVRTT0NLT1BUIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0PSJ5ZXMiCisKKyAgIworICB0c3RfY29tcGlfc2V0c29ja29wdF9zb19ub25ibG9jaz0idW5rbm93biIKKyAgdHN0X2FsbG93X3NldHNvY2tvcHRfc29fbm9uYmxvY2s9InVua25vd24iCisgICMKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfc2V0c29ja29wdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2V0c29ja29wdCBTT19OT05CTE9DSyBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHNldHNvY2tvcHQoMCwgU09MX1NPQ0tFVCwgU09fTk9OQkxPQ0ssIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc2V0c29ja29wdF9zb19ub25ibG9jaz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHRfc29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3NldHNvY2tvcHRfc29fbm9uYmxvY2siICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc2V0c29ja29wdF9zb19ub25ibG9jaz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc2V0c29ja29wdF9zb19ub25ibG9jayIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3NldHNvY2tvcHRfc29fbm9uYmxvY2s9Im5vIgorICBmaQorCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3NldHNvY2tvcHQ9Im5vIgorICBmaQorCisKKyAgICAgICAgIworICB0c3RfbGlua3Nfc29ja2V0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fc29ja2V0PSJ1bmtub3duIgorICB0c3RfY29tcGlfc29ja2V0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfc29ja2V0PSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc29ja2V0IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc29ja2V0IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjYXJlc19pbmNsdWRlc19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gc29ja2V0KDAsIDAsIDApKQorICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zb2NrZXQ9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3NvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzb2NrZXQgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzb2NrZXQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGNhcmVzX2luY2x1ZGVzX3NvY2tldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzb2NrZXQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc29ja2V0PSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNvY2tldCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAgICRjYXJlc19pbmNsdWRlc19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NvY2tldD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc29ja2V0IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc29ja2V0IHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3NvY2tldCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NvY2tldD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NvY2tldD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNvY2tldCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NPQ0tFVCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc29ja2V0PSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3NvY2tldD0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3N0cmNhc2VjbXA9InVua25vd24iCisgIHRzdF9wcm90b19zdHJjYXNlY21wPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cmNhc2VjbXA9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlY21wIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZWNtcCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cmNhc2VjbXAgaW5ub2N1b3VzX3N0cmNhc2VjbXAKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RyY2FzZWNtcAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RyY2FzZWNtcCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJjYXNlY21wIHx8IGRlZmluZWQgX19zdHViX19fc3RyY2FzZWNtcAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJjYXNlY21wICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJjYXNlY21wPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJjYXNlY21wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJjYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlY21wIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZWNtcCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cmNhc2VjbXAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RyY2FzZWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmNhc2VjbXA9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmNhc2VjbXAgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJjYXNlY21wIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RyY2FzZWNtcCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RyY2FzZWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmNhc2VjbXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJjYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlY21wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZWNtcCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19zdHJjYXNlY21wIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RyY2FzZWNtcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmNhc2VjbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlY21wIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZWNtcCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJjYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJjYXNlY21wPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cmNhc2VjbXA9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19zdHJjbXBpPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyY21waT0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cmNtcGk9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJjbXBpPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY21waSBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNtcGkgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJjbXBpIGlubm9jdW91c19zdHJjbXBpCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cmNtcGkKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmNtcGkgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RyY21waSB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cmNtcGkKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3RyY21waSAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyY21waT0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyY21waT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyY21waSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY21waSBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNtcGkgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJjbXBpIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmNtcGk9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJjbXBpPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJjbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjbXBpIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY21waSBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHN0cmNtcGkoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmNtcGk9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJjbXBpPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RyY21waSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY21waSB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNtcGkgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfc3RyY21waSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmNtcGk9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJjbXBpPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY21waSBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNtcGkgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJjbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RyY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cmNtcGkiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSQ01QSSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc3RyY21waT0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zdHJjbXBpPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3Nfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyZHVwPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RyZHVwPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZHVwIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyZHVwIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RyZHVwIGlubm9jdW91c19zdHJkdXAKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RyZHVwCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJkdXAgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RyZHVwIHx8IGRlZmluZWQgX19zdHViX19fc3RyZHVwCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cmR1cCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyZHVwPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJkdXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmR1cCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZHVwIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyZHVwIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RyZHVwIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmR1cD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmR1cD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RyZHVwIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJkdXAgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJkdXAgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzdHJkdXAoMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmR1cD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmR1cD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmR1cCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZHVwIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyZHVwIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3N0cmR1cCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmR1cD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmR1cD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmR1cCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmR1cCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyZHVwIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RyZHVwIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RyZHVwIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyZHVwIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUkRVUCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc3RyZHVwPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cmR1cD0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3N0cmljbXA9InVua25vd24iCisgIHRzdF9wcm90b19zdHJpY21wPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyaWNtcD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cmljbXA9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJpY21wIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyaWNtcCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cmljbXAgaW5ub2N1b3VzX3N0cmljbXAKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RyaWNtcAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RyaWNtcCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJpY21wIHx8IGRlZmluZWQgX19zdHViX19fc3RyaWNtcAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJpY21wICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJpY21wPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJpY21wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJpY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJpY21wIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyaWNtcCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cmljbXAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RyaWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmljbXA9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cmljbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmljbXAgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJpY21wIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RyaWNtcCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RyaWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmljbXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJpY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJpY21wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyaWNtcCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19zdHJpY21wIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RyaWNtcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmljbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJpY21wIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyaWNtcCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJpY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJJQ01QIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJpY21wPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cmljbXA9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19zdHJuY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cm5jYXNlY21wPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RybmNhc2VjbXA9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJuY2FzZWNtcD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jYXNlY21wIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJuY2FzZWNtcCBpbm5vY3VvdXNfc3RybmNhc2VjbXAKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RybmNhc2VjbXAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cm5jYXNlY21wICgpOworI2lmIGRlZmluZWQgX19zdHViX3N0cm5jYXNlY21wIHx8IGRlZmluZWQgX19zdHViX19fc3RybmNhc2VjbXAKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3RybmNhc2VjbXAgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cm5jYXNlY21wPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJuY2FzZWNtcD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jYXNlY21wIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJuY2FzZWNtcCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJuY2FzZWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cm5jYXNlY21wPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJuY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuY2FzZWNtcCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHN0cm5jYXNlY21wKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJuY2FzZWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cm5jYXNlY21wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RybmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jYXNlY21wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfc3RybmNhc2VjbXAiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJuY2FzZWNtcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cm5jYXNlY21wPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuY2FzZWNtcCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJuY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cm5jYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RybmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSTkNBU0VDTVAgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX3N0cm5jYXNlY21wPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cm5jYXNlY21wPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3Nfc3RybmNtcGk9InVua25vd24iCisgIHRzdF9wcm90b19zdHJuY21waT0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cm5jbXBpPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RybmNtcGk9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuY21waSBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5jbXBpIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RybmNtcGkgaW5ub2N1b3VzX3N0cm5jbXBpCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cm5jbXBpCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJuY21waSAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJuY21waSB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cm5jbXBpCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cm5jbXBpICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJuY21waT0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RybmNtcGk9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5jbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuY21waSBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5jbXBpIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RybmNtcGkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RybmNtcGk9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJuY21waT0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RybmNtcGkiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jbXBpIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNtcGkgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzdHJuY21waSgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RybmNtcGk9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJuY21waT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cm5jbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuY21waSB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5jbXBpIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3N0cm5jbXBpIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RybmNtcGk9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJuY21waT0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jbXBpIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNtcGkgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5jbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RybmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJuY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cm5jbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUk5DTVBJIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJuY21waT0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zdHJuY21waT0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3N0cm5pY21wPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RybmljbXA9InVua25vd24iCisgIHRzdF9jb21waV9zdHJuaWNtcD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cm5pY21wPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmljbXAgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuaWNtcCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cm5pY21wIGlubm9jdW91c19zdHJuaWNtcAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBzdHJuaWNtcAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RybmljbXAgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RybmljbXAgfHwgZGVmaW5lZCBfX3N0dWJfX19zdHJuaWNtcAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJuaWNtcCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RybmljbXA9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cm5pY21wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmljbXAgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuaWNtcCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cm5pY21wIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cm5pY21wPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RybmljbXA9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5pY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuaWNtcCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5pY21wIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RybmljbXAoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cm5pY21wPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RybmljbXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJuaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmljbXAgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuaWNtcCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19zdHJuaWNtcCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cm5pY21wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RybmljbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuaWNtcCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5pY21wIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5pY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RybmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJuaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJOSUNNUCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc3RybmljbXA9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc3RybmljbXA9Im5vIgorICBmaQorCisKK2NhcmVzX2luY2x1ZGVzX3N5c191aW89IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19VSU9fSAorIyAgaW5jbHVkZSA8c3lzL3Vpby5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3Vpby5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjYXJlc19pbmNsdWRlc19zeXNfdWlvCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAjCisgIHRzdF9saW5rc193cml0ZXY9InVua25vd24iCisgIHRzdF9wcm90b193cml0ZXY9InVua25vd24iCisgIHRzdF9jb21waV93cml0ZXY9InVua25vd24iCisgIHRzdF9hbGxvd193cml0ZXY9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3cml0ZXYgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3cml0ZXYgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSB3cml0ZXYgaW5ub2N1b3VzX3dyaXRldgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiB3cml0ZXYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHdyaXRldiAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl93cml0ZXYgfHwgZGVmaW5lZCBfX3N0dWJfX193cml0ZXYKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gd3JpdGV2ICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc193cml0ZXY9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3dyaXRldj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfd3JpdGV2IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3cml0ZXYgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3cml0ZXYgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c191aW8KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAid3JpdGV2IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3dyaXRldj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3dyaXRldj0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fd3JpdGV2IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3cml0ZXYgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3cml0ZXYgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfdWlvCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gd3JpdGV2KDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV93cml0ZXY9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV93cml0ZXY9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV93cml0ZXYiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdyaXRldiB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdyaXRldiB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd193cml0ZXYiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd193cml0ZXY9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd193cml0ZXY9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3cml0ZXYgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3cml0ZXYgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3dyaXRldiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XUklURVYgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX3dyaXRldj0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY193cml0ZXY9Im5vIgorICBmaQorCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBGX0lORVQ2IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQRl9JTkVUNi4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNlbmRpZgorCisKKyAgICAgICNpZmRlZiBQRl9JTkVUNgorICAgICAgICBWQVJJQUJMRVdBU0RFRklORUQKKyAgICAgICNlbHNlCisgICAgICAgIE5KRVQKKyAgICAgICNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJWQVJJQUJMRVdBU0RFRklORUQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2NvbnN0YW50PSJ5ZXMiCitlbHNlCisgIGFjX2NvbnN0YW50PSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGlmIHRlc3QgIiRhY19jb25zdGFudCIgPSAieWVzIiA7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUEZfSU5FVDYgMQorX0FDRU9GCisKKworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQUZfSU5FVDYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFGX0lORVQ2Li4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKKworICAgICAgI2lmZGVmIEFGX0lORVQ2CisgICAgICAgIFZBUklBQkxFV0FTREVGSU5FRAorICAgICAgI2Vsc2UKKyAgICAgICAgTkpFVAorICAgICAgI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIlZBUklBQkxFV0FTREVGSU5FRCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgYWNfY29uc3RhbnQ9InllcyIKK2Vsc2UKKyAgYWNfY29uc3RhbnQ9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgaWYgdGVzdCAiJGFjX2NvbnN0YW50IiA9ICJ5ZXMiIDsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9BRl9JTkVUNiAxCitfQUNFT0YKKworCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworICBmaQorCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVjdCBpbjZfYWRkciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RydWN0IGluNl9hZGRyLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIHN0cnVjdCBpbjZfYWRkciBzdHJ1Y3RfaW5zdGFuY2U7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfc3RydWN0PSJ5ZXMiCitlbHNlCisgIGFjX2ZvdW5kPSJubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJGFjX3N0cnVjdCIgPSAieWVzIiA7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lONl9BRERSIDEKK19BQ0VPRgorCisKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9pbjYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9pbjYuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBzdHJ1Y3RfaW5zdGFuY2U7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfc3RydWN0PSJ5ZXMiCitlbHNlCisgIGFjX2ZvdW5kPSJubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJGFjX3N0cnVjdCIgPSAieWVzIiA7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONiAxCitfQUNFT0YKKyBhY19oYXZlX3NvY2thZGRyX2luNj15ZXMKKworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyAgZmkKKworCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9pbjYiICJzaW42X3Njb3BlX2lkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZCIgIgorI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQorX0FDRU9GCisKKworZmkKKworCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBhZGRyaW5mbyIgImFpX2ZsYWdzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9hZGRyaW5mb19haV9mbGFncyIgIgorI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjZW5kaWYKKworCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfYWRkcmluZm9fYWlfZmxhZ3MiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfQUREUklORk8gMQorX0FDRU9GCisKK2ZpCisKKworCitmb3IgYWNfZnVuYyBpbiBiaXRuY21wIFwKKyAgZ2V0dGltZW9mZGF5IFwKKyAgaWZfaW5kZXh0b25hbWUKKworZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKKworZWxzZQorCisgIGZ1bmM9IiRhY19mdW5jIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlZXBlciBmb3IgJGZ1bmMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVlcGVyIGZvciAkZnVuYy4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgJGZ1bmMgKCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBldmFsICJhY19jdl9mdW5jXyRmdW5jPXllcyIKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kZnVuYyIgfCBzZWQgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJyB8IHNlZCAncy9eQS1aMC05Xy9fL2cnYCAxCitfQUNFT0YKKworCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYnV0IHN0aWxsIG5vIiA+JjUKKyRhc19lY2hvICJidXQgc3RpbGwgbm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2RvbmUKKworCisKKworICAgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oIG5ldGRiLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldG5hbWVpbmZvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRuYW1laW5mby4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBnZXRuYW1laW5mbyBpbm5vY3VvdXNfZ2V0bmFtZWluZm8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0bmFtZWluZm8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldG5hbWVpbmZvICgpOworI2lmIGRlZmluZWQgX19zdHViX2dldG5hbWVpbmZvIHx8IGRlZmluZWQgX19zdHViX19fZ2V0bmFtZWluZm8KK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZ2V0bmFtZWluZm8gKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY3VybF9jdl9nZXRuYW1laW5mbz0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfZ2V0bmFtZWluZm8iICE9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZWVwZXIgZm9yIGdldG5hbWVpbmZvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlZXBlciBmb3IgZ2V0bmFtZWluZm8uLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBnZXRuYW1laW5mbygpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYnV0IHN0aWxsIG5vIiA+JjUKKyRhc19lY2hvICJidXQgc3RpbGwgbm8iID4mNjsgfQorICAgICAgY3VybF9jdl9nZXRuYW1laW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X2dldG5hbWVpbmZvIiAhPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVlcGVyIGFuZCBkZWVwZXIgZm9yIGdldG5hbWVpbmZvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlZXBlciBhbmQgZGVlcGVyIGZvciBnZXRuYW1laW5mby4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgZ2V0bmFtZWluZm8oMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgY3VybF9jdl9nZXRuYW1laW5mbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBidXQgc3RpbGwgbm8iID4mNQorJGFzX2VjaG8gImJ1dCBzdGlsbCBubyIgPiY2OyB9CisgICAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfZ2V0bmFtZWluZm8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHR5cGVzIG9mIGFyZ3VtZW50cyBmb3IgZ2V0bmFtZWluZm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZXMgb2YgYXJndW1lbnRzIGZvciBnZXRuYW1laW5mby4uLiAiID4mNjsgfQoraWYgJHtjdXJsX2N2X2Z1bmNfZ2V0bmFtZWluZm9fYXJncys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzPSJ1bmtub3duIgorICAgICAgZm9yIGduaV9hcmcxIGluICdzdHJ1Y3Qgc29ja2FkZHIgKicgJ2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqJyAndm9pZCAqJzsgZG8KKyAgICAgICAgZm9yIGduaV9hcmcyIGluICdzb2NrbGVuX3QnICdzaXplX3QnICdpbnQnOyBkbworICAgICAgICAgIGZvciBnbmlfYXJnNDYgaW4gJ3NpemVfdCcgJ2ludCcgJ3NvY2tsZW5fdCcgJ3Vuc2lnbmVkIGludCcgJ0RXT1JEJzsgZG8KKyAgICAgICAgICAgIGZvciBnbmlfYXJnNyBpbiAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoX1dJTjMyX1dJTk5UKSkgfHwgKF9XSU4zMl9XSU5OVCA8IDB4MDUwMSkKKyN1bmRlZiBfV0lOMzJfV0lOTlQKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMQorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIEdOSUNBTExDT05WIFdTQUFQSQorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNkZWZpbmUgR05JQ0FMTENPTlYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IEdOSUNBTExDT05WIGdldG5hbWVpbmZvKCRnbmlfYXJnMSwgJGduaV9hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgJGduaV9hcmc0NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosICRnbmlfYXJnNDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGduaV9hcmc3KTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgICAgICAgICAgJGduaV9hcmcyIHNhbGVuPTA7CisgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnNDYgaG9zdGxlbj0wOworICAgICAgICAgICAgICAgICAgICAkZ25pX2FyZzQ2IHNlcnZsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgJGduaV9hcmc3IGZsYWdzPTA7CisgICAgICAgICAgICAgICAgICAgIGludCByZXMgPSBnZXRuYW1laW5mbygwLCBzYWxlbiwgMCwgaG9zdGxlbiwgMCwgc2VydmxlbiwgZmxhZ3MpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICAgICAgICAgY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3M9IiRnbmlfYXJnMSwkZ25pX2FyZzIsJGduaV9hcmc0NiwkZ25pX2FyZzciCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBkb25lCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3MiID4mNQorJGFzX2VjaG8gIiRjdXJsX2N2X2Z1bmNfZ2V0bmFtZWluZm9fYXJncyIgPiY2OyB9ICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IENhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIGdldG5hbWVpbmZvIGFyZ3MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3IgZ2V0bmFtZWluZm8gYXJncyIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogSEFWRV9HRVROQU1FSU5GTyB3aWxsIG5vdCBiZSBkZWZpbmVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEhBVkVfR0VUTkFNRUlORk8gd2lsbCBub3QgYmUgZGVmaW5lZCIgPiYyO30KKyAgICBlbHNlCisgICAgICBnbmlfcHJldl9JRlM9JElGUzsgSUZTPScsJworICAgICAgc2V0IGR1bW15IGBlY2hvICIkY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorICAgICAgSUZTPSRnbmlfcHJldl9JRlMKKyAgICAgIHNoaWZ0CisgICAgICAjCisgICAgICBnbmlfcXVhbF90eXBlX2FyZzE9JDEKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzIgJDIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiAkMworX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgJDQKK19BQ0VPRgorCisgICAgICAjCisgICAgICBwcmV2X3NoX29wdHM9JC0KKyAgICAgICMKKyAgICAgIGNhc2UgJHByZXZfc2hfb3B0cyBpbgorICAgICAgICAqZiopCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZXQgLWYKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgY2FzZSAiJGduaV9xdWFsX3R5cGVfYXJnMSIgaW4KKyAgICAgICAgY29uc3QqKQorICAgICAgICAgIGduaV9xdWFsX2FyZzE9Y29uc3QKKyAgICAgICAgICBnbmlfdHlwZV9hcmcxPWBlY2hvICRnbmlfcXVhbF90eXBlX2FyZzEgfCBzZWQgJ3MvXmNvbnN0IC8vJ2AKKyAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBnbmlfcXVhbF9hcmcxPQorICAgICAgICAgIGduaV90eXBlX2FyZzE9JGduaV9xdWFsX3R5cGVfYXJnMQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSAkZ25pX3F1YWxfYXJnMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgJGduaV90eXBlX2FyZzEKK19BQ0VPRgorCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0ICtmCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKK19BQ0VPRgorCisgICAgICBhY19jdl9mdW5jX2dldG5hbWVpbmZvPSJ5ZXMiCisgICAgZmkKKyAgZmkKKworCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgICAjIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB1bml2ZXJzYWwgY29tcGlsZXIuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX0FQUExFX0NDX18KKwkgICAgICAgbm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXIKKwkgICAgICNlbmRpZgorCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludCBtYWluICh2b2lkKQoreworI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorCQkgICAgICYmIGRlZmluZWQgTElUVExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXAorCQkgICAgICYmIExJVFRMRV9FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludCBtYWluICh2b2lkKQoreworI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludCBtYWluICh2b2lkKQoreworI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIF9CSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgorCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07CisJCXNob3J0IGludCBhc2NpaV9paVtdID0KKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKwkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKwkJICByZXR1cm4gYXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKKwkJfQorCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorCQkgIHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OworCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsKKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworCQl9CisJCWV4dGVybiBpbnQgZm9vOworCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCisJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisJICAgIGZpCisJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgorCQlhY19jdl9jX2JpZ2VuZGlhbj1ubworCSAgICAgIGVsc2UKKwkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/CisJCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKwkgICAgICBmaQorCSAgICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50IG1haW4gKHZvaWQpCit7CisKKwkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKwkgICAgIHVuaW9uCisJICAgICB7CisJICAgICAgIGxvbmcgaW50IGw7CisJICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07CisJICAgICB9IHU7CisJICAgICB1LmwgPSAxOworCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQorIGNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluICMoCisgICB5ZXMpCisKKyRhc19lY2hvICIjZGVmaW5lIEFSRVNfQklHX0VORElBTiAxIiA+PmNvbmZkZWZzLmgKKzs7ICMoCisgICBubykKKyAgICAgIDs7ICMoCisgICB1bml2ZXJzYWwpCisKKyRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICA7OyAjKAorICAgKikKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjb3VsZG4ndCBmaWd1cmUgb3V0IGVuZGlhbmVzcywgYXNzdW1pbmcgbGl0dGxlIGVuZGlhbiEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY291bGRuJ3QgZmlndXJlIG91dCBlbmRpYW5lc3MsIGFzc3VtaW5nIGxpdHRsZSBlbmRpYW4hIiA+JjI7fQorIDs7CisgZXNhYworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yYW5kb20gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3JhbmRvbStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcmFuZG9tOyAgUkFORE9NX0ZJTEU9IiR3aXRodmFsIgorZWxzZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gIm5vIjsgdGhlbgorICAgICAgICAgIGFzX2FjX0ZpbGU9YCRhc19lY2hvICJhY19jdl9maWxlXyIvZGV2L3VyYW5kb20iIiB8ICRhc190cl9zaGAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFwiL2Rldi91cmFuZG9tXCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFwiL2Rldi91cmFuZG9tXCIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2FjX0ZpbGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIiIvZGV2L3VyYW5kb20iIjsgdGhlbgorICBldmFsICIkYXNfYWNfRmlsZT15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19hY19GaWxlPW5vIgorZmkKK2ZpCitldmFsIGFjX3Jlcz1cJCRhc19hY19GaWxlCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfRmlsZSJcIiA9IHgieWVzIjsgdGhlbiA6CisgICBSQU5ET01fRklMRT0iL2Rldi91cmFuZG9tIgorZmkKKworICAgICAgICBlbHNlCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYW5ub3QgY2hlY2sgZm9yIC9kZXYvdXJhbmRvbSB3aGlsZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIG5vbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2Fubm90IGNoZWNrIGZvciAvZGV2L3VyYW5kb20gd2hpbGUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBub25lIiA+JjI7fQorICAgICAgICBmaQorCisKKworZmkKKworaWYgdGVzdCAtbiAiJFJBTkRPTV9GSUxFIiAmJiB0ZXN0IFgiJFJBTkRPTV9GSUxFIiAhPSBYbm8gOyB0aGVuCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSQU5ET01fRklMRSAiJFJBTkRPTV9GSUxFIgorX0FDRU9GCisKK2ZpCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbm9uLWJsb2NraW5nIGNvbW11bmljYXRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG5vbi1ibG9ja2luZyBjb21tdW5pY2F0aW9ucy4uLiAiID4mNjsgfQorICBPUFRfTk9OQkxPQ0tJTkc9ImRlZmF1bHQiCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ub25ibG9ja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ub25ibG9ja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25vbmJsb2NraW5nOyBPUFRfTk9OQkxPQ0tJTkc9JGVuYWJsZXZhbAorZmkKKworICBjYXNlICIkT1BUX05PTkJMT0NLSU5HIiBpbgorICAgIG5vKQorICAgICAgICAgICAgd2FudF9ub25ibG9ja2luZz0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICB3YW50X25vbmJsb2NraW5nPSJ5ZXMiCisgICAgICA7OworICAgICopCisgICAgICAgICAgICB3YW50X25vbmJsb2NraW5nPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2FudF9ub25ibG9ja2luZyIgPiY1CiskYXNfZWNobyAiJHdhbnRfbm9uYmxvY2tpbmciID4mNjsgfQorCisKKyAgICAgICAgICAgICAgIworICB0c3RfbWV0aG9kPSJ1bmtub3duIgorICBpZiB0ZXN0ICIkd2FudF9ub25ibG9ja2luZyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHNldCBhIHNvY2tldCBpbnRvIG5vbi1ibG9ja2luZyBtb2RlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBzZXQgYSBzb2NrZXQgaW50byBub24tYmxvY2tpbmcgbW9kZS4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19mY250bF9vX25vbmJsb2NrIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iZmNudGwgT19OT05CTE9DSyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iaW9jdGwgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iaW9jdGxzb2NrZXQgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iSW9jdGxTb2NrZXQgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0ic2V0c29ja29wdCBTT19OT05CTE9DSyIKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHN0X21ldGhvZCIgPiY1CiskYXNfZWNobyAiJHRzdF9tZXRob2QiID4mNjsgfQorICAgIGlmIHRlc3QgIiR0c3RfbWV0aG9kIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYW5ub3QgZGV0ZXJtaW5lIG5vbi1ibG9ja2luZyBzb2NrZXQgbWV0aG9kLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW5ub3QgZGV0ZXJtaW5lIG5vbi1ibG9ja2luZyBzb2NrZXQgbWV0aG9kLiIgPiYyO30KKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICIkdHN0X21ldGhvZCIgPSAidW5rbm93biI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBVU0VfQkxPQ0tJTkdfU09DS0VUUyAxCitfQUNFT0YKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbm9uLWJsb2NraW5nIHNvY2tldHMgZGlzYWJsZWQuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vbi1ibG9ja2luZyBzb2NrZXRzIGRpc2FibGVkLiIgPiYyO30KKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGhpZGluZyBvZiBsaWJyYXJ5IGludGVybmFsIHN5bWJvbHMgd2lsbCBhY3R1YWxseSBoYXBwZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBoaWRpbmcgb2YgbGlicmFyeSBpbnRlcm5hbCBzeW1ib2xzIHdpbGwgYWN0dWFsbHkgaGFwcGVuLi4uICIgPiY2OyB9CisgIENGTEFHX0NBUkVTX1NZTUJPTF9ISURJTkc9IiIKKyAgZG9pbmdfc3ltYm9sX2hpZGluZz0ibm8iCisgIGlmIHRlc3QgeCIkYWNfY3ZfbmF0aXZlX3dpbmRvd3MiICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR3YW50X3N5bWJvbF9oaWRpbmciID0gInllcyIgJiYKKyAgICB0ZXN0ICIkc3VwcG9ydHNfc3ltYm9sX2hpZGluZyIgPSAieWVzIjsgdGhlbgorICAgIGRvaW5nX3N5bWJvbF9oaWRpbmc9InllcyIKKyAgICBDRkxBR19DQVJFU19TWU1CT0xfSElESU5HPSIkc3ltYm9sX2hpZGluZ19DRkxBR1MiCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQ0FSRVNfU1lNQk9MX1NDT1BFX0VYVEVSTiAkc3ltYm9sX2hpZGluZ19FWFRFUk4KK19BQ0VPRgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorICAgaWYgdGVzdCB4JGRvaW5nX3N5bWJvbF9oaWRpbmcgPSB4eWVzOyB0aGVuCisgIERPSU5HX0NBUkVTX1NZTUJPTF9ISURJTkdfVFJVRT0KKyAgRE9JTkdfQ0FSRVNfU1lNQk9MX0hJRElOR19GQUxTRT0nIycKK2Vsc2UKKyAgRE9JTkdfQ0FSRVNfU1lNQk9MX0hJRElOR19UUlVFPScjJworICBET0lOR19DQVJFU19TWU1CT0xfSElESU5HX0ZBTFNFPQorZmkKKworCisgIGlmIHRlc3QgIiRkb2luZ19zeW1ib2xfaGlkaW5nIiA9ICJ5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQ0FSRVNfU1lNQk9MX0hJRElORyAxCitfQUNFT0YKKworICBmaQorCisKK0NBUkVTX1BSSVZBVEVfTElCUz0iJExJQlMiCisKKworQ0FSRVNfQ0ZMQUdfRVhUUkFTPSIiCitpZiB0ZXN0IFgiJHdhbnRfd2Vycm9yIiA9IFh5ZXM7IHRoZW4KKyAgQ0FSRVNfQ0ZMQUdfRVhUUkFTPSItV2Vycm9yIgorZmkKKworCisKK3NxdWVlemUgQ0ZMQUdTCitzcXVlZXplIENQUEZMQUdTCitzcXVlZXplIERFRlMKK3NxdWVlemUgTERGTEFHUworc3F1ZWV6ZSBMSUJTCisKK3NxdWVlemUgQ0FSRVNfUFJJVkFURV9MSUJTCisKKworCisgIHhjX2JhZF92YXJfbGlicz1ubworICBmb3IgeGNfd29yZCBpbiAkTElCUzsgZG8KKyAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgIC1sKiB8IC0tbGlicmFyeT0qKQorICAgICAgICA6CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICB4Y19iYWRfdmFyX2xpYnM9eWVzCisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfbGlicyA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXNpbmcgTElCUzogJExJQlMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXNpbmcgTElCUzogJExJQlMiID4mNjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBMSUJTIGVycm9yOiBMSUJTIG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBsaWJyYXJpZXMgKC1sbmFtZSkuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IExJQlMgZXJyb3I6IExJQlMgbWF5IG9ubHkgYmUgdXNlZCB0byBzcGVjaWZ5IGxpYnJhcmllcyAoLWxuYW1lKS4iID4mNjt9CisgIGZpCisKKworICB4Y19iYWRfdmFyX2xkZmxhZ3M9bm8KKyAgZm9yIHhjX3dvcmQgaW4gJExERkxBR1M7IGRvCisgICAgY2FzZSAiJHhjX3dvcmQiIGluCisgICAgICAtRCopCisgICAgICAgIHhjX2JhZF92YXJfbGRmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1VKikKKyAgICAgICAgeGNfYmFkX3Zhcl9sZGZsYWdzPXllcworICAgICAgICA7OworICAgICAgLUkqKQorICAgICAgICB4Y19iYWRfdmFyX2xkZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9sZGZsYWdzPXllcworICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICBpZiB0ZXN0ICR4Y19iYWRfdmFyX2xkZmxhZ3MgPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVzaW5nIExERkxBR1M6ICRMREZMQUdTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVzaW5nIExERkxBR1M6ICRMREZMQUdTIiA+JjY7fQorICAgIHhjX2JhZF92YXJfbXNnPSJMREZMQUdTIGVycm9yOiBMREZMQUdTIG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBsaW5rZXIgZmxhZ3MsIG5vdCIKKyAgICBmb3IgeGNfd29yZCBpbiAkTERGTEFHUzsgZG8KKyAgICAgIGNhc2UgIiR4Y193b3JkIiBpbgorICAgICAgICAtRCopCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkeGNfYmFkX3Zhcl9tc2cgbWFjcm8gZGVmaW5pdGlvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBtYWNybyBkZWZpbml0aW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLVUqKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIG1hY3JvIHN1cHByZXNzaW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIG1hY3JvIHN1cHByZXNzaW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLUkqKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIGluY2x1ZGUgZGlyZWN0b3JpZXMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZCIgPiY2O30KKyAgICAgICAgICA7OworICAgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJpZXMuIFVzZSBMSUJTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcmllcy4gVXNlIExJQlMgZm9yOiAkeGNfd29yZCIgPiY2O30KKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgZmkKKworCisgIHhjX2JhZF92YXJfY3BwZmxhZ3M9bm8KKyAgZm9yIHhjX3dvcmQgaW4gJENQUEZMQUdTOyBkbworICAgIGNhc2UgIiR4Y193b3JkIiBpbgorICAgICAgLXJwYXRoKikKKyAgICAgICAgeGNfYmFkX3Zhcl9jcHBmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1MKiB8IC0tbGlicmFyeS1wYXRoPSopCisgICAgICAgIHhjX2JhZF92YXJfY3BwZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9jcHBmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgaWYgdGVzdCAkeGNfYmFkX3Zhcl9jcHBmbGFncyA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXNpbmcgQ1BQRkxBR1M6ICRDUFBGTEFHUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1c2luZyBDUFBGTEFHUzogJENQUEZMQUdTIiA+JjY7fQorICAgIHhjX2JhZF92YXJfbXNnPSJDUFBGTEFHUyBlcnJvcjogQ1BQRkxBR1MgbWF5IG9ubHkgYmUgdXNlZCB0byBzcGVjaWZ5IEMgcHJlcHJvY2Vzc29yIGZsYWdzLCBub3QiCisgICAgZm9yIHhjX3dvcmQgaW4gJENQUEZMQUdTOyBkbworICAgICAgY2FzZSAiJHhjX3dvcmQiIGluCisgICAgICAgIC1ycGF0aCopCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkeGNfYmFkX3Zhcl9tc2cgbGlicmFyeSBydW50aW1lIGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IHJ1bnRpbWUgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLUwqIHwgLS1saWJyYXJ5LXBhdGg9KikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICAgIC1sKiB8IC0tbGlicmFyeT0qKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcmllcy4gVXNlIExJQlMgZm9yOiAkeGNfd29yZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkeGNfYmFkX3Zhcl9tc2cgbGlicmFyaWVzLiBVc2UgTElCUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICBmaQorCisKKyAgeGNfYmFkX3Zhcl9jZmxhZ3M9bm8KKyAgZm9yIHhjX3dvcmQgaW4gJENGTEFHUzsgZG8KKyAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgIC1EKikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtVSopCisgICAgICAgIHhjX2JhZF92YXJfY2ZsYWdzPXllcworICAgICAgICA7OworICAgICAgLUkqKQorICAgICAgICB4Y19iYWRfdmFyX2NmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1ycGF0aCopCisgICAgICAgIHhjX2JhZF92YXJfY2ZsYWdzPXllcworICAgICAgICA7OworICAgICAgLUwqIHwgLS1saWJyYXJ5LXBhdGg9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfY2ZsYWdzID0geWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1c2luZyBDRkxBR1M6ICRDRkxBR1MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXNpbmcgQ0ZMQUdTOiAkQ0ZMQUdTIiA+JjY7fQorICAgIHhjX2JhZF92YXJfbXNnPSJDRkxBR1MgZXJyb3I6IENGTEFHUyBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgQyBjb21waWxlciBmbGFncywgbm90IgorICAgIGZvciB4Y193b3JkIGluICRDRkxBR1M7IGRvCisgICAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgICAgLUQqKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIG1hY3JvIGRlZmluaXRpb25zLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkeGNfYmFkX3Zhcl9tc2cgbWFjcm8gZGVmaW5pdGlvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICAgIC1VKikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBtYWNybyBzdXBwcmVzc2lvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBtYWNybyBzdXBwcmVzc2lvbnMuIFVzZSBDUFBGTEFHUyBmb3I6ICR4Y193b3JkIiA+JjY7fQorICAgICAgICAgIDs7CisgICAgICAgIC1JKikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkeGNfYmFkX3Zhcl9tc2cgaW5jbHVkZSBkaXJlY3Rvcmllcy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLXJwYXRoKikKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IHJ1bnRpbWUgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcnkgcnVudGltZSBkaXJlY3Rvcmllcy4gVXNlIExERkxBR1MgZm9yOiAkeGNfd29yZCIgPiY2O30KKyAgICAgICAgICA7OworICAgICAgICAtTCogfCAtLWxpYnJhcnktcGF0aD0qKQorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcnkgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJHhjX2JhZF92YXJfbXNnIGxpYnJhcnkgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgICAgLWwqIHwgLS1saWJyYXJ5PSopCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkeGNfYmFkX3Zhcl9tc2cgbGlicmFyaWVzLiBVc2UgTElCUyBmb3I6ICR4Y193b3JkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICR4Y19iYWRfdmFyX21zZyBsaWJyYXJpZXMuIFVzZSBMSUJTIGZvcjogJHhjX3dvcmQiID4mNjt9CisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgIGZpCisKKyAgaWYgdGVzdCAkeGNfYmFkX3Zhcl9saWJzID0geWVzIHx8CisgICAgIHRlc3QgJHhjX2JhZF92YXJfY2ZsYWdzID0geWVzIHx8CisgICAgIHRlc3QgJHhjX2JhZF92YXJfbGRmbGFncyA9IHllcyB8fAorICAgICB0ZXN0ICR4Y19iYWRfdmFyX2NwcGZsYWdzID0geWVzOyB0aGVuCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ29udGludWluZyBldmVuIHdpdGggZXJyb3JzIG1lbnRpb25lZCBpbW1lZGlhdGVseSBhYm92ZSB0aGlzIGxpbmUuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENvbnRpbnVpbmcgZXZlbiB3aXRoIGVycm9ycyBtZW50aW9uZWQgaW1tZWRpYXRlbHkgYWJvdmUgdGhpcyBsaW5lLiIgPiYyO30KKyAgZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgdGVzdHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCB0ZXN0cy4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRlc3RzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Rlc3RzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGVzdHM7ICBidWlsZF90ZXN0cz0iJGVuYWJsZXZhbCIKK2Vsc2UKKyAgIGlmIHRlc3QgIngkSEFWRV9DWFgxMSIgPSAieDEiICYmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiA9ICJ4bm8iIDsgdGhlbgorCSAgICBidWlsZF90ZXN0cz0ieWVzIgorCSAgZWxzZQorCSAgICBidWlsZF90ZXN0cz0ibm8iCisJICBmaQorCisKK2ZpCisKKworaWYgdGVzdCAieCRidWlsZF90ZXN0cyIgPSAieHllcyIgOyB0aGVuCisJaWYgdGVzdCAieCRIQVZFX0NYWDExIiA9ICIwIiA7IHRoZW4KKwkJYXNfZm5fZXJyb3IgJD8gIioqKiBCdWlsZGluZyB0ZXN0cyByZXF1aXJlcyBhIENYWDExIGNvbXBpbGVyIiAiJExJTkVOTyIgNQorCWZpCisJaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciID0gInh5ZXMiIDsgdGhlbgorCQlhc19mbl9lcnJvciAkPyAiKioqIFRlc3RzIG5vdCBzdXBwb3J0ZWQgd2hlbiBjcm9zcyBjb21waWxpbmciICIkTElORU5PIiA1CisJZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGJ1aWxkX3Rlc3RzIiA+JjUKKyRhc19lY2hvICIkYnVpbGRfdGVzdHMiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGJ1aWxkX3Rlc3RzIiA9ICJ4eWVzIiA7IHRoZW4KKworCitzdWJkaXJzPSIkc3ViZGlycyB0ZXN0IgorCitmaQorCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgbGliY2FyZXMucGMiCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworYWNfbGlib2Jqcz0KK2FjX2x0bGlib2Jqcz0KK1U9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKK2lmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1BSU5UQUlORVJfTU9ERVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7Q09ERV9DT1ZFUkFHRV9FTkFCTEVEX1RSVUV9IiAmJiB0ZXN0IC16ICIke0NPREVfQ09WRVJBR0VfRU5BQkxFRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkNPREVfQ09WRVJBR0VfRU5BQkxFRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhhdCBnZW5lcmF0ZWQgZmlsZXMgYXJlIG5ld2VyIHRoYW4gY29uZmlndXJlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZS4uLiAiID4mNjsgfQorICAgaWYgdGVzdCAtbiAiJGFtX3NsZWVwX3BpZCI7IHRoZW4KKyAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgorICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKKyAgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZG9uZSIgPiY1CiskYXNfZWNobyAiZG9uZSIgPiY2OyB9CitpZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCisgaWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KKyAgYW1fX0VYRUVYVF9UUlVFPQorICBhbV9fRVhFRVhUX0ZBTFNFPScjJworZWxzZQorICBhbV9fRVhFRVhUX1RSVUU9JyMnCisgIGFtX19FWEVFWFRfRkFMU0U9CitmaQorCitpZiB0ZXN0IC16ICIke0NBUkVTX0xUX1NITElCX1VTRV9WRVJTSU9OX0lORk9fVFJVRX0iICYmIHRlc3QgLXogIiR7Q0FSRVNfTFRfU0hMSUJfVVNFX1ZFUlNJT05fSU5GT19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkNBUkVTX0xUX1NITElCX1VTRV9WRVJTSU9OX0lORk9cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0NBUkVTX0xUX1NITElCX1VTRV9OT19VTkRFRklORURfVFJVRX0iICYmIHRlc3QgLXogIiR7Q0FSRVNfTFRfU0hMSUJfVVNFX05PX1VOREVGSU5FRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkNBUkVTX0xUX1NITElCX1VTRV9OT19VTkRFRklORURcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0NBUkVTX0xUX1NITElCX1VTRV9NSU1QVVJFX1RFWFRfVFJVRX0iICYmIHRlc3QgLXogIiR7Q0FSRVNfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkNBUkVTX0xUX1NITElCX1VTRV9NSU1QVVJFX1RFWFRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1VTRV9DUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfQ1BQRkxBR19DQVJFU19TVEFUSUNMSUJfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfQ1BQRkxBR19DQVJFU19TVEFUSUNMSUJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0NVUkxERUJVR19UUlVFfSIgJiYgdGVzdCAteiAiJHtDVVJMREVCVUdfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJDVVJMREVCVUdcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0RPSU5HX05BVElWRV9XSU5ET1dTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0RPSU5HX05BVElWRV9XSU5ET1dTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRE9JTkdfTkFUSVZFX1dJTkRPV1NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgLXogIiR7RE9JTkdfQ0FSRVNfU1lNQk9MX0hJRElOR19UUlVFfSIgJiYgdGVzdCAteiAiJHtET0lOR19DQVJFU19TWU1CT0xfSElESU5HX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRE9JTkdfQ0FSRVNfU1lNQk9MX0hJRElOR1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworOiAiJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30iCithY193cml0ZV9mYWlsPTAKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2FzX3dyaXRlX2ZhaWw9MAorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKKworU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcFInCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wUicKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCithc190ZXN0X3g9J3Rlc3QgLXgnCithc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCitleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorYWNfbG9nPSIKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgYy1hcmVzICRhc19tZSAxLjEyLjAsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxjLWFyZXMgbWFpbGluZyBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzPi4iCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgorYWNfY3NfdmVyc2lvbj0iXFwKK2MtYXJlcyBjb25maWcuc3RhdHVzIDEuMTIuMAorY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAorICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKKworQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCithY19wd2Q9JyRhY19wd2QnCitzcmNkaXI9JyRzcmNkaXInCitJTlNUQUxMPSckSU5TVEFMTCcKK01LRElSX1A9JyRNS0RJUl9QJworQVdLPSckQVdLJwordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCithY19uZWVkX2RlZmF1bHRzPToKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgY2FzZSAkMSBpbgorICAtLSo9PyopCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgIC0tKj0pCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9CisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgICopCisgICAgYWNfb3B0aW9uPSQxCisgICAgYWNfb3B0YXJnPSQyCisgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWNvbmZpZyB8IC0tY29uZmkgfCAtLWNvbmYgfCAtLWNvbiB8IC0tY28gfCAtLWMgKQorICAgICRhc19lY2hvICIkYWNfY3NfY29uZmlnIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICcnKSBhc19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgYWNfY3Nfc2lsZW50PTogOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OworCisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisKKyAgZXNhYworICBzaGlmdAorZG9uZQorCithY19jb25maWd1cmVfZXh0cmFfYXJncz0KKworaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorICBleGVjIDY+L2Rldi9udWxsCisgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIHNldCBYICRTSEVMTCAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgIHNoaWZ0CisgIFwkYXNfZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9JFNIRUxMIFwkKiIgPiY2CisgIENPTkZJR19TSEVMTD0nJFNIRUxMJworICBleHBvcnQgQ09ORklHX1NIRUxMCisgIGV4ZWMgIlwkQCIKK2ZpCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorZXhlYyA1Pj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworX0FTQk9YCisgICRhc19lY2hvICIkYWNfbG9nIgorfSA+JjUKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMKKyMgSU5JVC1DT01NQU5EUworIworQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIgorCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCittYWNyb192ZXJzaW9uPSdgJEVDSE8gIiRtYWNyb192ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21hY3JvX3JldmlzaW9uPSdgJEVDSE8gIiRtYWNyb19yZXZpc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUz0nYCRFQ0hPICIkQVMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWQ9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwaWNfbW9kZT0nYCRFQ0hPICIkcGljX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Zhc3RfaW5zdGFsbD0nYCRFQ0hPICIkZW5hYmxlX2Zhc3RfaW5zdGFsbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz0nYCRFQ0hPICIkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0hFTEw9J2AkRUNITyAiJFNIRUxMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VDSE89J2AkRUNITyAiJEVDSE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUEFUSF9TRVBBUkFUT1I9J2AkRUNITyAiJFBBVEhfU0VQQVJBVE9SIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3RfYWxpYXM9J2AkRUNITyAiJGhvc3RfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdD0nYCRFQ0hPICIkaG9zdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X29zPSdgJEVDSE8gIiRob3N0X29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX2FsaWFzPSdgJEVDSE8gIiRidWlsZF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZD0nYCRFQ0hPICIkYnVpbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfb3M9J2AkRUNITyAiJGJ1aWxkX29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NFRD0nYCRFQ0hPICIkU0VEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1hzZWQ9J2AkRUNITyAiJFhzZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR1JFUD0nYCRFQ0hPICIkR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFR1JFUD0nYCRFQ0hPICIkRUdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRkdSRVA9J2AkRUNITyAiJEZHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEPSdgJEVDSE8gIiRMRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTT0nYCRFQ0hPICIkTk0iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTE5fUz0nYCRFQ0hPICIkTE5fUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYXhfY21kX2xlbj0nYCRFQ0hPICIkbWF4X2NtZF9sZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWNfb2JqZXh0PSdgJEVDSE8gIiRhY19vYmpleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249J2AkRUNITyAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDQz0nYCRFQ0hPICIkQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0ZMQUdTPSdgJEVDSE8gIiRDRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXI9J2AkRUNITyAiJGNvbXBpbGVyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQz0nYCRFQ0hPICIkR0NDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X25tX2ludGVyZmFjZT0nYCRFQ0hPICIkbHRfY3Zfbm1faW50ZXJmYWNlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RydW5jYXRlX2Jpbj0nYCRFQ0hPICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTD0nYCRFQ0hPICIkT1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w2ND0nYCRFQ0hPICIkT1RPT0w2NCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJleHQ9J2AkRUNITyAiJGxpYmV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaHJleHRfY21kcz0nYCRFQ0hPICIkc2hyZXh0X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXh0cmFjdF9leHBzeW1zX2NtZHM9J2AkRUNITyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZD0nYCRFQ0hPICIkd2l0aF9nbnVfbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0PSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbWludXNfTD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX3ZlcnNpb249J2AkRUNITyAiJG5lZWRfdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2ZXJzaW9uX3R5cGU9J2AkRUNITyAiJHZlcnNpb25fdHlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitydW5wYXRoX3Zhcj0nYCRFQ0hPICIkcnVucGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9J2AkRUNITyAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJuYW1lX3NwZWM9J2AkRUNITyAiJGxpYm5hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJyYXJ5X25hbWVzX3NwZWM9J2AkRUNITyAiJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzb25hbWVfc3BlYz0nYCRFQ0hPICIkc29uYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5zdGFsbF9vdmVycmlkZV9tb2RlPSdgJEVDSE8gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfY21kcz0nYCRFQ0hPICIkZmluaXNoX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2V2YWw9J2AkRUNITyAiJGZpbmlzaF9ldmFsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2ludG9fbGlicz0nYCRFQ0hPICIkaGFyZGNvZGVfaW50b19saWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGg9J2AkRUNITyAiJGNvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0nYCRFQ0hPICIkY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb249J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3N0cmlwbGliPSdgJEVDSE8gIiRvbGRfc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3RyaXBsaWI9J2AkRUNITyAiJHN0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwX29iamVjdHM9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzPSdgJEVDSE8gIiRwcmVkZXBzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzPSdgJEVDSE8gIiRwb3N0ZGVwcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRF9DWFg9J2AkRUNITyAiJExEX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZ19DWFg9J2AkRUNITyAiJHJlbG9hZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kc19DWFg9J2AkRUNITyAiJHJlbG9hZF9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDX0NYWD0nYCRFQ0hPICIkR0NDX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZF9DWFg9J2AkRUNITyAiJHdpdGhfZ251X2xkX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitub191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcG9zdGxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWNfQ1hYPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICIkcHJlZGVwX29iamVjdHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwc19DWFg9J2AkRUNITyAiJHByZWRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzX0NYWD0nYCRFQ0hPICIkcG9zdGRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gQVMgXAorRExMVE9PTCBcCitPQkpEVU1QIFwKK1NIRUxMIFwKK0VDSE8gXAorUEFUSF9TRVBBUkFUT1IgXAorU0VEIFwKK0dSRVAgXAorRUdSRVAgXAorRkdSRVAgXAorTEQgXAorTk0gXAorTE5fUyBcCitsdF9TUDJOTCBcCitsdF9OTDJTUCBcCityZWxvYWRfZmxhZyBcCitkZXBsaWJzX2NoZWNrX21ldGhvZCBcCitmaWxlX21hZ2ljX2NtZCBcCitmaWxlX21hZ2ljX2dsb2IgXAord2FudF9ub2Nhc2VnbG9iIFwKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0IFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorbHRfY3Zfbm1faW50ZXJmYWNlIFwKK25tX2ZpbGVfbGlzdF9zcGVjIFwKK2x0X2N2X3RydW5jYXRlX2JpbiBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCitsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCitsdF9wcm9nX2NvbXBpbGVyX3dsIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKK25lZWRfbG9ja3MgXAorTUFOSUZFU1RfVE9PTCBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKK2V4Y2x1ZGVfZXhwc3ltcyBcCitpbmNsdWRlX2V4cHN5bXMgXAorZmlsZV9saXN0X3NwZWMgXAordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgXAorbGlibmFtZV9zcGVjIFwKK2xpYnJhcnlfbmFtZXNfc3BlYyBcCitzb25hbWVfc3BlYyBcCitpbnN0YWxsX292ZXJyaWRlX21vZGUgXAorZmluaXNoX2V2YWwgXAorb2xkX3N0cmlwbGliIFwKK3N0cmlwbGliIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyBcCitwcmVkZXBfb2JqZWN0cyBcCitwb3N0ZGVwX29iamVjdHMgXAorcHJlZGVwcyBcCitwb3N0ZGVwcyBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGggXAorTERfQ1hYIFwKK3JlbG9hZF9mbGFnX0NYWCBcCitjb21waWxlcl9DWFggXAorbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFggXAord2l0aF9nbnVfbGRfQ1hYIFwKK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCBcCitub191bmRlZmluZWRfZmxhZ19DWFggXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAorZXhjbHVkZV9leHBzeW1zX0NYWCBcCitpbmNsdWRlX2V4cHN5bXNfQ1hYIFwKK2ZpbGVfbGlzdF9zcGVjX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIFwKK3ByZWRlcF9vYmplY3RzX0NYWCBcCitwb3N0ZGVwX29iamVjdHNfQ1hYIFwKK3ByZWRlcHNfQ1hYIFwKK3Bvc3RkZXBzX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcworICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiByZWxvYWRfY21kcyBcCitvbGRfcG9zdGluc3RhbGxfY21kcyBcCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKK29sZF9hcmNoaXZlX2NtZHMgXAorZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCithcmNoaXZlX2NtZHMgXAorYXJjaGl2ZV9leHBzeW1fY21kcyBcCittb2R1bGVfY21kcyBcCittb2R1bGVfZXhwc3ltX2NtZHMgXAorZXhwb3J0X3N5bWJvbHNfY21kcyBcCitwcmVsaW5rX2NtZHMgXAorcG9zdGxpbmtfY21kcyBcCitwb3N0aW5zdGFsbF9jbWRzIFwKK3Bvc3R1bmluc3RhbGxfY21kcyBcCitmaW5pc2hfY21kcyBcCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAorY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aCBcCitjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIFwKK3JlbG9hZF9jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFggXAorYXJjaGl2ZV9jbWRzX0NYWCBcCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCittb2R1bGVfY21kc19DWFggXAorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCitleHBvcnRfc3ltYm9sc19jbWRzX0NYWCBcCitwcmVsaW5rX2NtZHNfQ1hYIFwKK3Bvc3RsaW5rX2NtZHNfQ1hYOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcworICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJworCisKKworCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKworIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiYXJlc19jb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgYXJlc19jb25maWcuaCIgOzsKKyAgICAiYXJlc19idWlsZC5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBhcmVzX2J1aWxkLmgiIDs7CisgICAgImRlcGZpbGVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlcGZpbGVzIiA7OworICAgICJsaWJ0b29sIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGxpYnRvb2wiIDs7CisgICAgIk1ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworICAgICJsaWJjYXJlcy5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJjYXJlcy5wYyIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0gYWNfdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKK30KKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xccicKK2Vsc2UKKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorZmkKKworZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKK19BQ0VPRgorCisKK3sKKyAgZWNobyAiY2F0ID5jb25mJCRzdWJzLmF3ayA8PF9BQ0VPRiIgJiYKKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRzdWJzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnXidgCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCisgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYKK19BQ0VPRgorc2VkIC1uICcKK2gKK3MvXi9TWyIvOyBzLyEuKi8iXT0vCitwCitnCitzL15bXiFdKiEvLworOnJlcGwKK3QgcmVwbAorcy8nIiRhY19kZWxpbSInJC8vCit0IGRlbGltCis6bmwKK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBubAorOmRlbGltCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQorfQorCitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJGFjX3RtcC9zdWJzMS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorX0FDRU9GCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgc29sZSAkKHNyY2RpciksCisjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZW50cmllcyBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPVsJIF0qL3sKK2gKK3MvLy8KK3MvXi86Lworcy9bCSBdKiQvOi8KK3MvOlwkKHNyY2Rpcik6LzovZworcy86XCR7c3JjZGlyfTovOi9nCitzLzpAc3JjZGlyQDovOi9nCitzL146Ki8vCitzLzoqJC8vCit4CitzL1woPVsJIF0qXCkuKi9cMS8KK0cKK3MvXG4vLworcy9eW149XSo9WwkgXSokLy8KK30nCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfSEVBREVSUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCitpZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCitjYXQgPiIkYWNfdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKK0JFR0lOIHsKK19BQ0VPRgorCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworIyBoZXJlLWRvY3VtZW50IGluIGNvbmZpZy5zdGF0dXMsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorCisjIENyZWF0ZSBhIGRlbGltaXRlciBzdHJpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBjb25mZGVmcy5oLCB0byBlYXNlCisjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIDo7IGRvCisgIGFjX3R0PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3R0IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorIyBsaWtld2lzZSBQIGNvbnRhaW5zIG1hY3JvIHBhcmFtZXRlcnMgaWYgYW55LiAgUHJlc2VydmUgYmFja3NsYXNoCisjIG5ld2xpbmUgc2VxdWVuY2VzLgorCithY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorc2VkIC1uICcKK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgY2xlYXIKKzpjbGVhcgorcy9cXCQvLwordCBic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi9wCitkCis6YnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcXFxcXG4iXFwvcAorYiBjb250CisnIDxjb25mZGVmcy5oIHwgc2VkICcKK3MvJyIkYWNfZGVsaW0iJy8iXFxcCisiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorfQorL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisgIGxpbmUgPSBcJCAwCisgIHNwbGl0KGxpbmUsIGFyZywgIiAiKQorICBpZiAoYXJnWzFdID09ICIjIikgeworICAgIGRlZnVuZGVmID0gYXJnWzJdCisgICAgbWFjMSA9IGFyZ1szXQorICB9IGVsc2UgeworICAgIGRlZnVuZGVmID0gc3Vic3RyKGFyZ1sxXSwgMikKKyAgICBtYWMxID0gYXJnWzJdCisgIH0KKyAgc3BsaXQobWFjMSwgbWFjMiwgIigiKSAjKQorICBtYWNybyA9IG1hYzJbMV0KKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisgIGlmIChEX2lzX3NldFttYWNyb10pIHsKKyAgICAjIFByZXNlcnZlIHRoZSB3aGl0ZSBzcGFjZSBzdXJyb3VuZGluZyB0aGUgIiMiLgorICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKyAgICBuZXh0CisgIH0gZWxzZSB7CisgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorICAgICMgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAgICAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworICAgICAgcHJpbnQgIi8qIiwgcHJlZml4IGRlZnVuZGVmLCBtYWNybywgIiovIgorICAgICAgbmV4dAorICAgIH0KKyAgfQorfQoreyBwcmludCB9CitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorCisKK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKKyAgOltGSF0tKSBhY190YWc9LTotOzsKKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgZXNhYworICBhY19zYXZlX0lGUz0kSUZTCisgIElGUz06CisgIHNldCB4ICRhY190YWcKKyAgSUZTPSRhY19zYXZlX0lGUworICBzaGlmdAorICBhY19maWxlPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6TCkgYWNfc291cmNlPSQxOzsKKyAgOltGSF0pCisgICAgYWNfZmlsZV9pbnB1dHM9CisgICAgZm9yIGFjX2YKKyAgICBkbworICAgICAgY2FzZSAkYWNfZiBpbgorICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OworICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCisJIHRlc3QgLWYgIiRhY19mIiB8fAorCSAgIGNhc2UgJGFjX2YgaW4KKwkgICBbXFwvJF0qKSBmYWxzZTs7CisJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworCSAgIGVzYWMgfHwKKwkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKKyAgYWNfTUtESVJfUD0kTUtESVJfUAorICBjYXNlICRNS0RJUl9QIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICA+JGFjX3RtcC9vdXQgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiRhY190bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwKKyAgICAgICIkYWNfdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQorCisgIHJtIC1mICIkYWNfdG1wL3N0ZGluIgorICBjYXNlICRhY19maWxlIGluCisgIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkYWNfdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJGFjX3RtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgZmkKKyAgZWxzZQorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CisgIGZpCisjIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9IiRhY19maWxlIgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5hbWUgLS0gIiRfYW1fYXJnIiB8fAorJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRfYW1fYXJnIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgeworICAjIE9sZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCAnTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAorJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkbWYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nICdtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KKyA7OworICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0ke29maWxlfVQKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQKKyMgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlICBzYW1lCisjIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPSdDWFggJworCisjIENvbmZpZ3VyZWQgZGVmYXVsdHMgZm9yIHN5c19saWJfZGxzZWFyY2hfcGF0aCBtdW5naW5nLgorOiBcJHtMVF9TWVNfTElCUkFSWV9QQVRIPSIkY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aCJ9CisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCisKKyMgV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkPworbWFjcm9fdmVyc2lvbj0kbWFjcm9fdmVyc2lvbgorbWFjcm9fcmV2aXNpb249JG1hY3JvX3JldmlzaW9uCisKKyMgQXNzZW1ibGVyIHByb2dyYW0uCitBUz0kbHRfQVMKKworIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KK0RMTFRPT0w9JGx0X0RMTFRPT0wKKworIyBPYmplY3QgZHVtcGVyIHByb2dyYW0uCitPQkpEVU1QPSRsdF9PQkpEVU1QCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCitidWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworCisjIFdoYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkLgorcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgU2hhcmVkIGFyY2hpdmUgbWVtYmVyIGJhc2VuYW1lLGZvciBmaWxlbmFtZSBiYXNlZCBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIG9uIEFJWC4KK3NoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYworCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlcy4KK0VDSE89JGx0X0VDSE8KKworIyBUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0ZW0uCitQQVRIX1NFUEFSQVRPUj0kbHRfUEFUSF9TRVBBUkFUT1IKKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgorU0VEPSRsdF9TRUQKKworIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KK1hzZWQ9IlwkU0VEIC1lIDFzL15YLy8iCisKKyMgQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMuCitHUkVQPSRsdF9HUkVQCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXIuCitGR1JFUD0kbHRfRkdSRVAKKworIyBBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlci4KK05NPSRsdF9OTQorCisjIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JG1heF9jbWRfbGVuCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSRhY19vYmpleHQKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9JGV4ZWV4dAorCisjIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCIuCitsdF91bnNldD0kbHRfdW5zZXQKKworIyB0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzLgorU1AyTkw9JGx0X2x0X1NQMk5MCisKKyMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KK05MMlNQPSRsdF9sdF9OTDJTUAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisKKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCitmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorCisjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisKKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorCisjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KK1NUUklQPSRsdF9TVFJJUAorCisjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb24uCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249JGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbgorCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0NDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9DRkxBR1MKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW50byBhIGxpc3Qgb2Ygc3ltYm9scyB0byBtYW51YWxseSByZWxvY2F0ZS4KK2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisKKyMgVGhlIG5hbWUgbGlzdGVyIGludGVyZmFjZS4KK25tX2ludGVyZmFjZT0kbHRfbHRfY3Zfbm1faW50ZXJmYWNlCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisKKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCB3aGVyZSBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCitsdF9zeXNyb290PSRsdF9zeXNyb290CisKKyMgQ29tbWFuZCB0byB0cnVuY2F0ZSBhIGJpbmFyeSBwaXBlLgorbHRfdHJ1bmNhdGVfYmluPSRsdF9sdF9jdl90cnVuY2F0ZV9iaW4KKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIE1hbmlmZXN0IHRvb2wuCitNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSRsdF9EU1lNVVRJTAorCisjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorTk1FRElUPSRsdF9OTUVESVQKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0kbHRfTElQTworCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9JGx0X09UT09MCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCitPVE9PTDY0PSRsdF9PVE9PTDY0CisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSRsaWJleHQKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCisKKyMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisjIG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgRGV0ZWN0ZWQgcnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aAorCisjIEV4cGxpY2l0IExUX1NZU19MSUJSQVJZX1BBVEggc2V0IGR1cmluZyAuL2NvbmZpZ3VyZSB0aW1lLgorY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0kbHRfY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aAorCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXIKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0MKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0CisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kcworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHMKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHNobGlicGF0aF92YXIgaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpYworCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHMKK3Bvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCitwcmVkZXBzPSRsdF9wcmVkZXBzCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHMKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGgKKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICAgIGNhdCA8PCdfTFRfRU9GJyA+PiAiJGNmZ2ZpbGUiCisKKyMgIyMjIEJFR0lOIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKKworIyBmdW5jX211bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQQVRICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZBUklBQkxFIGlzIG5hbWUgb2YgdmFyaWFibGUgY29udGFpbmluZyBfc3BhY2VfIHNlcGFyYXRlZCBsaXN0IG9mCisjIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBieSB0aGUgY29udGVudHMgb2YgUEFUSCwgd2hpY2ggaXMgc3RyaW5nCisjIGhhdmluZyBhIGZvcm1hdDoKKyMgIkRJUls6RElSXToiCisjICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRQorIyAiOkRJUls6RElSXSIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUlBbOkRJUlBdOjpbRElSQTpdRElSQSIKKyMgICAgICAgc3RyaW5nICJESVJQWyBESVJQXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUgYW5kIHN0cmluZworIyAgICAgICAiRElSQVsgRElSQV0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUls6RElSXSIKKyMgICAgICAgVkFSSUFCTEUgd2lsbCBiZSByZXBsYWNlZCBieSAiRElSWyBESVJdIgorZnVuY19tdW5nZV9wYXRoX2xpc3QgKCkKK3sKKyAgICBjYXNlIHgkMiBpbgorICAgIHgpCisgICAgICAgIDs7CisgICAgKjopCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2AgXCQkMVwiCisgICAgICAgIDs7CisgICAgeDoqKQorICAgICAgICBldmFsICQxPVwiXCQkMSBgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2BcIgorICAgICAgICA7OworICAgICo6OiopCisgICAgICAgIGV2YWwgJDE9XCJcJCQxXCBgJEVDSE8gJDIgfCAkU0VEIC1lICdzLy4qOjovLycgLWUgJ3MvOi8gL2cnYFwiCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3MvOi8gL2cnYFwgXCQkMVwiCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorZnVuY19jY19iYXNlbmFtZSAoKQoreworICAgIGZvciBjY190ZW1wIGluICQqIiI7IGRvCisgICAgICBjYXNlICRjY190ZW1wIGluCisgICAgICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICAgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICAgICAgXC0qKSA7OworICAgICAgICAqKSBicmVhazs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorfQorCisKKyMgIyMjIEVORCBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9DWFgKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnX0NYWAorcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfQ1hYCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWAorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfQ1hYCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19DWFgKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGRfQ1hYCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHNobGlicGF0aF92YXIgaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19DWFgKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19DWFgKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kc19DWFgKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kc19DWFgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWNfQ1hYCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9DWFgKKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfQ1hYCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19DWFgKK3ByZWRlcHM9JGx0X3ByZWRlcHNfQ1hYCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAorCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKK19MVF9FT0YKKworIDs7CisKKyAgZXNhYworZG9uZSAjIGZvciBhY190YWcKKworCithc19mbl9leGl0IDAKK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKwordGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgorIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisjIFVuZm9ydHVuYXRlbHksIG9uIERPUyB0aGlzIGZhaWxzLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQgb3BlbgorIyBieSBjb25maWd1cmUsIHNvIGNvbmZpZy5zdGF0dXMgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBpdDsgaXRzCisjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorIyBlZmZlY3RpdmVseSBjbG9zaW5nIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZAorIyBhcHBlbmRlZCB0byBieSBjb25maWcuc3RhdHVzLiAgV2hlbiBjb21pbmcgYmFjayB0byBjb25maWd1cmUsIHdlCisjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGFjX2NzX3N1Y2Nlc3M9OgorICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisgIHRlc3QgIiRzaWxlbnQiID0geWVzICYmCisgICAgYWNfY29uZmlnX3N0YXR1c19hcmdzPSIkYWNfY29uZmlnX3N0YXR1c19hcmdzIC0tcXVpZXQiCisgIGV4ZWMgNT4vZGV2L251bGwKKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTICRhY19jb25maWdfc3RhdHVzX2FyZ3MgfHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQorICBleGVjIDU+PmNvbmZpZy5sb2cKKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKyAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQorZmkKKworIworIyBDT05GSUdfU1VCRElSUyBzZWN0aW9uLgorIworaWYgdGVzdCAiJG5vX3JlY3Vyc2lvbiIgIT0geWVzOyB0aGVuCisKKyAgIyBSZW1vdmUgLS1jYWNoZS1maWxlLCAtLXNyY2RpciwgYW5kIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgYXJndW1lbnRzCisgICMgc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyAgYWNfc3ViX2NvbmZpZ3VyZV9hcmdzPQorICBhY19wcmV2PQorICBldmFsICJzZXQgeCAkYWNfY29uZmlndXJlX2FyZ3MiCisgIHNoaWZ0CisgIGZvciBhY19hcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICAgIGFjX3ByZXY9CisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAorICAgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgICAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCisgICAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogXAorICAgIHwgLS1jPSopCisgICAgICA7OworICAgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgICA7OworICAgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgICBhY19wcmV2PXNyY2RpciA7OworICAgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgICA7OworICAgIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCisgICAgICBhY19wcmV2PXByZWZpeCA7OworICAgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICAgIDs7CisgICAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZykKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGNhc2UgJGFjX2FyZyBpbgorICAgICAgKlwnKikgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19zdWJfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBBbHdheXMgcHJlcGVuZCAtLXByZWZpeCB0byBlbnN1cmUgdXNpbmcgdGhlIHNhbWUgcHJlZml4CisgICMgaW4gc3ViZGlyIGNvbmZpZ3VyYXRpb25zLgorICBhY19hcmc9Ii0tcHJlZml4PSRwcmVmaXgiCisgIGNhc2UgJGFjX2FyZyBpbgorICAqXCcqKSBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICBlc2FjCisgIGFjX3N1Yl9jb25maWd1cmVfYXJncz0iJyRhY19hcmcnICRhY19zdWJfY29uZmlndXJlX2FyZ3MiCisKKyAgIyBQYXNzIC0tc2lsZW50CisgIGlmIHRlc3QgIiRzaWxlbnQiID0geWVzOyB0aGVuCisgICAgYWNfc3ViX2NvbmZpZ3VyZV9hcmdzPSItLXNpbGVudCAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIgorICBmaQorCisgICMgQWx3YXlzIHByZXBlbmQgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyB0byBzaWxlbmNlIHdhcm5pbmdzLCBzaW5jZQorICAjIGRpZmZlcmVudCBzdWJkaXJzIGNhbiBoYXZlIGRpZmZlcmVudCAtLWVuYWJsZSBhbmQgLS13aXRoIG9wdGlvbnMuCisgIGFjX3N1Yl9jb25maWd1cmVfYXJncz0iLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIgorCisgIGFjX3BvcGRpcj1gcHdkYAorICBmb3IgYWNfZGlyIGluIDogJHN1YmRpcnM7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisKKyAgICAjIERvIG5vdCBjb21wbGFpbiwgc28gYSBjb25maWd1cmUgc2NyaXB0IGNhbiBjb25maWd1cmUgd2hpY2hldmVyCisgICAgIyBwYXJ0cyBvZiBhIGxhcmdlIHNvdXJjZSB0cmVlIGFyZSBwcmVzZW50LgorICAgIHRlc3QgLWQgIiRzcmNkaXIvJGFjX2RpciIgfHwgY29udGludWUKKworICAgIGFjX21zZz0iPT09IGNvbmZpZ3VyaW5nIGluICRhY19kaXIgKGBwd2RgLyRhY19kaXIpIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19tc2ciID4mNQorICAgICRhc19lY2hvICIkYWNfbXNnIiA+JjYKKyAgICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworCisgICAgY2QgIiRhY19kaXIiCisKKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKyAgICAgIGFjX3N1Yl9jb25maWd1cmU9JGFjX3NyY2Rpci9jb25maWd1cmUuZ251CisgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKyAgICAgIGFjX3N1Yl9jb25maWd1cmU9JGFjX3NyY2Rpci9jb25maWd1cmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmluIjsgdGhlbgorICAgICAgIyBUaGlzIHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLgorICAgICAgYWNfc3ViX2NvbmZpZ3VyZT0kYWNfYXV4X2Rpci9jb25maWd1cmUKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMjt9CisgICAgICBhY19zdWJfY29uZmlndXJlPQorICAgIGZpCisKKyAgICAjIFRoZSByZWN1cnNpb24gaXMgaGVyZS4KKyAgICBpZiB0ZXN0IC1uICIkYWNfc3ViX2NvbmZpZ3VyZSI7IHRoZW4KKyAgICAgICMgTWFrZSB0aGUgY2FjaGUgZmlsZSBuYW1lIGNvcnJlY3QgcmVsYXRpdmUgdG8gdGhlIHN1YmRpcmVjdG9yeS4KKyAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfc3ViX2NhY2hlX2ZpbGU9JGNhY2hlX2ZpbGUgOzsKKyAgICAgICopICMgUmVsYXRpdmUgbmFtZS4KKwlhY19zdWJfY2FjaGVfZmlsZT0kYWNfdG9wX2J1aWxkX3ByZWZpeCRjYWNoZV9maWxlIDs7CisgICAgICBlc2FjCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcnVubmluZyAkU0hFTEwgJGFjX3N1Yl9jb25maWd1cmUgJGFjX3N1Yl9jb25maWd1cmVfYXJncyAtLWNhY2hlLWZpbGU9JGFjX3N1Yl9jYWNoZV9maWxlIC0tc3JjZGlyPSRhY19zcmNkaXIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogcnVubmluZyAkU0hFTEwgJGFjX3N1Yl9jb25maWd1cmUgJGFjX3N1Yl9jb25maWd1cmVfYXJncyAtLWNhY2hlLWZpbGU9JGFjX3N1Yl9jYWNoZV9maWxlIC0tc3JjZGlyPSRhY19zcmNkaXIiID4mNjt9CisgICAgICAjIFRoZSBldmFsIG1ha2VzIHF1b3RpbmcgYXJndW1lbnRzIHdvcmsuCisgICAgICBldmFsICJcJFNIRUxMIFwiXCRhY19zdWJfY29uZmlndXJlXCIgJGFjX3N1Yl9jb25maWd1cmVfYXJncyBcCisJICAgLS1jYWNoZS1maWxlPVwiXCRhY19zdWJfY2FjaGVfZmlsZVwiIC0tc3JjZGlyPVwiXCRhY19zcmNkaXJcIiIgfHwKKwlhc19mbl9lcnJvciAkPyAiJGFjX3N1Yl9jb25maWd1cmUgZmFpbGVkIGZvciAkYWNfZGlyIiAiJExJTkVOTyIgNQorICAgIGZpCisKKyAgICBjZCAiJGFjX3BvcGRpciIKKyAgZG9uZQorZmkKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjI7fQorZmkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAgU3RhcnQgb2YgZGlzdGNsZWFuIGFtZW5kaW5nIGNvZGUgICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK2ZvciB4Y19zdWJkaXIgaW4gJy4nCitkbworCitpZiB0ZXN0ICEgLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUiOyB0aGVuCisgIGVjaG8gIiR4Y19tc2dfZXJyICR4Y19zdWJkaXIvTWFrZWZpbGUgZmlsZSBub3QgZm91bmQuICR4Y19tc2dfYWJydCIgPiYyCisgIGV4aXQgMQorZmkKKworIyBGZXRjaCBkZXBlbmRlbmN5IHRyYWNraW5nIGZpbGUgbGlzdCBmcm9tIE1ha2VmaWxlIGluY2x1ZGUgbGluZXMuCisKK3hjX2luY19saW5lcz1gZ3JlcCAnXmluY2x1ZGUgLiooREVQRElSKScgIiR4Y19zdWJkaXIvTWFrZWZpbGUiIDI+L2Rldi9udWxsYAoreGNfY250X3dvcmRzPWBlY2hvICIkeGNfaW5jX2xpbmVzIiB8IHdjIC13IHwgdHIgLWQgIiR4Y19zcGFjZSR4Y190YWIiYAorCisjIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIG1pZ2h0IGhhdmUgYmVlbiB1c2VkLCBjb25zZXF1ZW50bHkKKyMgdGhlcmUgaXMgbm90aGluZyB0byBhbWVuZCB3aXRob3V0IGEgZGVwZW5kZW5jeSB0cmFja2luZyBmaWxlIGxpc3QuCisKK2lmIHRlc3QgJHhjX2NudF93b3JkcyAtZ3QgMDsgdGhlbgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGFtZW5kaW5nICR4Y19zdWJkaXIvTWFrZWZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogYW1lbmRpbmcgJHhjX3N1YmRpci9NYWtlZmlsZSIgPiY2O30KKworIyBCdWlsZCBNYWtlZmlsZSBzcGVjaWZpYyBwYXRjaCBodW5rLgorCit4Y19wPSIkeGNfc3ViZGlyL3hjX3BhdGNoLnRtcCIKKworeGNfcm1fZGVwZmlsZXM9YGVjaG8gIiR4Y19pbmNfbGluZXMiIFwKKyAgfCAkU0VEICdzJWluY2x1ZGUlCS1ybSAtZiUnIDI+L2Rldi9udWxsYAorCit4Y19kZXBfc3ViZGlycz1gZWNobyAiJHhjX2luY19saW5lcyIgXAorICB8ICRTRUQgJ3MlaW5jbHVkZVsgXVsgXSolJScgMj4vZGV2L251bGwgXAorICB8ICRTRUQgJ3MlKERFUERJUikvLiolKERFUERJUiklJyAyPi9kZXYvbnVsbCBcCisgIHwgc29ydCB8IHVuaXFgCisKK2VjaG8gIiR4Y19ybV9kZXBmaWxlcyIgPiR4Y19wCisKK2ZvciB4Y19kZXBfZGlyIGluICR4Y19kZXBfc3ViZGlyczsgZG8KKyAgZWNobyAiJHt4Y190YWJ9QHhtX2RlcF9jbnQ9XGBscyAkeGNfZGVwX2RpciB8IHdjIC1sIDI+L2Rldi9udWxsXGA7IFxcIiAgICAgICAgICAgID4+JHhjX3AKKyAgZWNobyAiJHt4Y190YWJ9aWYgdGVzdCBcJFwkeG1fZGVwX2NudCAtZXEgMCAmJiB0ZXN0IC1kICR4Y19kZXBfZGlyOyB0aGVuIFxcIiAgICAgID4+JHhjX3AKKyAgZWNobyAiJHt4Y190YWJ9ICBybSAtcmYgJHhjX2RlcF9kaXI7IFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+JHhjX3AKKyAgZWNobyAiJHt4Y190YWJ9ZmkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+JHhjX3AKK2RvbmUKKworIyBCdWlsZCBNYWtlZmlsZSBwYXRjaGluZyBzZWQgc2NyaXB0cy4KKworeGNfczE9IiR4Y19zdWJkaXIveGNfc2NyaXB0XzEudG1wIgoreGNfczI9IiR4Y19zdWJkaXIveGNfc2NyaXB0XzIudG1wIgoreGNfczM9IiR4Y19zdWJkaXIveGNfc2NyaXB0XzMudG1wIgorCitjYXQgPiR4Y19zMSA8PFxfRU9UCisvXmRpc3RjbGVhblsgXSo6LywvXlteCV1bXgldKjoveworICBzL14uKihERVBESVIpL19fX3hjX2RlcGRpcl9saW5lX19fLworfQorL15tYWludGFpbmVyLWNsZWFuWyBdKjovLC9eW14JXVteCV0qOi97CisgIHMvXi4qKERFUERJUikvX19feGNfZGVwZGlyX2xpbmVfX18vCit9CitfRU9UCisKK2NhdCA+JHhjX3MyIDw8XF9FT1QKKy9fX194Y19kZXBkaXJfbGluZV9fXyQveworICBOCisgIC9fX194Y19kZXBkaXJfbGluZV9fXyQvRAorfQorX0VPVAorCitjYXQgPiR4Y19zMyA8PF9FT1QKKy9eX19feGNfZGVwZGlyX2xpbmVfX18veworICByICR4Y19wCisgIGQKK30KK19FT1QKKworIyBBcHBseSBwYXRjaCB0byBNYWtlZmlsZSBhbmQgY2xlYW51cC4KKworJFNFRCAtZiAiJHhjX3MxIiAiJHhjX3N1YmRpci9NYWtlZmlsZSIgICAgICA+IiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMSIKKyRTRUQgLWYgIiR4Y19zMiIgIiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMSIgPiIkeGNfc3ViZGlyL01ha2VmaWxlLnRtcDIiCiskU0VEIC1mICIkeGNfczMiICIkeGNfc3ViZGlyL01ha2VmaWxlLnRtcDIiID4iJHhjX3N1YmRpci9NYWtlZmlsZS50bXAzIgorCitpZiB0ZXN0IC1mICIkeGNfc3ViZGlyL01ha2VmaWxlLnRtcDMiOyB0aGVuCisgIG12IC1mICIkeGNfc3ViZGlyL01ha2VmaWxlLnRtcDMiICIkeGNfc3ViZGlyL01ha2VmaWxlIgorZmkKKwordGVzdCAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAxIiAmJiBybSAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAxIgordGVzdCAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAyIiAmJiBybSAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAyIgordGVzdCAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAzIiAmJiBybSAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAzIgorCit0ZXN0IC1mICIkeGNfcCIgICYmIHJtIC1mICIkeGNfcCIKK3Rlc3QgLWYgIiR4Y19zMSIgJiYgcm0gLWYgIiR4Y19zMSIKK3Rlc3QgLWYgIiR4Y19zMiIgJiYgcm0gLWYgIiR4Y19zMiIKK3Rlc3QgLWYgIiR4Y19zMyIgJiYgcm0gLWYgIiR4Y19zMyIKKworZmkKKworZG9uZQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgIEVuZCBvZiBkaXN0Y2xlYW4gYW1lbmRpbmcgY29kZSAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9jb25maWd1cmUuYWMgYi9hcC9hcHAvYy1hcmVzL3NyYy9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5Y2UzNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDg0NiBAQAorQUNfUFJFUkVRKDIuNTcpCisKK2RubCBWZXJzaW9uIG5vdCBoYXJkY29kZWQgaGVyZS4gRmV0Y2hlZCBsYXRlciBmcm9tIGFyZXNfdmVyc2lvbi5oCitBQ19JTklUKFtjLWFyZXNdLCBbMS4xMi4wXSwKKyAgW2MtYXJlcyBtYWlsaW5nIGxpc3Q6IGh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jLWFyZXNdKQorCitYQ19PVlJfWlo1MAorWENfT1ZSX1paNjAKK0NBUkVTX09WRVJSSURFX0FVVE9DT05GCisKK0FDX0NPTkZJR19TUkNESVIoW2FyZXNfaXB2Ni5oXSkKK0FDX0NPTkZJR19IRUFERVJTKFthcmVzX2NvbmZpZy5oIGFyZXNfYnVpbGQuaF0pCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCitBTV9NQUlOVEFJTkVSX01PREUKK200X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLCBbQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKV0pCisKK0NBUkVTX0NIRUNLX09QVElPTl9ERUJVRworQ0FSRVNfQ0hFQ0tfT1BUSU9OX09QVElNSVpFCitDQVJFU19DSEVDS19PUFRJT05fV0FSTklOR1MKK0NBUkVTX0NIRUNLX09QVElPTl9XRVJST1IKK0NBUkVTX0NIRUNLX09QVElPTl9DVVJMREVCVUcKK0NBUkVTX0NIRUNLX09QVElPTl9TWU1CT0xfSElESU5HCitDQVJFU19DSEVDS19PUFRJT05fRVhQT1NFX1NUQVRJQ1MKKworWENfQ0hFQ0tfUEFUSF9TRVBBUkFUT1IKKworZG5sIFNFRCBpcyBtYW5kYXRvcnkgZm9yIGNvbmZpZ3VyZSBwcm9jZXNzIGFuZCBsaWJ0b29sLgorZG5sIFNldCBpdCBub3csIGFsbG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgbGF0ZXIuCitBQ19QQVRIX1BST0coW1NFRF0sIFtzZWRdLCBbbm90X2ZvdW5kXSwKKyAgWyRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluXSkKK2lmIHRlc3QgLXogIiRTRUQiIHx8IHRlc3QgIiRTRUQiID0gIm5vdF9mb3VuZCI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtzZWQgbm90IGZvdW5kIGluIFBBVEguIENhbm5vdCBjb250aW51ZSB3aXRob3V0IHNlZC5dKQorZmkKK0FDX1NVQlNUKFtTRURdKQorCitkbmwgR1JFUCBpcyBtYW5kYXRvcnkgZm9yIGNvbmZpZ3VyZSBwcm9jZXNzIGFuZCBsaWJ0b29sLgorZG5sIFNldCBpdCBub3csIGFsbG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgbGF0ZXIuCitBQ19QQVRIX1BST0coW0dSRVBdLCBbZ3JlcF0sIFtub3RfZm91bmRdLAorICBbJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW5dKQoraWYgdGVzdCAteiAiJEdSRVAiIHx8IHRlc3QgIiRHUkVQIiA9ICJub3RfZm91bmQiOyB0aGVuCisgIEFDX01TR19FUlJPUihbZ3JlcCBub3QgZm91bmQgaW4gUEFUSC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgZ3JlcC5dKQorZmkKK0FDX1NVQlNUKFtHUkVQXSkKKworZG5sIEVHUkVQIGlzIG1hbmRhdG9yeSBmb3IgY29uZmlndXJlIHByb2Nlc3MgYW5kIGxpYnRvb2wuCitkbmwgU2V0IGl0IG5vdywgYWxsb3dpbmcgaXQgdG8gYmUgY2hhbmdlZCBsYXRlci4KK2lmIGVjaG8gYSB8ICgkR1JFUCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZWdyZXBdKQorICBFR1JFUD0iJEdSRVAgLUUiCisgIEFDX01TR19SRVNVTFQoWyRFR1JFUF0pCitlbHNlCisgIEFDX1BBVEhfUFJPRyhbRUdSRVBdLCBbZWdyZXBdLCBbbm90X2ZvdW5kXSwKKyAgICBbJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW5dKQorZmkKK2lmIHRlc3QgLXogIiRFR1JFUCIgfHwgdGVzdCAiJEVHUkVQIiA9ICJub3RfZm91bmQiOyB0aGVuCisgIEFDX01TR19FUlJPUihbZWdyZXAgbm90IGZvdW5kIGluIFBBVEguIENhbm5vdCBjb250aW51ZSB3aXRob3V0IGVncmVwLl0pCitmaQorQUNfU1VCU1QoW0VHUkVQXSkKKworZG5sIEFSIGlzIG1hbmRhdG9yeSBmb3IgY29uZmlndXJlIHByb2Nlc3MgYW5kIGxpYnRvb2wuCitkbmwgVGhpcyBpcyB0YXJnZXQgZGVwZW5kZW50LCBzbyBjaGVjayBpdCBhcyBhIHRvb2wuCitBQ19QQVRIX1RPT0woW0FSXSwgW2FyXSwgW25vdF9mb3VuZF0sCisgIFskUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbl0pCitpZiB0ZXN0IC16ICIkQVIiIHx8IHRlc3QgIiRBUiIgPSAibm90X2ZvdW5kIjsgdGhlbgorICBBQ19NU0dfRVJST1IoW2FyIG5vdCBmb3VuZCBpbiBQQVRILiBDYW5ub3QgY29udGludWUgd2l0aG91dCBhci5dKQorZmkKK0FDX1NVQlNUKFtBUl0pCisKK0FYX0NPREVfQ09WRVJBR0UKKworZG5sIFJlbW92ZSBub24tY29uZmlndXJlIGRpc3RyaWJ1dGVkIGFyZXNfYnVpbGQuaAoraWYgdGVzdCAtZiAke3NyY2Rpcn0vYXJlc19idWlsZC5oOyB0aGVuCisgIHJtIC1mICR7c3JjZGlyfS9hcmVzX2J1aWxkLmgKK2ZpCisKK2RubAorZG5sIERldGVjdCB0aGUgY2Fub25pY2FsIGhvc3QgYW5kIHRhcmdldCBidWlsZCBlbnZpcm9ubWVudAorZG5sCisKK0FDX0NBTk9OSUNBTF9IT1NUCitkbmwgR2V0IHN5c3RlbSBjYW5vbmljYWwgbmFtZQorQUNfREVGSU5FX1VOUVVPVEVEKE9TLCAiJHtob3N0fSIsIFtjcHUtbWFjaGluZS1PU10pCisKK1hDX0NIRUNLX1BST0dfQ0MKK0FYX0NYWF9DT01QSUxFX1NURENYWF8xMShbbm9leHRdLFtvcHRpb25hbF0pCisKK1hDX0FVVE9NQUtFCisKK2RubCBUaGlzIGRlZmluZXMgX0FMTF9TT1VSQ0UgZm9yIEFJWAorQ0FSRVNfQ0hFQ0tfQUlYX0FMTF9TT1VSQ0UKKworZG5sIE91ciBjb25maWd1cmUgYW5kIGJ1aWxkIHJlZW50cmFudCBzZXR0aW5ncworQ0FSRVNfQ09ORklHVVJFX1RIUkVBRF9TQUZFCitDQVJFU19DT05GSUdVUkVfUkVFTlRSQU5UCisKK2RubCBjaGVjayBmb3IgaG93IHRvIGRvIGxhcmdlIGZpbGVzCitBQ19TWVNfTEFSR0VGSUxFCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgc29sYXJpcyopCisgICAgQUNfREVGSU5FKEVUQ19JTkVULCAxLCBbaWYgYSAvZXRjL2luZXQgZGlyIGlzIGJlaW5nIHVzZWRdKQorICAgIDs7Citlc2FjCisKK1hDX0xJQlRPT0wKKworIworIyBBdXRvbWFrZSBjb25kaXRpb25hbHMgYmFzZWQgb24gbGlidG9vbCByZWxhdGVkIGNoZWNrcworIworCitBTV9DT05ESVRJT05BTChbQ0FSRVNfTFRfU0hMSUJfVVNFX1ZFUlNJT05fSU5GT10sCisgIFt0ZXN0ICJ4JHhjX2x0X3NobGliX3VzZV92ZXJzaW9uX2luZm8iID0gJ3h5ZXMnXSkKK0FNX0NPTkRJVElPTkFMKFtDQVJFU19MVF9TSExJQl9VU0VfTk9fVU5ERUZJTkVEXSwKKyAgW3Rlc3QgIngkeGNfbHRfc2hsaWJfdXNlX25vX3VuZGVmaW5lZCIgPSAneHllcyddKQorQU1fQ09ORElUSU9OQUwoW0NBUkVTX0xUX1NITElCX1VTRV9NSU1QVVJFX1RFWFRdLAorICBbdGVzdCAieCR4Y19sdF9zaGxpYl91c2VfbWltcHVyZV90ZXh0IiA9ICd4eWVzJ10pCisKKyMKKyMgRHVlIHRvIGxpYnRvb2wgYW5kIGF1dG9tYWtlIG1hY2hpbmVyeSBsaW1pdGF0aW9ucyBvZiBub3QgYWxsb3dpbmcKKyMgc3BlY2lmeWluZyBzZXBhcmF0ZSBDUFBGTEFHUyBvciBDRkxBR1Mgd2hlbiBjb21waWxpbmcgb2JqZWN0cyBmb3IKKyMgaW5jbHVzaW9uIG9mIHRoZXNlIGluIHNoYXJlZCBvciBzdGF0aWMgbGlicmFyaWVzLCB3ZSBhcmUgZm9yY2VkIHRvCisjIGJ1aWxkIHVzaW5nIHNlcGFyYXRlIGNvbmZpZ3VyZSBydW5zIGZvciBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMKKyMgb24gc3lzdGVtcyB3aGVyZSBkaWZmZXJlbnQgQ1BQRkxBR1Mgb3IgQ0ZMQUdTIGFyZSBtYW5kYXRvcnkgaW4gb3JkZXIKKyMgdG8gY29tcGlsZSBvYmplY3RzIGZvciBlYWNoIGtpbmQgb2YgbGlicmFyeS4gTm90aWNlIHRoYXQgcmVseWluZyBvbgorIyB0aGUgJy1EUElDJyBDRkxBRyB0aGF0IGxpYnRvb2wgcHJvdmlkZXMgaXMgbm90IHZhbGlkIGdpdmVuIHRoYXQgdGhlCisjIHVzZXIgbWlnaHQgZm9yIGV4YW1wbGUgY2hvb3NlIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgd2l0aCBQSUMuCisjCisKKyMKKyMgTWFrZSBvdXIgTWFrZWZpbGUuYW0gZmlsZXMgdXNlIHRoZSBzdGF0aWNsaWIgQ1BQRkxBRyBvbmx5IHdoZW4gc3RyaWN0bHkKKyMgdGFyZ2V0aW5nIGEgc3RhdGljIGxpYnJhcnkgYW5kIG5vdCBidWlsZGluZyBpdHMgc2hhcmVkIGNvdW50ZXJwYXJ0LgorIworCitBTV9DT05ESVRJT05BTChbVVNFX0NQUEZMQUdfQ0FSRVNfU1RBVElDTElCXSwKKyAgW3Rlc3QgIngkeGNfbHRfYnVpbGRfc3RhdGljX29ubHkiID0gJ3h5ZXMnXSkKKworIworIyBNYWtlIHN0YXRpY2xpYiBDUFBGTEFHIHZhcmlhYmxlIGFuZCBpdHMgZGVmaW5pdGlvbiB2aXNpYmxlIGluIG91dHB1dAorIyBmaWxlcyB1bmNvbmRpdGlvbmFsbHksIHByb3ZpZGluZyBhbiBlbXB0eSBkZWZpbml0aW9uIHVubGVzcyBzdHJpY3RseQorIyB0YXJnZXRpbmcgYSBzdGF0aWMgbGlicmFyeSBhbmQgbm90IGJ1aWxkaW5nIGl0cyBzaGFyZWQgY291bnRlcnBhcnQuCisjCisKK0NQUEZMQUdfQ0FSRVNfU1RBVElDTElCPQoraWYgdGVzdCAieCR4Y19sdF9idWlsZF9zdGF0aWNfb25seSIgPSAneHllcyc7IHRoZW4KKyAgQ1BQRkxBR19DQVJFU19TVEFUSUNMSUI9Jy1EQ0FSRVNfU1RBVElDTElCJworZmkKK0FDX1NVQlNUKFtDUFBGTEFHX0NBUkVTX1NUQVRJQ0xJQl0pCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgcGxhdGZvcm0vY29tcGlsZXIvYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNoZWNrcy9mbGFncworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ0FSRVNfQ0hFQ0tfQ09NUElMRVIKK0NBUkVTX1NFVF9DT01QSUxFUl9CQVNJQ19PUFRTCitDQVJFU19TRVRfQ09NUElMRVJfREVCVUdfT1BUUworQ0FSRVNfU0VUX0NPTVBJTEVSX09QVElNSVpFX09QVFMKK0NBUkVTX1NFVF9DT01QSUxFUl9XQVJOSU5HX09QVFMKKworaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJJTlRFTF9VTklYX0MiOyB0aGVuCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDAwIjsgdGhlbgorICAgIGRubCBpY2MgMTAuWCBvciBsYXRlcgorICAgIENGTEFHUz0iJENGTEFHUyAtc2hhcmVkLWludGVsIgorICBlbGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiOTAwIjsgdGhlbgorICAgIGRubCBpY2MgOS5YIHNwZWNpZmljCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1pLWR5bmFtaWMiCisgIGZpCisgICMKK2ZpCisKK0NBUkVTX0NIRUNLX0NPTVBJTEVSX0hBTFRfT05fRVJST1IKK0NBUkVTX0NIRUNLX0NPTVBJTEVSX0FSUkFZX1NJWkVfTkVHQVRJVkUKK0NBUkVTX0NIRUNLX0NPTVBJTEVSX1BST1RPVFlQRV9NSVNNQVRDSAorQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfU1lNQk9MX0hJRElORworCitDQVJFU19DSEVDS19DVVJMREVCVUcKK0FNX0NPTkRJVElPTkFMKENVUkxERUJVRywgdGVzdCB4JHdhbnRfY3VybGRlYnVnID0geHllcykKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDb21waWxhdGlvbiBiYXNlZCBjaGVja3Mgc2hvdWxkIG5vdCBiZSBkb25lIGJlZm9yZSB0aGlzIHBvaW50LgorZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBNYWtlIHN1cmUgdGhhdCBvdXIgY2hlY2tzIGZvciBoZWFkZXJzIHdpbmRvd3MuaCB3aW5zb2NrLmggd2luc29jazIuaCAKK2RubCBhbmQgd3MydGNwaXAuaCB0YWtlIHByZWNlZGVuY2Ugb3ZlciBhbnkgb3RoZXIgZnVydGhlciBjaGVja3Mgd2hpY2ggCitkbmwgY291bGQgYmUgZG9uZSBsYXRlciB1c2luZyBBQ19DSEVDS19IRUFERVIgb3IgQUNfQ0hFQ0tfSEVBREVSUyBmb3IKK2RubCB0aGlzIHNwZWNpZmljIGhlYWRlciBmaWxlcy4gQW5kIGRvIHRoZW0gYmVmb3JlIGl0cyByZXN1bHRzIGFyZSB1c2VkLgorZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XUworQ1VSTF9DSEVDS19OQVRJVkVfV0lORE9XUworY2FzZSBYLSIkYWNfY3ZfbmF0aXZlX3dpbmRvd3MiIGluCisgIFgteWVzKQorICAgIENVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0sKKyAgICBDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMgorICAgIENVUkxfQ0hFQ0tfSEVBREVSX1dTMlRDUElQCisgICAgOzsKKyAgKikKKyAgICBhY19jdl9oZWFkZXJfd2luc29ja19oPSJubyIKKyAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ibm8iCisgICAgYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2g9Im5vIgorICAgIDs7Citlc2FjCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDQVJFU19DSEVDS19MSUJfWE5FVAorCitkbmwgZ2V0aG9zdGJ5bmFtZSB3aXRob3V0IGxpYiBvciBpbiB0aGUgbnNsIGxpYj8KK0FDX0NIRUNLX0ZVTkMoZ2V0aG9zdGJ5bmFtZSwKKyAgICAgICAgICAgICAgW0hBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgWyBBQ19DSEVDS19MSUIobnNsLCBnZXRob3N0YnluYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTPSIkTElCUyAtbG5zbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgXSkKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgIGRubCBnZXRob3N0YnluYW1lIGluIHRoZSBzb2NrZXQgbGliPworICBBQ19DSEVDS19MSUIoc29ja2V0LCBnZXRob3N0YnluYW1lLAorICAgICAgICAgICAgICAgW0hBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sc29ja2V0IgorICAgICAgICAgICAgICAgXSkKK2ZpCisKK2RubCBBdCBsZWFzdCBvbmUgc3lzdGVtIGhhcyBiZWVuIGlkZW50aWZpZWQgdG8gcmVxdWlyZSBCT1RIIG5zbCBhbmQgc29ja2V0CitkbmwgbGlicyBhdCB0aGUgc2FtZSB0aW1lIHRvIGxpbmsgcHJvcGVybHkuCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ2V0aG9zdGJ5bmFtZSB3aXRoIGJvdGggbnNsIGFuZCBzb2NrZXQgbGlic10pCisgIG15X2FjX3NhdmVfTElCUz0kTElCUworICBMSUJTPSItbG5zbCAtbHNvY2tldCAkTElCUyIKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgIF1dLFtbCisgICAgICBnZXRob3N0YnluYW1lKCk7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgTElCUz0kbXlfYWNfc2F2ZV9MSUJTCisgIF0pCitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgZG5sIFRoaXMgaXMgZm9yIHdpbnNvY2sgc3lzdGVtcworICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29ja19oIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAgICotKi1taW5ndzMyY2UqKQorICAgICAgICAgIHdpbnNvY2tfTElCPSItbHdpbnNvY2siCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICB3aW5zb2NrX0xJQj0iLWx3c29jazMyIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0gInllcyI7IHRoZW4KKyAgICAgIHdpbnNvY2tfTElCPSItbHdzMl8zMiIKKyAgICBmaQorICAgIGlmIHRlc3QgISAteiAiJHdpbnNvY2tfTElCIjsgdGhlbgorICAgICAgbXlfYWNfc2F2ZV9MSUJTPSRMSUJTCisgICAgICBMSUJTPSIkd2luc29ja19MSUIgJExJQlMiCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBnZXRob3N0YnluYW1lIGluICR3aW5zb2NrX0xJQl0pCisgICAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorICAgICAgICBdXSxbWworICAgICAgICAgIGdldGhvc3RieW5hbWUoInd3dy5kdW1teXNpdGUuY29tIik7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHdpbnNvY2tfTElCPSIiCisgICAgICAgIExJQlM9JG15X2FjX3NhdmVfTElCUworICAgICAgXSkKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgIGRubCBUaGlzIGlzIGZvciBNaW5peCAzLjEKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ2V0aG9zdGJ5bmFtZSBmb3IgTWluaXggM10pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKy8qIE9sZGVyIE1pbml4IHZlcnNpb25zIG1heSBuZWVkIDxuZXQvZ2VuL25ldGRiLmg+IGhlcmUgaW5zdGVhZCAqLworI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgXV0sW1sKKyAgICAgIGdldGhvc3RieW5hbWUoInd3dy5kdW1teXNpdGUuY29tIik7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIF0pCitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgZG5sIFRoaXMgaXMgZm9yIGVDb3Mgd2l0aCBhIHN0dWJiZWQgRE5TIGltcGxlbWVudGF0aW9uCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGdldGhvc3RieW5hbWUgZm9yIGVDb3NdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgIF1dLFtbCisgICAgICBnZXRob3N0YnluYW1lKCJ3d3cuZHVtbXlzaXRlLmNvbSIpOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBdKQorZmkKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgIGRubCBnZXRob3N0YnluYW1lIGluIHRoZSBuZXQgbGliIC0gZm9yIEJlT1MKKyAgQUNfQ0hFQ0tfTElCKG5ldCwgZ2V0aG9zdGJ5bmFtZSwKKyAgICAgICAgICAgICAgIFtIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisgICAgICAgICAgICAgICBMSUJTPSIkTElCUyAtbG5ldCIKKyAgICAgICAgICAgICAgIF0pCitmaQorCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIjsgdGhlbgorICBBQ19NU0dfRVJST1IoW2NvdWxkbid0IGZpbmQgbGlicmFyaWVzIGZvciBnZXRob3N0YnluYW1lKCldKQorZmkKKworZG5sIHJlc29sdiBsaWIgZm9yIGlQaG9uZQorQVNfSUYoW3Rlc3QgIngkaG9zdF92ZW5kb3IiID0gInhhcHBsZSJdLCBbCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGlQaG9uZSB0YXJnZXRdKQorICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSAiVGFyZ2V0Q29uZGl0aW9uYWxzLmgiCisgICAgXV0sIFtbCisjaWYgVEFSR0VUX09TX0lQSE9ORSA9PSAwCisjZXJyb3IgTm90IGFuIGlQaG9uZSB0YXJnZXQKKyNlbmRpZgorcmV0dXJuIDA7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfU0VBUkNIX0xJQlMoW3Jlc19zZXJ2aWNlbmFtZV0sIFtyZXNvbHZdLCBbCisgICAgICBBQ19ERUZJTkUoW0NBUkVTX1VTRV9MSUJSRVNPTFZdLCBbMV0sIFtVc2UgcmVzb2x2ZXIgbGlicmFyeSB0byBjb25maWd1cmUgY2FyZXNdKQorICAgIF0sIFsKKyAgICAgIEFDX01TR19FUlJPUihbVW5hYmxlIHRvIGZpbmQgbGlicmVzb2x2IHdoaWNoIGlzIHJlcXVpcmVkIGZvciBpUGhvbmUgdGFyZ2V0c10pCisgICAgXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBdKQorXSkKKworZG5sIHJlc29sdmUgbGliPworQUNfQ0hFQ0tfRlVOQyhzdHJjYXNlY21wLCAsIFsgQUNfQ0hFQ0tfTElCKHJlc29sdmUsIHN0cmNhc2VjbXApIF0pCisKK2lmIHRlc3QgIiRhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wIiA9ICIkYWNfY3ZfZnVuY19zdHJjYXNlY21wIjsgdGhlbgorICBBQ19DSEVDS19MSUIocmVzb2x2ZSwgc3RyY2FzZWNtcCwKKyAgICAgICAgICAgICAgW0xJQlM9Ii1scmVzb2x2ZSAkTElCUyJdLAorICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgLWxuc2wpCitmaQorYWNfY3ZfZnVuY19zdHJjYXNlY21wPSJubyIKKworQ0FSRVNfQ0hFQ0tfTElCU19DT05ORUNUCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgSW4gY2FzZSB0aGF0IGZ1bmN0aW9uIGNsb2NrX2dldHRpbWUgd2l0aCBtb25vdG9uaWMgdGltZXIgaXMgYXZhaWxhYmxlLAorZG5sIGNoZWNrIGZvciBhZGRpdGlvbmFsIHJlcXVpcmVkIGxpYnJhcmllcy4KK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDVVJMX0NIRUNLX0xJQlNfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBsaWJnY2NdKQorQUNfQVJHX0VOQUJMRShsaWJnY2MsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbGliZ2NjXSxbdXNlIGxpYmdjYyB3aGVuIGxpbmtpbmddKSwKK1sgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgeWVzKQorICAgICAgICBMSUJTPSIkTElCUyAtbGdjYyIKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQobm8pCispCisKKworZG5sIExldCdzIGhvcGUgdGhpcyBzcGxpdCBVUkwgcmVtYWlucyB3b3JraW5nOgorZG5sIGh0dHA6Ly9wdWJsaWJuLmJvdWxkZXIuaWJtLmNvbS9kb2NfbGluay9lbl9VUy9hX2RvY19saWIvYWl4cHJnZ2QvIFwKK2RubCBnZW5wcm9nYy90aHJlYWRfcXVpY2tfcmVmLmh0bQorCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQmFjayB0byAibm9ybWFsIiBjb25maWd1cmluZworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQUNfSEVBREVSX1NUREMKKworQ1VSTF9DSEVDS19IRUFERVJfTUFMTE9DCitDVVJMX0NIRUNLX0hFQURFUl9NRU1PUlkKKworZG5sIGNoZWNrIGZvciBhIGZldyBiYXNpYyBzeXN0ZW0gaGVhZGVycyB3ZSBuZWVkCitBQ19DSEVDS19IRUFERVJTKAorICAgICAgIHN5cy90eXBlcy5oIFwKKyAgICAgICBzeXMvdGltZS5oIFwKKyAgICAgICBzeXMvc2VsZWN0LmggXAorICAgICAgIHN5cy9zb2NrZXQuaCBcCisgICAgICAgc3lzL2lvY3RsLmggXAorICAgICAgIHN5cy9wYXJhbS5oIFwKKyAgICAgICBzeXMvdWlvLmggXAorICAgICAgIGFzc2VydC5oIFwKKyAgICAgICBuZXRkYi5oIFwKKyAgICAgICBuZXRpbmV0L2luLmggXAorICAgICAgIG5ldGluZXQvdGNwLmggXAorICAgICAgIG5ldC9pZi5oIFwKKyAgICAgICBlcnJuby5oIFwKKyAgICAgICBzb2NrZXQuaCBcCisgICAgICAgc3RyaW5ncy5oIFwKKyAgICAgICBzdGRib29sLmggXAorICAgICAgIHRpbWUuaCBcCisgICAgICAgbGltaXRzLmggXAorICAgICAgIGFycGEvbmFtZXNlci5oIFwKKyAgICAgICBhcnBhL25hbWVzZXJfY29tcGF0LmggXAorICAgICAgIGFycGEvaW5ldC5oLAorZG5sIHRvIGRvIGlmIG5vdCBmb3VuZAorW10sCitkbmwgdG8gZG8gaWYgZm91bmQKK1tdLAorZG5sIGRlZmF1bHQgaW5jbHVkZXMKK1sKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCitkbmwgV2UgZG8gdGhpcyBkZWZhdWx0LWluY2x1ZGUgc2ltcGx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lc2VyX2NvbXBhdC5oCitkbmwgaGVhZGVyICpSRUFMTFkqIGNhbiBiZSBpbmNsdWRlIGFmdGVyIHRoZSBuZXcgbmFtZXNlci5oLiBJdCBzZWVtcyBBSVggNS4xCitkbmwgKGFuZCBvdGhlcnM/KSBpcyBub3QgZGVzaWduZWQgdG8gYWxsb3cgdGhpcy4KKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZW5kaWYKKworZG5sICpTaWdoKiB0aGVzZSBhcmUgbmVlZGVkIGluIG9yZGVyIGZvciBuZXQvaWYuaCB0byBnZXQgcHJvcGVybHkgZGV0ZWN0ZWQuCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorXQorKQorCitkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KK0FDX0NfQ09OU1QKK0FDX1RZUEVfU0laRV9UCitBQ19IRUFERVJfVElNRQorQ1VSTF9DSEVDS19TVFJVQ1RfVElNRVZBTAorCitBQ19DSEVDS19UWVBFKGxvbmcgbG9uZywKKyAgIFtBQ19ERUZJTkUoSEFWRV9MT05HTE9ORywgMSwKKyAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLl0pXQorICAgbG9uZ2xvbmc9InllcyIgIAorKQorCitpZiB0ZXN0ICJ4eWVzIiA9ICJ4JGxvbmdsb25nIjsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG51bWJlckxMIHdvcmtzXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgIF1dLFtbCisgICAgICBsb25nIGxvbmcgdmFsID0gMTAwMExMOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORShIQVZFX0xMLCAxLCBbaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBMTF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgXSkKK2ZpCisKKworIyBjaGVjayBmb3Igc3NpemVfdAorQUNfQ0hFQ0tfVFlQRShzc2l6ZV90LCAsCisgICBBQ19ERUZJTkUoc3NpemVfdCwgaW50LCBbdGhlIHNpZ25lZCB2ZXJzaW9uIG9mIHNpemVfdF0pKQorCisjIGNoZWNrIGZvciBib29sIHR5cGUKK0FDX0NIRUNLX1RZUEUoW2Jvb2xdLFsKKyAgQUNfREVGSU5FKEhBVkVfQk9PTF9ULCAxLAorICAgIFtEZWZpbmUgdG8gMSBpZiBib29sIGlzIGFuIGF2YWlsYWJsZSB0eXBlLl0pCitdLCAsWworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1REQk9PTF9ICisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCitdKQorCitDQVJFU19DT05GSUdVUkVfQVJFU19TT0NLTEVOX1QKKworVFlQRV9JTl9BRERSX1QKKworVFlQRV9TT0NLQUREUl9TVE9SQUdFCisKK1RZUEVfU0lHX0FUT01JQ19UCisKK0FDX1RZUEVfU0lHTkFMCisKK0NVUkxfQ0hFQ0tfRlVOQ19SRUNWCitDVVJMX0NIRUNLX0ZVTkNfUkVDVkZST00KK0NVUkxfQ0hFQ0tfRlVOQ19TRU5ECitDVVJMX0NIRUNLX01TR19OT1NJR05BTAorCitDQVJFU19DSEVDS19GVU5DX0NMT1NFU09DS0VUCitDQVJFU19DSEVDS19GVU5DX0NMT1NFU09DS0VUX0NBTUVMCitDQVJFU19DSEVDS19GVU5DX0NPTk5FQ1QKK0NBUkVTX0NIRUNLX0ZVTkNfRkNOVEwKK0NBUkVTX0NIRUNLX0ZVTkNfRlJFRUFERFJJTkZPCitDQVJFU19DSEVDS19GVU5DX0dFVEFERFJJTkZPCitDQVJFU19DSEVDS19GVU5DX0dFVEVOVgorQ0FSRVNfQ0hFQ0tfRlVOQ19HRVRIT1NUQllBRERSCitDQVJFU19DSEVDS19GVU5DX0dFVEhPU1RCWU5BTUUKK0NBUkVTX0NIRUNLX0ZVTkNfR0VUSE9TVE5BTUUKK0NBUkVTX0NIRUNLX0ZVTkNfR0VUU0VSVkJZUE9SVF9SCitDQVJFU19DSEVDS19GVU5DX0lORVRfTkVUX1BUT04KK0NBUkVTX0NIRUNLX0ZVTkNfSU5FVF9OVE9QCitDQVJFU19DSEVDS19GVU5DX0lORVRfUFRPTgorQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTAorQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVAorQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVF9DQU1FTAorQ0FSRVNfQ0hFQ0tfRlVOQ19TRVRTT0NLT1BUCitDQVJFU19DSEVDS19GVU5DX1NPQ0tFVAorQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJDQVNFQ01QCitDQVJFU19DSEVDS19GVU5DX1NUUkNNUEkKK0NBUkVTX0NIRUNLX0ZVTkNfU1RSRFVQCitDQVJFU19DSEVDS19GVU5DX1NUUklDTVAKK0NBUkVTX0NIRUNLX0ZVTkNfU1RSTkNBU0VDTVAKK0NBUkVTX0NIRUNLX0ZVTkNfU1RSTkNNUEkKK0NBUkVTX0NIRUNLX0ZVTkNfU1RSTklDTVAKK0NBUkVTX0NIRUNLX0ZVTkNfV1JJVEVWCisKKworZG5sIGNoZWNrIGZvciBBRl9JTkVUNgorQ0FSRVNfQ0hFQ0tfQ09OU1RBTlQoCisgIFsKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKyAgXSwgW1BGX0lORVQ2XSwgCisgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1BGX0lORVQ2LDEsW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIFBGX0lORVQ2Ll0pCispCisKK2RubCBjaGVjayBmb3IgUEZfSU5FVDYKK0NBUkVTX0NIRUNLX0NPTlNUQU5UKAorICBbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2VuZGlmCisgIF0sIFtBRl9JTkVUNl0sIAorICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9BRl9JTkVUNiwxLFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBBRl9JTkVUNi5dKQorKQorCisKK2RubCBjaGVjayBmb3IgdGhlIGluNl9hZGRyIHN0cnVjdHVyZQorQ0FSRVNfQ0hFQ0tfU1RSVUNUKAorICBbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNlbmRpZgorICBdLCBbaW42X2FkZHJdLCAKKyAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSVUNUX0lONl9BRERSLDEsW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHN0cnVjdCBpbjZfYWRkci5dKQorKQorCitkbmwgY2hlY2sgZm9yIHRoZSBzb2NrYWRkcl9pbjYgc3RydWN0dXJlCitDQVJFU19DSEVDS19TVFJVQ1QoCisgIFsKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2VuZGlmCisgIF0sIFtzb2NrYWRkcl9pbjZdLCAKKyAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONiwxLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBzdHJ1Y3Qgc29ja2FkZHJfaW42Ll0pIGFjX2hhdmVfc29ja2FkZHJfaW42PXllcworKQorCitBQ19DSEVDS19NRU1CRVIoc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkLAorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lELDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91ciBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyBzaW42X3Njb3BlX2lkLl0pCisgICAsICwKKyAgWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjZW5kaWYKKyAgXSkKKworZG5sIGNoZWNrIGZvciB0aGUgYWRkcmluZm8gc3RydWN0dXJlCitBQ19DSEVDS19NRU1CRVIoc3RydWN0IGFkZHJpbmZvLmFpX2ZsYWdzLAorICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVFJVQ1RfQUREUklORk8sMSwKKyAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgc3RydWN0IGFkZHJpbmZvLl0pLCwKKyAgWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjZW5kaWYKKyAgXQorKQorCisKK0FDX0NIRUNLX0ZVTkNTKFtiaXRuY21wIFwKKyAgZ2V0dGltZW9mZGF5IFwKKyAgaWZfaW5kZXh0b25hbWUKK10sWworXSxbCisgIGZ1bmM9IiRhY19mdW5jIgorICBBQ19NU0dfQ0hFQ0tJTkcoW2RlZXBlciBmb3IgJGZ1bmNdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgXV0sW1sKKyAgICAgICRmdW5jICgpOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGV2YWwgImFjX2N2X2Z1bmNfJGZ1bmM9eWVzIgorICAgIEFDX0RFRklORV9VTlFVT1RFRChYQ19TSF9UUl9DUFAoW0hBVkVfJGZ1bmNdKSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAkZnVuYyBmdW5jdGlvbi5dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtidXQgc3RpbGwgbm9dKQorICBdKQorXSkKKworCitkbmwgQ2hlY2sgaWYgdGhlIGdldG5hbWVpbmZvIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQorZG5sIGFuZCBnZXQgdGhlIHR5cGVzIG9mIGZpdmUgb2YgaXRzIGFyZ3VtZW50cy4KK0NVUkxfQ0hFQ0tfRlVOQ19HRVROQU1FSU5GTworCisKK0FDX0NfQklHRU5ESUFOKAorICAgIFtBQ19ERUZJTkUoQVJFU19CSUdfRU5ESUFOLCAxLAorICAgICAgW2RlZmluZSB0aGlzIGlmIGFyZXMgaXMgYnVpbHQgZm9yIGEgYmlnIGVuZGlhbiBzeXN0ZW1dKV0sCisgICAgLAorICAgIFtBQ19NU0dfV0FSTihbY291bGRuJ3QgZmlndXJlIG91dCBlbmRpYW5lc3MsIGFzc3VtaW5nIGxpdHRsZSBlbmRpYW4hXSldCispCisKK2RubCBDaGVjayBmb3IgdXNlci1zcGVjaWZpZWQgcmFuZG9tIGRldmljZQorQUNfQVJHX1dJVEgocmFuZG9tLAorQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1yYW5kb209RklMRV0sCisgICAgICAgICAgICAgICBbcmVhZCByYW5kb21uZXNzIGZyb20gRklMRSAoZGVmYXVsdD0vZGV2L3VyYW5kb20pXSksCisgICAgWyBSQU5ET01fRklMRT0iJHdpdGh2YWwiIF0sCisgICAgWworICAgICAgICBkbmwgQ2hlY2sgZm9yIHJhbmRvbSBkZXZpY2UuICBJZiB3ZSdyZSBjcm9zcyBjb21waWxpbmcsIHdlIGNhbid0CisgICAgICAgIGRubCBjaGVjaywgYW5kIGl0J3MgYmV0dGVyIHRvIGFzc3VtZSBpdCBkb2Vzbid0IGV4aXN0IHRoYW4gaXQgaXMKKyAgICAgICAgZG5sIHRvIGZhaWwgb24gQUNfQ0hFQ0tfRklMRSBvciBsYXRlci4KKyAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSAibm8iOyB0aGVuCisgICAgICAgICAgQUNfQ0hFQ0tfRklMRSgiL2Rldi91cmFuZG9tIiwgWyBSQU5ET01fRklMRT0iL2Rldi91cmFuZG9tIl0gKQorICAgICAgICBlbHNlCisgICAgICAgICAgQUNfTVNHX1dBUk4oW2Nhbm5vdCBjaGVjayBmb3IgL2Rldi91cmFuZG9tIHdoaWxlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgbm9uZV0pCisgICAgICAgIGZpCisgICAgICAgIAorICAgIF0KKykKK2lmIHRlc3QgLW4gIiRSQU5ET01fRklMRSIgJiYgdGVzdCBYIiRSQU5ET01fRklMRSIgIT0gWG5vIDsgdGhlbgorICAgICAgICBBQ19TVUJTVChSQU5ET01fRklMRSkKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJBTkRPTV9GSUxFLCAiJFJBTkRPTV9GSUxFIiwKKyAgICAgICAgW2Egc3VpdGFibGUgZmlsZS9kZXZpY2UgdG8gcmVhZCByYW5kb20gZGF0YSBmcm9tXSkKK2ZpCisKK0NBUkVTX0NIRUNLX09QVElPTl9OT05CTE9DS0lORworQ0FSRVNfQ0hFQ0tfTk9OQkxPQ0tJTkdfU09DS0VUCisKK0NBUkVTX0NPTkZJR1VSRV9TWU1CT0xfSElESU5HCisKK0NBUkVTX1BSSVZBVEVfTElCUz0iJExJQlMiCitBQ19TVUJTVChDQVJFU19QUklWQVRFX0xJQlMpCisKK0NBUkVTX0NGTEFHX0VYVFJBUz0iIgoraWYgdGVzdCBYIiR3YW50X3dlcnJvciIgPSBYeWVzOyB0aGVuCisgIENBUkVTX0NGTEFHX0VYVFJBUz0iLVdlcnJvciIKK2ZpCitBQ19TVUJTVChDQVJFU19DRkxBR19FWFRSQVMpCisKK2RubCBzcXVlZXplIHdoaXRlc3BhY2Ugb3V0IG9mIHNvbWUgdmFyaWFibGVzCisKK3NxdWVlemUgQ0ZMQUdTCitzcXVlZXplIENQUEZMQUdTCitzcXVlZXplIERFRlMKK3NxdWVlemUgTERGTEFHUworc3F1ZWV6ZSBMSUJTCisKK3NxdWVlemUgQ0FSRVNfUFJJVkFURV9MSUJTCisKK1hDX0NIRUNLX0JVSUxEX0ZMQUdTCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCB0ZXN0c10pCitBQ19BUkdfRU5BQkxFKHRlc3RzLAorCUFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10ZXN0c10sIFtidWlsZCB0ZXN0IHN1aXRlXSksCisJWyBidWlsZF90ZXN0cz0iJGVuYWJsZXZhbCIgXSwKKwlbIGlmIHRlc3QgIngkSEFWRV9DWFgxMSIgPSAieDEiICYmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiA9ICJ4bm8iIDsgdGhlbgorCSAgICBidWlsZF90ZXN0cz0ieWVzIgorCSAgZWxzZQorCSAgICBidWlsZF90ZXN0cz0ibm8iCisJICBmaQorCV0KKykKKworaWYgdGVzdCAieCRidWlsZF90ZXN0cyIgPSAieHllcyIgOyB0aGVuCisJaWYgdGVzdCAieCRIQVZFX0NYWDExIiA9ICIwIiA7IHRoZW4KKwkJQUNfTVNHX0VSUk9SKFsqKiogQnVpbGRpbmcgdGVzdHMgcmVxdWlyZXMgYSBDWFgxMSBjb21waWxlcl0pCisJZmkKKwlpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgPSAieHllcyIgOyB0aGVuCisJCUFDX01TR19FUlJPUihbKioqIFRlc3RzIG5vdCBzdXBwb3J0ZWQgd2hlbiBjcm9zcyBjb21waWxpbmddKQorCWZpCitmaQorQUNfTVNHX1JFU1VMVChbJGJ1aWxkX3Rlc3RzXSkKKworaWYgdGVzdCAieCRidWlsZF90ZXN0cyIgPSAieHllcyIgOyB0aGVuCisgIEFDX0NPTkZJR19TVUJESVJTKFt0ZXN0XSkKK2ZpCisKK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgbGliY2FyZXMucGNdKQorQUNfT1VUUFVUCitYQ19BTUVORF9ESVNUQ0xFQU4oWycuJ10pCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9kZXBjb21wIGIvYXAvYXBwL2MtYXJlcy9zcmMvZGVwY29tcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzk4NzEwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvZGVwY29tcApAQCAtMCwwICsxLDc5MSBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAxMy0wNS0zMC4wNzsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICBleGl0IDE7CisgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1J1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcworYXMgc2lkZS1lZmZlY3RzLgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSAnUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSAnUFJPR1JBTVMgQVJHUycuCisgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dHRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworIyBHZXQgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IGluIHRoZQorIyBnbG9iYWwgdmFyaWFibGVzICckZGlyJy4gIE5vdGUgdGhhdCB0aGlzIGRpcmVjdG9yeSBjb21wb25lbnQgd2lsbAorIyBiZSBlaXRoZXIgZW1wdHkgb3IgZW5kaW5nIHdpdGggYSAnLycgY2hhcmFjdGVyLiAgVGhpcyBpcyBkZWxpYmVyYXRlLgorc2V0X2Rpcl9mcm9tICgpCit7CisgIGNhc2UgJDEgaW4KKyAgICAqLyopIGRpcj1gZWNobyAiJDEiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYDs7CisgICAgICAqKSBkaXI9OzsKKyAgZXNhYworfQorCisjIEdldCB0aGUgc3VmZml4LXN0cmlwcGVkIGJhc2VuYW1lIG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCB0aGUKKyMgZ2xvYmFsIHZhcmlhYmxlICckYmFzZScuCitzZXRfYmFzZV9mcm9tICgpCit7CisgIGJhc2U9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuW14uXSokLy8nYAorfQorCisjIElmIG5vIGRlcGVuZGVuY3kgZmlsZSB3YXMgYWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaW52b2NhdGlvbiwKKyMgd2Ugc3RpbGwgaGF2ZSB0byBjcmVhdGUgYSBkdW1teSBkZXBmaWxlLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUKKyMgTWFrZWZpbGUgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCittYWtlX2R1bW15X2RlcGZpbGUgKCkKK3sKKyAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKK30KKworIyBGYWN0b3Igb3V0IHNvbWUgY29tbW9uIHBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgZ2VuZXJhdGVkIGRlcGZpbGUuCisjIFJlcXVpcmVzIHRoZSBhdXhpbGlhcnkgZ2xvYmFsIHZhcmlhYmxlICckdG1wZGVwZmlsZScgdG8gYmUgc2V0LgorYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlICgpCit7CisgICMgSWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IG1hbmFnZWQgdG8gcHJvZHVjZSBhIGRlcGVuZGVuY3kgZmlsZSwKKyAgIyBwb3N0LXByb2Nlc3MgaXQuCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtICdmb28ubzogZGVwZW5kZW5jeS5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgICAkb2JqZWN0OiBkZXBlbmRlbmN5LmgKKyAgICAjIGFuZCBvbmUgdG8gc2ltcGx5IG91dHB1dAorICAgICMgICBkZXBlbmRlbmN5Lmg6CisgICAgIyB3aGljaCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGRlbGV0ZWQtaGVhZGVyIHByb2JsZW0uCisgICAgeyBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiCisgICAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6WyR0YWIgXSosLCIgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiCisgICAgfSA+ICIkZGVwZmlsZSIKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICBtYWtlX2R1bW15X2RlcGZpbGUKKyAgZmkKK30KKworIyBBIHRhYnVsYXRpb24gY2hhcmFjdGVyLgordGFiPScJJworIyBBIG5ld2xpbmUgY2hhcmFjdGVyLgorbmw9JworJworIyBDaGFyYWN0ZXIgcmFuZ2VzIG1pZ2h0IGJlIHByb2JsZW1hdGljIG91dHNpZGUgdGhlIEMgbG9jYWxlLgorIyBUaGVzZSBkZWZpbml0aW9ucyBoZWxwLgordXBwZXI9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKK2xvd2VyPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitkaWdpdHM9MDEyMzQ1Njc4OQorYWxwaGE9JHt1cHBlcn0ke2xvd2VyfQorCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKworIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCitkZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAorICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KK3RtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9CisKK3JtIC1mICIkdG1wZGVwZmlsZSIKKworIyBBdm9pZCBpbnRlcmZlcmVuY2VzIGZyb20gdGhlIGVudmlyb25tZW50LgorZ2NjZmxhZz0gZGFzaG1mbGFnPQorCisjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKKyMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCisjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCisjIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgoraWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KKyAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCisgIGdjY2ZsYWc9LU0KKyAgZGVwbW9kZT1nY2MKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgIGRhc2htZmxhZz0teE0KKyAgZGVwbW9kZT1kYXNobXN0ZG91dAorZmkKKworY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICBjeWdwYXRoX3U9J3NlZCBzLFxcXFwsLyxnJworICBkZXBtb2RlPW1zdmlzdWFsY3BwCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjN21zeXM7IHRoZW4KKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3ZjNyBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKKyAgZGVwbW9kZT1tc3ZjNworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0geGxjOyB0aGVuCisgICMgSUJNIEMvQysrIENvbXBpbGVycyB4bGMveGxDIGNhbiBvdXRwdXQgZ2NjLWxpa2UgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KKyAgZ2NjZmxhZz0tcW1ha2VkZXA9Z2NjLC1NRgorICBkZXBtb2RlPWdjYworZmkKKworY2FzZSAiJGRlcG1vZGUiIGluCitnY2MzKQorIyMgZ2NjIDMgaW1wbGVtZW50cyBkZXBlbmRlbmN5IHRyYWNraW5nIHRoYXQgZG9lcyBleGFjdGx5IHdoYXQKKyMjIHdlIHdhbnQuICBZYXkhICBOb3RlOiBmb3Igc29tZSByZWFzb24gbGlidG9vbCAxLjQgZG9lc24ndCBsaWtlCisjIyBpdCBpZiAtTUQgLU1QIGNvbWVzIGFmdGVyIHRoZSAtTUYgc3R1ZmYuICBIbW0uCisjIyBVbmZvcnR1bmF0ZWx5LCBGcmVlQlNEIGM4OSBhY2NlcHRhbmNlIG9mIGZsYWdzIGRlcGVuZHMgdXBvbgorIyMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvcmRlcjsgc28gYWRkIHRoZSBmbGFncyB3aGVyZSB0aGV5CisjIyBhcHBlYXIgaW4gZGVwZW5kMi5hbS4gIE5vdGUgdGhhdCB0aGUgc2xvd2Rvd24gaW5jdXJyZWQgaGVyZQorIyMgYWZmZWN0cyBvbmx5IGNvbmZpZ3VyZTogaW4gbWFrZWZpbGVzLCAlRkFTVERFUCUgc2hvcnRjdXRzIHRoaXMuCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtYykgc2V0IGZub3JkICIkQCIgLU1UICIkb2JqZWN0IiAtTUQgLU1QIC1NRiAiJHRtcGRlcGZpbGUiICIkYXJnIiA7OworICAgICopICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIgOzsKKyAgICBlc2FjCisgICAgc2hpZnQgIyBmbm9yZAorICAgIHNoaWZ0ICMgJGFyZworICBkb25lCisgICIkQCIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QganVzdCBjYXRlciB0byBvYnNvc2V0ZSBwcmUtMy54IEdDQyBjb21waWxlcnMuCisjIyBidXQgYWxzbyB0byBpbi11c2UgY29tcGlsZXJzIGxpa2UgSU1CIHhsYy94bEMgYW5kIHRoZSBIUCBDIGNvbXBpbGVyLgorIyMgKHNlZSB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCB0byAkZ2NjZmxhZyBhYm92ZSkuCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4gIEFsc28sIGl0IG1pZ2h0IG5vdCBiZQorIyMgICBzdXBwb3J0ZWQgYnkgdGhlIG90aGVyIGNvbXBpbGVycyB3aGljaCB1c2UgdGhlICdnY2MnIGRlcG1vZGUuCisjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCisjIyAgIHRoYW4gcmVuYW1pbmcpLgorICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KKyAgICBnY2NmbGFnPS1NRCwKKyAgZmkKKyAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlCisgICMgbGV0dGVycy4KKyAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCisgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSAiZGVsZXRlZCBoZWFkZXIgZmlsZSIgcHJvYmxlbS4KKyMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCisjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCisjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCisjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgJzonLiAgT24gdGhlIHRoZW9yeQorIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCisjIyB3ZWxsLiAgaHAgZGVwbW9kZSBhbHNvIGFkZHMgdGhhdCBzcGFjZSwgYnV0IGFsc28gcHJlZml4ZXMgdGhlIFZQQVRICisjIyB0byB0aGUgb2JqZWN0LiAgVGFrZSBjYXJlIHRvIG5vdCByZXBlYXQgaXQgaW4gdGhlIG91dHB1dC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgInN8Liokb2JqZWN0JHx8IiAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCisgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlICcjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyBcCisgICAgICB8IHRyICIkbmwiICcgJyA+PiAiJGRlcGZpbGUiCisgICAgZWNobyA+PiAiJGRlcGZpbGUiCisgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCisgICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgICAgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworeGxjKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworYWl4KQorICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgJyRvYmplY3Q6JyBhdCB0aGUKKyAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCisgIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLnUKKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS51CisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQorICA7OworCit0Y2MpCisgICMgdGNjIChUaW55IEMgQ29tcGlsZXIpIHVuZGVyc3RhbmQgJy1NRCAtTUYgZmlsZScgc2luY2UgdmVyc2lvbiAwLjkuMjYKKyAgIyBGSVhNRTogVGhhdCB2ZXJzaW9uIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGF0IHRoZSBtb21lbnQgb2Ygd3JpdGluZy4KKyAgIyAgICAgICAgTWFrZSB0aGF0IHRoaXMgc3RhdGVtZW50IHJlbWFpbnMgdHJ1ZSBhbHNvIGZvciBzdGFibGUsIHJlbGVhc2VkCisgICMgICAgICAgIHZlcnNpb25zLgorICAjIEl0IHdpbGwgd3JhcCBsaW5lcyAoZG9lc24ndCBtYXR0ZXIgd2hldGhlciBsb25nIG9yIHNob3J0KSB3aXRoIGEKKyAgIyB0cmFpbGluZyAnXCcsIGFzIGluOgorICAjCisgICMgICBmb28ubyA6IFwKKyAgIyAgICBmb28uYyBcCisgICMgICAgZm9vLmggXAorICAjCisgICMgSXQgd2lsbCBwdXQgYSB0cmFpbGluZyAnXCcgZXZlbiBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgd2lsbCB1c2UgbGVhZGluZworICAjIHNwYWNlcyByYXRoZXIgdGhhbiBsZWFkaW5nIHRhYnMgKGF0IGxlYXN0IHNpbmNlIGl0cyBjb21taXQgMDM5NGNhZjcKKyAgIyAiRW1pdCBzcGFjZXMgZm9yIC1NRCIpLgorICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBub24tZW1wdHkgbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm8gOiBcJyBvciAnIGRlcC5oIFwnLgorICAjIFdlIGhhdmUgdG8gY2hhbmdlIGxpbmVzIG9mIHRoZSBmaXJzdCBraW5kIHRvICckb2JqZWN0OiBcJy4KKyAgc2VkIC1lICJzfC4qOnwkb2JqZWN0IDp8IiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgQW5kIGZvciBlYWNoIGxpbmUgb2YgdGhlIHNlY29uZCBraW5kLCB3ZSBoYXZlIHRvIGVtaXQgYSAnZGVwLmg6JworICAjIGR1bW15IGRlcGVuZGVuY3ksIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgorICBzZWQgLW4gLWUgJ3N8XiAgKlwoLipcKSAqXFwkfFwxOnxwJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKKyMjIFRoZSBvcmRlciBvZiB0aGlzIG9wdGlvbiBpbiB0aGUgY2FzZSBzdGF0ZW1lbnQgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGUKKyMjIHNoZWxsIGNvZGUgaW4gY29uZmlndXJlIHdpbGwgdHJ5IGVhY2ggb2YgdGhlc2UgZm9ybWF0cyBpbiB0aGUgb3JkZXIKKyMjIGxpc3RlZCBpbiB0aGlzIGZpbGUuICBBIHBsYWluICctTUQnIG9wdGlvbiB3b3VsZCBiZSB1bmRlcnN0b29kIGJ5IG1hbnkKKyMjIGNvbXBpbGVycywgc28gd2UgbXVzdCBlbnN1cmUgdGhpcyBjb21lcyBhZnRlciB0aGUgZ2NjIGFuZCBpY2Mgb3B0aW9ucy4KK3BnY2MpCisgICMgUG9ydGxhbmQncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzICctTUQnLgorICAjIFdpbGwgYWx3YXlzIG91dHB1dCBkZXBzIHRvICdmaWxlLmQnIHdoZXJlIGZpbGUgaXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUKKyAgIyBzb3VyY2UgZmlsZSB1bmRlciBjb21waWxhdGlvbiwgZXZlbiBpZiBmaWxlIHJlc2lkZXMgaW4gYSBzdWJkaXJlY3RvcnkuCisgICMgVGhlIG9iamVjdCBmaWxlIG5hbWUgZG9lcyBub3QgYWZmZWN0IHRoZSBuYW1lIG9mIHRoZSAnLmQnIGZpbGUuCisgICMgcGdjYyAxMC4yIHdpbGwgb3V0cHV0CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgJ1wnIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorICAjIFVzZSB0aGUgc291cmNlLCBub3QgdGhlIG9iamVjdCwgdG8gZGV0ZXJtaW5lIHRoZSBiYXNlIG5hbWUsIHNpbmNlCisgICMgdGhhdCdzIHNhZGx5IHdoYXQgcGdjYyB3aWxsIGRvIHRvby4KKyAgc2V0X2Jhc2VfZnJvbSAiJHNvdXJjZSIKKyAgdG1wZGVwZmlsZT0kYmFzZS5kCisKKyAgIyBGb3IgcHJvamVjdHMgdGhhdCBidWlsZCB0aGUgc2FtZSBzb3VyY2UgZmlsZSB0d2ljZSBpbnRvIGRpZmZlcmVudCBvYmplY3QKKyAgIyBmaWxlcywgdGhlIHBnY2MgYXBwcm9hY2ggb2YgdXNpbmcgdGhlICpzb3VyY2UqIGZpbGUgcm9vdCBuYW1lIGNhbiBjYXVzZQorICAjIHByb2JsZW1zIGluIHBhcmFsbGVsIGJ1aWxkcy4gIFVzZSBhIGxvY2tpbmcgc3RyYXRlZ3kgdG8gYXZvaWQgc3RvbXBpbmcgb24KKyAgIyB0aGUgc2FtZSAkdG1wZGVwZmlsZS4KKyAgbG9ja2Rpcj0kYmFzZS5kLWxvY2sKKyAgdHJhcCAiCisgICAgZWNobyAnJDA6IGNhdWdodCBzaWduYWwsIGNsZWFuaW5nIHVwLi4uJyA+JjIKKyAgICBybWRpciAnJGxvY2tkaXInCisgICAgZXhpdCAxCisgICIgMSAyIDEzIDE1CisgIG51bXRyaWVzPTEwMAorICBpPSRudW10cmllcworICB3aGlsZSB0ZXN0ICRpIC1ndCAwOyBkbworICAgICMgbWtkaXIgaXMgYSBwb3J0YWJsZSB0ZXN0LWFuZC1zZXQuCisgICAgaWYgbWtkaXIgIiRsb2NrZGlyIiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBUaGlzIHByb2Nlc3MgYWNxdWlyZWQgdGhlIGxvY2suCisgICAgICAiJEAiIC1NRAorICAgICAgc3RhdD0kPworICAgICAgIyBSZWxlYXNlIHRoZSBsb2NrLgorICAgICAgcm1kaXIgIiRsb2NrZGlyIgorICAgICAgYnJlYWsKKyAgICBlbHNlCisgICAgICAjIElmIHRoZSBsb2NrIGlzIGJlaW5nIGhlbGQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzcywgd2FpdAorICAgICAgIyB1bnRpbCB0aGUgd2lubmluZyBwcm9jZXNzIGlzIGRvbmUgb3Igd2UgdGltZW91dC4KKyAgICAgIHdoaWxlIHRlc3QgLWQgIiRsb2NrZGlyIiAmJiB0ZXN0ICRpIC1ndCAwOyBkbworICAgICAgICBzbGVlcCAxCisgICAgICAgIGk9YGV4cHIgJGkgLSAxYAorICAgICAgZG9uZQorICAgIGZpCisgICAgaT1gZXhwciAkaSAtIDFgCisgIGRvbmUKKyAgdHJhcCAtIDEgMiAxMyAxNQorICBpZiB0ZXN0ICRpIC1sZSAwOyB0aGVuCisgICAgZWNobyAiJDA6IGZhaWxlZCB0byBhY3F1aXJlIGxvY2sgYWZ0ZXIgJG51bXRyaWVzIGF0dGVtcHRzIiA+JjIKKyAgICBlY2hvICIkMDogY2hlY2sgbG9ja2RpciAnJGxvY2tkaXInIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwMikKKyAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0CisgICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgorICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKKyAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAorICAjIGhhcHBlbnMgdG8gYmUuCisgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KKyAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorICAgICIkQCIgLVdjLCtNYWtlZAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICIkQCIgK01ha2VkCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCAnZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7CisgICAgICAgICAgICAgICBzL14gKi8vCisgICAgICAgICAgICAgICBzLyBcXCokLy8KKyAgICAgICAgICAgICAgIHMvJC86LworICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwordHJ1NjQpCisgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgIyBlZmZlY3QuICAnY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gJ2Zvby5vLmQnLgorICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICMgZGVwZW5kZW5jaWVzIGluICdmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCisKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIyBMaWJ0b29sIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlCisgICAgIyB0d28gY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCisgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKKyAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgTGlrZXdpc2UuCisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKKyAgICAiJEAiIC1XYywtTUQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICIkQCIgLU1ECisgIGZpCisKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICAjIFNhbWUgcG9zdC1wcm9jZXNzaW5nIHRoYXQgaXMgcmVxdWlyZWQgZm9yIEFJWCBtb2RlLgorICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKKyAgOzsKKworbXN2YzcpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHNob3dJbmNsdWRlcz0tV2MsLXNob3dJbmNsdWRlcworICBlbHNlCisgICAgc2hvd0luY2x1ZGVzPS1zaG93SW5jbHVkZXMKKyAgZmkKKyAgIiRAIiAkc2hvd0luY2x1ZGVzID4gIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGdyZXAgLXYgJ15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogJyAiJHRtcGRlcGZpbGUiCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgICMgVGhlIGZpcnN0IHNlZCBwcm9ncmFtIGJlbG93IGV4dHJhY3RzIHRoZSBmaWxlIG5hbWVzIGFuZCBlc2NhcGVzCisgICMgYmFja3NsYXNoZXMgZm9yIGN5Z3BhdGguICBUaGUgc2Vjb25kIHNlZCBwcm9ncmFtIG91dHB1dHMgdGhlIGZpbGUKKyAgIyBuYW1lIHdoZW4gcmVhZGluZywgYnV0IGFsc28gYWNjdW11bGF0ZXMgYWxsIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICMgaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gb3V0cHV0IHRoZW0gYWdhaW4gYXQgdGhlIGVuZC4gIFRoaXMgb25seQorICAjIHdvcmtzIHdpdGggc2VkIGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgYnVmZmVycy4KKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAnCisvXk5vdGU6IGluY2x1ZGluZyBmaWxlOiAgKlwoLipcKS8geworICBzLy9cMS8KKyAgcy9cXC9cXFxcL2cKKyAgcAorfScgfCAkY3lncGF0aF91IHwgc29ydCAtdSB8IHNlZCAtbiAnCitzLyAvXFwgL2cKK3MvXCguKlwpLyciJHRhYiInXDEgXFwvcAorcy8uXCguKlwpIFxcL1wxOi8KK0gKKyQgeworICBzLy4qLyciJHRhYiInLworICBHCisgIHAKK30nID4+ICIkZGVwZmlsZSIKKyAgZWNobyA+PiAiJGRlcGZpbGUiICMgbWFrZSBzdXJlIHRoZSBmcmFnbWVudCBkb2Vzbid0IGVuZCB3aXRoIGEgYmFja3NsYXNoCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2Yzdtc3lzKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciAnOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzICdjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCAnYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAic3xeWyR0YWIgXSpbXjokdGFiIF1bXjpdW146XSo6WyR0YWIgXSp8JG9iamVjdDogfCIgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgc2VkIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitkYXNoWG1zdGRvdXQpCisgICMgVGhpcyBjYXNlIG9ubHkgZXhpc3RzIHRvIHNhdGlzZnkgZGVwZW5kLm00LiAgSXQgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgIyBydW4sIGFzIHRoaXMgbW9kZSBpcyBzcGVjaWFsbHkgcmVjb2duaXplZCBpbiB0aGUgcHJlYW1ibGUuCisgIGV4aXQgMQorICA7OworCittYWtlZGVwZW5kKQorICAiJEAiIHx8IGV4aXQgJD8KKyAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubyBlYXQ9bm8KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgJGVhdCA9IHllczsgdGhlbgorICAgICAgZWF0PW5vCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC1hcmNoKQorICAgICAgZWF0PXllcyA7OworICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL14uKlwuLy4vJ2AKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBtYWtlZGVwZW5kIG1heSBwcmVwZW5kIHRoZSBWUEFUSCBmcm9tIHRoZSBzb3VyY2UgZmlsZSBuYW1lIHRvIHRoZSBvYmplY3QuCisgICMgTm8gbmVlZCB0byByZWdleC1lc2NhcGUgJG9iamVjdCwgZXhjZXNzIG1hdGNoaW5nIG9mICcuJyBpcyBoYXJtbGVzcy4KKyAgc2VkICJzfF4uKlwoJG9iamVjdCAqOlwpfFwxfCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoZSBsYXN0IGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgXAorICAgIHwgdHIgJyAnICIkbmwiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSAnLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIFwKKyAgICB8IHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICB8IHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2aXN1YWxjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorICAgICAgICBzZXQgZm5vcmQgIiRAIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgICopCisgICAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIDI+L2Rldi9udWxsIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6JyIkdGFiIidcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIiR0YWIiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3ZjbXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvZ2V0X3Zlci5hd2sgYi9hcC9hcHAvYy1hcmVzL3NyYy9nZXRfdmVyLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTNkYjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvZ2V0X3Zlci5hd2sKQEAgLTAsMCArMSwyNyBAQAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiAgUHJvamVjdDogYy1hcmVzCisjICoKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIGF3ayBzY3JpcHQgd2hpY2ggZmV0Y2hlcyBjLWFyZXMgdmVyc2lvbiBudW1iZXIgYW5kIHN0cmluZyBmcm9tIGlucHV0CisjIGZpbGUgYW5kIHdyaXRlcyB0aGVtIHRvIFNURE9VVC4gSGVyZSB5b3UgY2FuIGdldCBhbiBhd2sgdmVyc2lvbiBmb3IgV2luMzI6CisjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvcHJndG9vbHMvYXdrLTIwMTAwNTIzLnppcAorIworQkVHSU4geworICB3aGlsZSAoKGdldGxpbmUgPCBBUkdWWzFdKSA+IDApIHsKKyAgICBzdWIoIlxyIiwgIiIpICMgbWFrZSBNU1lTIGdhd2sgd29yayB3aXRoIENSTEYgaGVhZGVyIGlucHV0LgorICAgIGlmIChtYXRjaCAoJDAsIC9eI2RlZmluZSBBUkVTX0NPUFlSSUdIVCAiW14iXSsiJC8pKQorICAgICAgY29weXJpZ2h0X3N0cmluZyA9IHN1YnN0cigkMCwgMjUsIGxlbmd0aCgkMCktMjUpCisgICAgZWxzZSBpZiAobWF0Y2ggKCQwLCAvXiNkZWZpbmUgQVJFU19WRVJTSU9OX1NUUiAiW14iXSsiJC8pKQorICAgICAgdmVyc2lvbl9zdHJpbmcgPSBzdWJzdHIoJDMsIDIsIGxlbmd0aCgkMyktMikKKyAgICBlbHNlIGlmIChtYXRjaCAoJDAsIC9eI2RlZmluZSBBUkVTX1ZFUlNJT05fTUFKT1IgWzAtOV0rJC8pKQorICAgICAgdmVyc2lvbl9tYWpvciA9ICQzCisgICAgZWxzZSBpZiAobWF0Y2ggKCQwLCAvXiNkZWZpbmUgQVJFU19WRVJTSU9OX01JTk9SIFswLTldKyQvKSkKKyAgICAgIHZlcnNpb25fbWlub3IgPSAkMworICAgIGVsc2UgaWYgKG1hdGNoICgkMCwgL14jZGVmaW5lIEFSRVNfVkVSU0lPTl9QQVRDSCBbMC05XSskLykpCisgICAgICB2ZXJzaW9uX3BhdGNoID0gJDMKKyAgfQorICBwcmludCAiTElCQ0FSRVNfVkVSU0lPTiA9ICIgdmVyc2lvbl9tYWpvciAiLCIgdmVyc2lvbl9taW5vciAiLCIgdmVyc2lvbl9wYXRjaAorICBwcmludCAiTElCQ0FSRVNfVkVSU0lPTl9TVFIgPSAiIHZlcnNpb25fc3RyaW5nCisgIHByaW50ICJMSUJDQVJFU19DT1BZUklHSFRfU1RSID0gIiBjb3B5cmlnaHRfc3RyaW5nCit9CisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2luZXRfbmV0X3B0b24uYyBiL2FwL2FwcC9jLWFyZXMvc3JjL2luZXRfbmV0X3B0b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjRmYzViCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvaW5ldF9uZXRfcHRvbi5jCkBAIC0wLDAgKzEsNDUwIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfaXB2Ni5oIgorI2luY2x1ZGUgImFyZXNfbm93YXJuLmgiCisjaW5jbHVkZSAiYXJlc19pbmV0X25ldF9wdG9uLmgiCisKKworY29uc3Qgc3RydWN0IGFyZXNfaW42X2FkZHIgYXJlc19pbjZhZGRyX2FueSA9IHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfSB9IH07CisKKworI2lmbmRlZiBIQVZFX0lORVRfTkVUX1BUT04KKworLyoKKyAqIHN0YXRpYyBpbnQKKyAqIGluZXRfbmV0X3B0b25faXB2NChzcmMsIGRzdCwgc2l6ZSkKKyAqICAgICAgY29udmVydCBJUHY0IG5ldHdvcmsgbnVtYmVyIGZyb20gcHJlc2VudGF0aW9uIHRvIG5ldHdvcmsgZm9ybWF0LgorICogICAgICBhY2NlcHRzIGhleCBvY3RldHMsIGhleCBzdHJpbmdzLCBkZWNpbWFsIG9jdGV0cywgYW5kIC9DSURSLgorICogICAgICAic2l6ZSIgaXMgaW4gYnl0ZXMgYW5kIGRlc2NyaWJlcyAiZHN0Ii4KKyAqIHJldHVybjoKKyAqICAgICAgbnVtYmVyIG9mIGJpdHMsIGVpdGhlciBpbXB1dGVkIGNsYXNzZnVsbHkgb3Igc3BlY2lmaWVkIHdpdGggL0NJRFIsCisgKiAgICAgIG9yIC0xIGlmIHNvbWUgZmFpbHVyZSBvY2N1cnJlZCAoY2hlY2sgZXJybm8pLiAgRU5PRU5UIG1lYW5zIGl0IHdhcworICogICAgICBub3QgYW4gSVB2NCBuZXR3b3JrIHNwZWNpZmljYXRpb24uCisgKiBub3RlOgorICogICAgICBuZXR3b3JrIGJ5dGUgb3JkZXIgYXNzdW1lZC4gIHRoaXMgbWVhbnMgMTkyLjUuNS4yNDAvMjggaGFzCisgKiAgICAgIDBiMTExMTAwMDAgaW4gaXRzIGZvdXJ0aCBvY3RldC4KKyAqIG5vdGU6CisgKiAgICAgIE9uIFdpbmRvd3Mgd2Ugc3RvcmUgdGhlIGVycm9yIGluIHRoZSB0aHJlYWQgZXJybm8sIG5vdAorICogICAgICBpbiB0aGUgd2luc29jayBlcnJvciBjb2RlLiBUaGlzIGlzIHRvIGF2b2lkIGxvb3NpbmcgdGhlCisgKiAgICAgIGFjdHVhbCBsYXN0IHdpbnNvY2sgZXJyb3IuIFNvIHVzZSBtYWNybyBFUlJOTyB0byBmZXRjaCB0aGUKKyAqICAgICAgZXJybm8gdGhpcyBmdW50aW9uIHNldHMgd2hlbiByZXR1cm5pbmcgKC0xKSwgbm90IFNPQ0tFUlJOTy4KKyAqIGF1dGhvcjoKKyAqICAgICAgUGF1bCBWaXhpZSAoSVNDKSwgSnVuZSAxOTk2CisgKi8KK3N0YXRpYyBpbnQKK2luZXRfbmV0X3B0b25faXB2NChjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyIHhkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisgIGludCBuLCBjaCwgdG1wID0gMCwgZGlydHksIGJpdHM7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9kc3QgPSBkc3Q7CisKKyAgY2ggPSAqc3JjKys7CisgIGlmIChjaCA9PSAnMCcgJiYgKHNyY1swXSA9PSAneCcgfHwgc3JjWzBdID09ICdYJykKKyAgICAgICYmIElTQVNDSUkoc3JjWzFdKQorICAgICAgJiYgSVNYRElHSVQoc3JjWzFdKSkgeworICAgIC8qIEhleGFkZWNpbWFsOiBFYXQgbnliYmxlIHN0cmluZy4gKi8KKyAgICBpZiAoIXNpemUpCisgICAgICBnb3RvIGVtc2dzaXplOworICAgIGRpcnR5ID0gMDsKKyAgICBzcmMrKzsgIC8qIHNraXAgeCBvciBYLiAqLworICAgIHdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcgJiYgSVNBU0NJSShjaCkgJiYgSVNYRElHSVQoY2gpKSB7CisgICAgICBpZiAoSVNVUFBFUihjaCkpCisgICAgICAgIGNoID0gdG9sb3dlcihjaCk7CisgICAgICBuID0gYXJlc3hfc3p0b3NpKHN0cmNocih4ZGlnaXRzLCBjaCkgLSB4ZGlnaXRzKTsKKyAgICAgIGlmIChkaXJ0eSA9PSAwKQorICAgICAgICB0bXAgPSBuOworICAgICAgZWxzZQorICAgICAgICB0bXAgPSAodG1wIDw8IDQpIHwgbjsKKyAgICAgIGlmICgrK2RpcnR5ID09IDIpIHsKKyAgICAgICAgaWYgKCFzaXplLS0pCisgICAgICAgICAgZ290byBlbXNnc2l6ZTsKKyAgICAgICAgKmRzdCsrID0gKHVuc2lnbmVkIGNoYXIpIHRtcDsKKyAgICAgICAgZGlydHkgPSAwOworICAgICAgfQorICAgIH0KKyAgICBpZiAoZGlydHkpIHsgIC8qIE9kZCB0cmFpbGluZyBueWJibGU/ICovCisgICAgICBpZiAoIXNpemUtLSkKKyAgICAgICAgZ290byBlbXNnc2l6ZTsKKyAgICAgICpkc3QrKyA9ICh1bnNpZ25lZCBjaGFyKSAodG1wIDw8IDQpOworICAgIH0KKyAgfSBlbHNlIGlmIChJU0FTQ0lJKGNoKSAmJiBJU0RJR0lUKGNoKSkgeworICAgIC8qIERlY2ltYWw6IGVhdCBkb3R0ZWQgZGlnaXQgc3RyaW5nLiAqLworICAgIGZvciAoOzspIHsKKyAgICAgIHRtcCA9IDA7CisgICAgICBkbyB7CisgICAgICAgIG4gPSBhcmVzeF9zenRvc2koc3RyY2hyKGRpZ2l0cywgY2gpIC0gZGlnaXRzKTsKKyAgICAgICAgdG1wICo9IDEwOworICAgICAgICB0bXAgKz0gbjsKKyAgICAgICAgaWYgKHRtcCA+IDI1NSkKKyAgICAgICAgICBnb3RvIGVub2VudDsKKyAgICAgIH0gd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJyAmJgorICAgICAgICAgICAgICAgSVNBU0NJSShjaCkgJiYgSVNESUdJVChjaCkpOworICAgICAgaWYgKCFzaXplLS0pCisgICAgICAgIGdvdG8gZW1zZ3NpemU7CisgICAgICAqZHN0KysgPSAodW5zaWduZWQgY2hhcikgdG1wOworICAgICAgaWYgKGNoID09ICdcMCcgfHwgY2ggPT0gJy8nKQorICAgICAgICBicmVhazsKKyAgICAgIGlmIChjaCAhPSAnLicpCisgICAgICAgIGdvdG8gZW5vZW50OworICAgICAgY2ggPSAqc3JjKys7CisgICAgICBpZiAoIUlTQVNDSUkoY2gpIHx8ICFJU0RJR0lUKGNoKSkKKyAgICAgICAgZ290byBlbm9lbnQ7CisgICAgfQorICB9IGVsc2UKKyAgICBnb3RvIGVub2VudDsKKworICBiaXRzID0gLTE7CisgIGlmIChjaCA9PSAnLycgJiYgSVNBU0NJSShzcmNbMF0pICYmCisgICAgICBJU0RJR0lUKHNyY1swXSkgJiYgZHN0ID4gb2RzdCkgeworICAgIC8qIENJRFIgd2lkdGggc3BlY2lmaWVyLiAgTm90aGluZyBjYW4gZm9sbG93IGl0LiAqLworICAgIGNoID0gKnNyYysrOyAgICAvKiBTa2lwIG92ZXIgdGhlIC8uICovCisgICAgYml0cyA9IDA7CisgICAgZG8geworICAgICAgbiA9IGFyZXN4X3N6dG9zaShzdHJjaHIoZGlnaXRzLCBjaCkgLSBkaWdpdHMpOworICAgICAgYml0cyAqPSAxMDsKKyAgICAgIGJpdHMgKz0gbjsKKyAgICAgIGlmIChiaXRzID4gMzIpCisgICAgICAgIGdvdG8gZW5vZW50OworICAgIH0gd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJyAmJiBJU0FTQ0lJKGNoKSAmJiBJU0RJR0lUKGNoKSk7CisgICAgaWYgKGNoICE9ICdcMCcpCisgICAgICBnb3RvIGVub2VudDsKKyAgfQorCisgIC8qIEZpcmV5IGRlYXRoIGFuZCBkZXN0cnVjdGlvbiB1bmxlc3Mgd2UgcHJlZmV0Y2hlZCBFT1MuICovCisgIGlmIChjaCAhPSAnXDAnKQorICAgIGdvdG8gZW5vZW50OworCisgIC8qIElmIG5vdGhpbmcgd2FzIHdyaXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLCB3ZSBmb3VuZCBubyBhZGRyZXNzLiAqLworICBpZiAoZHN0ID09IG9kc3QpCisgICAgZ290byBlbm9lbnQ7ICAvKiBMQ09WX0VYQ0xfTElORTogYWxsIHZhbGlkIHBhdGhzIGFib3ZlIGluY3JlbWVudCBkc3QgKi8KKyAgLyogSWYgbm8gQ0lEUiBzcGVjIHdhcyBnaXZlbiwgaW5mZXIgd2lkdGggZnJvbSBuZXQgY2xhc3MuICovCisgIGlmIChiaXRzID09IC0xKSB7CisgICAgaWYgKCpvZHN0ID49IDI0MCkgICAgICAgLyogQ2xhc3MgRSAqLworICAgICAgYml0cyA9IDMyOworICAgIGVsc2UgaWYgKCpvZHN0ID49IDIyNCkgIC8qIENsYXNzIEQgKi8KKyAgICAgIGJpdHMgPSA4OworICAgIGVsc2UgaWYgKCpvZHN0ID49IDE5MikgIC8qIENsYXNzIEMgKi8KKyAgICAgIGJpdHMgPSAyNDsKKyAgICBlbHNlIGlmICgqb2RzdCA+PSAxMjgpICAvKiBDbGFzcyBCICovCisgICAgICBiaXRzID0gMTY7CisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgLyogQ2xhc3MgQSAqLworICAgICAgYml0cyA9IDg7CisgICAgLyogSWYgaW1wdXRlZCBtYXNrIGlzIG5hcnJvd2VyIHRoYW4gc3BlY2lmaWVkIG9jdGV0cywgd2lkZW4uICovCisgICAgaWYgKGJpdHMgPCAoKGRzdCAtIG9kc3QpICogOCkpCisgICAgICBiaXRzID0gYXJlc3hfc3p0b3NpKGRzdCAtIG9kc3QpICogODsKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGJpdHMgc3BlY2lmaWVkIGZvciBhIGNsYXNzIEQKKyAgICAgKiBhZGRyZXNzIGFkanVzdCBiaXRzIHRvIDQuCisgICAgICovCisgICAgaWYgKGJpdHMgPT0gOCAmJiAqb2RzdCA9PSAyMjQpCisgICAgICBiaXRzID0gNDsKKyAgfQorICAvKiBFeHRlbmQgbmV0d29yayB0byBjb3ZlciB0aGUgYWN0dWFsIG1hc2suICovCisgIHdoaWxlIChiaXRzID4gKChkc3QgLSBvZHN0KSAqIDgpKSB7CisgICAgaWYgKCFzaXplLS0pCisgICAgICBnb3RvIGVtc2dzaXplOworICAgICpkc3QrKyA9ICdcMCc7CisgIH0KKyAgcmV0dXJuIChiaXRzKTsKKworICBlbm9lbnQ6CisgIFNFVF9FUlJOTyhFTk9FTlQpOworICByZXR1cm4gKC0xKTsKKworICBlbXNnc2l6ZToKKyAgU0VUX0VSUk5PKEVNU0dTSVpFKTsKKyAgcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldGJpdHMoY29uc3QgY2hhciAqc3JjLCBpbnQgKmJpdHNwKQoreworICBzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5IjsKKyAgaW50IG47CisgIGludCB2YWw7CisgIGNoYXIgY2g7CisKKyAgdmFsID0gMDsKKyAgbiA9IDA7CisgIHdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKyAgICBjb25zdCBjaGFyICpwY2g7CisKKyAgICBwY2ggPSBzdHJjaHIoZGlnaXRzLCBjaCk7CisgICAgaWYgKHBjaCAhPSBOVUxMKSB7CisgICAgICBpZiAobisrICE9IDAgJiYgdmFsID09IDApICAgICAgIC8qIG5vIGxlYWRpbmcgemVyb3MgKi8KKyAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgIHZhbCAqPSAxMDsKKyAgICAgIHZhbCArPSBhcmVzeF9zenRvc2kocGNoIC0gZGlnaXRzKTsKKyAgICAgIGlmICh2YWwgPiAxMjgpICAgICAgICAgICAgICAgICAgLyogcmFuZ2UgKi8KKyAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICByZXR1cm4gKDApOworICB9CisgIGlmIChuID09IDApCisgICAgcmV0dXJuICgwKTsKKyAgKmJpdHNwID0gdmFsOworICByZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50CitnZXR2NChjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50ICpiaXRzcCkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisgIHVuc2lnbmVkIGNoYXIgKm9kc3QgPSBkc3Q7CisgIGludCBuOworICB1bnNpZ25lZCBpbnQgdmFsOworICBjaGFyIGNoOworCisgIHZhbCA9IDA7CisgIG4gPSAwOworICB3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisgICAgY29uc3QgY2hhciAqcGNoOworCisgICAgcGNoID0gc3RyY2hyKGRpZ2l0cywgY2gpOworICAgIGlmIChwY2ggIT0gTlVMTCkgeworICAgICAgaWYgKG4rKyAhPSAwICYmIHZhbCA9PSAwKSAgICAgICAvKiBubyBsZWFkaW5nIHplcm9zICovCisgICAgICAgIHJldHVybiAoMCk7CisgICAgICB2YWwgKj0gMTA7CisgICAgICB2YWwgKz0gYXJlc3hfc3p0b3VpKHBjaCAtIGRpZ2l0cyk7CisgICAgICBpZiAodmFsID4gMjU1KSAgICAgICAgICAgICAgICAgIC8qIHJhbmdlICovCisgICAgICAgIHJldHVybiAoMCk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAnLycpIHsKKyAgICAgIGlmIChkc3QgLSBvZHN0ID4gMykgICAgICAgICAgICAgLyogdG9vIG1hbnkgb2N0ZXRzPyAqLworICAgICAgICByZXR1cm4gKDApOworICAgICAgKmRzdCsrID0gKHVuc2lnbmVkIGNoYXIpdmFsOworICAgICAgaWYgKGNoID09ICcvJykKKyAgICAgICAgcmV0dXJuIChnZXRiaXRzKHNyYywgYml0c3ApKTsKKyAgICAgIHZhbCA9IDA7CisgICAgICBuID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICByZXR1cm4gKDApOworICB9CisgIGlmIChuID09IDApCisgICAgcmV0dXJuICgwKTsKKyAgaWYgKGRzdCAtIG9kc3QgPiAzKSAgICAgICAgICAgICAvKiB0b28gbWFueSBvY3RldHM/ICovCisgICAgcmV0dXJuICgwKTsKKyAgKmRzdCA9ICh1bnNpZ25lZCBjaGFyKXZhbDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2luZXRfbmV0X3B0b25faXB2Nihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyIHhkaWdpdHNfbFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiLAorICAgIHhkaWdpdHNfdVtdID0gIjAxMjM0NTY3ODlBQkNERUYiOworICB1bnNpZ25lZCBjaGFyIHRtcFtOU19JTjZBRERSU1pdLCAqdHAsICplbmRwLCAqY29sb25wOworICBjb25zdCBjaGFyICp4ZGlnaXRzLCAqY3VydG9rOworICBpbnQgY2gsIHNhd194ZGlnaXQ7CisgIHVuc2lnbmVkIGludCB2YWw7CisgIGludCBkaWdpdHM7CisgIGludCBiaXRzOworICBzaXplX3QgYnl0ZXM7CisgIGludCB3b3JkczsKKyAgaW50IGlwdjQ7CisKKyAgbWVtc2V0KCh0cCA9IHRtcCksICdcMCcsIE5TX0lONkFERFJTWik7CisgIGVuZHAgPSB0cCArIE5TX0lONkFERFJTWjsKKyAgY29sb25wID0gTlVMTDsKKyAgLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCisgIGlmICgqc3JjID09ICc6JykKKyAgICBpZiAoKisrc3JjICE9ICc6JykKKyAgICAgIGdvdG8gZW5vZW50OworICBjdXJ0b2sgPSBzcmM7CisgIHNhd194ZGlnaXQgPSAwOworICB2YWwgPSAwOworICBkaWdpdHMgPSAwOworICBiaXRzID0gLTE7CisgIGlwdjQgPSAwOworICB3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisgICAgY29uc3QgY2hhciAqcGNoOworCisgICAgaWYgKChwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX2wpLCBjaCkpID09IE5VTEwpCisgICAgICBwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX3UpLCBjaCk7CisgICAgaWYgKHBjaCAhPSBOVUxMKSB7CisgICAgICB2YWwgPDw9IDQ7CisgICAgICB2YWwgfD0gYXJlc3hfc3p0b3VpKHBjaCAtIHhkaWdpdHMpOworICAgICAgaWYgKCsrZGlnaXRzID4gNCkKKyAgICAgICAgZ290byBlbm9lbnQ7CisgICAgICBzYXdfeGRpZ2l0ID0gMTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoY2ggPT0gJzonKSB7CisgICAgICBjdXJ0b2sgPSBzcmM7CisgICAgICBpZiAoIXNhd194ZGlnaXQpIHsKKyAgICAgICAgaWYgKGNvbG9ucCkKKyAgICAgICAgICBnb3RvIGVub2VudDsKKyAgICAgICAgY29sb25wID0gdHA7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfSBlbHNlIGlmICgqc3JjID09ICdcMCcpCisgICAgICAgIGdvdG8gZW5vZW50OworICAgICAgaWYgKHRwICsgTlNfSU5UMTZTWiA+IGVuZHApCisgICAgICAgIHJldHVybiAoMCk7CisgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDgpICYgMHhmZik7CisgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgJiAweGZmKTsKKyAgICAgIHNhd194ZGlnaXQgPSAwOworICAgICAgZGlnaXRzID0gMDsKKyAgICAgIHZhbCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKGNoID09ICcuJyAmJiAoKHRwICsgTlNfSU5BRERSU1opIDw9IGVuZHApICYmCisgICAgICAgIGdldHY0KGN1cnRvaywgdHAsICZiaXRzKSA+IDApIHsKKyAgICAgIHRwICs9IE5TX0lOQUREUlNaOworICAgICAgc2F3X3hkaWdpdCA9IDA7CisgICAgICBpcHY0ID0gMTsKKyAgICAgIGJyZWFrOyAgLyogJ1wwJyB3YXMgc2VlbiBieSBpbmV0X3B0b240KCkuICovCisgICAgfQorICAgIGlmIChjaCA9PSAnLycgJiYgZ2V0Yml0cyhzcmMsICZiaXRzKSA+IDApCisgICAgICBicmVhazsKKyAgICBnb3RvIGVub2VudDsKKyAgfQorICBpZiAoc2F3X3hkaWdpdCkgeworICAgIGlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQorICAgICAgZ290byBlbm9lbnQ7CisgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikoKHZhbCA+PiA4KSAmIDB4ZmYpOworICAgICp0cCsrID0gKHVuc2lnbmVkIGNoYXIpKHZhbCAmIDB4ZmYpOworICB9CisgIGlmIChiaXRzID09IC0xKQorICAgIGJpdHMgPSAxMjg7CisKKyAgd29yZHMgPSAoYml0cyArIDE1KSAvIDE2OworICBpZiAod29yZHMgPCAyKQorICAgIHdvcmRzID0gMjsKKyAgaWYgKGlwdjQpCisgICAgd29yZHMgPSA4OworICBlbmRwID0gIHRtcCArIDIgKiB3b3JkczsKKworICBpZiAoY29sb25wICE9IE5VTEwpIHsKKyAgICAvKgorICAgICAqIFNpbmNlIHNvbWUgbWVtbW92ZSgpJ3MgZXJyb25lb3VzbHkgZmFpbCB0byBoYW5kbGUKKyAgICAgKiBvdmVybGFwcGluZyByZWdpb25zLCB3ZSdsbCBkbyB0aGUgc2hpZnQgYnkgaGFuZC4KKyAgICAgKi8KKyAgICBjb25zdCBzc2l6ZV90IG4gPSB0cCAtIGNvbG9ucDsKKyAgICBzc2l6ZV90IGk7CisKKyAgICBpZiAodHAgPT0gZW5kcCkKKyAgICAgIGdvdG8gZW5vZW50OworICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisgICAgICAqKGVuZHAgLSBpKSA9ICooY29sb25wICsgbiAtIGkpOworICAgICAgKihjb2xvbnAgKyBuIC0gaSkgPSAwOworICAgIH0KKyAgICB0cCA9IGVuZHA7CisgIH0KKyAgaWYgKHRwICE9IGVuZHApCisgICAgZ290byBlbm9lbnQ7CisKKyAgYnl0ZXMgPSAoYml0cyArIDcpIC8gODsKKyAgaWYgKGJ5dGVzID4gc2l6ZSkKKyAgICBnb3RvIGVtc2dzaXplOworICBtZW1jcHkoZHN0LCB0bXAsIGJ5dGVzKTsKKyAgcmV0dXJuIChiaXRzKTsKKworICBlbm9lbnQ6CisgIFNFVF9FUlJOTyhFTk9FTlQpOworICByZXR1cm4gKC0xKTsKKworICBlbXNnc2l6ZToKKyAgU0VUX0VSUk5PKEVNU0dTSVpFKTsKKyAgcmV0dXJuICgtMSk7Cit9CisKKy8qCisgKiBpbnQKKyAqIGluZXRfbmV0X3B0b24oYWYsIHNyYywgZHN0LCBzaXplKQorICogICAgICBjb252ZXJ0IG5ldHdvcmsgbnVtYmVyIGZyb20gcHJlc2VudGF0aW9uIHRvIG5ldHdvcmsgZm9ybWF0LgorICogICAgICBhY2NlcHRzIGhleCBvY3RldHMsIGhleCBzdHJpbmdzLCBkZWNpbWFsIG9jdGV0cywgYW5kIC9DSURSLgorICogICAgICAic2l6ZSIgaXMgaW4gYnl0ZXMgYW5kIGRlc2NyaWJlcyAiZHN0Ii4KKyAqIHJldHVybjoKKyAqICAgICAgbnVtYmVyIG9mIGJpdHMsIGVpdGhlciBpbXB1dGVkIGNsYXNzZnVsbHkgb3Igc3BlY2lmaWVkIHdpdGggL0NJRFIsCisgKiAgICAgIG9yIC0xIGlmIHNvbWUgZmFpbHVyZSBvY2N1cnJlZCAoY2hlY2sgZXJybm8pLiAgRU5PRU5UIG1lYW5zIGl0IHdhcworICogICAgICBub3QgYSB2YWxpZCBuZXR3b3JrIHNwZWNpZmljYXRpb24uCisgKiBub3RlOgorICogICAgICBPbiBXaW5kb3dzIHdlIHN0b3JlIHRoZSBlcnJvciBpbiB0aGUgdGhyZWFkIGVycm5vLCBub3QKKyAqICAgICAgaW4gdGhlIHdpbnNvY2sgZXJyb3IgY29kZS4gVGhpcyBpcyB0byBhdm9pZCBsb29zaW5nIHRoZQorICogICAgICBhY3R1YWwgbGFzdCB3aW5zb2NrIGVycm9yLiBTbyB1c2UgbWFjcm8gRVJSTk8gdG8gZmV0Y2ggdGhlCisgKiAgICAgIGVycm5vIHRoaXMgZnVudGlvbiBzZXRzIHdoZW4gcmV0dXJuaW5nICgtMSksIG5vdCBTT0NLRVJSTk8uCisgKiBhdXRob3I6CisgKiAgICAgIFBhdWwgVml4aWUgKElTQyksIEp1bmUgMTk5NgorICovCitpbnQKK2FyZXNfaW5ldF9uZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3dpdGNoIChhZikgeworICBjYXNlIEFGX0lORVQ6CisgICAgcmV0dXJuIChpbmV0X25ldF9wdG9uX2lwdjQoc3JjLCBkc3QsIHNpemUpKTsKKyAgY2FzZSBBRl9JTkVUNjoKKyAgICByZXR1cm4gKGluZXRfbmV0X3B0b25faXB2NihzcmMsIGRzdCwgc2l6ZSkpOworICBkZWZhdWx0OgorICAgIFNFVF9FUlJOTyhFQUZOT1NVUFBPUlQpOworICAgIHJldHVybiAoLTEpOworICB9Cit9CisKKyNlbmRpZiAvKiBIQVZFX0lORVRfTkVUX1BUT04gKi8KKworI2lmbmRlZiBIQVZFX0lORVRfUFRPTgoraW50IGFyZXNfaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCit7CisgIGludCByZXN1bHQ7CisgIHNpemVfdCBzaXplOworCisgIGlmIChhZiA9PSBBRl9JTkVUKQorICAgIHNpemUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworICBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikKKyAgICBzaXplID0gc2l6ZW9mKHN0cnVjdCBhcmVzX2luNl9hZGRyKTsKKyAgZWxzZQorICB7CisgICAgU0VUX0VSUk5PKEVBRk5PU1VQUE9SVCk7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJlc3VsdCA9IGFyZXNfaW5ldF9uZXRfcHRvbihhZiwgc3JjLCBkc3QsIHNpemUpOworICBpZiAocmVzdWx0ID09IC0xICYmIEVSUk5PID09IEVOT0VOVCkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIChyZXN1bHQgPiAtMSA/IDEgOiAtMSk7Cit9CisjZWxzZSAvKiBIQVZFX0lORVRfUFRPTiAqLworaW50IGFyZXNfaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCit7CisgIC8qIGp1c3QgcmVsYXkgdGhpcyB0byB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiAqLworICByZXR1cm4gaW5ldF9wdG9uKGFmLCBzcmMsIGRzdCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvaW5ldF9udG9wLmMgYi9hcC9hcHAvYy1hcmVzL3NyYy9pbmV0X250b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDIwZjZjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvaW5ldF9udG9wLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfSAorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjZWxzZQorIyAgaW5jbHVkZSAibmFtZXNlci5oIgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYXJlcy5oIgorI2luY2x1ZGUgImFyZXNfaXB2Ni5oIgorCisjaWZuZGVmIEhBVkVfSU5FVF9OVE9QCisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgY29uc3QgY2hhciAqaW5ldF9udG9wNihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpOworCisvKiBjaGFyICoKKyAqIGluZXRfbnRvcChhZiwgc3JjLCBkc3QsIHNpemUpCisgKiAgICAgY29udmVydCBhIG5ldHdvcmsgZm9ybWF0IGFkZHJlc3MgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqIHJldHVybjoKKyAqICAgICBwb2ludGVyIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQgYWRkcmVzcyAoYGRzdCcpLCBvciBOVUxMIChzZWUgZXJybm8pLgorICogbm90ZToKKyAqICAgICBPbiBXaW5kb3dzIHdlIHN0b3JlIHRoZSBlcnJvciBpbiB0aGUgdGhyZWFkIGVycm5vLCBub3QKKyAqICAgICBpbiB0aGUgd2luc29jayBlcnJvciBjb2RlLiBUaGlzIGlzIHRvIGF2b2lkIGxvb3NpbmcgdGhlCisgKiAgICAgYWN0dWFsIGxhc3Qgd2luc29jayBlcnJvci4gU28gdXNlIG1hY3JvIEVSUk5PIHRvIGZldGNoIHRoZQorICogICAgIGVycm5vIHRoaXMgZnVudGlvbiBzZXRzIHdoZW4gcmV0dXJuaW5nIE5VTEwsIG5vdCBTT0NLRVJSTk8uCisgKiBhdXRob3I6CisgKiAgICAgUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworY29uc3QgY2hhciAqCithcmVzX2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBhcmVzX3NvY2tsZW5fdCBzaXplKQoreworICBzd2l0Y2ggKGFmKSB7CisgIGNhc2UgQUZfSU5FVDoKKyAgICByZXR1cm4gKGluZXRfbnRvcDQoc3JjLCBkc3QsIChzaXplX3Qpc2l6ZSkpOworICBjYXNlIEFGX0lORVQ2OgorICAgIHJldHVybiAoaW5ldF9udG9wNihzcmMsIGRzdCwgKHNpemVfdClzaXplKSk7CisgIGRlZmF1bHQ6CisgICAgU0VUX0VSUk5PKEVBRk5PU1VQUE9SVCk7CisgICAgcmV0dXJuIChOVUxMKTsKKyAgfQorICAvKiBOT1RSRUFDSEVEICovCit9CisKKy8qIGNvbnN0IGNoYXIgKgorICogaW5ldF9udG9wNChzcmMsIGRzdCwgc2l6ZSkKKyAqICAgICBmb3JtYXQgYW4gSVB2NCBhZGRyZXNzCisgKiByZXR1cm46CisgKiAgICAgYGRzdCcgKGFzIGEgY29uc3QpCisgKiBub3RlczoKKyAqICAgICAoMSkgdXNlcyBubyBzdGF0aWNzCisgKiAgICAgKDIpIHRha2VzIGEgdW5zaWduZWQgY2hhciogbm90IGFuIGluX2FkZHIgYXMgaW5wdXQKKyAqIGF1dGhvcjoKKyAqICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiJXUuJXUuJXUuJXUiOworICBjaGFyIHRtcFtzaXplb2YoIjI1NS4yNTUuMjU1LjI1NSIpXTsKKworICBpZiAoKHNpemVfdClzcHJpbnRmKHRtcCwgZm10LCBzcmNbMF0sIHNyY1sxXSwgc3JjWzJdLCBzcmNbM10pID49IHNpemUpIHsKKyAgICBTRVRfRVJSTk8oRU5PU1BDKTsKKyAgICByZXR1cm4gKE5VTEwpOworICB9CisgIHN0cmNweShkc3QsIHRtcCk7CisgIHJldHVybiAoZHN0KTsKK30KKworLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKQorICogICAgIGNvbnZlcnQgSVB2NiBiaW5hcnkgYWRkcmVzcyBpbnRvIHByZXNlbnRhdGlvbiAocHJpbnRhYmxlKSBmb3JtYXQKKyAqIGF1dGhvcjoKKyAqICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgLyoKKyAgICogTm90ZSB0aGF0IGludDMyX3QgYW5kIGludDE2X3QgbmVlZCBvbmx5IGJlICJhdCBsZWFzdCIgbGFyZ2UgZW5vdWdoCisgICAqIHRvIGNvbnRhaW4gYSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuICBPbiBzb21lIHN5c3RlbXMsIGxpa2UKKyAgICogQ3JheXMsIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYW4gaW50ZWdlciB2YXJpYWJsZSB3aXRoIDE2IGJpdHMuCisgICAqIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29kZWQKKyAgICogdG8gdXNlIHBvaW50ZXIgb3ZlcmxheXMuICBBbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICAgKi8KKyAgY2hhciB0bXBbc2l6ZW9mKCJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiKV07CisgIGNoYXIgKnRwOworICBzdHJ1Y3QgeyBpbnQgYmFzZSwgbGVuOyB9IGJlc3QsIGN1cjsKKyAgdW5zaWduZWQgaW50IHdvcmRzW05TX0lONkFERFJTWiAvIE5TX0lOVDE2U1pdOworICBpbnQgaTsKKworICAvKgorICAgKiBQcmVwcm9jZXNzOgorICAgKiAgQ29weSB0aGUgaW5wdXQgKGJ5dGV3aXNlKSBhcnJheSBpbnRvIGEgd29yZHdpc2UgYXJyYXkuCisgICAqICBGaW5kIHRoZSBsb25nZXN0IHJ1biBvZiAweDAwJ3MgaW4gc3JjW10gZm9yIDo6IHNob3J0aGFuZGluZy4KKyAgICovCisgIG1lbXNldCh3b3JkcywgJ1wwJywgc2l6ZW9mKHdvcmRzKSk7CisgIGZvciAoaSA9IDA7IGkgPCBOU19JTjZBRERSU1o7IGkrKykKKyAgICB3b3Jkc1tpIC8gMl0gfD0gKHNyY1tpXSA8PCAoKDEgLSAoaSAlIDIpKSA8PCAzKSk7CisgIGJlc3QuYmFzZSA9IC0xOworICBiZXN0LmxlbiA9IDA7CisgIGN1ci5iYXNlID0gLTE7CisgIGN1ci5sZW4gPSAwOworICBmb3IgKGkgPSAwOyBpIDwgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opOyBpKyspIHsKKyAgICBpZiAod29yZHNbaV0gPT0gMCkgeworICAgICAgaWYgKGN1ci5iYXNlID09IC0xKQorICAgICAgICBjdXIuYmFzZSA9IGksIGN1ci5sZW4gPSAxOworICAgICAgZWxzZQorICAgICAgICBjdXIubGVuKys7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChjdXIuYmFzZSAhPSAtMSkgeworICAgICAgICBpZiAoYmVzdC5iYXNlID09IC0xIHx8IGN1ci5sZW4gPiBiZXN0LmxlbikKKyAgICAgICAgICBiZXN0ID0gY3VyOworICAgICAgICBjdXIuYmFzZSA9IC0xOworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKyAgICBpZiAoYmVzdC5iYXNlID09IC0xIHx8IGN1ci5sZW4gPiBiZXN0LmxlbikKKyAgICAgIGJlc3QgPSBjdXI7CisgIH0KKyAgaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiBiZXN0LmxlbiA8IDIpCisgICAgYmVzdC5iYXNlID0gLTE7CisKKyAgLyoKKyAgICogRm9ybWF0IHRoZSByZXN1bHQuCisgICAqLworICB0cCA9IHRtcDsKKyAgZm9yIChpID0gMDsgaSA8IChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKTsgaSsrKSB7CisgICAgLyogQXJlIHdlIGluc2lkZSB0aGUgYmVzdCBydW4gb2YgMHgwMCdzPyAqLworICAgIGlmIChiZXN0LmJhc2UgIT0gLTEgJiYgaSA+PSBiZXN0LmJhc2UgJiYKKyAgICAgICAgaSA8IChiZXN0LmJhc2UgKyBiZXN0LmxlbikpIHsKKyAgICAgIGlmIChpID09IGJlc3QuYmFzZSkKKyAgICAgICAgKnRwKysgPSAnOic7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgLyogQXJlIHdlIGZvbGxvd2luZyBhbiBpbml0aWFsIHJ1biBvZiAweDAwcyBvciBhbnkgcmVhbCBoZXg/ICovCisgICAgaWYgKGkgIT0gMCkKKyAgICAgICp0cCsrID0gJzonOworICAgIC8qIElzIHRoaXMgYWRkcmVzcyBhbiBlbmNhcHN1bGF0ZWQgSVB2ND8gKi8KKyAgICBpZiAoaSA9PSA2ICYmIGJlc3QuYmFzZSA9PSAwICYmIChiZXN0LmxlbiA9PSA2IHx8CisgICAgICAgIChiZXN0LmxlbiA9PSA3ICYmIHdvcmRzWzddICE9IDB4MDAwMSkgfHwKKyAgICAgICAgKGJlc3QubGVuID09IDUgJiYgd29yZHNbNV0gPT0gMHhmZmZmKSkpIHsKKyAgICAgIGlmICghaW5ldF9udG9wNChzcmMrMTIsIHRwLCBzaXplb2YodG1wKSAtICh0cCAtIHRtcCkpKQorICAgICAgICByZXR1cm4gKE5VTEwpOworICAgICAgdHAgKz0gc3RybGVuKHRwKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICB0cCArPSBzcHJpbnRmKHRwLCAiJXgiLCB3b3Jkc1tpXSk7CisgIH0KKyAgLyogV2FzIGl0IGEgdHJhaWxpbmcgcnVuIG9mIDB4MDAncz8gKi8KKyAgaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiAoYmVzdC5iYXNlICsgYmVzdC5sZW4pID09IAorICAgICAgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opKQorICAgICp0cCsrID0gJzonOworICAqdHArKyA9ICdcMCc7CisKKyAgLyoKKyAgICogQ2hlY2sgZm9yIG92ZXJmbG93LCBjb3B5LCBhbmQgd2UncmUgZG9uZS4KKyAgICovCisgIGlmICgoc2l6ZV90KSh0cCAtIHRtcCkgPiBzaXplKSB7CisgICAgU0VUX0VSUk5PKEVOT1NQQyk7CisgICAgcmV0dXJuIChOVUxMKTsKKyAgfQorICBzdHJjcHkoZHN0LCB0bXApOworICByZXR1cm4gKGRzdCk7Cit9CisKKyNlbHNlIC8qIEhBVkVfSU5FVF9OVE9QICovCisKK2NvbnN0IGNoYXIgKgorYXJlc19pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgYXJlc19zb2NrbGVuX3Qgc2l6ZSkKK3sKKyAgLyoganVzdCByZWxheSB0aGlzIHRvIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uICovCisgIHJldHVybiBpbmV0X250b3AoYWYsIHNyYywgZHN0LCBzaXplKTsKK30KKworI2VuZGlmIC8qIEhBVkVfSU5FVF9OVE9QICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9pbnN0YWxsLXNoIGIvYXAvYXBwL2MtYXJlcy9zcmMvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzdiYjg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvaW5zdGFsbC1zaApAQCAtMCwwICsxLDUyNyBAQAorIyEvYmluL3NoCisjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQorCitzY3JpcHR2ZXJzaW9uPTIwMTEtMTEtMjAuMDc7ICMgVVRDCisKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAorIyAnbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgorIworIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCisjIGZyb20gc2NyYXRjaC4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgorCisjIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKKworIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgorZG9pdD0ke0RPSVRQUk9HLX0KK2lmIHRlc3QgLXogIiRkb2l0IjsgdGhlbgorICBkb2l0X2V4ZWM9ZXhlYworZWxzZQorICBkb2l0X2V4ZWM9JGRvaXQKK2ZpCisKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgorCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CisKK3Bvc2l4X2dsb2I9Jz8nCitpbml0aWFsaXplX3Bvc2l4X2dsb2I9JworICB0ZXN0ICIkcG9zaXhfZ2xvYiIgIT0gIj8iIHx8IHsKKyAgICBpZiAoc2V0IC1mKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgcG9zaXhfZ2xvYj0KKyAgICBlbHNlCisgICAgICBwb3NpeF9nbG9iPToKKyAgICBmaQorICB9CisnCisKK3Bvc2l4X21rZGlyPQorCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQorCitjaGdycGNtZD0KK2NobW9kY21kPSRjaG1vZHByb2cKK2Nob3duY21kPQorbXZjbWQ9JG12cHJvZworcm1jbWQ9IiRybXByb2cgLWYiCitzdHJpcGNtZD0KKworc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdF9hcmc9CisKK2NvcHlfb25fY2hhbmdlPWZhbHNlCitub190YXJnZXRfZGlyZWN0b3J5PQorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFstVF0gU1JDRklMRSBEU1RGSUxFCisgICBvcjogJDAgW09QVElPTl0uLi4gU1JDRklMRVMuLi4gRElSRUNUT1JZCisgICBvcjogJDAgW09QVElPTl0uLi4gLXQgRElSRUNUT1JZIFNSQ0ZJTEVTLi4uCisgICBvcjogJDAgW09QVElPTl0uLi4gLWQgRElSRUNUT1JJRVMuLi4KKworSW4gdGhlIDFzdCBmb3JtLCBjb3B5IFNSQ0ZJTEUgdG8gRFNURklMRS4KK0luIHRoZSAybmQgYW5kIDNyZCwgY29weSBhbGwgU1JDRklMRVMgdG8gRElSRUNUT1JZLgorSW4gdGhlIDR0aCwgY3JlYXRlIERJUkVDVE9SSUVTLgorCitPcHRpb25zOgorICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorICAgICAtLXZlcnNpb24gIGRpc3BsYXkgdmVyc2lvbiBpbmZvIGFuZCBleGl0LgorCisgIC1jICAgICAgICAgICAgKGlnbm9yZWQpCisgIC1DICAgICAgICAgICAgaW5zdGFsbCBvbmx5IGlmIGRpZmZlcmVudCAocHJlc2VydmUgdGhlIGxhc3QgZGF0YSBtb2RpZmljYXRpb24gdGltZSkKKyAgLWQgICAgICAgICAgICBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIGZpbGVzLgorICAtZyBHUk9VUCAgICAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgorICAtbSBNT0RFICAgICAgICRjaG1vZHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIE1PREUuCisgIC1vIFVTRVIgICAgICAgJGNob3ducHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gVVNFUi4KKyAgLXMgICAgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KKyAgLXQgRElSRUNUT1JZICBpbnN0YWxsIGludG8gRElSRUNUT1JZLgorICAtVCAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvciBpZiBEU1RGSUxFIGlzIGEgZGlyZWN0b3J5LgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZHM6CisgIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENNUFBST0cgQ1BQUk9HIE1LRElSUFJPRyBNVlBST0cKKyAgUk1QUk9HIFNUUklQUFJPRworIgorCit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbworICBjYXNlICQxIGluCisgICAgLWMpIDs7CisKKyAgICAtQykgY29weV9vbl9jaGFuZ2U9dHJ1ZTs7CisKKyAgICAtZCkgZGlyX2FyZz10cnVlOzsKKworICAgIC1nKSBjaGdycGNtZD0iJGNoZ3JwcHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OworCisgICAgLW0pIG1vZGU9JDIKKwljYXNlICRtb2RlIGluCisJICAqJyAnKiB8IConCScqIHwgKicKKycqCSAgfCAqJyonKiB8IConPycqIHwgKidbJyopCisJICAgIGVjaG8gIiQwOiBpbnZhbGlkIG1vZGU6ICRtb2RlIiA+JjIKKwkgICAgZXhpdCAxOzsKKwllc2FjCisJc2hpZnQ7OworCisgICAgLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKKworICAgIC10KSBkc3RfYXJnPSQyCisJIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKwljYXNlICRkc3RfYXJnIGluCisJICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OworCWVzYWMKKwlzaGlmdDs7CisKKyAgICAtVCkgbm9fdGFyZ2V0X2RpcmVjdG9yeT10cnVlOzsKKworICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgIC0tKQlzaGlmdAorCWJyZWFrOzsKKworICAgIC0qKQllY2hvICIkMDogaW52YWxpZCBvcHRpb246ICQxIiA+JjIKKwlleGl0IDE7OworCisgICAgKikgIGJyZWFrOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiB0ZXN0ICQjIC1uZSAwICYmIHRlc3QgLXogIiRkaXJfYXJnJGRzdF9hcmciOyB0aGVuCisgICMgV2hlbiAtZCBpcyB1c2VkLCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgorICAjIFdoZW4gLXQgaXMgdXNlZCwgdGhlIGRlc3RpbmF0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkLgorICAjIE90aGVyd2lzZSwgdGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIGRlc3RpbmF0aW9uLiAgUmVtb3ZlIGl0IGZyb20gJEAuCisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgICMgJEAgaXMgbm90IGVtcHR5OiBpdCBjb250YWlucyBhdCBsZWFzdCAkYXJnLgorICAgICAgc2V0IGZub3JkICIkQCIgIiRkc3RfYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgIGZpCisgICAgc2hpZnQgIyBhcmcKKyAgICBkc3RfYXJnPSRhcmcKKyAgICAjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorICAgIGNhc2UgJGRzdF9hcmcgaW4KKyAgICAgIC0qIHwgWz1cKFwpIV0pIGRzdF9hcmc9Li8kZHN0X2FyZzs7CisgICAgZXNhYworICBkb25lCitmaQorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiBubyBpbnB1dCBmaWxlIHNwZWNpZmllZC4iID4mMgorICAgIGV4aXQgMQorICBmaQorICAjIEl0J3MgT0sgdG8gY2FsbCAnaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KKyAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KKyAgZXhpdCAwCitmaQorCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgZG9fZXhpdD0nKGV4aXQgJHJldCk7IGV4aXQgJHJldCcKKyAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKKyAgdHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKKyAgdHJhcCAicmV0PTE0MTsgJGRvX2V4aXQiIDEzCisgIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQorCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OworCisgICAgKlswLTddKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9JyUgMjAwJworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPWBleHByICcoJyA3NzcgLSAkbW9kZSAlIDEwMDAgJyknICR1X3BsdXNfcndgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9LHUrcncKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz0kbW9kZSR1X3BsdXNfcnc7OworICBlc2FjCitmaQorCitmb3Igc3JjCitkbworICAjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorICBjYXNlICRzcmMgaW4KKyAgICAtKiB8IFs9XChcKSFdKSBzcmM9Li8kc3JjOzsKKyAgZXNhYworCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIGRzdD0kc3JjCisgICAgZHN0ZGlyPSRkc3QKKyAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgZWxzZQorCisgICAgIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyAgICAjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCisgICAgIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCisgICAgaWYgdGVzdCAhIC1mICIkc3JjIiAmJiB0ZXN0ICEgLWQgIiRzcmMiOyB0aGVuCisgICAgICBlY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRkc3RfYXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6IG5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBkc3Q9JGRzdF9hcmcKKworICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKKyAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgorICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KKwllY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgICBkc3RkaXI9JGRzdAorICAgICAgZHN0PSRkc3RkaXIvYGJhc2VuYW1lICIkc3JjImAKKyAgICAgIGRzdGRpcl9zdGF0dXM9MAorICAgIGVsc2UKKyAgICAgICMgUHJlZmVyIGRpcm5hbWUsIGJ1dCBmYWxsIGJhY2sgb24gYSBzdWJzdGl0dXRlIGlmIGRpcm5hbWUgZmFpbHMuCisgICAgICBkc3RkaXI9YAorCShkaXJuYW1lICIkZHN0IikgMj4vZGV2L251bGwgfHwKKwlleHByIFgiJGRzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisJZWNobyBYIiRkc3QiIHwKKwkgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXCkuKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSBzLy4qLy4vOyBxJworICAgICAgYAorCisgICAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgICAgZHN0ZGlyX3N0YXR1cz0kPworICAgIGZpCisgIGZpCisKKyAgb2Jzb2xldGVfbWtkaXJfdXNlZD1mYWxzZQorCisgIGlmIHRlc3QgJGRzdGRpcl9zdGF0dXMgIT0gMDsgdGhlbgorICAgIGNhc2UgJHBvc2l4X21rZGlyIGluCisgICAgICAnJykKKwkjIENyZWF0ZSBpbnRlcm1lZGlhdGUgZGlycyB1c2luZyBtb2RlIDc1NSBhcyBtb2RpZmllZCBieSB0aGUgdW1hc2suCisJIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKwl1bWFzaz1gdW1hc2tgCisJY2FzZSAkc3RyaXBjbWQuJHVtYXNrIGluCisJICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKwkgICpbMjM2N11bMjM2N10pIG1rZGlyX3VtYXNrPSR1bWFzazs7CisJICAuKjBbMDJdWzAyXSB8IC5bMDJdWzAyXSB8IC5bMDJdKSBta2Rpcl91bWFzaz0yMjs7CisKKwkgICpbMC03XSkKKwkgICAgbWtkaXJfdW1hc2s9YGV4cHIgJHVtYXNrICsgMjIgXAorCSAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisJICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisJICAgIGA7OworCSAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworCWVzYWMKKworCSMgV2l0aCAtZCwgY3JlYXRlIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIHVzZXItc3BlY2lmaWVkIG1vZGUuCisJIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgorCWlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorCSAgbWtkaXJfbW9kZT0tbSRtb2RlCisJZWxzZQorCSAgbWtkaXJfbW9kZT0KKwlmaQorCisJcG9zaXhfbWtkaXI9ZmFsc2UKKwljYXNlICR1bWFzayBpbgorCSAgKlsxMjM1NjddWzAtN11bMC03XSkKKwkgICAgIyBQT1NJWCBta2RpciAtcCBzZXRzIHUrd3ggYml0cyByZWdhcmRsZXNzIG9mIHVtYXNrLCB3aGljaAorCSAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorCSAgICA7OworCSAgKikKKwkgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKwkgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIgMj4vZGV2L251bGw7IGV4aXQgJHJldCcgMAorCisJICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkJZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkdG1wZGlyL2QiKSA+L2Rldi9udWxsIDI+JjEKKwkgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCisJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCisJCSAgICMgb3RoZXItd3JpdGFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKwkJICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OworCQkgICAgIGQ/Pz8/LT8tLSopIGRpZmZlcmVudF9tb2RlPTc1NTs7CisJCSAgICAgKikgZmFsc2U7OworCQkgICBlc2FjICYmCisJCSAgICRta2RpcnByb2cgLW0kZGlmZmVyZW50X21vZGUgLXAgLS0gIiR0bXBkaXIiICYmIHsKKwkJICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCisJCSAgIH0KKwkJIH0KKwkgICAgICB0aGVuIHBvc2l4X21rZGlyPToKKwkgICAgICBmaQorCSAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCisJICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKwkgICAgZmkKKwkgICAgdHJhcCAnJyAwOzsKKwllc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKwl1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCisgICAgICApCisgICAgdGhlbiA6CisgICAgZWxzZQorCisgICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAorICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCisgICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgorCisgICAgICBjYXNlICRkc3RkaXIgaW4KKwkvKikgcHJlZml4PScvJzs7CisJWy09XChcKSFdKikgcHJlZml4PScuLyc7OworCSopICBwcmVmaXg9Jyc7OworICAgICAgZXNhYworCisgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIgorCisgICAgICBvSUZTPSRJRlMKKyAgICAgIElGUz0vCisgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYKKyAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCisgICAgICBzaGlmdAorICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmCisgICAgICBJRlM9JG9JRlMKKworICAgICAgcHJlZml4ZXM9CisKKyAgICAgIGZvciBkCisgICAgICBkbworCXRlc3QgWCIkZCIgPSBYICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQorCWVsc2UKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQorCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKKyAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKKyAgZWxzZQorCisgICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KKyAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KKworICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCisKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCisKKyAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCisgICAgIworICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIworICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCisKKyAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCisgICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCisgICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IgkyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiCTI+L2Rldi9udWxsYCAmJgorCisgICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YgJiYKKworICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKKworCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL2xpYmNhcmVzLnBjLmluIGIvYXAvYXBwL2MtYXJlcy9zcmMvbGliY2FyZXMucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1N2MxYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL2xpYmNhcmVzLnBjLmluCkBAIC0wLDAgKzEsMjAgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUHJvamVjdCAgICAgICAgX19fICAgICAgIF9fIF8gXyBfXyBfX18gIF9fXyAKKyMgICAgICAgICAgICAgICAvIF9ffF9fX18gLyBfYCB8ICdfXy8gXyBcLyBfX3wKKyMgICAgICAgICAgICAgIHwgKF98X19fX198IChffCB8IHwgfCAgX18vXF9fIFwKKyMgICAgICAgICAgICAgICBcX19ffCAgICAgXF9fLF98X3wgIFxfX198fF9fXy8KKyMKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiBjLWFyZXMKK1VSTDogaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL2MtYXJlcy8KK0Rlc2NyaXB0aW9uOiBhc3luY2hyb25vdXMgRE5TIGxvb2t1cCBsaWJyYXJ5CitWZXJzaW9uOiBAVkVSU0lPTkAKK1JlcXVpcmVzOiAKK1JlcXVpcmVzLnByaXZhdGU6IAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQENQUEZMQUdfQ0FSRVNfU1RBVElDTElCQAorTGliczogLUwke2xpYmRpcn0gLWxjYXJlcworTGlicy5wcml2YXRlOiBAQ0FSRVNfUFJJVkFURV9MSUJTQApkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbHRtYWluLnNoIGIvYXAvYXBwL2MtYXJlcy9zcmMvbHRtYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0N2Q3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9sdG1haW4uc2gKQEAgLTAsMCArMSwxMTE1NiBAQAorIyEgL2Jpbi9zaAorIyMgRE8gTk9UIEVESVQgLSBUaGlzIGZpbGUgZ2VuZXJhdGVkIGZyb20gLi9idWlsZC1hdXgvbHRtYWluLmluCisjIyAgICAgICAgICAgICAgIGJ5IGlubGluZS1zb3VyY2UgdjIwMTQtMDEtMDMuMDEKKworIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40LjYKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK1BST0dSQU09bGlidG9vbAorUEFDS0FHRT1saWJ0b29sCitWRVJTSU9OPSIyLjQuNiBEZWJpYW4tMi40LjYtMC4xIgorcGFja2FnZV9yZXZpc2lvbj0yLjQuNgorCisKKyMjIC0tLS0tLSAjIworIyMgVXNhZ2UuICMjCisjIyAtLS0tLS0gIyMKKworIyBSdW4gJy4vbGlidG9vbCAtLWhlbHAnIGZvciBoZWxwIHdpdGggdXNpbmcgdGhpcyBzY3JpcHQgZnJvbSB0aGUKKyMgY29tbWFuZCBsaW5lLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVzZXIgb3ZlcnJpZGFibGUgY29tbWFuZCBwYXRocy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBZnRlciBjb25maWd1cmUgY29tcGxldGVzLCBpdCBoYXMgYSBiZXR0ZXIgaWRlYSBvZiBzb21lIG9mIHRoZQorIyBzaGVsbCB0b29scyB3ZSBuZWVkIHRoYW4gdGhlIGRlZmF1bHRzIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBzaGFyZWQKKyMgd2l0aCBib290c3RyYXAsIHNvIHNldCB0aG9zZSBoZXJlIHdoZXJlIHRoZXkgY2FuIHN0aWxsIGJlIG92ZXItCisjIHJpZGRlbiBieSB0aGUgdXNlciwgYnV0IG90aGVyd2lzZSB0YWtlIHByZWNlZGVuY2UuCisKKzogJHtBVVRPQ09ORj0iYXV0b2NvbmYifQorOiAke0FVVE9NQUtFPSJhdXRvbWFrZSJ9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFNvdXJjZSBleHRlcm5hbCBsaWJyYXJpZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIE11Y2ggb2Ygb3VyIGxvdy1sZXZlbCBmdW5jdGlvbmFsaXR5IG5lZWRzIHRvIGJlIHNvdXJjZWQgZnJvbSBleHRlcm5hbAorIyBsaWJyYXJpZXMsIHdoaWNoIGFyZSBpbnN0YWxsZWQgdG8gJHBrZ2F1eGRpci4KKworIyBTZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCitzY3JpcHR2ZXJzaW9uPTIwMTUtMDEtMjAuMTc7ICMgVVRDCisKKyMgR2VuZXJhbCBzaGVsbCBzY3JpcHQgYm9pbGVyIHBsYXRlLCBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91IGRpc3RyaWJ1dGUKKyMgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwKKyMgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlCisjIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgRXZhbHVhdGUgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIHNjcmlwdCB0byBnYWluIGFjY2VzcyB0bworIyB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZGVmaW5lZCBoZXJlOgorIworIyAgIC4gYGVjaG8gIiQwIiB8ICR7U0VELXNlZH0gJ3N8W14vXSokfHwnYC9idWlsZC1hdXgvZnVuY2xpYi5zaAorIworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBhbnkgb2YgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgc2V0dGluZ3MsIGRvIHRoYXQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBmaWxlLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTaGVsbCBub3JtYWxpc2F0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBTb21lIHNoZWxscyBuZWVkIGEgbGl0dGxlIGhlbHAgdG8gYmUgYXMgQm91cm5lIGNvbXBhdGlibGUgYXMgcG9zc2libGUuCisjIEJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgYWxsIHRoYXQgaGVscCBoYXMgYmVlbiBwcm92aWRlZCEKKworRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7IGVzYWMKK2ZpCisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyBpbiBjYXNlIHRoZXkgYXJlIHJlcXVpcmVkIGxhdGVyLgorX0dfdXNlcl9sb2NhbGU9CitfR19zYWZlX2xvY2FsZT0KK2ZvciBfR192YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworZG8KKyAgZXZhbCAiaWYgdGVzdCBzZXQgPSBcIlwkeyRfR192YXIrc2V0fVwiOyB0aGVuCisgICAgICAgICAgc2F2ZV8kX0dfdmFyPVwkJF9HX3ZhcgorICAgICAgICAgICRfR192YXI9QworCSAgZXhwb3J0ICRfR192YXIKKwkgIF9HX3VzZXJfbG9jYWxlPVwiJF9HX3Zhcj1cXFwkc2F2ZV9cJF9HX3ZhcjsgXCRfR191c2VyX2xvY2FsZVwiCisJICBfR19zYWZlX2xvY2FsZT1cIiRfR192YXI9QzsgXCRfR19zYWZlX2xvY2FsZVwiCisJZmkiCitkb25lCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorc3A9JyAnCitubD0nCisnCitJRlM9IiRzcAkkbmwiCisKKyMgVGhlcmUgYXJlIGFwcGFyZW50bHkgc29tZSByZXRhcmRlZCBzeXN0ZW1zIHRoYXQgdXNlICc7JyBhcyBhIFBBVEggc2VwYXJhdG9yIQoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTG9jYXRlIGNvbW1hbmQgdXRpbGl0aWVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgZnVuY19leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRoYXQgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2Z1bmNfZXhlY3V0YWJsZV9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfQorCisKKyMgZnVuY19wYXRoX3Byb2dzIFBST0dTX0xJU1QgQ0hFQ0tfRlVOQyBbUEFUSF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VhcmNoIGZvciBlaXRoZXIgYSBwcm9ncmFtIHRoYXQgcmVzcG9uZHMgdG8gLS12ZXJzaW9uIHdpdGggb3V0cHV0CisjIGNvbnRhaW5pbmcgIkdOVSIsIG9yIGVsc2UgcmV0dXJuZWQgYnkgQ0hFQ0tfRlVOQyBvdGhlcndpc2UsIGJ5CisjIHRyeWluZyBhbGwgdGhlIGRpcmVjdG9yaWVzIGluIFBBVEggd2l0aCBlYWNoIG9mIHRoZSBlbGVtZW50cyBvZgorIyBQUk9HU19MSVNULgorIworIyBDSEVDS19GVU5DIHNob3VsZCBhY2NlcHQgdGhlIHBhdGggdG8gYSBjYW5kaWRhdGUgcHJvZ3JhbSwgYW5kCisjIHNldCAkZnVuY19jaGVja19wcm9nX3Jlc3VsdCBpZiBpdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCBsZXNzIHRoYW4KKyMgJF9HX3BhdGhfcHJvZ19tYXggY2hhcmFjdGVycy4KK2Z1bmNfcGF0aF9wcm9ncyAoKQoreworICAgIF9HX3Byb2dzX2xpc3Q9JDEKKyAgICBfR19jaGVja19mdW5jPSQyCisgICAgX0dfUEFUSD0kezMtIiRQQVRIIn0KKworICAgIF9HX3BhdGhfcHJvZ19tYXg9MAorICAgIF9HX3BhdGhfcHJvZ19mb3VuZD1mYWxzZQorICAgIF9HX3NhdmVfSUZTPSRJRlM7IElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CisgICAgZm9yIF9HX2RpciBpbiAkX0dfUEFUSDsgZG8KKyAgICAgIElGUz0kX0dfc2F2ZV9JRlMKKyAgICAgIHRlc3QgLXogIiRfR19kaXIiICYmIF9HX2Rpcj0uCisgICAgICBmb3IgX0dfcHJvZ19uYW1lIGluICRfR19wcm9nc19saXN0OyBkbworICAgICAgICBmb3IgX2V4ZWV4dCBpbiAnJyAuRVhFOyBkbworICAgICAgICAgIF9HX3BhdGhfcHJvZz0kX0dfZGlyLyRfR19wcm9nX25hbWUkX2V4ZWV4dAorICAgICAgICAgIGZ1bmNfZXhlY3V0YWJsZV9wICIkX0dfcGF0aF9wcm9nIiB8fCBjb250aW51ZQorICAgICAgICAgIGNhc2UgYCIkX0dfcGF0aF9wcm9nIiAtLXZlcnNpb24gMj4mMWAgaW4KKyAgICAgICAgICAgICpHTlUqKSBmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0PSRfR19wYXRoX3Byb2cgX0dfcGF0aF9wcm9nX2ZvdW5kPTogOzsKKyAgICAgICAgICAgICopICAgICAkX0dfY2hlY2tfZnVuYyAkX0dfcGF0aF9wcm9nCisJCSAgIGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQ9JGZ1bmNfY2hlY2tfcHJvZ19yZXN1bHQKKwkJICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgJF9HX3BhdGhfcHJvZ19mb3VuZCAmJiBicmVhayAzCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSRfR19zYXZlX0lGUworICAgIHRlc3QgLXogIiRmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0IiAmJiB7CisgICAgICBlY2hvICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiID4mMgorICAgICAgZXhpdCAxCisgICAgfQorfQorCisKKyMgV2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBiZWZvcmUgY29uZmlndXJlCisjIGhhcyBmaWd1cmVkIG91dCB3aGVyZSB0aGUgYmVzdCBiaW5hcmllcyBhcmUga2VwdCwgd2hpY2ggbWVhbnMgd2UgaGF2ZQorIyB0byBzZWFyY2ggZm9yIHRoZW0gb3Vyc2VsdmVzIC0gZXhjZXB0IHdoZW4gdGhlIHJlc3VsdHMgYXJlIGFscmVhZHkgc2V0CisjIHdoZXJlIHdlIHNraXAgdGhlIHNlYXJjaGVzLgorCisjIFVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0dGluZyBTRUQsIHNlYXJjaCB0aGUgcGF0aCBmb3IgZWl0aGVyIEdOVQorIyBzZWQsIG9yIHRoZSBzZWQgdGhhdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCB0aGUgbGVhc3QuCit0ZXN0IC16ICIkU0VEIiAmJiB7CisgIF9HX3NlZF9zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgIGZvciBfR19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgX0dfc2VkX3NjcmlwdD0kX0dfc2VkX3NjcmlwdCRubCRfR19zZWRfc2NyaXB0CisgIGRvbmUKKyAgZWNobyAiJF9HX3NlZF9zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgIF9HX3NlZF9zY3JpcHQ9CisKKyAgZnVuY19jaGVja19wcm9nX3NlZCAoKQorICB7CisgICAgX0dfcGF0aF9wcm9nPSQxCisKKyAgICBfR19jb3VudD0wCisgICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCisgICAgd2hpbGUgOgorICAgIGRvCisgICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgICAgZWNobyAnJyA+PiBjb25mdGVzdC5ubAorICAgICAgIiRfR19wYXRoX3Byb2ciIC1mIGNvbmZ0ZXN0LnNlZCA8Y29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICAgZGlmZiBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgICBfR19jb3VudD1gZXhwciAkX0dfY291bnQgKyAxYAorICAgICAgaWYgdGVzdCAiJF9HX2NvdW50IiAtZ3QgIiRfR19wYXRoX3Byb2dfbWF4IjsgdGhlbgorICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3VsdD0kX0dfcGF0aF9wcm9nCisgICAgICAgIF9HX3BhdGhfcHJvZ19tYXg9JF9HX2NvdW50CisgICAgICBmaQorICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgICAgdGVzdCAxMCAtbHQgIiRfR19jb3VudCIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dAorICB9CisKKyAgZnVuY19wYXRoX3Byb2dzICJzZWQgZ3NlZCIgZnVuY19jaGVja19wcm9nX3NlZCAkUEFUSDovdXNyL3hwZzQvYmluCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorICBTRUQ9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKK30KKworCisjIFVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0dGluZyBHUkVQLCBzZWFyY2ggdGhlIHBhdGggZm9yIGVpdGhlciBHTlUKKyMgZ3JlcCwgb3IgdGhlIGdyZXAgdGhhdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCB0aGUgbGVhc3QuCit0ZXN0IC16ICIkR1JFUCIgJiYgeworICBmdW5jX2NoZWNrX3Byb2dfZ3JlcCAoKQorICB7CisgICAgX0dfcGF0aF9wcm9nPSQxCisKKyAgICBfR19jb3VudD0wCisgICAgX0dfcGF0aF9wcm9nX21heD0wCisgICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCisgICAgd2hpbGUgOgorICAgIGRvCisgICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgICAgZWNobyAnR1JFUCcgPj4gY29uZnRlc3QubmwKKyAgICAgICIkX0dfcGF0aF9wcm9nIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8Y29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICAgZGlmZiBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgICBfR19jb3VudD1gZXhwciAkX0dfY291bnQgKyAxYAorICAgICAgaWYgdGVzdCAiJF9HX2NvdW50IiAtZ3QgIiRfR19wYXRoX3Byb2dfbWF4IjsgdGhlbgorICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3VsdD0kX0dfcGF0aF9wcm9nCisgICAgICAgIF9HX3BhdGhfcHJvZ19tYXg9JF9HX2NvdW50CisgICAgICBmaQorICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgICAgdGVzdCAxMCAtbHQgIiRfR19jb3VudCIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dAorICB9CisKKyAgZnVuY19wYXRoX3Byb2dzICJncmVwIGdncmVwIiBmdW5jX2NoZWNrX3Byb2dfZ3JlcCAkUEFUSDovdXNyL3hwZzQvYmluCisgIEdSRVA9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKK30KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1hbmQgcGF0aHMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQWxsIHVwcGVyY2FzZSB2YXJpYWJsZSBuYW1lcyBhcmUgdXNlZCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhlc2UKKyMgdmFyaWFibGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGEgc2NyaXB0IHRoYXQKKyMgdXNlcyB0aGVtIGlmIGEgc3VpdGFibGUgY29tbWFuZCBvZiB0aGF0IG5hbWUgaXMgbm90IGFscmVhZHkgYXZhaWxhYmxlCisjIGluIHRoZSBjb21tYW5kIHNlYXJjaCBQQVRILgorCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtFQ0hPPSJwcmludGYgJXNcbiJ9Cis6ICR7RUdSRVA9IiRHUkVQIC1FIn0KKzogJHtGR1JFUD0iJEdSRVAgLUYifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VmdWwgc2VkIHNuaXBwZXRzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworc2VkX2Rpcm5hbWU9J3N8L1teL10qJHx8Jworc2VkX2Jhc2VuYW1lPSdzfF4uKi98fCcKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nc3xcKFtgIiRcXF1cKXxcXFwxfGcnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorc2VkX2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKyMgc3RyaW5nIGxpdGVyYWxseS4KK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3N8W10uW14kXFwqXC9dfFxcJnxnJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorIyB0aGF0IGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCitzZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisKKyMgUmUtJ1wnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBzZWRfZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQKKyMgd2VyZSAnXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mICdcJyBwcmVjZWRlZCBhCisjICckJyBpbiBpbnB1dCB0byBzZWRfZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20KKyMgZXhwYW5zaW9uLiAgU2luY2UgZWFjaCBpbnB1dCAnXCcgaXMgbm93IHR3byAnXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyCisjIG9mIHJ1bnMgb2YgZm91ciAnXCdzIGZvbGxvd2VkIGJ5IHR3byAnXCdzIGFuZCB0aGVuIGEgJyQnLiAgJ1wnIHRoYXQgJyQnLgorX0dfYnM9J1xcJworX0dfYnMyPSdcXFxcJworX0dfYnM0PSdcXFxcXFxcXCcKK19HX2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRfR19iczQvJlxcCisvZworICBzL14kX0dfYnMyJF9HX2RvbGxhci8kX0dfYnMmLworICBzL1xcKFteJF9HX2JzXVxcKSRfR19iczIkX0dfZG9sbGFyL1xcMSRfR19iczIkX0dfYnMkX0dfZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR2xvYmFsIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgRXhjZXB0IGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBleHBsaWNpdGx5IGxpc3RlZCBiZWxvdywgdGhlIGZvbGxvd2luZworIyBmdW5jdGlvbnMgaW4gdGhlICdeZnVuY18nIG5hbWVzcGFjZSwgYW5kIHRoZSAnXnJlcXVpcmVfJyBuYW1lc3BhY2UKKyMgdmFyaWFibGVzIGluaXRpYWxpc2VkIGluIHRoZSAnUmVzb3VyY2UgbWFuYWdlbWVudCcgc2VjdGlvbiwgc291cmNpbmcKKyMgdGhpcyBmaWxlIHdpbGwgbm90IHBvbGx1dGUgeW91ciBnbG9iYWwgbmFtZXNwYWNlIHdpdGggYW55dGhpbmcKKyMgZWxzZS4gVGhlcmUncyBubyBwb3J0YWJsZSB3YXkgdG8gc2NvcGUgdmFyaWFibGVzIGluIEJvdXJuZSBzaGVsbAorIyB0aG91Z2gsIHNvIGFjdHVhbGx5IHJ1bm5pbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgc29tZXRpbWVzIHBsYWNlCisjIHJlc3VsdHMgaW50byBhIHZhcmlhYmxlIG5hbWVkIGFmdGVyIHRoZSBmdW5jdGlvbiwgYW5kIG9mdGVuIHVzZQorIyB0ZW1wb3JhcnkgdmFyaWFibGVzIGluIHRoZSAnXl9HXycgbmFtZXNwYWNlLiBJZiB5b3UgYXJlIGNhcmVmdWwgdG8KKyMgYXZvaWQgdXNpbmcgdGhvc2UgbmFtZXNwYWNlcyBjYXN1YWxseSBpbiB5b3VyIHNvdXJjaW5nIHNjcmlwdCwgdGhpbmdzCisjIHNob3VsZCBjb250aW51ZSB0byB3b3JrIGFzIHlvdSBleHBlY3QuIEFuZCwgb2YgY291cnNlLCB5b3UgY2FuIGZyZWVseQorIyBvdmVyd3JpdGUgYW55IG9mIHRoZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGRlZmluZWQgaGVyZSBiZWZvcmUKKyMgY2FsbGluZyBhbnl0aGluZyB0byBjdXN0b21pemUgdGhlbS4KKworRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworIyBBbGxvdyBvdmVycmlkaW5nLCBlZyBhc3N1bWluZyB0aGF0IHlvdSBmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YKKyMgcHV0dGluZyAnJGRlYnVnX2NtZCcgYXQgdGhlIHN0YXJ0IG9mIGFsbCB5b3VyIGZ1bmN0aW9ucywgeW91IGNhbiBnZXQKKyMgYmFzaCB0byBzaG93IGZ1bmN0aW9uIGNhbGwgdHJhY2Ugd2l0aDoKKyMKKyMgICAgZGVidWdfY21kPSdldmFsIGVjaG8gIiR7RlVOQ05BTUVbMF19ICQqIiA+JjInIGJhc2ggeW91ci1zY3JpcHQtbmFtZQorZGVidWdfY21kPSR7ZGVidWdfY21kLSI6In0KK2V4aXRfY21kPToKKworIyBCeSBjb252ZW50aW9uLCBmaW5pc2ggeW91ciBzY3JpcHQgd2l0aDoKKyMKKyMgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyMKKyMgc28gdGhhdCB5b3UgY2FuIHNldCBleGl0X3N0YXR1cyB0byBub24temVybyBpZiB5b3Ugd2FudCB0byBpbmRpY2F0ZQorIyBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgZXhlY3V0aW9uIHdpdGhvdXQgYWN0dWFsbHkgYmFpbGluZyBvdXQgYXQKKyMgdGhlIHBvaW50IG9mIGZhaWx1cmUuCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0kMAorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbS4KK3Byb2duYW1lPWAkRUNITyAiJHByb2dwYXRoIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgCisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcHJvZ3BhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj1gJEVDSE8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0kcHJvZ2Rpci8kcHJvZ25hbWUKKyAgICAgOzsKKyAgKikKKyAgICAgX0dfSUZTPSRJRlMKKyAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSRfR19JRlMKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSRfR19JRlMKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCisgICAgIDs7Citlc2FjCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFN0YW5kYXJkIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQKKyMgYmVsb3csIGFuZCBzaG91bGQgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZGVwZW5kaW5nIG9uIHJ1bi10aW1lIHBhcmEtCisjIG1ldGVycyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKKworIyBDYXRlZ29yaWVzICdhbGwnIGFuZCAnbm9uZScgYXJlIGFsd2F5cyBhdmFpbGFibGUuICBBcHBlbmQgYW55IG90aGVycworIyB5b3Ugd2lsbCBwYXNzIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmdW5jX3dhcm5pbmcgZnJvbSB5b3VyIG93bgorIyBjb2RlLgord2FybmluZ19jYXRlZ29yaWVzPQorCisjIEJ5IGRlZmF1bHQsIGRpc3BsYXkgd2FybmluZ3MgYWNjb3JkaW5nIHRvICdvcHRfd2FybmluZ190eXBlcycuICBTZXQKKyMgJ3dhcm5pbmdfZnVuYycgIHRvICc6JyB0byBlbGlkZSBhbGwgd2FybmluZ3MsIG9yIGZ1bmNfZmF0YWxfZXJyb3IgdG8KKyMgdHJlYXQgdGhlIG5leHQgZGlzcGxheWVkIHdhcm5pbmcgYXMgYSBmYXRhbCBlcnJvci4KK3dhcm5pbmdfZnVuYz1mdW5jX3dhcm5fYW5kX2NvbnRpbnVlCisKKyMgU2V0IHRvICdhbGwnIHRvIGRpc3BsYXkgYWxsIHdhcm5pbmdzLCAnbm9uZScgdG8gc3VwcHJlc3MgYWxsCisjIHdhcm5pbmdzLCBvciBhIHNwYWNlIGRlbGltaXRlZCBsaXN0IG9mIHNvbWUgc3Vic2V0IG9mCisjICd3YXJuaW5nX2NhdGVnb3JpZXMnIHRvIGRpc3BsYXkgb25seSB0aGUgbGlzdGVkIHdhcm5pbmdzLgorb3B0X3dhcm5pbmdfdHlwZXM9YWxsCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlc291cmNlIG1hbmFnZW1lbnQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZWFjaCBlbnN1cmUgYQorIyBwYXJ0aWN1bGFyIHJlc291cmNlIChhIGZpbGUsIG9yIGEgbm9uLWVtcHR5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yCisjIGV4YW1wbGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJvcHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVsdCB2YWx1ZXMKKyMgZnJvbSBwZXJ0aW5lbnQgcGFja2FnZSBmaWxlcy4gQ2FsbCB0aGVtIHVzaW5nIHRoZWlyIGFzc29jaWF0ZWQKKyMgJ3JlcXVpcmVfKicgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgZXhlY3V0ZWQsIGF0IG1vc3QsIG9uY2UuCisjCisjIEl0J3MgZW50aXJlbHkgZGVsaWJlcmF0ZSB0aGF0IGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGNhbiBzZXQKKyMgdmFyaWFibGVzIHRoYXQgZG9uJ3Qgb2JleSB0aGUgbmFtZXNwYWNlIGxpbWl0YXRpb25zIG9iZXllZCBieSB0aGUgcmVzdAorIyBvZiB0aGlzIGZpbGUsIGluIG9yZGVyIHRoYXQgdGhhdCB0aGV5IGJlIGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSB0bworIyBjYWxsZXJzLgorCisKKyMgcmVxdWlyZV90ZXJtX2NvbG9ycworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbG93IGRpc3BsYXkgb2YgYm9sZCB0ZXh0IG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgaXQuCityZXF1aXJlX3Rlcm1fY29sb3JzPWZ1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycworZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdGVzdCAtdCAxICYmIHsKKyAgICAgICMgQ09MT1JURVJNIGFuZCBVU0VfQU5TSV9DT0xPUlMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRha2UKKyAgICAgICMgcHJlY2VkZW5jZSwgYmVjYXVzZSBtb3N0IHRlcm1pbmZvIGRhdGFiYXNlcyBuZWdsZWN0IHRvIGRlc2NyaWJlCisgICAgICAjIHdoZXRoZXIgY29sb3Igc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAgICB0ZXN0IC1uICIke0NPTE9SVEVSTStzZXR9IiAmJiA6ICR7VVNFX0FOU0lfQ09MT1JTPSIxIn0KKworICAgICAgaWYgdGVzdCAxID0gIiRVU0VfQU5TSV9DT0xPUlMiOyB0aGVuCisgICAgICAgICMgU3RhbmRhcmQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzCisgICAgICAgIHRjX3Jlc2V0PScbWzBtJworICAgICAgICB0Y19ib2xkPScbWzFtJzsgICB0Y19zdGFuZG91dD0nG1s3bScKKyAgICAgICAgdGNfcmVkPScbWzMxbSc7ICAgdGNfZ3JlZW49JxtbMzJtJworICAgICAgICB0Y19ibHVlPScbWzM0bSc7ICB0Y19jeWFuPScbWzM2bScKKyAgICAgIGVsc2UKKyAgICAgICAgIyBPdGhlcndpc2UgdHJ1c3QgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGFmdGVyIGFsbC4KKyAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2dyMCAyPi9kZXYvbnVsbGAiICYmIHsKKyAgICAgICAgICB0Y19yZXNldD1gdHB1dCBzZ3IwYAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IGJvbGQgMj4vZGV2L251bGxgIiAmJiB0Y19ib2xkPWB0cHV0IGJvbGRgCisgICAgICAgICAgdGNfc3RhbmRvdXQ9JHRjX2JvbGQKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzbXNvIDI+L2Rldi9udWxsYCIgJiYgdGNfc3RhbmRvdXQ9YHRwdXQgc21zb2AKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiAxIDI+L2Rldi9udWxsYCIgJiYgdGNfcmVkPWB0cHV0IHNldGFmIDFgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgMiAyPi9kZXYvbnVsbGAiICYmIHRjX2dyZWVuPWB0cHV0IHNldGFmIDJgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNCAyPi9kZXYvbnVsbGAiICYmIHRjX2JsdWU9YHRwdXQgc2V0YWYgNGAKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiA1IDI+L2Rldi9udWxsYCIgJiYgdGNfY3lhbj1gdHB1dCBzZXRhZiA1YAorICAgICAgICB9CisgICAgICBmaQorICAgIH0KKworICAgIHJlcXVpcmVfdGVybV9jb2xvcnM9OgorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGdW5jdGlvbiBsaWJyYXJ5LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgYSB2YXJpZXR5IG9mIHVzZWZ1bCBmdW5jdGlvbnMgdG8gY2FsbCBpbiB5b3VyCisjIHNjcmlwdHMuIFRha2Ugbm90ZSBvZiB0aGUgcG9ydGFibGUgd3JhcHBlcnMgZm9yIGZlYXR1cmVzIHByb3ZpZGVkIGJ5CisjIHNvbWUgbW9kZXJuIHNoZWxscywgd2hpY2ggd2lsbCBmYWxsIGJhY2sgdG8gc2xvd2VyIGVxdWl2YWxlbnRzIG9uCisjIGxlc3MgZmVhdHVyZWZ1bCBzaGVsbHMuCisKKworIyBmdW5jX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCBWQUxVRSBvbnRvIHRoZSBleGlzdGluZyBjb250ZW50cyBvZiBWQVIuCisKKyAgIyBXZSBzaG91bGQgdHJ5IHRvIG1pbmltaXNlIGZvcmtzLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhleSBhcmUKKyAgIyB1bnJlYXNvbmFibHkgc2xvdywgc28gc2tpcCB0aGUgZmVhdHVyZSBwcm9iZXMgd2hlbiBiYXNoIG9yIHpzaCBhcmUKKyAgIyBiZWluZyB1c2VkOgorICBpZiB0ZXN0IHNldCA9ICIke0JBU0hfVkVSU0lPTitzZXR9JHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgIDogJHtfR19IQVZFX0FSSVRIX09QPSJ5ZXMifQorICAgIDogJHtfR19IQVZFX1hTSV9PUFM9InllcyJ9CisgICAgIyBUaGUgKz0gb3BlcmF0b3Igd2FzIGludHJvZHVjZWQgaW4gYmFzaCAzLjEKKyAgICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICAgIFsxMl0uKiB8IDMuMCB8IDMuMCopIDs7CisgICAgICAqKQorICAgICAgICA6ICR7X0dfSEFWRV9QTFVTRVFfT1A9InllcyJ9CisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgICMgX0dfSEFWRV9QTFVTRVFfT1AKKyAgIyBDYW4gYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlIHNoZWxsIGlzIHByb2JlZCwgInllcyIgaWYgKz0gaXMKKyAgIyB1c2VhYmxlIG9yIGFueXRoaW5nIGVsc2UgaWYgaXQgZG9lcyBub3Qgd29yay4KKyAgdGVzdCAteiAiJF9HX0hBVkVfUExVU0VRX09QIiBcCisgICAgJiYgKGV2YWwgJ3g9YTsgeCs9IiBiIjsgdGVzdCAiYSBiIiA9ICIkeCInKSAyPi9kZXYvbnVsbCBcCisgICAgJiYgX0dfSEFWRV9QTFVTRVFfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX2FwcGVuZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAiJDErPVwkMiIKKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19hcHBlbmQgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgIiQxPVwkJDFcJDIiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF9xdW90ZWQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisjIGJ5IGEgc3BhY2UuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9QTFVTRVFfT1AiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDErPVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0nCitlbHNlCisgIGZ1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDE9XCQkMVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF91bmlxIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdW5pcXVlIFZBTFVFIG9udG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUiwgYXNzdW1pbmcKKyMgZW50cmllcyBhcmUgZGVsaW1pdGVkIGJ5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgVkFMVUUuICBGb3IgZXhhbXBsZToKKyMKKyMgICBmdW5jX2FwcGVuZF91bmlxIG9wdGlvbnMgIiAtLWFub3RoZXItb3B0aW9uIG9wdGlvbi1hcmd1bWVudCIKKyMKKyMgd2lsbCBvbmx5IGFwcGVuZCB0byAkb3B0aW9ucyBpZiAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50ICIKKyMgaXMgbm90IGFscmVhZHkgcHJlc2VudCBzb21ld2hlcmUgaW4gJG9wdGlvbnMgYWxyZWFkeSAobm90ZSBzcGFjZXMgYXQKKyMgZWFjaCBlbmQgaW1wbGllZCBieSBsZWFkaW5nIHNwYWNlIGluIHNlY29uZCBhcmd1bWVudCkuCitmdW5jX2FwcGVuZF91bmlxICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBfR19jdXJyZW50X3ZhbHVlPSdgJEVDSE8gJCckMSdgJworICAgIF9HX2RlbGltPWBleHByICIkMiIgOiAnXCguXCknYAorCisgICAgY2FzZSAkX0dfZGVsaW0kX0dfY3VycmVudF92YWx1ZSRfR19kZWxpbSBpbgorICAgICAgKiIkMiRfR19kZWxpbSIqKSA7OworICAgICAgKikgZnVuY19hcHBlbmQgIiRAIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfYXJpdGggVEVSTS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYXJpdGhfcmVzdWx0IHRvIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBURVJNcy4KKyAgdGVzdCAteiAiJF9HX0hBVkVfQVJJVEhfT1AiIFwKKyAgICAmJiAoZXZhbCAndGVzdCAyID0gJCgoIDEgKyAxICkpJykgMj4vZGV2L251bGwgXAorICAgICYmIF9HX0hBVkVfQVJJVEhfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX0FSSVRIX09QIjsgdGhlbgorICBldmFsICdmdW5jX2FyaXRoICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgZnVuY19hcml0aCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKyAgfQorZmkKKworCisjIGZ1bmNfYmFzZW5hbWUgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYmFzZW5hbWVfcmVzdWx0IHRvIEZJTEUgd2l0aCBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcKKyMgdGhlIGxhc3QgLyBzdHJpcHBlZC4KK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgICMgSWYgdGhpcyBzaGVsbCBzdXBwb3J0cyBzdWZmaXggcGF0dGVybiByZW1vdmFsLCB0aGVuIHVzZSBpdCB0byBhdm9pZAorICAjIGZvcmtpbmcuIEhpZGUgdGhlIGRlZmluaXRpb25zIHNpbmdsZSBxdW90ZXMgaW4gY2FzZSB0aGUgc2hlbGwgY2hva2VzCisgICMgb24gdW5zdXBwb3J0ZWQgc3ludGF4Li4uCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0kezEjIyovfScKKyAgX2Q9J2Nhc2UgJDEgaW4KKyAgICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSR7MSUvKn0kMiA7OworICAgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JDMgICAgICAgIDs7CisgICAgICBlc2FjJworCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgJworICBfZD0nZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiAgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkMSI7IHRoZW4KKyAgICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMworICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2Rpcm5hbWVfcmVzdWx0ICIkMiIKKyAgICAgIGZpJworZmkKKworZXZhbCAnZnVuY19iYXNlbmFtZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKK30nCisKKworIyBmdW5jX2Rpcm5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZXZhbCAnZnVuY19kaXJuYW1lICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJyIkX2QiJworfScKKworCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFib3ZlIGJ1dCBpbnN0ZWFkCisjIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZXZhbCAnZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKKyAgICAnIiRfZCInCit9JworCisKKyMgZnVuY19lY2hvIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19tZXNzYWdlPSQqCisKKyAgICBmdW5jX2VjaG9fSUZTPSRJRlMKKyAgICBJRlM9JG5sCisgICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCisgICAgICBJRlM9JGZ1bmNfZWNob19JRlMKKyAgICAgICRFQ0hPICIkcHJvZ25hbWU6ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KKworCisjIGZ1bmNfZWNob19hbGwgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisKKyMgZnVuY19lY2hvX2luZml4XzEgSU5GSVggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSwgZm9sbG93ZWQgYnkgSU5GSVggb24gdGhlIGZpcnN0IGxpbmUsIHdpdGggYW55CisjIGFkZGl0aW9uYWwgbGluZXMgbm90IHNob3dpbmcgSU5GSVguCitmdW5jX2VjaG9faW5maXhfMSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCisKKyAgICBfR19pbmZpeD0kMTsgc2hpZnQKKyAgICBfR19pbmRlbnQ9JF9HX2luZml4CisgICAgX0dfcHJlZml4PSIkcHJvZ25hbWU6ICRfR19pbmZpeDogIgorICAgIF9HX21lc3NhZ2U9JCoKKworICAgICMgU3RyaXAgY29sb3IgZXNjYXBlIHNlcXVlbmNlcyBiZWZvcmUgY291bnRpbmcgcHJpbnRhYmxlIGxlbmd0aAorICAgIGZvciBfR190YyBpbiAiJHRjX3Jlc2V0IiAiJHRjX2JvbGQiICIkdGNfc3RhbmRvdXQiICIkdGNfcmVkIiAiJHRjX2dyZWVuIiAiJHRjX2JsdWUiICIkdGNfY3lhbiIKKyAgICBkbworICAgICAgdGVzdCAtbiAiJF9HX3RjIiAmJiB7CisgICAgICAgIF9HX2VzY190Yz1gJEVDSE8gIiRfR190YyIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIF9HX2luZGVudD1gJEVDSE8gIiRfR19pbmRlbnQiIHwgJFNFRCAic3wkX0dfZXNjX3RjfHxnImAKKyAgICAgIH0KKyAgICBkb25lCisgICAgX0dfaW5kZW50PSIkcHJvZ25hbWU6ICJgZWNobyAiJF9HX2luZGVudCIgfCAkU0VEICdzfC58IHxnJ2AiICAiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisKKyAgICBmdW5jX2VjaG9faW5maXhfMV9JRlM9JElGUworICAgIElGUz0kbmwKKyAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KKyAgICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZTCisgICAgICAkRUNITyAiJF9HX3ByZWZpeCR0Y19ib2xkJF9HX2xpbmUkdGNfcmVzZXQiID4mMgorICAgICAgX0dfcHJlZml4PSRfR19pbmRlbnQKKyAgICBkb25lCisgICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKK30KKworCisjIGZ1bmNfZXJyb3IgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKKworICAgIGZ1bmNfZWNob19pbmZpeF8xICIgICR0Y19zdGFuZG91dCR7dGNfcmVkfWVycm9yJHRjX3Jlc2V0IiAiJCoiID4mMgorfQorCisKKyMgZnVuY19mYXRhbF9lcnJvciBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19lcnJvciAiJCoiCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKworIyBmdW5jX2dyZXAgRVhQUkVTU0lPTiBGSUxFTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX2xlbiBTVFJJTkcKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX2xlbl9yZXN1bHQgdG8gdGhlIGxlbmd0aCBvZiBTVFJJTkcuIFNUUklORyBtYXkgbm90CisjIHN0YXJ0IHdpdGggYSBoeXBoZW4uCisgIHRlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfbGVuICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKyAgfScKK2Vsc2UKKyAgZnVuY19sZW4gKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKyAgfQorZmkKKworCisjIGZ1bmNfbWtkaXJfcCBESVJFQ1RPUlktUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19kaXJlY3RvcnlfcGF0aD0kMQorICAgIF9HX2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJF9HX2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0IDogIT0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoICctJworICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIF9HX2RpcmVjdG9yeV9wYXRoPS4vJF9HX2RpcmVjdG9yeV9wYXRoIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBfR19kaXJfbGlzdD0kX0dfZGlyZWN0b3J5X3BhdGg6JF9HX2Rpcl9saXN0CisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRfR19kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgX0dfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkX0dfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJHNlZF9kaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIF9HX2Rpcl9saXN0PWAkRUNITyAiJF9HX2Rpcl9saXN0IiB8ICRTRUQgJ3N8OiokfHwnYAorCisgICAgICBmdW5jX21rZGlyX3BfSUZTPSRJRlM7IElGUz06CisgICAgICBmb3IgX0dfZGlyIGluICRfR19kaXJfbGlzdDsgZG8KKwlJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgJ0ZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkX0dfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgJyQxJyIKKyAgICBmaQorfQorCisKKyMgZnVuY19ta3RlbXBkaXIgW0JBU0VOQU1FXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBCQVNFTkFNRSBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR190ZW1wbGF0ZT0ke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfQorCisgICAgaWYgdGVzdCA6ID0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSQkCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBfR190bXBkaXI9YG1rdGVtcCAtZCAiJF9HX3RlbXBsYXRlLVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkX0dfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgX0dfdG1wZGlyPSRfR190ZW1wbGF0ZS0ke1JBTkRPTS0wfSQkCisKKyAgICAgICAgZnVuY19ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJF9HX3RtcGRpciIKKyAgICAgICAgdW1hc2sgJGZ1bmNfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRfR190bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICckX0dfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIiRfR190bXBkaXIiCit9CisKKworIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAorIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4gUEFUSCBhZnRlciBtYWtpbmcKKyMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KK2Z1bmNfbm9ybWFsX2Fic3BhdGggKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCisgICAgX0dfcGF0aGNhcj0nc3xeL1woW14vXSpcKS4qJHxcMXwnCisgICAgX0dfcGF0aGNkcj0nc3xeL1teL10qfHwnCisgICAgX0dfcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAorCQlzfC9cLi98L3xnCisJCXQgZG90c2wKKwkJc3wvXC4kfC98JworICAgIF9HX2NvbGxhcHNlc2xhc2hlcz0nc3wvXHsxLFx9fC98ZycKKyAgICBfR19maW5hbHNsYXNoPSdzfC8qJHwvfCcKKworICAgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgorICAgICAgIiIpCisgICAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIDs7CisgICAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7CisgICAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgICAvLy8qKQorICAgICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgICAgICA7OworICAgICAgLy8qKQorICAgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICAgICAgOzsKKyAgICAgIC8qKQorICAgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKKyAgICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19yZW1vdmVkb3RwYXJ0cyIgLWUgIiRfR19jb2xsYXBzZXNsYXNoZXMiIC1lICIkX0dfZmluYWxzbGFzaCJgCisgICAgd2hpbGUgOjsgZG8KKyAgICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/CisgICAgICBpZiB0ZXN0IC8gPSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiOyB0aGVuCisgICAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19wYXRoY2FyImAKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgICAtZSAiJF9HX3BhdGhjZHIiYAorICAgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgICAgICIiKQorICAgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgICAgICA7OworICAgICAgICAuLikKKyAgICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCAiLyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cit9CisKKworIyBmdW5jX25vdHF1aWV0IEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIG9ubHkgd2hlbiBub3QgaW4gcXVpZXQgbW9kZS4KK2Z1bmNfbm90cXVpZXQgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IHRvIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUi4KK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisKKyAgICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgorICAgIHdoaWxlIDo7IGRvCisgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgorICAgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKKyAgICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgICBmaQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiOyB0aGVuCisgICAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICBmaQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKKyAgICBpZiB0ZXN0IC1uICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorICAgICAgZnVuY19hcHBlbmQgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCAiLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgZmkKKworICAgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuICcuJyBlbHNlIHJlbGF0aXZlIHBhdGguCisgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZpCisKKyAgICB0ZXN0IC1uICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIgfHwgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisKKyAgICA6Cit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSR3MgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczoKKyMgICBpKSBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICAgIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbAorIyAgaWkpIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisjICAgICAgaGFzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlCisjICAgICAgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PQorICAgIHdoaWxlIHRlc3QgMCAtbHQgJCM7IGRvCisgICAgICBjYXNlICQxIGluCisgICAgICAgICpbXFxcYFwiXCRdKikKKwkgIF9HX3VucXVvdGVkX2FyZz1gcHJpbnRmICclc1xuJyAiJDEiIHwkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR191bnF1b3RlZF9hcmc9JDEgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCAiICRfR191bnF1b3RlZF9hcmciCisgICAgICBlbHNlCisgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0ICIkX0dfdW5xdW90ZWRfYXJnIgorICAgICAgZmkKKworICAgICAgY2FzZSAkX0dfdW5xdW90ZWRfYXJnIGluCisgICAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgdmFyaWFibGUgZXhwYW5zaW9uCisgICAgICAgICMgZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPVwiJF9HX3VucXVvdGVkX2FyZ1wiCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPSRfR191bnF1b3RlZF9hcmcKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiICRfR19xdW90ZWRfYXJnIgorICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiJF9HX3F1b3RlZF9hcmciCisgICAgICBmaQorICAgICAgc2hpZnQKKyAgICBkb25lCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgQVJHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCV9HX2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAorCSAgICAtZSAiJHNlZF9kb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgX0dfYXJnPSQxIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkX0dfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIF9HX2FyZz1cIiRfR19hcmdcIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9JF9HX2FyZworfQorCisKKyMgZnVuY19zdHJpcG5hbWUgUFJFRklYIFNVRkZJWCBOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBmcm9tIE5BTUUsIGFuZCBzdG9yZSBpbiBmdW5jX3N0cmlwbmFtZV9yZXN1bHQuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgorICBldmFsICdmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHZhcmlhYmxlIGZpcnN0LgorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kMworICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJDEifQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJDIifQorICB9JworZWxzZQorICBmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAkMiBpbgorICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgLWUgInMlXiQxJSUiIC1lICJzJVxcXFwkMlwkJSUiYDs7CisgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIgLWUgInMlJDJcJCUlImA7OworICAgIGVzYWMKKyAgfQorZmkKKworCisjIGZ1bmNfc2hvd19ldmFsIENNRCBbRkFJTF9FWFBdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVubGVzcyBvcHRfcXVpZXQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIF9HX2NtZD0kMQorICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9CisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRfR19jbWQiCisgICAgZXZhbCAiZnVuY19ub3RxdWlldCAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfY21kIgorICAgICAgX0dfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhlbgorCWV2YWwgIihleGl0ICRfR19zdGF0dXMpOyAkX0dfZmFpbF9leHAiCisgICAgICBmaQorICAgIH0KK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBDTUQgW0ZBSUxfRVhQXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfY21kPSQxCisgICAgX0dfZmFpbF9leHA9JHsyLSc6J30KKworICAgICRvcHRfcXVpZXQgfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkX0dfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfdXNlcl9sb2NhbGUKKwkgICAgJF9HX2NtZCIKKyAgICAgIF9HX3N0YXR1cz0kPworICAgICAgZXZhbCAiJF9HX3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7IHRoZW4KKwlldmFsICIoZXhpdCAkX0dfc3RhdHVzKTsgJF9HX2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICB9Cit9CisKKworIyBmdW5jX3RyX3NoCisjIC0tLS0tLS0tLS0KKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorZnVuY190cl9zaCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJDEgaW4KKyAgICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisgICAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgLWUgJ3MvXlwoWzAtOV1cKS9fXDEvJyAtZSAncy9bXmEtekEtWjAtOV9dL18vZydgCisgICAgICA7OworICAgICogKQorICAgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKyAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY192ZXJib3NlIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICIkKiIKKworICAgIDoKK30KKworCisjIGZ1bmNfd2Fybl9hbmRfY29udGludWUgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2Fybl9hbmRfY29udGludWUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycworCisgICAgZnVuY19lY2hvX2luZml4XzEgIiR7dGNfcmVkfXdhcm5pbmckdGNfcmVzZXQiICIkKiIgPiYyCit9CisKKworIyBmdW5jX3dhcm5pbmcgQ0FURUdPUlkgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLiBXYXJuaW5nCisjIG1lc3NhZ2VzIGNhbiBiZSBmaWx0ZXJlZCBhY2NvcmRpbmcgdG8gQ0FURUdPUlksIHdoZXJlIHRoaXMgZnVuY3Rpb24KKyMgZWxpZGVzIG1lc3NhZ2VzIHdoZXJlIENBVEVHT1JZIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZQorIyAnb3B0X3dhcm5pbmdfdHlwZXMnLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBDQVRFR09SWSBtdXN0IGJlIGluIHRoZSB3YXJuaW5nX2NhdGVnb3JpZXMgbGlzdCEKKyAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfaW50ZXJuYWxfZXJyb3IgImludmFsaWQgd2FybmluZyBjYXRlZ29yeSAnJDEnIiA7OworICAgIGVzYWMKKworICAgIF9HX2NhdGVnb3J5PSQxCisgICAgc2hpZnQKKworICAgIGNhc2UgIiAkb3B0X3dhcm5pbmdfdHlwZXMgIiBpbgorICAgICAgKiIgJF9HX2NhdGVnb3J5ICIqKSAkd2FybmluZ19mdW5jICR7MSsiJEAifSA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfc29ydF92ZXIgVkVSMSBWRVIyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICdzb3J0IC1WJyBpcyBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZS4KKyMgTm90ZSB0aGlzIGRldmlhdGVzIGZyb20gdGhlIHZlcnNpb24gY29tcGFyaXNvbiBpbiBhdXRvbWFrZQorIyBpbiB0aGF0IGl0IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCisjIGJ1dCB0aGlzIHNob3VsZCBzdWZmaWNlIGFzIHdlIHdvbid0IGJlIHNwZWNpZnlpbmcgb2xkCisjIHZlcnNpb24gZm9ybWF0cyBvciByZWR1bmRhbnQgdHJhaWxpbmcgLjAgaW4gYm9vdHN0cmFwLmNvbmYuCisjIElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdlIHNob3VsZCBwcm9iYWJseQorIyB1c2UgbTRfdmVyc2lvbl9jb21wYXJlIGZyb20gYXV0b2NvbmYuCitmdW5jX3NvcnRfdmVyICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgcHJpbnRmICclc1xuJXNcbicgIiQxIiAiJDIiIFwKKyAgICAgIHwgc29ydCAtdC4gLWsgMSwxbiAtayAyLDJuIC1rIDMsM24gLWsgNCw0biAtayA1LDVuIC1rIDYsNm4gLWsgNyw3biAtayA4LDhuIC1rIDksOW4KK30KKworIyBmdW5jX2x0X3ZlciBQUkVWIENVUlIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiB0cnVlIGlmIFBSRVYgYW5kIENVUlIgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyIGFjY29yZGluZyB0bworIyBmdW5jX3NvcnRfdmVyLCBvdGhlcndpc2UgZmFsc2UuICBVc2UgaXQgbGlrZSB0aGlzOgorIworIyAgZnVuY19sdF92ZXIgIiRwcmV2X3ZlciIgIiRwcm9wb3NlZF92ZXIiIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIi4uLiIKK2Z1bmNfbHRfdmVyICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdGVzdCAieCQxIiA9IHhgZnVuY19zb3J0X3ZlciAiJDEiICIkMiIgfCAkU0VEIDFxYAorfQorCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXBhdHRlcm46ICIxMC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJtLSUwMmQuJTAySDsgIyBVVEMiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyBFbmQ6CisjISAvYmluL3NoCisKKyMgU2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgorc2NyaXB0dmVyc2lvbj0yMDE0LTAxLTA3LjAzOyAjIFVUQworCisjIEEgcG9ydGFibGUsIHBsdWdnYWJsZSBvcHRpb24gcGFyc2VyIGZvciBCb3VybmUgc2hlbGwuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDEwCisKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgVGhpcyBmaWxlIGlzIGEgbGlicmFyeSBmb3IgcGFyc2luZyBvcHRpb25zIGluIHlvdXIgc2hlbGwgc2NyaXB0cyBhbG9uZworIyB3aXRoIGFzc29ydGVkIG90aGVyIHVzZWZ1bCBzdXBwb3J0aW5nIGZlYXR1cmVzIHRoYXQgeW91IGNhbiBtYWtlIHVzZQorIyBvZiB0b28uCisjCisjIEZvciB0aGUgc2ltcGxlc3Qgc2NyaXB0cyB5b3UgbWlnaHQgbmVlZCBvbmx5OgorIworIyAgICMhL2Jpbi9zaAorIyAgIC4gcmVsYXRpdmUvcGF0aC90by9mdW5jbGliLnNoCisjICAgLiByZWxhdGl2ZS9wYXRoL3RvL29wdGlvbnMtcGFyc2VyCisjICAgc2NyaXB0dmVyc2lvbj0xLjAKKyMgICBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CisjICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKKyMgICAuLi5yZXN0IG9mIHlvdXIgc2NyaXB0Li4uCisjCisjIEluIG9yZGVyIGZvciB0aGUgJy0tdmVyc2lvbicgb3B0aW9uIHRvIHdvcmssIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhCisjIHN1aXRhYmx5IGZvcm1hdHRlZCBjb21tZW50IGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZQorIyBzdGFydGluZyB3aXRoICcjIFdyaXR0ZW4gYnkgJyBhbmQgZW5kaW5nIHdpdGggJyMgd2FycmFudHk7ICcuCisjCisjIEZvciAnLWgnIGFuZCAnLS1oZWxwJyB0byB3b3JrLCB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBvbmUgbGluZQorIyBkZXNjcmlwdGlvbiBvZiB5b3VyIHNjcmlwdCdzIHB1cnBvc2UgaW4gYSBjb21tZW50IGRpcmVjdGx5IGFib3ZlIHRoZQorIyAnIyBXcml0dGVuIGJ5ICcgbGluZSwgbGlrZSB0aGUgb25lIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgorIworIyBUaGUgZGVmYXVsdCBvcHRpb25zIGFsc28gc3VwcG9ydCAnLS1kZWJ1ZycsIHdoaWNoIHdpbGwgdHVybiBvbiBzaGVsbAorIyBleGVjdXRpb24gdHJhY2luZyAoc2VlIHRoZSBjb21tZW50IGFib3ZlIGRlYnVnX2NtZCBiZWxvdyBmb3IgYW5vdGhlcgorIyB1c2UpLCBhbmQgJy0tdmVyYm9zZScgYW5kIHRoZSBmdW5jX3ZlcmJvc2UgZnVuY3Rpb24gdG8gYWxsb3cgeW91ciBzY3JpcHQKKyMgdG8gZGlzcGxheSB2ZXJib3NlIG1lc3NhZ2VzIG9ubHkgd2hlbiB5b3VyIHVzZXIgaGFzIHNwZWNpZmllZAorIyAnLS12ZXJib3NlJy4KKyMKKyMgQWZ0ZXIgc291cmNpbmcgdGhpcyBmaWxlLCB5b3UgY2FuIHBsdWcgcHJvY2Vzc2luZyBmb3IgYWRkaXRpb25hbAorIyBvcHRpb25zIGJ5IGFtZW5kaW5nIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgJ0NvbmZpZ3VyYXRpb24nIHNlY3Rpb24KKyMgYmVsb3csIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgJ09wdGlvbiBwYXJzaW5nJworIyBzZWN0aW9uIGZ1cnRoZXIgZG93bi4KKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvbmZpZ3VyYXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisjIFlvdSBzaG91bGQgb3ZlcnJpZGUgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgc2NyaXB0IGFmdGVyIHNvdXJjaW5nIHRoaXMKKyMgZmlsZSBzbyB0aGF0IHRoZXkgcmVmbGVjdCB0aGUgY3VzdG9taXNhdGlvbnMgeW91IGhhdmUgYWRkZWQgdG8gdGhlCisjIG9wdGlvbiBwYXJzZXIuCisKKyMgVGhlIHVzYWdlIGxpbmUgZm9yIG9wdGlvbiBwYXJzaW5nIGVycm9ycyBhbmQgdGhlIHN0YXJ0IG9mICctaCcgYW5kCisjICctLWhlbHAnIG91dHB1dCBtZXNzYWdlcy4gWW91IGNhbiBlbWJlZCBzaGVsbCB2YXJpYWJsZXMgZm9yIGRlbGF5ZWQKKyMgZXhwYW5zaW9uIGF0IHRoZSB0aW1lIHRoZSBtZXNzYWdlIGlzIGRpc3BsYXllZCwgYnV0IHlvdSB3aWxsIG5lZWQgdG8KKyMgcXVvdGUgb3RoZXIgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIGNhcmVmdWxseSB0byBwcmV2ZW50IHRoZW0gYmVpbmcKKyMgZXhwYW5kZWQgd2hlbiB0aGUgY29udGVudHMgYXJlIGV2YWxlZC4KK3VzYWdlPSckcHJvZ3BhdGggW09QVElPTl0uLi4nCisKKyMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvICctaCcgYW5kICctLWhlbHAnLiAgQWRkIHRvIHRoaXMgb3IKKyMgb3ZlcnJpZGUgaXQgYWZ0ZXIgc291cmNpbmcgdGhpcyBsaWJyYXJ5IHRvIHJlZmxlY3QgdGhlIGZ1bGwgc2V0IG9mCisjIG9wdGlvbnMgeW91ciBzY3JpcHQgYWNjZXB0cy4KK3VzYWdlX21lc3NhZ2U9IlwKKyAgICAgICAtLWRlYnVnICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWQorICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbYWxsXQorICAgLXYsIC0tdmVyYm9zZSAgICAgIHZlcmJvc2VseSByZXBvcnQgcHJvY2Vzc2luZworICAgICAgIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCBzaG9ydCBvciBsb25nIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitsb25nX2hlbHBfbWVzc2FnZT0iCitXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZToKKyAgICAgICAnYWxsJyAgICAgICAgICBzaG93IGFsbCB3YXJuaW5ncworICAgICAgICdub25lJyAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3MKKyAgICAgICAnZXJyb3InICAgICAgICB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBmYXRhbCBlcnJvcnMiCisKKyMgSGVscCBtZXNzYWdlIHByaW50ZWQgYmVmb3JlIGZhdGFsIG9wdGlvbiBwYXJzaW5nIGVycm9ycy4KK2ZhdGFsX2hlbHA9IlRyeSAnXCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhvb2sgZnVuY3Rpb24gbWFuYWdlbWVudC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgZnVuY3Rpb25zIGZvciBhZGRpbmcsIHJlbW92aW5nLCBhbmQgcnVubmluZyBob29rcworIyB0byB0aGUgbWFpbiBjb2RlLiAgQSBob29rIGlzIGp1c3QgYSBuYW1lZCBsaXN0IG9mIG9mIGZ1bmN0aW9uLCB0aGF0IGNhbgorIyBiZSBydW4gaW4gb3JkZXIgbGF0ZXIgb24uCisKKyMgZnVuY19ob29rYWJsZSBGVU5DX05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGF0IEZVTkNfTkFNRSB3aWxsIHJ1biBob29rcyBhZGRlZCB3aXRoCisjICdmdW5jX2FkZF9ob29rIEZVTkNfTkFNRSAuLi4nLgorZnVuY19ob29rYWJsZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfYXBwZW5kIGhvb2thYmxlX2ZucyAiICQxIgorfQorCisKKyMgZnVuY19hZGRfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXF1ZXN0IHRoYXQgRlVOQ19OQU1FIGNhbGwgSE9PS19GVU5DIGJlZm9yZSBpdCByZXR1cm5zLiAgRlVOQ19OQU1FIG11c3QKKyMgZmlyc3QgaGF2ZSBiZWVuIGRlY2xhcmVkICJob29rYWJsZSIgYnkgYSBjYWxsIHRvICdmdW5jX2hvb2thYmxlJy4KK2Z1bmNfYWRkX2hvb2sgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICIgJGhvb2thYmxlX2ZucyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfZmF0YWxfZXJyb3IgIickMScgZG9lcyBub3QgYWNjZXB0IGhvb2sgZnVuY3Rpb25zLiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIGZ1bmNfYXBwZW5kICR7MX1faG9va3MgJyIgJDIiJworfQorCisKKyMgZnVuY19yZW1vdmVfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZW1vdmUgSE9PS19GVU5DIGZyb20gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGNhbGxlZCBieSBGVU5DX05BTUUuCitmdW5jX3JlbW92ZV9ob29rICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAkezF9X2hvb2tzPSdgJEVDSE8gIlwkJyQxJ19ob29rcyIgfCRTRUQgInN8ICckMid8fCJgJworfQorCisKKyMgZnVuY19ydW5faG9va3MgRlVOQ19OQU1FIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gYWxsIGhvb2sgZnVuY3Rpb25zIHJlZ2lzdGVyZWQgdG8gRlVOQ19OQU1FLgorIyBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxpc3Qgb2YgaG9vayBmdW5jdGlvbnMgY29udGFpbnMgbm90aGluZyBtb3JlCisjIHRoYW4gYSB3aGl0ZXNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGxlZ2FsIHNoZWxsIGZ1bmN0aW9uIG5hbWVzLCBhbmQKKyMgbm8gZWZmb3J0IGlzIHdhc3RlZCB0cnlpbmcgdG8gY2F0Y2ggc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIG9yIHByZXNlcnZlCisjIHdoaXRlc3BhY2UuCitmdW5jX3J1bl9ob29rcyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgIiAkaG9va2FibGVfZm5zICIgaW4KKyAgICAgICoiICQxICIqKSA7OworICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBzdXBwb3J0IGhvb2sgZnVuY2lvbnMubiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIF9HX2hvb2tfZm5zPVwkJDFfaG9va3M7IHNoaWZ0CisKKyAgICBmb3IgX0dfaG9vayBpbiAkX0dfaG9va19mbnM7IGRvCisgICAgICBldmFsICRfR19ob29rICciJEAiJworCisgICAgICAjIHN0b3JlIHJldHVybmVkIG9wdGlvbnMgbGlzdCBiYWNrIGludG8gcG9zaXRpb25hbAorICAgICAgIyBwYXJhbWV0ZXJzIGZvciBuZXh0ICdjbWQnIGV4ZWN1dGlvbi4KKyAgICAgIGV2YWwgX0dfaG9va19yZXN1bHQ9XCQke19HX2hvb2t9X3Jlc3VsdAorICAgICAgZXZhbCBzZXQgZHVtbXkgIiRfR19ob29rX3Jlc3VsdCI7IHNoaWZ0CisgICAgZG9uZQorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3J1bl9ob29rc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbiBwYXJzaW5nLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgSW4gb3JkZXIgdG8gYWRkIHlvdXIgb3duIG9wdGlvbiBwYXJzaW5nIGhvb2tzLCB5b3UgbXVzdCBhY2NlcHQgdGhlCisjIGZ1bGwgcG9zaXRpb25hbCBwYXJhbWV0ZXIgbGlzdCBpbiB5b3VyIGhvb2sgZnVuY3Rpb24sIHJlbW92ZSBhbnkKKyMgb3B0aW9ucyB0aGF0IHlvdSBhY3Rpb24sIGFuZCB0aGVuIHBhc3MgYmFjayB0aGUgcmVtYWluaW5nIHVucHJvY2Vzc2VkCisjIG9wdGlvbnMgaW4gJzxob29rZWRfZnVuY3Rpb25fbmFtZT5fcmVzdWx0JywgZXNjYXBlZCBzdWl0YWJseSBmb3IKKyMgJ2V2YWwnLiAgTGlrZSB0aGlzOgorIworIyAgICBteV9vcHRpb25zX3ByZXAgKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBFeHRlbmQgdGhlIGV4aXN0aW5nIHVzYWdlIG1lc3NhZ2UuCisjICAgICAgICB1c2FnZV9tZXNzYWdlPSR1c2FnZV9tZXNzYWdlJworIyAgICAgIC1zLCAtLXNpbGVudCAgICAgICBkb24nXCcndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICcKKyMKKyMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisjICAgICAgICBteV9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbXlfb3B0aW9uc19wcmVwCisjCisjCisjICAgIG15X3NpbGVudF9vcHRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksIHdlIHBhcnNlIGFzIG1hbnkgb3B0aW9ucyBhcyB3ZSBjYW4KKyMgICAgICAgICMgcmVjb2duaXNlIGluIGEgbG9vcCBiZWZvcmUgcGFzc2luZyB0aGUgcmVtYWluZGVyIGJhY2sgdG8gdGhlCisjICAgICAgICAjIGNhbGxlciBvbiB0aGUgZmlyc3QgdW5yZWNvZ25pc2VkIGFyZ3VtZW50IHdlIGVuY291bnRlci4KKyMgICAgICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisjICAgICAgICAgIG9wdD0kMTsgc2hpZnQKKyMgICAgICAgICAgY2FzZSAkb3B0IGluCisjICAgICAgICAgICAgLS1zaWxlbnR8LXMpIG9wdF9zaWxlbnQ9OiA7OworIyAgICAgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisjICAgICAgICAgICAgLXMqKSAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorIyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorIyAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorIyAgICAgICAgICAgICAgICAgICAgICAgICA7OworIyAgICAgICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAiJCoiOyBzaGlmdDsgYnJlYWsgOzsKKyMgICAgICAgICAgZXNhYworIyAgICAgICAgZG9uZQorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X3NpbGVudF9vcHRpb25fcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIG15X3NpbGVudF9vcHRpb24KKyMKKyMKKyMgICAgbXlfb3B0aW9uX3ZhbGlkYXRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgJG9wdF9zaWxlbnQgJiYgJG9wdF92ZXJib3NlICYmIGZ1bmNfZmF0YWxfaGVscCAiXAorIyAgICAnLS1zaWxlbnQnIGFuZCAnLS12ZXJib3NlJyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X29wdGlvbl92YWxpZGF0aW9uX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyMgICAgfQorIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBteV9vcHRpb25fdmFsaWRhdGlvbgorIworIyBZb3UnbGwgYWxzZSBuZWVkIHRvIG1hbnVhbGx5IGFtZW5kICR1c2FnZV9tZXNzYWdlIHRvIHJlZmxlY3QgdGhlIGV4dHJhCisjIG9wdGlvbnMgeW91IHBhcnNlLiAgSXQncyBwcmVmZXJhYmxlIHRvIGFwcGVuZCBpZiB5b3UgY2FuLCBzbyB0aGF0CisjIG11bHRpcGxlIG9wdGlvbiBwYXJzaW5nIGhvb2tzIGNhbiBiZSBhZGRlZCBzYWZlbHkuCisKKworIyBmdW5jX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbCB0aGUgZnVuY3Rpb25zIGNhbGxlZCBpbnNpZGUgZnVuY19vcHRpb25zIGFyZSBob29rYWJsZS4gU2VlIHRoZQorIyBpbmRpdmlkdWFsIGltcGxlbWVudGF0aW9ucyBmb3IgZGV0YWlscy4KK2Z1bmNfaG9va2FibGUgZnVuY19vcHRpb25zCitmdW5jX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX29wdGlvbnNfcHJlcCAkezErIiRAIn0KKyAgICBldmFsIGZ1bmNfcGFyc2Vfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0KyIkZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0In0KKyAgICBldmFsIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdCsiJGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQifQorCisgICAgZXZhbCBmdW5jX3J1bl9ob29rcyBmdW5jX29wdGlvbnMgXAorICAgICAgICAke2Z1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQrIiRmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0In0KKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19vcHRpb25zX3ByZXAgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsIGluaXRpYWxpc2F0aW9ucyByZXF1aXJlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG9wdGlvbiBwYXJzZSBsb29wLgorIyBOb3RlIHRoYXQgd2hlbiBjYWxsaW5nIGhvb2sgZnVuY3Rpb25zLCB3ZSBwYXNzIHRocm91Z2ggdGhlIGxpc3Qgb2YKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLiAgSWYgYSBob29rIGZ1bmN0aW9uIG1vZGlmaWVzIHRoYXQgbGlzdCwgYW5kCisjIG5lZWRzIHRvIHByb3BvZ2F0ZSB0aGF0IGJhY2sgdG8gcmVzdCBvZiB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgY29tcGxldGUKKyMgbW9kaWZpZWQgbGlzdCBtdXN0IGJlIHB1dCBpbiAnZnVuY19ydW5faG9va3NfcmVzdWx0JyBiZWZvcmUKKyMgcmV0dXJuaW5nLgorZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnNfcHJlcAorZnVuY19vcHRpb25zX3ByZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgIG9wdF93YXJuaW5nX3R5cGVzPQorCisgICAgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX3ByZXAgJHsxKyIkQCJ9CisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19wYXJzZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbWFpbiBvcHRpb24gcGFyc2luZyBsb29wLgorZnVuY19ob29rYWJsZSBmdW5jX3BhcnNlX29wdGlvbnMKK2Z1bmNfcGFyc2Vfb3B0aW9ucyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9CisKKyAgICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgICMgRGVmZXIgdG8gaG9vayBmdW5jdGlvbnMgZm9yIGluaXRpYWwgb3B0aW9uIHBhcnNpbmcsIHNvIHRoZXkKKyAgICAgICMgZ2V0IHByaW9yaXR5IGluIHRoZSBldmVudCBvZiByZXVzaW5nIGFuIG9wdGlvbiBuYW1lLgorICAgICAgZnVuY19ydW5faG9va3MgZnVuY19wYXJzZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgICAjIEFkanVzdCBmdW5jX3BhcnNlX29wdGlvbnMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHRvIG1hdGNoCisgICAgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdCI7IHNoaWZ0CisKKyAgICAgICMgQnJlYWsgb3V0IG9mIHRoZSBsb29wIGlmIHdlIGFscmVhZHkgcGFyc2VkIGV2ZXJ5IG9wdGlvbi4KKyAgICAgIHRlc3QgJCMgLWd0IDAgfHwgYnJlYWsKKworICAgICAgX0dfb3B0PSQxCisgICAgICBzaGlmdAorICAgICAgY2FzZSAkX0dfb3B0IGluCisgICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCisgICAgICAgICAgICAgICAgICAgICAgZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorICAgICAgICAgICAgICAgICAgICAgICRkZWJ1Z19jbWQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgLS13YXJuaW5ncyBub25lICR7MSsiJEAifQorICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisJCSAgICAgIDs7CisKKyAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCisgICAgICAgICAgICAgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgJDEiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50cyBtYXRjaGluZyBsYXN0ICQxIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0X3dhcm5pbmdfdHlwZXMgIiAkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICphbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpub25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz1ub25lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz06CisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPWZ1bmNfZmF0YWxfZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgd2FybmluZyBjYXRlZ29yeTogJyQxJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdmVyYm9zZXwtdikgb3B0X3ZlcmJvc2U9OiA7OworICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OworICAgICAgICAtXD98LWgpICAgICAgIGZ1bmNfdXNhZ2UgOzsKKyAgICAgICAgLS1oZWxwKSAgICAgICBmdW5jX2hlbHAgOzsKKworCSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnMgKHBsdWdpbnMgbWF5IG5lZWQgdGhpcyk6CisJLS0qPSopICAgICAgICBmdW5jX3NwbGl0X2VxdWFscyAiJF9HX29wdCIKKwkgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6CisgICAgICAgIC1XKikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyAgICAgICAgLVw/KnwtaCp8LXYqfC14KikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tKSAgICAgICAgICAgYnJlYWsgOzsKKyAgICAgICAgLSopICAgICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXNlZCBvcHRpb246ICckX0dfb3B0JyIgOzsKKyAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorCisKKyMgZnVuY192YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorIyBhcmd1bWVudHMuCitmdW5jX2hvb2thYmxlIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucworZnVuY192YWxpZGF0ZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBEaXNwbGF5IGFsbCB3YXJuaW5ncyBpZiAtVyB3YXMgbm90IGdpdmVuLgorICAgIHRlc3QgLW4gIiRvcHRfd2FybmluZ190eXBlcyIgfHwgb3B0X3dhcm5pbmdfdHlwZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgorCisgICAgZnVuY19ydW5faG9va3MgZnVuY192YWxpZGF0ZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZCEKKyAgICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgSGVscGVyIGZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlCisjIGhvb2thYmxlIG9wdGlvbiBwYXJzZXIgZnJhbWV3b3JrIGluIGFzY2lpLWJldGljYWwgb3JkZXIuCisKKworIyBmdW5jX2ZhdGFsX2hlbHAgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBcJEVDSE8gXCIiVXNhZ2U6ICR1c2FnZSJcIgorICAgIGV2YWwgXCRFQ0hPIFwiIiRmYXRhbF9oZWxwIlwiCisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworCisjIGZ1bmNfaGVscAorIyAtLS0tLS0tLS0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkRUNITyAiJGxvbmdfaGVscF9tZXNzYWdlIgorICAgIGV4aXQgMAorfQorCisKKyMgZnVuY19taXNzaW5nX2FyZyBBUkdOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfZXJyb3IgIk1pc3NpbmcgYXJndW1lbnQgZm9yICckMScuIgorICAgIGV4aXRfY21kPWV4aXQKK30KKworCisjIGZ1bmNfc3BsaXRfZXF1YWxzIFNUUklORworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfc3BsaXRfZXF1YWxzX2xocyBhbmQgZnVuY19zcGxpdF9lcXVhbHNfcmhzIHNoZWxsIHZhcmlhYmxlcyBhZnRlcgorIyBzcGxpdHRpbmcgU1RSSU5HIGF0IHRoZSAnPScgc2lnbi4KK3Rlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiCit0aGVuCisgICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KKyAgZXZhbCAnZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9JHsxJSU9Kn0KKyAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0kezEjKj19CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgICYmIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9YGV4cHIgIngkMSIgOiAneFwoW149XSpcKSdgCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19yaHM9CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgIHx8IGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJCdgCisgIH0KK2ZpICNmdW5jX3NwbGl0X2VxdWFscworCisKKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgU0hPUlRPUFQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgoraWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQorICB7CisgICAgICAkZGVidWdfY21kCisKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9CisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCisgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisgIHsKKyAgICAgICRkZWJ1Z19jbWQKKworICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gZXhwciAieCQxIiA6ICd4LVwoLlwpJ2AKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gZXhwciAieCQxIiA6ICd4LS5cKC4qXCkkJ2AKKyAgfQorZmkgI2Z1bmNfc3BsaXRfc2hvcnRfb3B0CisKKworIyBmdW5jX3VzYWdlCisjIC0tLS0tLS0tLS0KKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQorICAgICRFQ0hPICJSdW4gJyRwcm9nbmFtZSAtLWhlbHAgfCR7UEFHRVItbW9yZX0nIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgMAorfQorCisKKyMgZnVuY191c2FnZV9tZXNzYWdlCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQuCitmdW5jX3VzYWdlX21lc3NhZ2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsIFwkRUNITyBcIiJVc2FnZTogJHVzYWdlIlwiCisgICAgZWNobworICAgICRTRUQgLW4gJ3N8XiMgfHwKKyAgICAgICAgL15Xcml0dGVuIGJ5L3sKKyAgICAgICAgICB4O3A7eAorICAgICAgICB9CisJaAorCS9eV3JpdHRlbiBieS9xJyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgIGV2YWwgXCRFQ0hPIFwiIiR1c2FnZV9tZXNzYWdlIlwiCit9CisKKworIyBmdW5jX3ZlcnNpb24KKyMgLS0tLS0tLS0tLS0tCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIHByaW50ZiAnJXNcbicgIiRwcm9nbmFtZSAkc2NyaXB0dmVyc2lvbiIKKyAgICAkU0VEIC1uICcKKyAgICAgICAgLyhDKS8hYiBnbworICAgICAgICA6bW9yZQorICAgICAgICAvXC4vIXsKKyAgICAgICAgICBOCisgICAgICAgICAgc3xcbiMgfCB8CisgICAgICAgICAgYiBtb3JlCisgICAgICAgIH0KKyAgICAgICAgOmdvCisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8sLyMgd2FycmFudHk7IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBzfF4jICokfHwKKyAgICAgICAgICBzfFwoKEMpXClbIDAtOSwtXSpbICwtXVwoWzEtOV1bMC05XSogXCl8XDEgXDJ8CisgICAgICAgICAgcAorICAgICAgICB9CisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBwCisgICAgICAgIH0KKyAgICAgICAgL153YXJyYW50eTsgL3EnIDwgIiRwcm9ncGF0aCIKKworICAgIGV4aXQgJD8KK30KKworCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1wYXR0ZXJuOiAiMTAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRDIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgRW5kOgorCisjIFNldCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0nKEdOVSBsaWJ0b29sKSAyLjQuNicKKworCisjIGZ1bmNfZWNobyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIGFsc28gZGlzcGxheXMgdGhlIGN1cnJlbnQgbW9kZSBpbiBtZXNzYWdlcywgc28gb3ZlcnJpZGUKKyMgZnVuY2xpYi5zaCBmdW5jX2VjaG8gd2l0aCB0aGlzIGN1c3RvbSBkZWZpbml0aW9uLgorZnVuY19lY2hvICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfbWVzc2FnZT0kKgorCisgICAgZnVuY19lY2hvX0lGUz0kSUZTCisgICAgSUZTPSRubAorICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbworICAgICAgSUZTPSRmdW5jX2VjaG9fSUZTCisgICAgICAkRUNITyAiJHByb2duYW1lJHtvcHRfbW9kZSs6ICRvcHRfbW9kZX06ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KKworCisjIGZ1bmNfd2FybmluZyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIHdhcm5pbmdzIGFyZSBub3QgY2F0ZWdvcml6ZWQsIHNvIG92ZXJyaWRlIGZ1bmNsaWIuc2gKKyMgZnVuY193YXJuaW5nIHdpdGggdGhpcyBzaW1wbGVyIGRlZmluaXRpb24uCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkd2FybmluZ19mdW5jICR7MSsiJEAifQorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbnMgcGFyc2luZy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBIb29rIGluIHRoZSBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIG91ciBvd24gb3B0aW9ucyBhcmUgcGFyc2VkIGR1cmluZworIyB0aGUgb3B0aW9uIHBhcnNpbmcgbG9vcC4KKwordXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uJworCisjIFNob3J0IGhlbHAgbWVzc2FnZSBpbiByZXNwb25zZSB0byAnLWgnLgordXNhZ2VfbWVzc2FnZT0iT3B0aW9uczoKKyAgICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisgICAgICAgLS1uby13YXJuaW5ncyAgICAgICAgZXF1aXZhbGVudCB0byAnLVdub25lJworICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFthbGxdCisgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkRUNITyAiJGxvbmdfaGVscF9tZXNzYWdlCisKK01PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGNsZWFuICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisgICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyAgICAgICBleGVjdXRlICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKyAgICAgICBmaW5pc2ggICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworICAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworICAgICAgIGxpbmsgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKyAgICAgICB1bmluc3RhbGwgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKworTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgV2hlbiBwYXNzZWQgYXMgZmlyc3Qgb3B0aW9uLAorJy0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgJ01PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisKK1doZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAoraW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisgICAgICAgaG9zdC10cmlwbGV0OiAgICRob3N0CisgICAgICAgc2hlbGw6ICAgICAgICAgICRTSEVMTAorICAgICAgIGNvbXBpbGVyOiAgICAgICAkTFRDQworICAgICAgIGNvbXBpbGVyIGZsYWdzOiAkTFRDRkxBR1MKKyAgICAgICBsaW5rZXI6ICAgICAgICAgJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyAgICAgICB2ZXJzaW9uOiAgICAgICAgJHByb2duYW1lIChHTlUgbGlidG9vbCkgMi40LjYKKyAgICAgICBhdXRvbWFrZTogICAgICAgYCgkQVVUT01BS0UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKyAgICAgICBhdXRvY29uZjogICAgICAgYCgkQVVUT0NPTkYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3MvbGlidG9vbC8+LgorR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uIgorICAgIGV4aXQgMAorfQorCisKKyMgZnVuY19sbzJvIE9CSkVDVC1OQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFuc2Zvcm0gT0JKRUNULU5BTUUgZnJvbSBhICcubG8nIHN1ZmZpeCB0byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMKKyMgb2JqZWN0IHN1ZmZpeC4KKworbG8ybz1zL1xcLmxvXCQvLiRvYmpleHQvCitvMmxvPXMvXFwuJG9iamV4dFwkLy5sby8KKworaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KKyAgZXZhbCAnZnVuY19sbzJvICgpCisgIHsKKyAgICBjYXNlICQxIGluCisgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiRvYmpleHQgOzsKKyAgICAgICogICApIGZ1bmNfbG8yb19yZXN1bHQ9JDEgICAgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgfScKKworICAjIGZ1bmNfeGZvcm0gTElCT0JKLU9SLVNPVVJDRQorICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAjIFRyYW5zZm9ybSBMSUJPQkotT1ItU09VUkNFIGZyb20gYSAnLm8nIG9yICcuYycgKG9yIG90aGVyd2lzZSkKKyAgIyBzdWZmaXggdG8gYSAnLmxvJyBsaWJ0b29sLW9iamVjdCBzdWZmaXguCisgIGV2YWwgJ2Z1bmNfeGZvcm0gKCkKKyAgeworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIHNlZC4KKyAgZnVuY19sbzJvICgpCisgIHsKKyAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJGxvMm8iYAorICB9CisKKyAgZnVuY194Zm9ybSAoKQorICB7CisgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzfFwuW14uXSokfC5sb3wnYAorICB9CitmaQorCisKKyMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCit7CisgICAgZnVuY19fZmF0YWxfZXJyb3IgJHsxKyIkQCJ9IFwKKyAgICAgICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiBcCisgICAgICAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCit9CisKKworIyBmdW5jX2NvbmZpZworIyAtLS0tLS0tLS0tLQorIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCitmdW5jX2NvbmZpZyAoKQoreworICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJworICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCisKKyAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCisKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorCisgICAgZXhpdCAkPworfQorCisKKyMgZnVuY19mZWF0dXJlcworIyAtLS0tLS0tLS0tLS0tCisjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2Z1bmNfZmVhdHVyZXMgKCkKK3sKKyAgICBlY2hvICJob3N0OiAkaG9zdCIKKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGZpCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKworIyBmdW5jX2VuYWJsZV90YWcgVEFHTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCisjIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKKyMgdmFyaWFibGUgaGVyZS4KK2Z1bmNfZW5hYmxlX3RhZyAoKQoreworICAgICMgR2xvYmFsIHZhcmlhYmxlOgorICAgIHRhZ25hbWU9JDEKKworICAgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgICAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICAgIHNlZF9leHRyYWN0Y2Y9LyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AKKworICAgICMgVmFsaWRhdGUgdGFnbmFtZS4KKyAgICBjYXNlICR0YWduYW1lIGluCisgICAgICAqWyEtX0EtWmEtejAtOSwvXSopCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCisgICAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgICAgY2FzZSAkdGFnbmFtZSBpbgorICAgICAgICBDQykgOzsKKyAgICAqKQorICAgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCisKKwkgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJICAjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAorCSAgIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgorCSAgIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCSAgZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAorCSAgZXZhbCAiJGV4dHJhY3RlZGNmIgorICAgICAgICBlbHNlCisJICBmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICAgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgICBlbHNlCisgICAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorICAgIGZpCit9CisKKworIyBsaWJ0b29sX29wdGlvbnNfcHJlcCBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmVwYXJhdGlvbiBmb3Igb3B0aW9ucyBwYXJzZWQgYnkgbGlidG9vbC4KK2xpYnRvb2xfb3B0aW9uc19wcmVwICgpCit7CisgICAgJGRlYnVnX21vZGUKKworICAgICMgT3B0aW9uIGRlZmF1bHRzOgorICAgIG9wdF9jb25maWc9ZmFsc2UKKyAgICBvcHRfZGxvcGVuPQorICAgIG9wdF9kcnlfcnVuPWZhbHNlCisgICAgb3B0X2hlbHA9ZmFsc2UKKyAgICBvcHRfbW9kZT0KKyAgICBvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKKyAgICBvcHRfcXVpZXQ9ZmFsc2UKKworICAgIG5vbm9wdD0KKyAgICBwcmVzZXJ2ZV9hcmdzPQorCisgICAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgY2FzZSAkMSBpbgorICAgIGNsZWFufGNsZWF8Y2xlfGNsKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGxpbmt8bGlufGxpfGwpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFBhc3MgYmFjayB0aGUgbGlzdCBvZiBvcHRpb25zLgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisgICAgbGlidG9vbF9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBsaWJ0b29sX29wdGlvbnNfcHJlcAorCisKKyMgbGlidG9vbF9wYXJzZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm92aWRlIGhhbmRsaW5nIGZvciBsaWJ0b29sIHNwZWNpZmljIG9wdGlvbnMuCitsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIFBlcmZvcm0gb3VyIG93biBsb29wIHRvIGNvbnN1bWUgYXMgbWFueSBvcHRpb25zIGFzIHBvc3NpYmxlIGluCisgICAgIyBlYWNoIGl0ZXJhdGlvbi4KKyAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgICAgX0dfb3B0PSQxCisgICAgICBzaGlmdAorICAgICAgY2FzZSAkX0dfb3B0IGluCisgICAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kcnlfcnVuPToKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1jb25maWcpICAgICAgIGZ1bmNfY29uZmlnIDs7CisKKyAgICAgICAgLS1kbG9wZW58LWRsb3BlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgorfSQxIgorICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06IDs7CisKKyAgICAgICAgLS1mZWF0dXJlcykgICAgIGZ1bmNfZmVhdHVyZXMgOzsKKworICAgICAgICAtLWZpbmlzaCkgICAgICAgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdCA7OworCisgICAgICAgIC0taGVscCkgICAgICAgICBvcHRfaGVscD06IDs7CisKKyAgICAgICAgLS1oZWxwLWFsbCkgICAgIG9wdF9oZWxwPSc6IGhlbHAtYWxsJyA7OworCisgICAgICAgIC0tbW9kZSkgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9tb2RlPSQxCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICQxIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRfY21kPWV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcXVpZXQ9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXdhcm5pbmdzfC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZz1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8tdmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1zaWxlbnR8LS1xdWlldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9xdWlldD06CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdGFnKSAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF90YWc9JDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0ICQxIgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19lbmFibGVfdGFnICIkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdmVyYm9zZXwtdikgICBvcHRfcXVpZXQ9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworCSMgQW4gb3B0aW9uIG5vdCBoYW5kbGVkIGJ5IHRoaXMgaG9vayBmdW5jdGlvbjoKKyAgICAgICAgKikJCXNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CitmdW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBsaWJ0b29sX3BhcnNlX29wdGlvbnMKKworCisKKyMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorIyBhcmd1bWVudHMuCitsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKK3sKKyAgICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAorICAgIGlmIHRlc3QgMCAtbHQgJCM7IHRoZW4KKyAgICAgIG5vbm9wdD0kMQorICAgICAgc2hpZnQKKyAgICBmaQorCisgICAgIyBwcmVzZXJ2ZSAtLWRlYnVnCisgICAgdGVzdCA6ID0gIiRkZWJ1Z19jbWQiIHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgorCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgIyBTb2xhcmlzMiBhZGRlZCB0byBmaXggaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9MTY0NTIKKyAgICAgICMgc2VlIGFsc286IGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTk3ODgKKyAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyogfCAqc29sYXJpczIqIHwgKm9zMiopCisgICAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCisgICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgJG9wdF9oZWxwIHx8IHsKKyAgICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKyAgICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgICAgICB0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAorICAgICAgICAmJiB0ZXN0IHllcyAhPSAiJGJ1aWxkX29sZF9saWJzIiBcCisgICAgICAgICYmIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKworICAgICAgIyBEYXJ3aW4gc3Vja3MKKyAgICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKyAgICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisgICAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCBleGVjdXRlICE9ICIkb3B0X21vZGUiOyB0aGVuCisgICAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gJy1kbG9wZW4nIgorICAgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgICAgICBnZW5lcmljX2hlbHA9JGhlbHAKKyAgICAgIGhlbHA9IlRyeSAnJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgfQorCisgICAgIyBQYXNzIGJhY2sgdGhlIHVucGFyc2VkIGFyZ3VtZW50IGxpc3QKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CitmdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMKKworCisjIFByb2Nlc3Mgb3B0aW9ucyBhcyBlYXJseSBhcyBwb3NzaWJsZSBzbyB0aGF0IC0taGVscCBhbmQgLS12ZXJzaW9uCisjIGNhbiByZXR1cm4gcXVpY2tseS4KK2Z1bmNfb3B0aW9ucyAkezErIiRAIn0KK2V2YWwgc2V0IGR1bW15ICIkZnVuY19vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0CisKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgICAgTWFpbi4gICAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKK21hZ2ljPSclJSVNQUdJQyB2YXJpYWJsZSUlJScKK21hZ2ljX2V4ZT0nJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlJworCisjIEdsb2JhbCB2YXJpYWJsZXMuCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworfQorCisjIGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2wKKyMgVHJ1ZSBpZmYgc3RkaW4gaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IExpYnRvb2wuIFRoaXMgZnVuY3Rpb24gaXMgb25seQorIyBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0IGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19nZW5lcmF0ZWRfYnlfbGlidG9vbF9wICgpCit7CisgICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbGFsaWJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3IgJy5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sYWxpYl9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmCisgICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgfCBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sX3AKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgJy5sYScgbGlicmFyeSBvciAnLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiAnZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAkbGFsaWJfcF9saW5lIGluCisJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKKwkgICAgZXNhYworCWRvbmUKKwlleGVjIDA8JjUgNTwmLQorICAgIGZpCisgICAgdGVzdCB5ZXMgPSAiJGxhbGliX3AiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmCisgICAgICAkbHRfdHJ1bmNhdGVfYmluIDwgIiQxIiAyPi9kZXYvbnVsbCB8IGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2xfcAorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlcgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvciB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiQxIiB8fCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIgorfQorCisKKyMgZnVuY19leGVjdXRlX2NtZHMgY29tbWFuZHMgZmFpbF9jbWQKKyMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCisjIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgorIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCitmdW5jX2V4ZWN1dGVfY21kcyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzcCRubAorICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIElGUz0kc2F2ZV9pZnMKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjICdGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJDEgaW4KKyAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKKyAgICAqKQkJLiAiLi8kMSIgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICisjIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bworIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKK2Z1bmNfcmVzb2x2ZV9zeXNyb290ICgpCit7CisgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQorICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KKyAgPSopCisgICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAorIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKKyMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KK2Z1bmNfcmVwbGFjZV9zeXNyb290ICgpCit7CisgIGNhc2UgJGx0X3N5c3Jvb3Q6JDEgaW4KKyAgPyo6IiRsdF9zeXNyb290IiopCisgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSc9JyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICA7OworICAqKQorICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSQxCisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfaW5mZXJfdGFnIGFyZworIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgorIyBPbmx5IGF0dGVtcHQgdGhpcyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZQorIyBjb21tYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGRlZmF1bHQgY29tcGlsZXIuCisjIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJworZnVuY19pbmZlcl90YWcgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorICAgICAgQ0NfcXVvdGVkPQorICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKyAgICAgIGRvbmUKKyAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKyAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorICAgICAgY2FzZSAkQCBpbgorICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKKyAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAorICAgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OworICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKKyAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KKyAgICAgICopCisJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbworCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgorCSAgICBldmFsICJgJFNFRCAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgQ0NfcXVvdGVkPQorCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKwkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisJICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKwkgICAgZG9uZQorCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisJICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorCSAgICBjYXNlICIkQCAiIGluCisJICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKwkgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKQorCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCisJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorCSAgICAgIHRhZ25hbWU9JHoKKwkgICAgICBicmVhaworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZG9uZQorCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCisJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAorCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggJy0tdGFnJyIKKyMJZWxzZQorIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGZpCit9CisKKworCisjIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3Qgb3V0cHV0X25hbWUgcGljX25hbWUgbm9ucGljX25hbWUKKyMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCisjIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgorZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQoreworICAgIHdyaXRlX2xpYm9iaj0kMQorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJDJcJworICAgIGVsc2UKKyAgICAgIHdyaXRlX2xvYmo9bm9uZQorICAgIGZpCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisgICAgICB3cml0ZV9vbGRvYmo9XCckM1wnCisgICAgZWxzZQorICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGNhdCA+JHt3cml0ZV9saWJvYmp9VCA8PEVPRgorIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorcGljX29iamVjdD0kd3JpdGVfbG9iagorCisjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Citub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCisKK0VPRgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHdyaXRlX2xpYm9iaiIKKyAgICB9Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCisjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAorIyBhbmQgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCisjIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCisjIGluICRidWlsZCdzICRQQVRILgorIworIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAorIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCitmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCisgICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKKyAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKyAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgorICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCI7IHRoZW4KKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8CisgICAgICAgICRTRUQgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICBlbHNlCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKyAgICBmaQorICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKKworCisjIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCisjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCisjICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYSBjb3JyZWN0bHkKKyMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncworIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KKyMKKyMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCisjIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcworIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCitmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCisgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBvbGRJRlM9JElGUworICAgIElGUz06CisgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KKyAgICAgIElGUz0kb2xkSUZTCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgorICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0kb2xkSUZTCisgIGZpCit9CisjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMgorCisKKyMgZnVuY19jeWdwYXRoIEFSR1MuLi4KKyMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgorIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKKyMgJGJ1aWxkIGlzIE1TWVMgYW5kICRob3N0IGlzIEN5Z3dpbiwgb3IgKDMpICRidWlsZCBpcyBDeWd3aW4uIEluIGNhc2UgKDEpIG9yCisjICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0CisjIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKKyMgZnJvbSAkYnVpbGQncyAqbml4IG9yIE1TWVMgZm9ybWF0KS4gSW4gY2FzZSAoMyksIHJldHVybnMgdGhlIHczMiBmaWxlIG5hbWUKKyMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCisjIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KKyMKKyMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bworIyBiZSBjb252ZXJ0ZWQuCisjCisjIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICisjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgorZnVuY19jeWdwYXRoICgpCit7CisgICRkZWJ1Z19jbWQKKworICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCisgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKyAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQorICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKyAgICBmaQorICBlbHNlCisgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKyAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogJyRMVF9DWUdQQVRIJyIKKyAgZmkKK30KKyNlbmQ6IGZ1bmNfY3lncGF0aAorCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgorIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgorZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJHNlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorfQorI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgorIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisjIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgorZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgZnVuY19lcnJvciAiICAnJDEnIgorICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICMgRmFsbGJhY2s6CisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKKyMgVmVyaWZ5IHRoYXQgRlJPTV9QQVRIIChhIHBhdGggaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCitmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQoreworICAkZGVidWdfY21kCisKKyAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgJyQzJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKKyAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCisgICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgorICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzPSJzfCQxfCQyfGciCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8CisgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAorICAgIGVsc2UKKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMworICAgIGZpCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCisjIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCisjIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KK2Z1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQoreworICAkZGVidWdfY21kCisKKyAgY2FzZSAkNCBpbgorICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQKKyAgICA7OworICBlc2FjCisgIGNhc2UgJDQgaW4KKyAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgorICAgIDs7CisgIGVzYWMKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgJyR0b19ob3N0X2ZpbGVfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisKKworIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKKyMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX3RvX2hvc3RfZmlsZSAoKQoreworICAkZGVidWdfY21kCisKKyAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgorfQorIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKKworCisjIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCisjIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KKyMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKKyMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCitmdW5jX3RvX3Rvb2xfZmlsZSAoKQoreworICAkZGVidWdfY21kCisKKyAgY2FzZSAsJDIsIGluCisgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKKyAgICAgIDs7CisgICAgKikKKyAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0CisgICAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKKworCisjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQorICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKKyMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKworCisjIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKKyMgaW4gYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCisgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0CisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBpbnZva2VkIHZpYSAnJHRvX2hvc3RfcGF0aF9jbWQgQVJHJworIworIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisjCisjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gIElmCisjIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAorIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCisjCisjIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246CisjICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKKyMgICBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgICAgICA6IGZ1bmNfY29udmVydF9wYXRoX1hfdG9fWSAoKQorIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQorIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKKyMgdGhlIHR3byBuZXcgZnVuY3Rpb25zIG11c3QgZm9sbG93IHRoaXMgcGF0dGVybiwgb3IgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyMgd2lsbCBicmVhay4KKworCisjIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQorIyBhcHByb3ByaWF0ZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mICR0b19ob3N0X2ZpbGVfY21kLgordG9faG9zdF9wYXRoX2NtZD0KK2Z1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCit7CisgICRkZWJ1Z19jbWQKKworICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KKyAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCisgICAgdG9faG9zdF9wYXRoX2NtZD1mdW5jX2NvbnZlcnRfcGF0aF8kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgIGZpCit9CisKKworIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKKyMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGggKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisgICR0b19ob3N0X3BhdGhfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRworIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUworICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7CisgICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLW0gLXAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxImAKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCisjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25peF90b193MzIgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQgaW4gYQorIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCisgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCisKKworIyBmdW5jX2RsbF9kZWZfcCBGSUxFCisjIFRydWUgaWZmIEZJTEUgaXMgYSBXaW5kb3dzIERMTCAnLmRlZicgZmlsZS4KKyMgS2VlcCBpbiBzeW5jIHdpdGggX0xUX0RMTF9ERUZfUCBpbiBsaWJ0b29sLm00CitmdW5jX2RsbF9kZWZfcCAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY19kbGxfZGVmX3BfdG1wPWAkU0VEIC1uIFwKKyAgICAtZSAncy9eWwkgXSovLycgXAorICAgIC1lICcvXlwoOy4qXCkqJC9kJyBcCisgICAgLWUgJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJyBcCisgICAgLWUgcSBcCisgICAgIiQxImAKKyAgdGVzdCBERUYgPSAiJGZ1bmNfZGxsX2RlZl9wX3RtcCIKK30KKworCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgorICAgIGJhc2VfY29tcGlsZT0KKyAgICBzcmNmaWxlPSRub25vcHQgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9JGFyZworCWFyZ19tb2RlPW5vcm1hbAorCTs7CisKKyAgICAgIHRhcmdldCApCisJbGlib2JqPSRhcmcKKwlhcmdfbW9kZT1ub3JtYWwKKwljb250aW51ZQorCTs7CisKKyAgICAgIG5vcm1hbCApCisJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCWNhc2UgJGFyZyBpbgorCS1vKQorCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgJy1vJyBtb3JlIHRoYW4gb25jZSIKKwkgIGFyZ19tb2RlPXRhcmdldAorCSAgY29udGludWUKKwkgIDs7CisKKwktcGllIHwgLWZwaWUgfCAtZlBJRSkKKyAgICAgICAgICBmdW5jX2FwcGVuZCBwaWVfZmxhZyAiICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCisJICBmdW5jX2FwcGVuZCBsYXRlciAiICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1uby1zdXBwcmVzcykKKwkgIHN1cHByZXNzX29wdD1ubworCSAgY29udGludWUKKwkgIDs7CisKKwktWGNvbXBpbGVyKQorCSAgYXJnX21vZGU9YXJnICAjICB0aGUgbmV4dCBvbmUgZ29lcyBpbnRvIHRoZSAiYmFzZV9jb21waWxlIiBhcmcgbGlzdAorCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKKwkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCisKKwktV2MsKikKKwkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgbGFzdGFyZz0KKwkgIHNhdmVfaWZzPSRJRlM7IElGUz0sCisJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgICBJRlM9JHNhdmVfaWZzCisJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgorCSAgZG9uZQorCSAgSUZTPSRzYXZlX2lmcworCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKwkgIGZ1bmNfYXBwZW5kIGJhc2VfY29tcGlsZSAiICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSRzcmNmaWxlCisJICBzcmNmaWxlPSRhcmcKKwkgIDs7CisJZXNhYyAgIyAgY2FzZSAkYXJnCisJOzsKKyAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgorICAgIGRvbmUgIyBmb3IgYXJnCisKKyAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgIGFyZykKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKKyAgICAgIDs7CisgICAgdGFyZ2V0KQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoICctbyciCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorICAgICAgfQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgorICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5bY0NGU2lmbXNvXSB8IFwKKyAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKKyAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCisgICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICouZ28gfCAqLm9iaiB8ICouc3ggfCAqLmN1IHwgKi5jdXApCisgICAgICBmdW5jX3hmb3JtICIkbGlib2JqIgorICAgICAgbGlib2JqPSRmdW5jX3hmb3JtX3Jlc3VsdAorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLmxvKSBmdW5jX2xvMm8gIiRsaWJvYmoiOyBvYmo9JGZ1bmNfbG8yb19yZXN1bHQgOzsKKyAgICAqKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gJyRsaWJvYmonIgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCisJICB8fCBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbm5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljKQorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1waWMpCisJcGljX21vZGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLW5vbi1waWMpCisJcGljX21vZGU9bm8KKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxpYm9iaiIKKyAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiIFwKKyAgICAgICYmICRFQ0hPICJYJGxpYm9iaiIgfCAkR1JFUCAnW11+I14qe307PD4/IiciJyInCSAmKCl8YCRbXScgXAorICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSAnJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCisgICAgb2JqbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgbG9iaj0keGRpciRvYmpkaXIvJG9iam5hbWUKKworICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCBubyA9ICIkcGljX21vZGUiICYmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KKyAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgIGZpCisKKyAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcworICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYworICAgIGlmIHRlc3Qgbm8gPSAiJGNvbXBpbGVyX2NfbyI7IHRoZW4KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJG9iamV4dAorICAgICAgbG9ja2ZpbGU9JG91dHB1dF9vYmoubG9jaworICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmo9CisgICAgICBuZWVkX2xvY2tzPW5vCisgICAgICBsb2NrZmlsZT0KKyAgICBmaQorCisgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisgICAgaWYgdGVzdCB5ZXMgPSAiJG5lZWRfbG9ja3MiOyB0aGVuCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgorICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKyAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisKKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCisgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisKKyAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KKyAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQorCisgICAgICBpZiB0ZXN0IG5vICE9ICIkcGljX21vZGUiOyB0aGVuCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZWxzZQorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgorCisgICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KKwkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJGxvYmoiCisgICAgICBmaQorCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRsb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJGxvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKworICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHByZXNzX29wdCI7IHRoZW4KKwlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRwaWNfbW9kZSI7IHRoZW4KKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCisgICAgICBlbHNlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRjb21waWxlcl9jX28iOyB0aGVuCisJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCisgICAgICBmaQorCisgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KKyAgICAgIGZ1bmNfYXBwZW5kIGNvbW1hbmQgIiRzdXBwcmVzc19vdXRwdXQiCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyIgJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKKworICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAorICAgICAgaWYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCisJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKKyAgICAgICAgJFJNICIkbG9ja2ZpbGUiCisgICAgICBmaQorICAgIH0KKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCiskb3B0X2hlbHAgfHwgeworICB0ZXN0IGNvbXBpbGUgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KK30KKworZnVuY19tb2RlX2hlbHAgKCkKK3sKKyAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKyAgICBjYXNlICRvcHRfbW9kZSBpbgorICAgICAgIiIpCisgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCisgICAgICAgIGZ1bmNfaGVscAorICAgICAgICA7OworCisgICAgICBjbGVhbikKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5ICcvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzICctZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgJy5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgJy5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtV2MsRkxBRyAgICAgICAgICBwYXNzIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisKK0NPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhICdzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4ICcuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgJy5sbycuIgorICAgICAgICA7OworCisgICAgICBleGVjdXRlKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgorCitBdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKKworVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gJy1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgICAgICAgIDs7CisKKyAgICAgIGZpbmlzaCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSAnLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIGluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorCitJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KKworSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCitlaXRoZXIgdGhlICdpbnN0YWxsJyBvciAnY3AnIHByb2dyYW0uCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKKyAgLWRsb3BlbiBGSUxFICAgICAgJy1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisgIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgdXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLW9zMmRsbG5hbWUgTkFNRSAgZm9yY2UgYSBzaG9ydCBETEwgbmFtZSBvbiBPUy8yIChubyBlZmZlY3Qgb24gb3RoZXIgT1NlcykKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKyAgLVdjLEZMQUcKKyAgLVhjb21waWxlciBGTEFHICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKyAgLVdsLEZMQUcKKyAgLVhsaW5rZXIgRkxBRyAgICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgbGlua2VyCisgIC1YQ0NsaW5rZXIgRkxBRyAgIHBhc3MgbGluay1zcGVjaWZpYyBGTEFHIHRvIHRoZSBjb21waWxlciBkcml2ZXIgKENDKQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoICctJykgYXJlIGlnbm9yZWQuCisKK0V2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiAnLmxhJyBhcmUKK3RyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CitvYmplY3QgZmlsZXMuCisKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluICcubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoJy5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCAnLXJwYXRoJyBpcworcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmEnIG9yICcubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAordXNpbmcgJ2FyJyBhbmQgJ3JhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgJ2xpYicuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5sbycgb3IgJy4kb2JqZXh0JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIHVuaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgJy9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgJy1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCitPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSAnJG9wdF9tb2RlJyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBlY2hvCisgICAgJEVDSE8gIlRyeSAnJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorfQorCisjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKK2lmICRvcHRfaGVscDsgdGhlbgorICBpZiB0ZXN0IDogPSAiJG9wdF9oZWxwIjsgdGhlbgorICAgIGZ1bmNfbW9kZV9oZWxwCisgIGVsc2UKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8ICRTRUQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwllY2hvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwKKyAgICAkU0VEICcxZAorICAgICAgL15XaGVuIHJlcG9ydGluZy8sL15SZXBvcnQveworCUgKKwlkCisgICAgICB9CisgICAgICAkeAorICAgICAgL2luZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzL2QKKyAgICAgIC9tb3JlIGRldGFpbGVkIC4qTU9ERS9kCisgICAgICBzL15Vc2FnZTouKi0tbW9kZT1cKFteIF0qXCkgLiovRGVzY3JpcHRpb24gb2YgXDEgbW9kZTovJworICBmaQorICBleGl0ICQ/CitmaQorCisKKyMgZnVuY19tb2RlX2V4ZWN1dGUgYXJnLi4uCitmdW5jX21vZGVfZXhlY3V0ZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSRub25vcHQKKyAgICB0ZXN0IC16ICIkY21kIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgorCisgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KKyAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KKyAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisJfHwgZnVuY19mYXRhbF9oZWxwICInJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisKKyAgICAgIGRpcj0KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisJICAgIGZ1bmNfd2FybmluZyAiJyRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoICctZXhwb3J0LWR5bmFtaWMnIgorCSAgY29udGludWUKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIGRpciAiLyRvYmpkaXIiCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kICckZGxuYW1lJyBpbiAnJGRpcicgb3IgJyRkaXIvJG9iamRpciciCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiCisJY29udGludWUKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCisgICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9JGFic2RpcgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9JG1hZ2ljCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICIkZmlsZSIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCisJZWxpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9JHByb2dkaXIvJHByb2dyYW0KKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgorICAgIGRvbmUKKworICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyAgICAgIGRvCisJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorCSAgICAgIGVsc2UKKwkJJGx0X3Vuc2V0ICRsdF92YXIKKwkgICAgICBmaSIKKyAgICAgIGRvbmUKKworICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9XCRjbWQkYXJncworICAgIGZpCit9CisKK3Rlc3QgZXhlY3V0ZSA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KK2Z1bmNfbW9kZV9maW5pc2ggKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBsaWJzPQorICAgIGxpYmRpcnM9CisgICAgYWRtaW5jbWRzPQorCisgICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9CisgICAgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCisJZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCisKKyAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgorCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCisJZWxzZQorCSAgZnVuY193YXJuaW5nICInJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCWZpCisKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50ICckb3B0JyIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KKyAgICAgICAgc3lzcm9vdF9yZWdleD1gJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzcm9vdF9jbWQ9CisgICAgICBmaQorCisgICAgICAjIFJlbW92ZSBzeXNyb290IHJlZmVyZW5jZXMKKyAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworICAgICAgICAgIGVjaG8gInJlbW92aW5nIHJlZmVyZW5jZXMgdG8gJGx0X3N5c3Jvb3QgYW5kICc9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisgICAgICAgIGRvbmUKKyAgICAgIGVsc2UKKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKwkgICRTRUQgLWUgIiRzeXNyb290X2NtZCBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorCSAgICA+ICR0bXBkaXIvdG1wLWxhCisJICBtdiAtZiAkdG1wZGlyL3RtcC1sYSAkbGliCisJZG9uZQorICAgICAgICAke1JNfXIgIiR0bXBkaXIiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcworJyIkY21kIiciJworCWZpCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3F1aWV0ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCSRFQ0hPICIgICAkbGliZGlyIgorICAgICAgZG9uZQorICAgICAgZWNobworICAgICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKyAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgJy1MTElCRElSJyIKKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgJyRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgJyRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwlsaWJkaXI9TElCRElSCisJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCisJJEVDSE8gIiAgIC0gdXNlIHRoZSAnJGZsYWcnIGxpbmtlciBmbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCisJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byAnL2V0Yy9sZC5zby5jb25mJyIKKyAgICAgIGZpCisgICAgICBlY2hvCisKKyAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgICAgY2FzZSAkaG9zdCBpbgorCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorCSAgZWNobyAicGFnZXMuIgorCSAgOzsKKwkqKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisJICA7OworICAgICAgZXNhYworICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBmaQorICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit0ZXN0IGZpbmlzaCA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgorICAgIGlmIHRlc3QgIiRTSEVMTCIgPSAiJG5vbm9wdCIgfHwgdGVzdCAvYmluL3NoID0gIiRub25vcHQiIHx8CisgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCisgICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjCisgICAgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0kaW5zdGFsbF9wcm9nCisgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CisgICAgICAqKSBpbnN0YWxsX2NwPWZhbHNlIDs7CisgICAgZXNhYworCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1mYWxzZQorICAgIHN0cmlwbWU9CisgICAgbm9fbW9kZT06CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBhcmcyPQorICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCisJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKKwlkZXN0PSRhcmcKKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZCkgaXNkaXI9OiA7OworICAgICAgLWYpCisJaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCSAgcHJldj0kYXJnCisJZmkKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgaWYgdGVzdCBYLW0gPSAiWCRwcmV2IiAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgorCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKKwkgICAgbm9fbW9kZT1mYWxzZQorCSAgZmkKKwkgIHByZXY9CisJZWxzZQorCSAgZGVzdD0kYXJnCisJICBjb250aW51ZQorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgJyRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiCisJZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgorCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgorICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCisgICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPToKKyAgICBpZiAkaXNkaXI7IHRoZW4KKyAgICAgIGRlc3RkaXI9JGRlc3QKKyAgICAgIGRlc3RuYW1lPQorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKKyAgICAgIGRlc3RkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIGRlc3RuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX2ZhdGFsX2hlbHAgIickZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgorICAgIGZpCisgICAgY2FzZSAkZGVzdGRpciBpbgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKyAgICAqKQorICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCWNhc2UgJGZpbGUgaW4KKwkqLmxvKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgIickZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9JG1hZ2ljCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCisJOzsKKworICAgICAgKi5sYSkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIickZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCisJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKwkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmdXR1cmVfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKworCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCisJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKworCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIHRvIHRoZSBzYW1lIHByZWZpeC4KKwkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCisJICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KKwkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCAnJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorCSAgZWxzZQorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAorCSAgZmkKKworCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgJyRmaWxlJyIKKwkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgJ1wnJyRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKKwlmaQorCisJIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CisJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisJICByZWFsbmFtZT0kMQorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0kcmVhbG5hbWUKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0ke3JlYWxuYW1lfVQKKworCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0kc3RyaXBtZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCSAgICBjYXNlICRyZWFsbmFtZSBpbgorCSAgICAqLmRsbC5hKQorCSAgICAgIHRzdHJpcG1lPQorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIG9zMiopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICpfZGxsLmEpCisJICAgICAgdHN0cmlwbWU9CisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAtbiAiJHRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhpdCAkPycKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgorCSAgICAjIFRyeSAnbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgJ2xuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCisJICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAorCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCisJICAgIGZvciBsaW5rbmFtZQorCSAgICBkbworCSAgICAgIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSIgXAorCQkmJiBmdW5jX3Nob3dfZXZhbCAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRSTSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCisJICAgIGRvbmUKKwkgIGZpCisKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0kZGVzdGRpci8kcmVhbG5hbWUKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgorCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJaW5zdG5hbWU9JGRpci8ke25hbWV9aQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdG5hbWUKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCisJZmkKKworCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJY2FzZSAkZGVzdGZpbGUgaW4KKwkqLmxvKQorCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCisJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9JGRlc3RmaWxlCisJICBkZXN0ZmlsZT0KKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byAnJGRlc3RmaWxlJyIKKwkgIDs7CisJZXNhYworCisJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCisJdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JworCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIGZ1bmNfbG8ybyAiJGZpbGUiCisJICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCisJZmkKKwlleGl0ICRFWElUX1NVQ0NFU1MKKwk7OworCisgICAgICAqKQorCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdG5hbWUKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCisJZmkKKworCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAorCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KKwkjIGluc3RhbGwKKwlzdHJpcHBlZF9leHQ9CisJY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBzdHJpcHBlZF9leHQ9LmV4ZQorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgJyR3cmFwcGVyJyIKKworCSAgZmluYWxpemU9OgorCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0kbGliZGlyL2AkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYAorCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAiJyRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gJyRsaWJkaXInIgorCSAgICAgIGZpbmFsaXplPWZhbHNlCisJICAgIGZpCisJICBkb25lCisKKwkgIHJlbGlua19jb21tYW5kPQorCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICBvdXRwdXRuYW1lPQorCSAgaWYgdGVzdCBubyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgaWYgJGZpbmFsaXplOyB0aGVuCisJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCisJCWZpbGU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgICAgICBvdXRwdXRuYW1lPSR0bXBkaXIvJGZpbGUKKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorCisJICAgICAgICAkb3B0X3F1aWV0IHx8IHsKKwkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgICAgfQorCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgICAgIGVsc2UKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rICckZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKKwkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgorCQkgIGNvbnRpbnVlCisJICAgICAgICBmaQorCSAgICAgICAgZmlsZT0kb3V0cHV0bmFtZQorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayAnJGZpbGUnIgorCSAgICAgIGZpCisJICAgIH0KKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCisgICAgICBvbGRsaWI9JGRlc3RkaXIvJG5hbWUKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkdG9vbF9vbGRsaWIiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biAnJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKworICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgIiRwcm9ncGF0aCIgJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgIGVsc2UKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgaW5zdGFsbCA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorCisKKyMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCisjIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKKyMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgorZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBteV9vdXRwdXRuYW1lPSQxCisgICAgbXlfb3JpZ2luYXRvcj0kMgorICAgIG15X3BpY19wPSR7My1mYWxzZX0KKyAgICBteV9wcmVmaXg9YCRFQ0hPICIkbXlfb3JpZ2luYXRvciIgfCAkU0VEICdzJVteYS16QS1aMC05XSVfJWcnYAorICAgIG15X2Rsc3ltcz0KKworICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJbXlfZGxzeW1zPSR7bXlfb3V0cHV0bmFtZX1TLmMKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLm5tCisKKwlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCisJIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKwlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisKKwkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgJyRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCisvKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyNlbmRpZgorCisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfV0lOMzJfV0NFCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkIF9fb3NmX18KKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorI2VuZGlmCisKKyNkZWZpbmUgU1RSRVEoczEsIHMyKSAoc3RyY21wICgoczEpLCAoczIpKSA9PSAwKQorCisvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorIgorCisJaWYgdGVzdCB5ZXMgPSAiJGRsc2VsZiI7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRvdXRwdXQnIgorCisJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCisKKwkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbworCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHByb2dmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tICckZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cAorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBldmFsICIkU0VEIC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGVsc2UKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICIkU0VEIC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSAnJGRscHJlZmlsZSciCisJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgorCSAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICAgICAgICBjYXNlICRob3N0IGluCisJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQorCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKKwkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCisJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0KKwkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCisJICAgICAgICAgICMgVXNlIHN1YnNoZWxsLCB0byBhdm9pZCBjbG9iYmVyaW5nIGN1cnJlbnQgdmFyaWFibGUgdmFsdWVzCisJICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiOyB0aGVuCisJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICAjIG5vIGxhZmlsZS4gdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZCAtZGxwcmVvcGVuIDxpbXBvcnQgbGlicmFyeT4uCisJICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorCSAgICAgICAgICBmaQorCSAgICAgICAgZmkKKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxiYXNlbmFtZSI7IHRoZW4KKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgorCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZpCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKwkgICAgICAgICAgICAkU0VEIC1lICcvSSBfX2ltcC9kJyAtZSAncy9JIF9fbm1fL0QgLztzL19ubV9fLy8nID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgICB9CisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKikKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgICB9CisJICAgIDs7CisgICAgICAgICAgZXNhYworCWRvbmUKKworCSRvcHRfZHJ5X3J1biB8fCB7CisJICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCisJICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorCSAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisJICBmaQorCisJICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorCSAgaWYgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiB8CisJICAgICAgaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXNvcnQgLWsgMworCSAgICAgIGVsc2UKKwkJc29ydCArMgorCSAgICAgIGZpIHwKKwkgICAgICB1bmlxID4gIiRubGlzdCJTOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUworCSAgZmkKKworCSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyInCisJICBlbHNlCisJICAgIGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgZmkKKworCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJHtubGlzdH1JIicKKwkgIGlmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCI7IHRoZW4KKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9faW1wb3J0IicgPCAiJG5saXN0IlMgPiAiJG5saXN0IkknCisJICBmaQorCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgKmFkZHJlc3M7Cit9IGx0X2Rsc3ltbGlzdDsKK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTtcCisiCisKKwkgIGlmIHRlc3QgLXMgIiRubGlzdCJJOyB0aGVuCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCitzdGF0aWMgdm9pZCBsdF9zeW1pbml0KHZvaWQpCit7CisgIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdCAqc3ltYm9sID0gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKKyAgZm9yICg7IHN5bWJvbC0+bmFtZTsgKytzeW1ib2wpCisgICAgeyIKKwkgICAgJFNFRCAncy8uKi8gICAgICBpZiAoU1RSRVEgKHN5bWJvbC0+bmFtZSwgXCImXCIpKSBzeW1ib2wtPmFkZHJlc3MgPSAodm9pZCAqKSBcJiY7LycgPCAiJG5saXN0IkkgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgICAgfQorfSIKKwkgIGZpCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQoreyB7XCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwfSwiCisKKwkgIGlmIHRlc3QgLXMgIiRubGlzdCJJOyB0aGVuCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHtcIkBJTklUQFwiLCAodm9pZCAqKSAmbHRfc3ltaW5pdH0sIgorCSAgZmkKKworCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCisJICBubykKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICAqKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgZXNhYworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmXAorIgorCX0gIyAhJG9wdF9kcnlfcnVuCisKKwlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CisJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJKiIgLXN0YXRpYyAiKikgOzsKKwkqKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMi4qfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKwkgICotKi1ocHV4KikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKKwkgICopCisJICAgICRteV9waWNfcCAmJiBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlzeW10YWJfY2ZsYWdzPQorCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworCSAgY2FzZSAkYXJnIGluCisJICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OworCSAgZXNhYworCWRvbmUKKworCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCisJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCisKKwkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCIgIiR7bmxpc3R9SSInCisKKwkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgorCXN5bWZpbGVvYmo9JG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dAorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmkKKwkgIDs7CisJKikKKwkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yICckbXlfZGxzeW1zJyIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCisgICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisgICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCisKKyAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCisgICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgZmkKK30KKworIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCisjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKyMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCitmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX3dpbjMyX2xpYmlkIGFyZworIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCisjCisjIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKKyMgSGFzIHRvIGJlIGEgc2hlbGwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gJ2VhdCcgdGhlIGFyZ3VtZW50CisjIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiAkZmlsZV9tYWdpY19jb21tYW5kIGlzIGNhbGxlZC4KKyMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgorZnVuY193aW4zMl9saWJpZCAoKQoreworICAkZGVidWdfY21kCisKKyAgd2luMzJfbGliaWRfdHlwZT11bmtub3duCisgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCisgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgIDs7CisgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKyAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CisgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGNhc2UgJG5tX2ludGVyZmFjZSBpbgorICAgICAgIk1TIGR1bXBiaW4iKQorCWlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIHx8CisJICAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiCisJdGhlbgorCSAgd2luMzJfbm1yZXM9aW1wb3J0CisJZWxzZQorCSAgd2luMzJfbm1yZXM9CisJZmkKKwk7OworICAgICAgKikKKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKwkgICRTRUQgLW4gLWUgJworCSAgICAxLDEwMHsKKwkJLyBJIC97CisJCSAgICBzfC4qfGltcG9ydHwKKwkJICAgIHAKKwkJICAgIHEKKwkJfQorCSAgICB9J2AKKwk7OworICAgICAgZXNhYworICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KKyAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKKyAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICpETEwqKQorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgOzsKKyAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCisgICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKKyAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCisjCisjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorIyBpbXBvcnQgbGlicmFyeSBBUkcuCisjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCit7CisgICRkZWJ1Z19jbWQKKworICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcworIworIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCisjIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCisjIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeSBMSUJOQU1FLgorIworIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKKyMgb24gdGhlIHBsYXRmb3JtIGFuZCBjb21waWxlciB0aGF0IGNyZWF0ZWQgdGhlIGltcGxpYi4KKyMKKyMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCisjIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCit7CisgICRkZWJ1Z19jbWQKKworICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKKyAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97CisgICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCisgICAgICBzLy4qLz09PT1NQVJLPT09PS8KKyAgICAgIHAKKyAgICAgIGQKKyAgICB9CisgICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAorICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCisgICAgLzpbCSBdKmZpbGUgZm9ybWF0IHBlW2ldXHssMVx9LS9kCisgICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCisgICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKKyAgICAvXj09PT1NQVJLPT09PS9wCisgICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKKyAgICAvXi5cezQzXH0vIWQKKyAgICAjIEZyb20gcmVtYWluaW5nIGxpbmVzLCByZW1vdmUgZmlyc3QgNDMgY2hhcmFjdGVycworICAgIHMvXi5cezQzXH0vLycgfAorICAgICRTRUQgLW4gJworICAgICAgIyBKb2luIG1hcmtlciBhbmQgYWxsIGxpbmVzIHVudGlsIG5leHQgbWFya2VyIGludG8gYSBzaW5nbGUgbGluZQorICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQorICAgICAgSAorICAgICAgJCBiIHBhcmEKKyAgICAgIGIKKyAgICAgIDpwYXJhCisgICAgICB4CisgICAgICBzL1xuLy9nCisgICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCisgICAgICBzL149PT09TUFSSz09PT0vLworICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQorICAgICAgcy9bXC4gXHRdKiQvLworICAgICAgIyBQcmludAorICAgICAgLy4vcCcgfAorICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAorICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCisgICAgIyBhcmNoaXZlIHRoYXQgcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCisgICAgIyBhbGwgdGhvc2UgdGhhdCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCisgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCisgICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KKyAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQorICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKKyAgICAjIGEgJy4nLgorICAgICMKKyAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgorICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIworIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAorIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCisjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCit7CisgICRkZWJ1Z19jbWQKKworICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSI7IHRoZW4KKyAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKKyAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIjsgdGhlbgorICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKKyAgZWxzZQorICAgICMgdW5rbm93bgorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PQorICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmX2V4X2FuX2FyX2Rpcj0kMTsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0kMQorICAgIGlmIHRlc3QgeWVzID0gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iOyB0aGVuCisgICAgICBsb2NrZmlsZT0kZl9leF9hbl9hcl9vbGRsaWIubG9jaworICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGZpCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgXAorCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCisgICAgaWYgdGVzdCB5ZXMgPSAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiI7IHRoZW4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCBybSAtZiAiJGxvY2tmaWxlIgorICAgIGZpCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIG15X2dlbnRvcD0kMTsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9CisgICAgbXlfeGxpYj0KKyAgICBteV94YWJzPQorICAgIG15X3hkaXI9CisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9JG15X3hsaWIgOzsKKwkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgorICAgICAgbXlfeGxpYj0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9JG15X2dlbnRvcC8kbXlfeGxpYl91CisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotZGFyd2luKikKKwlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCisJIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAorCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPworCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKwkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKKwkgIGZ1bmNfYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSIKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzOyBkbworCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoIgorCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUiICIkZGFyd2luX2FyY2hpdmUiCisJICAgICAgY2QgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSIKKwkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCisJICAgICAgJFJNICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUiCisJICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcworICAgICAgICAgICAgIyMgT2theSBub3cgd2UndmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCisJICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRzZWRfYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisJICAgICRSTSAtcmYgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKKwkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJfSAjICEkb3B0X2RyeV9ydW4KKwk7OworICAgICAgKikKKyAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgIGRvbmUKKworICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9JG15X29sZG9ianMKK30KKworCisjIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCisjCisjIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bworIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndworIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCisjIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKKyMgc2V0IHRoZXJlaW4uCisjCisjIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKKyMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0CisjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSB3aGVyZSBpdCBpcyBzdG9yZWQgaXMKKyMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworIyBiZWhhdmlvci4KK2Z1bmNfZW1pdF93cmFwcGVyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kezEtbm99CisKKwkkRUNITyAiXAorIyEgJFNIRUxMCisKKyMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKyAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJworZWxzZQorICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICBmaWxlPVwiXCQwXCIiCisKKyAgICBxRUNITz1gJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICRFQ0hPICJcCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKyAgICBFQ0hPPVwiJHFFQ0hPXCIKKyAgZmkKKworIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHRoYXQgaXMgdXNlZCBvbmx5IG9uCisjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB0aGF0IG1hdGNoCisjIHRoaXMgcGF0dGVybikuCisjCisjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCitsdF9vcHRpb25fZGVidWc9CitmdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKK3sKKyAgbHRfc2NyaXB0X2FyZzA9XCQwCisgIHNoaWZ0CisgIGZvciBsdF9vcHQKKyAgZG8KKyAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgorICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisgICAgLS1sdC1kdW1wLXNjcmlwdCkKKyAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCisgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorICAgICAgICBsdF9kdW1wX0Y9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyVeLiovJSUnXGAKKyAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgorICAgICAgICBleGl0IDAKKyAgICAgIDs7CisgICAgLS1sdC0qKQorICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgIGVjaG8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cIiAxPiYyCisgIGZpCit9CisKKyMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAorIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCitmdW5jX2x0X2R1bXBfYXJncyAoKQoreworICBsdF9kdW1wX2FyZ3NfTj0xOworICBmb3IgbHRfYXJnCisgIGRvCisgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisgIGRvbmUKK30KKworIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQoreworIgorICBjYXNlICRob3N0IGluCisgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworCisgICopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIlwKKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKyAgICAgIGV4aXQgMQorfQorCisjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisjIGxhdW5jaGVzIHRhcmdldCBhcHBsaWNhdGlvbiB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorZnVuY19leGVjX3Byb2dyYW0gKCkKK3sKKyAgY2FzZSBcIiBcJCogXCIgaW4KKyAgKlxcIC0tbHQtKikKKyAgICBmb3IgbHRfd3JfYXJnCisgICAgZG8KKyAgICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKyAgICAgIC0tbHQtKikgOzsKKyAgICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7CisgICAgICBlc2FjCisgICAgICBzaGlmdAorICAgIGRvbmUgOzsKKyAgZXNhYworICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KK30KKworICAjIFBhcnNlIG9wdGlvbnMKKyAgZnVuY19wYXJzZV9sdF9vcHRpb25zIFwiXCQwXCIgXCR7MStcIlwkQFwifQorCisgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgIHRoaXNkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qJCUlJ1xgCisgIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KKworICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KKyAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisKKyAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCisgICMgdGhlIGN3cmFwcGVyLgorICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfYXJnMQorICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgorICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKKyAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgorICAgICAgdGhpc2Rpcj1cYHB3ZFxgCisgICAgZmkKKyAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7IHRoZW4KKwkgICRFQ0hPICJcCisgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKworICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICRTRUQgMXFcYDsgXFwKKyAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgorCisgICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKKworICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCisgICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgorICAgIGVsc2UKKyAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICAgIGZpIgorCisJICAkRUNITyAiXAorCisgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCisgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgIGVsc2UKKwlcJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorCWV4aXQgMQorICAgICAgZmkKKyAgICBmaQorCisgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisgICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7CisgICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgZmkiCisJZWxzZQorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisiCisJZmkKKworCSRFQ0hPICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisJIworCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZworCSMgdG8gc2hsaWJwYXRoLCBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggYXJlIFBBVEggYW5kIHVuaW5zdGFsbGVkCisJIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisiCisJZmkKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKKyAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCisKKyAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKKyAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAorICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIHwgJFNFRCAncy86OipcJC8vJ1xgCisKKyAgICBleHBvcnQgJHNobGlicGF0aF92YXIKKyIKKwlmaQorCisJJEVDSE8gIlwKKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQorICAgIGZpCisgIGVsc2UKKyAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCisgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogJ1wkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKworCisjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKKyMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KK2Z1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKK3sKKwljYXQgPDxFT0YKKworLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCisKKyAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorCisgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisqLworRU9GCisJICAgIGNhdCA8PCJFT0YiCisjaWZkZWYgX01TQ19WRVIKKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmZGVmIF9NU0NfVkVSCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBpbmNsdWRlIDxwcm9jZXNzLmg+CisjIGluY2x1ZGUgPGlvLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGlmZGVmIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIFNUUkVRKHMxLCBzMikgKHN0cmNtcCAoKHMxKSwgKHMyKSkgPT0gMCkKKworLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLworI2lmIGRlZmluZWQgX19NSU5HVzMyX18KKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitpbnQgX3B1dGVudiAoY29uc3QgY2hhciAqKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgX19DWUdXSU5fXworIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2NoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CitpbnQgcHV0ZW52IChjaGFyICopOworaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjIGVuZGlmCisvKiAjZWxpZiBkZWZpbmVkIG90aGVyX3BsYXRmb3JtIHx8IGRlZmluZWQgLi4uICovCisjZW5kaWYKKworLyogcG9ydGFiaWxpdHkgZGVmaW5lcywgZXhjbHVkaW5nIHBhdGggaGFuZGxpbmcgbWFjcm9zICovCisjaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCisjZWxpZiBkZWZpbmVkIF9fTUlOR1czMl9fCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyNlbGlmIGRlZmluZWQgX19DWUdXSU5fXworIyBkZWZpbmUgSEFWRV9TRVRFTlYKKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKy8qICNlbGlmIGRlZmluZWQgb3RoZXIgcGxhdGZvcm1zIC4uLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkIFBBVEhfTUFYCisjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCisjZWxpZiBkZWZpbmVkIE1BWFBBVEhMRU4KKyMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgorI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyBkZWZpbmUgU19JWE9USCAwCisjZW5kaWYKKyNpZm5kZWYgU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAwCisjZW5kaWYKKworLyogcGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNyb3MgKi8KKyNpZm5kZWYgRElSX1NFUEFSQVRPUgorIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fTVNET1NfXyB8fCBkZWZpbmVkIF9fREpHUFBfXyB8fCBcCisgIGRlZmluZWQgX19PUzJfXworIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKyMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCisjIGVuZGlmCisjIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgUEFUSF9TRVBBUkFUT1JfMiAnOycKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKKyNlbHNlIC8qIERJUl9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAorCSgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQorI2VuZGlmIC8qIERJUl9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUikKKyNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQorI2VuZGlmIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBGT1BFTl9XQgorIyBkZWZpbmUgRk9QRU5fV0IgInciCisjZW5kaWYKKyNpZm5kZWYgX09fQklOQVJZCisjIGRlZmluZSBfT19CSU5BUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQgTFRfREVCVUdXUkFQUEVSCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCisKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOworY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKK2ludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7CitzdGF0aWMgY29uc3QgY2hhciAqbm9ubnVsbCAoY29uc3QgY2hhciAqcyk7CitzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOwordm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cit2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKipwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndik7Cit2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorI2lmIF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpCisjIGRlZmluZSBleHRlcm5hbGx5X3Zpc2libGUgdm9sYXRpbGUKKyNlbHNlCisjIGRlZmluZSBleHRlcm5hbGx5X3Zpc2libGUgX19hdHRyaWJ1dGVfXygoZXh0ZXJuYWxseV92aXNpYmxlKSkgdm9sYXRpbGUKKyNlbmRpZgorZXh0ZXJuYWxseV92aXNpYmxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Citjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CitFT0YKKworCSAgICBpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIiI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7IHRoZW4KKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBmaQorCisKKwkgICAgY2F0IDw8IkVPRiIKKworI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKKworc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CitzdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOworc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50IHJ2YWwgPSAxMjc7CisKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CisgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIChzaXplX3QpIGFyZ2MgKyAxKTsKKworICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAorICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKKyAgICogYXJnelswXSwgd2hpY2ggaXMgaGFuZGxlZCBkaWZmZXJlbnRseQorICAgKi8KKyAgbmV3YXJnYz0wOworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChTVFJFUSAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpKQorCXsKK0VPRgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKKwkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncworCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgorCQk7OworCSAgICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGRlYnVnX29wdCkpCisJeworICAgICAgICAgIGx0X2RlYnVnID0gMTsKKyAgICAgICAgICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSkKKyAgICAgICAgeworICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCisgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKyAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCisgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorICAgICAgICAgICAqLworICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKyAgICAgICAgfQorICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgfQorICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworCitFT0YKKwkgICAgY2F0IDw8RU9GCisgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cbiIpOworRU9GCisJICAgIGNhdCA8PCJFT0YiCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7CisKKyAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJjb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICB0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLworICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorCQkgIHRhcmdldF9uYW1lKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorICBuZXdhcmd6WzBdID0KKyAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKworCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOworICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CitFT0YKKworCSAgICBjYXQgPDwiRU9GIgorICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLworICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKworICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCisgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAgdG1wX3BhdGhzcGVjID0gTlVMTDsKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJICAgIGNhdCA8PCJFT0YiCisgIHsKKyAgICBjaGFyKiBwOworICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICB9CitFT0YKKwkgICAgOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKyAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAorICAgICBiZSBwcmVwZW5kZWQgYmVmb3JlICh0aGF0IGlzLCBhcHBlYXIgYWZ0ZXIpIExJQl9QQVRIX1ZBTFVFICgkdGVtcF9ycGF0aCkKKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCisgICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCisgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisJCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCisJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICB9CisKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCisgIG5ld2FyZ3ogPSBwcmVwYXJlX3NwYXduIChuZXdhcmd6KTsKKyAgcnZhbCA9IChpbnQpIF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgaWYgKHJ2YWwgPT0gLTEpCisgICAgeworICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKwkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIHJ2YWw7CitFT0YKKwkJOzsKKwkgICAgICAqKQorCQljYXQgPDwiRU9GIgorICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KK0VPRgorCQk7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKK30KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbnVtKQoreworICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisgIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKKyAgICBuYW1lICs9IDI7CisjZW5kaWYKKworICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCisgICAgICBiYXNlID0gbmFtZSArIDE7CisgIHJldHVybiBiYXNlOworfQorCitpbnQKK2NoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgICAmJiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKSkKKyAgICByZXR1cm4gMTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK21ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgaW50IHJ2YWwgPSAwOworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICB7CisgICAgICBydmFsID0gY2htb2QgKHBhdGgsIHN0LnN0X21vZGUgfCBTX0lYT1RIIHwgU19JWEdSUCB8IFNfSVhVU1IpOworICAgIH0KKyAgcmV0dXJuIHJ2YWw7Cit9CisKKy8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucworICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQorICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgorKi8KK2NoYXIgKgorZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQoreworICBpbnQgaGFzX3NsYXNoID0gMDsKKyAgY29uc3QgY2hhciAqcDsKKyAgY29uc3QgY2hhciAqcF9uZXh0OworICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KKyAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOworICBzaXplX3QgdG1wX2xlbjsKKyAgY2hhciAqY29uY2F0X25hbWU7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7CisKKyAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBBYnNvbHV0ZSBwYXRoPyAqLworI2lmIGRlZmluZWQgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwlyZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorCXsKKwkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisJICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCSAgICByZXR1cm4gY29uY2F0X25hbWU7CisJICBYRlJFRSAoY29uY2F0X25hbWUpOworCX0KKyNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisgICAgfQorI2VuZGlmCisKKyAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKKyAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgeworCWhhc19zbGFzaCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgIGlmICghaGFzX3NsYXNoKQorICAgIHsKKyAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisgICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOworICAgICAgaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKnE7CisJICAgICAgc2l6ZV90IHBfbGVuOworCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCisJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQorCQkgIGJyZWFrOworCSAgICAgIHBfbGVuID0gKHNpemVfdCkgKHEgLSBwKTsKKwkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CisJICAgICAgaWYgKHBfbGVuID09IDApCisJCXsKKwkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCBwX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJCXJldHVybiBjb25jYXRfbmFtZTsKKwkgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworCSAgICB9CisJfQorICAgICAgLyogbm90IGZvdW5kIGluIFBBVEg7IGFzc3VtZSBjdXJkaXIgKi8KKyAgICB9CisgIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KKyAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKyAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisKKyAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitjaGFyICoKK2NoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKK3sKKyNpZm5kZWYgU19JU0xOSworICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworI2Vsc2UKKyAgY2hhciBidWZbTFRfUEFUSE1BWF07CisgIHN0cnVjdCBzdGF0IHM7CisgIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgY2hhciAqcDsKKyAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKKwl7CisJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorCSAgICB7CisJICAgICAgaGFzX3N5bWxpbmtzID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICAvKiBzZWFyY2ggYmFja3dhcmRzIGZvciBsYXN0IERJUl9TRVBBUkFUT1IgKi8KKwkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOworCSAgd2hpbGUgKChwID4gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHAtLTsKKwkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgeworCSAgICAgIC8qIG5vIG1vcmUgRElSX1NFUEFSQVRPUlMgbGVmdCAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAqcCA9ICdcMCc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAiZXJyb3IgYWNjZXNzaW5nIGZpbGUgXCIlc1wiOiAlcyIsCisJCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKwl9CisgICAgfQorICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBpZiAoIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworICAgIH0KKworICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICB7CisgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisgICAgfQorICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKKyNlbmRpZgorfQorCitjaGFyICoKK3N0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCit7CisgIHNpemVfdCBsZW4sIHBhdGxlbjsKKworICBhc3NlcnQgKHN0ciAhPSBOVUxMKTsKKyAgYXNzZXJ0IChwYXQgIT0gTlVMTCk7CisKKyAgbGVuID0gc3RybGVuIChzdHIpOworICBwYXRsZW4gPSBzdHJsZW4gKHBhdCk7CisKKyAgaWYgKHBhdGxlbiA8PSBsZW4pCisgICAgeworICAgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKKyAgICAgIGlmIChTVFJFUSAoc3RyLCBwYXQpKQorCSpzdHIgPSAnXDAnOworICAgIH0KKyAgcmV0dXJuIHN0cjsKK30KKwordm9pZAorbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpZiAobHRfZGVidWcpCisgICAgeworICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgICAgIHZhX2VuZCAoYXJncyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorCSAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSwKKwkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworCisgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKK30KKwordm9pZAorbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CisgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbm9ubnVsbCAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbmVtcHR5IChjb25zdCBjaGFyICpzKQoreworICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOworfQorCit2b2lkCitsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworICB7CisjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKKyAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CisjZWxzZQorICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKKyAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQorICAgICAgeworICAgICAgICBYRlJFRSAoc3RyKTsKKyAgICAgIH0KKyNlbmRpZgorICB9Cit9CisKK2NoYXIgKgorbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQoreworICBjaGFyICpuZXdfdmFsdWU7CisgIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQorICAgIHsKKyAgICAgIHNpemVfdCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisgICAgICBzaXplX3QgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKKyAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOworICAgICAgaWYgKHRvX2VuZCkKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgYWRkKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbmV3X3ZhbHVlID0geHN0cmR1cCAoYWRkKTsKKyAgICB9CisgIHJldHVybiBuZXdfdmFsdWU7Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLworICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgobGVuID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgICB7CisgICAgICAgICAgbmV3X3ZhbHVlWy0tbGVuXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKwordm9pZAorbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworRU9GCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisKKy8qIFByZXBhcmVzIGFuIGFyZ3VtZW50IHZlY3RvciBiZWZvcmUgY2FsbGluZyBzcGF3bigpLgorICAgTm90ZSB0aGF0IHNwYXduKCkgZG9lcyBub3QgYnkgaXRzZWxmIGNhbGwgdGhlIGNvbW1hbmQgaW50ZXJwcmV0ZXIKKyAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKKyAgICAgICh7IE9TVkVSU0lPTklORk8gdjsgdi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOworICAgICAgICAgR2V0VmVyc2lvbkV4KCZ2KTsKKyAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKKyAgICAgIH0pID8gImNtZC5leGUiIDogImNvbW1hbmQuY29tIikuCisgICBJbnN0ZWFkIGl0IHNpbXBseSBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5ICcgJywgYW5kIGNhbGxzCisgICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCisgICBpbnRlcnByZXRzIGNoYXJhY3RlcnMgbGlrZSAnICcsICdcdCcsICdcXCcsICciJyAoYnV0IG5vdCAnPCcgYW5kICc+JykgaW4gYQorICAgc3BlY2lhbCB3YXk6CisgICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCisgICAgIGRlbGltaXRlcnMgaWYgdGhleSBhcmUgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzOiAiLi4uIi4KKyAgIC0gVW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQuIFRoZWlyIG9ubHkgZWZmZWN0IGlzCisgICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKKyAgICAgY2hhcmFjdGVycy4KKyAgIC0gQmFja3NsYXNoZXMgbm90IGZvbGxvd2VkIGJ5IGRvdWJsZSBxdW90ZXMgYXJlIG5vdCBzcGVjaWFsLgorICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCisgICAgIG4gYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgKG4gPj0gMCk6CisgICAgICAgXCIgLT4gIgorICAgICAgIFxcXCIgLT4gXCIKKyAgICAgICBcXFxcXCIgLT4gXFwiCisgKi8KKyNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorI2RlZmluZSBTSEVMTF9TUEFDRV9DSEFSUyAiIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCitjaGFyICoqCitwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKK3sKKyAgc2l6ZV90IGFyZ2M7CisgIGNoYXIgKipuZXdfYXJndjsKKyAgc2l6ZV90IGk7CisKKyAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisgIGZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY10gIT0gTlVMTDsgYXJnYysrKQorICAgIDsKKworICAvKiBBbGxvY2F0ZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgbmV3X2FyZ3YgPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiBQdXQgcXVvdGVkIGFyZ3VtZW50cyBpbnRvIHRoZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2W2ldOworCisgICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCisJbmV3X2FyZ3ZbaV0gPSB4c3RyZHVwICgiXCJcIiIpOworICAgICAgZWxzZSBpZiAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEVDSUFMX0NIQVJTKSAhPSBOVUxMKQorCXsKKwkgIGludCBxdW90ZV9hcm91bmQgPSAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEFDRV9DSEFSUykgIT0gTlVMTCk7CisJICBzaXplX3QgbGVuZ3RoOworCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOworCSAgY29uc3QgY2hhciAqczsKKwkgIGNoYXIgKnF1b3RlZF9zdHJpbmc7CisJICBjaGFyICpwOworCisJICBsZW5ndGggPSAwOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoKys7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKwkgICAgICBsZW5ndGgrKzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCisJICBxdW90ZWRfc3RyaW5nID0gWE1BTExPQyAoY2hhciwgbGVuZ3RoICsgMSk7CisKKwkgIHAgPSBxdW90ZWRfc3RyaW5nOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgKnArKyA9ICciJzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQl7CisJCSAgdW5zaWduZWQgaW50IGo7CisJCSAgZm9yIChqID0gYmFja3NsYXNoZXMgKyAxOyBqID4gMDsgai0tKQorCQkgICAgKnArKyA9ICdcXCc7CisJCX0KKwkgICAgICAqcCsrID0gYzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgaW50IGo7CisJICAgICAgZm9yIChqID0gYmFja3NsYXNoZXM7IGogPiAwOyBqLS0pCisJCSpwKysgPSAnXFwnOworCSAgICAgICpwKysgPSAnIic7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKworCSAgbmV3X2FyZ3ZbaV0gPSBxdW90ZWRfc3RyaW5nOworCX0KKyAgICAgIGVsc2UKKwluZXdfYXJndltpXSA9IChjaGFyICopIHN0cmluZzsKKyAgICB9CisgIG5ld19hcmd2W2FyZ2NdID0gTlVMTDsKKworICByZXR1cm4gbmV3X2FyZ3Y7Cit9CitFT0YKKwkJOzsKKwkgICAgZXNhYworCisgICAgICAgICAgICBjYXQgPDwiRU9GIgordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSogZikKK3sKK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlciB5ZXMgfAorCSAgICAgICRTRUQgLW4gLWUgJworcy9eXCguXHs3OVx9XClcKC4uKlwpL1wxXAorXDIvCitoCitzL1woW1xcIl1cKS9cXFwxL2cKK3MvJC9cXG4vCitzL1woW15cbl0qXCkuKi8gIGZwdXRzICgiXDEiLCBmKTsvcAorZworRCcKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit9CitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgQVJHCisjIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKK2Z1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgorICAgICppbXBvcnQqKSA6IDs7CisgICAgKikgZmFsc2UgOzsKKyAgICBlc2FjCit9CisKKyMgZnVuY19zdW5jY19jc3RkX2FiaQorIyAhIU9OTFkgQ0FMTCBUSElTIEZPUiBTVU4gQ0MgQUZURVIgJGNvbXBpbGVfY29tbWFuZCBJUyBGVUxMWSBFWFBBTkRFRCEhCisjIFNldmVyYWwgY29tcGlsZXIgZmxhZ3Mgc2VsZWN0IGFuIEFCSSB0aGF0IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorIyBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcgaXQgaWYgYW55IGFyZSBpbiBDWFhGTEFHUy4KK2Z1bmNfc3VuY2NfY3N0ZF9hYmkgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICIgJGNvbXBpbGVfY29tbWFuZCAiIGluCisgICAgKiIgLWNvbXBhdD1nICIqfCpcIC1zdGQ9YysrWzAtOV1bMC05XVwgKnwqIiAtbGlicmFyeT1zdGRjeHg0ICIqfCoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc3VuY2NfdXNlX2NzdGRfYWJpPW5vCisgICAgICA7OworICAgICopCisgICAgICBzdW5jY191c2VfY3N0ZF9hYmk9eWVzCisgICAgICA7OworICAgIGVzYWMKK30KKworIyBmdW5jX21vZGVfbGluayBhcmcuLi4KK2Z1bmNfbW9kZV9saW5rICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCisgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAjIHdoYXQgc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KKworICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisgICAgICAjIHRvIG1ha2UgYSBkbGwgdGhhdCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90CisgICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQorICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCisgICAgICAjIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHNhdGlzZmllZCwgb3RoZXJ3aXNlIHdlIGdldCBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlidG9vbF9hcmdzPSRub25vcHQKKyAgICBiYXNlX2NvbXBpbGU9IiRub25vcHQgJEAiCisgICAgY29tcGlsZV9jb21tYW5kPSRub25vcHQKKyAgICBmaW5hbGl6ZV9jb21tYW5kPSRub25vcHQKKworICAgIGNvbXBpbGVfcnBhdGg9CisgICAgZmluYWxpemVfcnBhdGg9CisgICAgY29tcGlsZV9zaGxpYnBhdGg9CisgICAgZmluYWxpemVfc2hsaWJwYXRoPQorICAgIGNvbnZlbmllbmNlPQorICAgIG9sZF9jb252ZW5pZW5jZT0KKyAgICBkZXBsaWJzPQorICAgIG9sZF9kZXBsaWJzPQorICAgIGNvbXBpbGVyX2ZsYWdzPQorICAgIGxpbmtlcl9mbGFncz0KKyAgICBkbGxzZWFyY2hwYXRoPQorICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAorICAgIGluc3RfcHJlZml4X2Rpcj0KKyAgICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKworICAgIGF2b2lkX3ZlcnNpb249bm8KKyAgICBiaW5kaXI9CisgICAgZGxmaWxlcz0KKyAgICBkbHByZWZpbGVzPQorICAgIGRsc2VsZj1ubworICAgIGV4cG9ydF9keW5hbWljPW5vCisgICAgZXhwb3J0X3N5bWJvbHM9CisgICAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9CisgICAgZ2VuZXJhdGVkPQorICAgIGxpYm9ianM9CisgICAgbHRsaWJzPQorICAgIG1vZHVsZT1ubworICAgIG5vX2luc3RhbGw9bm8KKyAgICBvYmpzPQorICAgIG9zMmRsbG5hbWU9CisgICAgbm9uX3BpY19vYmplY3RzPQorICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9ZmFsc2UKKyAgICBwcmV2PQorICAgIHByZXZhcmc9CisgICAgcmVsZWFzZT0KKyAgICBycGF0aD0KKyAgICB4cnBhdGg9CisgICAgcGVybV9ycGF0aD0KKyAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCisgICAgdmluZm89CisgICAgdmluZm9fbnVtYmVyPW5vCisgICAgd2Vha19saWJzPQorICAgIHNpbmdsZV9tb2R1bGU9JHdsLXNpbmdsZV9tb2R1bGUKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKKwkgICYmIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2Fubm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwlicmVhaworCTs7CisgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwljYXNlICRhcmcgaW4KKwktYWxsLXN0YXRpYykKKwkgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwktc3RhdGljKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz1idWlsdAorCSAgOzsKKwktc3RhdGljLWxpYnRvb2wtbGlicykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCWVzYWMKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwlicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgorICAgIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiBidWlsZF9vbGRfbGlicz15ZXMKKworICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgorICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCWNhc2UgJHByZXYgaW4KKwlvdXRwdXQpCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcHJldiBpbgorCWJpbmRpcikKKwkgIGJpbmRpcj0kYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgJHByZWxvYWQgfHwgeworCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIHByZWxvYWQ9OgorCSAgfQorCSAgY2FzZSAkYXJnIGluCisJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorCSAgZm9yY2UpCisJICAgIGlmIHRlc3Qgbm8gPSAiJGRsc2VsZiI7IHRoZW4KKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHNlbGYpCisJICAgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IiAmJiB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zZWxmIjsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxzZQorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWV4cHN5bXMpCisJICBleHBvcnRfc3ltYm9scz0kYXJnCisJICB0ZXN0IC1mICIkYXJnIiBcCisJICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlICckYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlleHBzeW1zX3JlZ2V4KQorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWZyYW1ld29yaykKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICAgKi0qLWRhcndpbiopCisJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKwkJKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlpbnN0X3ByZWZpeCkKKwkgIGluc3RfcHJlZml4X2Rpcj0kYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJbWxsdm0pCisJICAjIENsYW5nIGRvZXMgbm90IHVzZSBMTFZNIHRvIGxpbmssIHNvIHdlIGNhbiBzaW1wbHkgZGlzY2FyZCBhbnkKKwkgICMgJy1tbGx2bSAkYXJnJyBvcHRpb25zIHdoZW4gZG9pbmcgdGhlIGxpbmsgc3RlcC4KKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgJiYKKwkJICAgdGVzdCBub25lID0gIiRub25fcGljX29iamVjdCI7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgJyRhcmcnIgorCQlmaQorCisJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCXhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKworCQlpZiB0ZXN0IG5vbmUgIT0gIiRwaWNfb2JqZWN0IjsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0CisKKwkJICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKwkJICAgICAgcHJldj0KKwkJICAgICAgY29udGludWUKKwkJICAgIGVsc2UKKwkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJICAgICAgcHJldj1kbHByZWZpbGVzCisJCSAgICBmaQorCQkgIGZpCisKKwkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCQkgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKwkJICAgIHByZXY9CisJCSAgZmkKKworCQkgICMgQSBQSUMgb2JqZWN0LgorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBhcmc9JHBpY19vYmplY3QKKwkJZmkKKworCQkjIE5vbi1QSUMgb2JqZWN0LgorCQlpZiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJG5vbl9waWNfb2JqZWN0CisKKwkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCI7IHRoZW4KKwkJICAgIGFyZz0kbm9uX3BpY19vYmplY3QKKwkJICBmaQorCQllbHNlCisJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkJICBub25fcGljX29iamVjdD0kcGljX29iamVjdAorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCSAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCisJCSAgZnVuY19sbzJvICIkYXJnIgorCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgICAgICBlbHNlCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlICckYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIGZpCisJICBhcmc9JHNhdmVfYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJb3MyZGxsbmFtZSkKKwkgIG9zMmRsbG5hbWU9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXByZWNpb3VzX3JlZ2V4KQorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJlbGVhc2UpCisJICByZWxlYXNlPS0kYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcnBhdGggfCB4cnBhdGgpCisJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkgIGNhc2UgJGFyZyBpbgorCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IHJwYXRoID0gIiRwcmV2IjsgdGhlbgorCSAgICBjYXNlICIkcnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGVsc2UKKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJc2hyZXh0KQorCSAgc2hyZXh0X2NtZHM9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXdlYWspCisJICBmdW5jX2FwcGVuZCB3ZWFrX2xpYnMgIiAkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXhjY2xpbmtlcikKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhjb21waWxlcikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4bGlua2VyKQorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJKikKKwkgIGV2YWwgIiRwcmV2PVwiXCRhcmdcIiIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwllc2FjCisgICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgorCisgICAgICBwcmV2YXJnPSRhcmcKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwlmdW5jX2ZhdGFsX2Vycm9yICInLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgorCTs7CisKKyAgICAgIC1hdm9pZC12ZXJzaW9uKQorCWF2b2lkX3ZlcnNpb249eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtYmluZGlyKQorCXByZXY9YmluZGlyCisJY29udGludWUKKwk7OworCisgICAgICAtZGxvcGVuKQorCXByZXY9ZGxmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRscHJlb3BlbikKKwlwcmV2PWRscHJlZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtZHluYW1pYykKKwlleHBvcnRfZHluYW1pYz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtc3ltYm9scyB8IC1leHBvcnQtc3ltYm9scy1yZWdleCkKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCisJZmkKKwlpZiB0ZXN0IFgtZXhwb3J0LXN5bWJvbHMgPSAiWCRhcmciOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKKwlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiAnLUwnIGFuZCAnJDEnIgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yICctTCcgb3B0aW9uIgorCSAgZmkKKwlmaQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCWRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRkaXInIgorCSAgZGlyPSRhYnNkaXIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiogfCAqIiAkYXJnICIqKQorCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cworCSAgOzsKKwkqKQorCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcworCSAgY2FzZSAkZGlyIGluCisJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKKwkgIGVzYWMKKwkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCisJICA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbCopCisJaWYgdGVzdCBYLWxjID0gIlgkYXJnIiB8fCB0ZXN0IFgtbG0gPSAiWCRhcmciOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3MyKikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLWJpdHJpZyopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCWVsaWYgdGVzdCBYLWxjX3IgPSAiWCRhcmciOyB0aGVuCisJIGNhc2UgJGhvc3QgaW4KKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSogfCAqLSotYml0cmlnKikKKwkgICAjIERvIG5vdCBpbmNsdWRlIGxpYmNfciBkaXJlY3RseSwgdXNlIC1wdGhyZWFkIGZsYWcuCisJICAgY29udGludWUKKwkgICA7OworCSBlc2FjCisJZmkKKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tbGx2bSkKKwlwcmV2PW1sbHZtCisJY29udGludWUKKwk7OworCisgICAgICAtbW9kdWxlKQorCW1vZHVsZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCisgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCisgICAgICB8LXRocmVhZHN8LWZvcGVubXB8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQorCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW11bHRpX21vZHVsZSkKKwlzaW5nbGVfbW9kdWxlPSR3bC1tdWx0aV9tb2R1bGUKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1mYXN0LWluc3RhbGwpCisJZmFzdF9pbnN0YWxsPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtbm8taW5zdGFsbCkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQorCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCisJICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KKwkgIGZ1bmNfd2FybmluZyAiJy1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgJy1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCisJICBmYXN0X2luc3RhbGw9bm8KKwkgIDs7CisJKikgbm9faW5zdGFsbD15ZXMgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tdW5kZWZpbmVkKQorCWFsbG93X3VuZGVmaW5lZD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW9iamVjdGxpc3QpCisJcHJldj1vYmplY3RsaXN0CisJY29udGludWUKKwk7OworCisgICAgICAtb3MyZGxsbmFtZSkKKwlwcmV2PW9zMmRsbG5hbWUKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vKSBwcmV2PW91dHB1dCA7OworCisgICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCisJcHJldj1wcmVjaW91c19yZWdleAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJlbGVhc2UpCisJcHJldj1yZWxlYXNlCisJY29udGludWUKKwk7OworCisgICAgICAtcnBhdGgpCisJcHJldj1ycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIpCisJcHJldj14cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKikKKwlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCT0qKQorCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgorCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICA7OworCWVzYWMKKwljYXNlICIkeHJwYXRoICIgaW4KKwkqIiAkZGlyICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNoYXJlZCkKKwkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNocmV4dCkKKwlwcmV2PXNocmV4dAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0CisJIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cworCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAorCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCisJY29udGludWUKKwk7OworCisgICAgICAtdGhyZWFkLXNhZmUpCisJdGhyZWFkX3NhZmU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1pbmZvKQorCXByZXY9dmluZm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLW51bWJlcikKKwlwcmV2PXZpbmZvCisJdmluZm9fbnVtYmVyPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXdlYWspCisgICAgICAgIHByZXY9d2VhaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLVdjLCopCisJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0kSUZTOyBJRlM9LAorCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSRzYXZlX2lmcworICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0kc2F2ZV9pZnMKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtV2wsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSRJRlM7IElGUz0sCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9JHNhdmVfaWZzCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSRzYXZlX2lmcworCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1YY29tcGlsZXIpCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YbGlua2VyKQorCXByZXY9eGxpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhDQ2xpbmtlcikKKwlwcmV2PXhjY2xpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYworICAgICAgLW1zZ18qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCTs7CisKKyAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKKyAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgorICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCisgICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgLWZzdGFjay1wcm90ZWN0b3IqICAgc3RhY2sgcHJvdGVjdG9yIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCisgICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KKyAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAorICAgICAgIyAtTyosIC1nKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgorICAgICAgIyAtc3BlY3M9KiAgICAgICAgICAgICBHQ0Mgc3BlY3MgZmlsZXMKKyAgICAgICMgLXN0ZGxpYj0qICAgICAgICAgICAgc2VsZWN0IGMrKyBzdGQgbGliIHdpdGggY2xhbmcKKyAgICAgICMgLWZzYW5pdGl6ZT0qICAgICAgICAgQ2xhbmcvR0NDIG1lbW9yeSBhbmQgYWRkcmVzcyBzYW5pdGl6ZXIKKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisgICAgICAtTyp8LWcqfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2lufC1mc3RhY2stcHJvdGVjdG9yKnwtc3RkbGliPSp8IFwKKyAgICAgIC1zcGVjcz0qfC1mc2FuaXRpemU9KikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDs7CisKKyAgICAgIC1aKikKKyAgICAgICAgaWYgdGVzdCBvczIgPSAiYGV4cHIgJGhvc3QgOiAnLipcKG9zMlwpJ2AiOyB0aGVuCisgICAgICAgICAgIyBPUy8yIHVzZXMgLVp4eHggdG8gc3BlY2lmeSBPUy8yLXNwZWNpZmljIG9wdGlvbnMKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwkgIGNhc2UgJGFyZyBpbgorCSAgLVpsaW5rZXIgfCAtWnN0YWNrKQorCSAgICBwcmV2PXhjb21waWxlcgorCSAgICA7OworCSAgZXNhYworCSAgY29udGludWUKKyAgICAgICAgZWxzZQorCSAgIyBPdGhlcndpc2UgdHJlYXQgbGlrZSAnU29tZSBvdGhlciBjb21waWxlciBmbGFnJyBiZWxvdworCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwkgIGFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyAgICAgICAgZmkKKwk7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KKyAgICAgIC0qIHwgKyopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCTs7CisKKyAgICAgICouJG9iamV4dCkKKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgorCTs7CisKKyAgICAgICoubG8pCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkgIHBpY19vYmplY3Q9CisJICBub25fcGljX29iamVjdD0KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgIiRhcmciCisKKwkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCBub25lID0gIiRub25fcGljX29iamVjdCI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCisJICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiIHx8IHsKKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0CisKKwkgICAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgeWVzID0gIiRkbG9wZW5fc3VwcG9ydCI7IHRoZW4KKwkJZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorCQlwcmV2PQorCQljb250aW51ZQorCSAgICAgIGVsc2UKKwkJIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJcHJldj1kbHByZWZpbGVzCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCSAgICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKwkgICAgICBwcmV2PQorCSAgICBmaQorCisJICAgICMgQSBQSUMgb2JqZWN0LgorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGFyZz0kcGljX29iamVjdAorCSAgfQorCisJICAjIE5vbi1QSUMgb2JqZWN0LgorCSAgaWYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJG5vbl9waWNfb2JqZWN0CisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCI7IHRoZW4KKwkgICAgICBhcmc9JG5vbl9waWNfb2JqZWN0CisJICAgIGZpCisJICBlbHNlCisJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCSAgICBub25fcGljX29iamVjdD0kcGljX29iamVjdAorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBmaQorCWVsc2UKKwkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICAgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKworCSAgICBmdW5jX2xvMm8gIiRhcmciCisJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLiRsaWJleHQpCisJIyBBbiBhcmNoaXZlLgorCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIG9sZF9kZXBsaWJzICIgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgICoubGEpCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCisJaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgIHByZXY9CisJZWxpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBwcmV2PQorCWVsc2UKKwkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgYXJndW1lbnQuCisgICAgICAqKQorCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAorCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSAnJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKworICAgIGlmIHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyIgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgZmkKKworICAgIG9sZGxpYnM9CisgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQorICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisgICAgb3V0cHV0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICBsaWJvYmpzX3NhdmU9JGxpYm9ianMKKworICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCisgICAgZWxzZQorICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgZmkKKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisKKyAgICAjIERlZmluaXRpb24gaXMgaW5qZWN0ZWQgYnkgTFRfQ09ORklHIGR1cmluZyBsaWJ0b29sIGdlbmVyYXRpb24uCisgICAgZnVuY19tdW5nZV9wYXRoX2xpc3Qgc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIkTFRfU1lTX0xJQlJBUllfUEFUSCIKKworICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgb3V0cHV0X29iamRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIKKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvIgorICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKKworICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICIiKQorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgorICAgICAgOzsKKyAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OworICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OworICAgICoubGEpIGxpbmttb2RlPWxpYiA7OworICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCisgICAgZXNhYworCisgICAgc3BlY2lhbGRlcGxpYnM9CisKKyAgICBsaWJzPQorICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCisJY2FzZSAiJGxpYnMgIiBpbgorCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgbGlicyAiICRkZXBsaWIiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCisKKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCisgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgIGVzYWMKKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgorCWRvbmUKKyAgICAgIGZpCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgIGZpCisKKyAgICBkZXBsaWJzPQorICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKyAgICBuZXdsaWJfc2VhcmNoX3BhdGg9CisgICAgbmVlZF9yZWxpbms9bm8gIyB3aGV0aGVyIHdlJ3JlIGxpbmtpbmcgYW55IHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgbGliKQorCXBhc3Nlcz0iY29udiBkbHByZW9wZW4gbGluayIKKwlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KKwkgIGNhc2UgJGZpbGUgaW4KKwkgICoubGEpIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gJy1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgIHByb2cpCisJY29tcGlsZV9kZXBsaWJzPQorCWZpbmFsaXplX2RlcGxpYnM9CisJYWxsZGVwbGlicz1mYWxzZQorCW5ld2RsZmlsZXM9CisJbmV3ZGxwcmVmaWxlcz0KKwlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCisJOzsKKyAgICAqKSAgcGFzc2VzPSJjb252IgorCTs7CisgICAgZXNhYworCisgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQorICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKyAgICAgIGlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCSMjIEZJWE1FOiBGaW5kIHRoZSBwbGFjZSB3aGVyZSB0aGUgbGlzdCBpcyByZWJ1aWx0IGluIHRoZSB3cm9uZworCSMjICAgICAgICBvcmRlciwgYW5kIGZpeCBpdCB0aGVyZSBwcm9wZXJseQorICAgICAgICB0bXBfZGVwbGlicz0KKwlmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgdG1wX2RlcGxpYnM9IiRkZXBsaWIgJHRtcF9kZXBsaWJzIgorCWRvbmUKKwlkZXBsaWJzPSR0bXBfZGVwbGlicworICAgICAgZmkKKworICAgICAgaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8CisJIHRlc3QgcHJvZyxzY2FuID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwlsaWJzPSRkZXBsaWJzCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCWNhc2UgJHBhc3MgaW4KKwlkbG9wZW4pIGxpYnM9JGRsZmlsZXMgOzsKKwlkbHByZW9wZW4pIGxpYnM9JGRscHJlZmlsZXMgOzsKKwlsaW5rKQorCSAgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlIgorCSAgdGVzdCAiWCRsaW5rX2FsbF9kZXBsaWJzIiAhPSBYbm8gJiYgbGlicz0iJGxpYnMgJGRlcGVuZGVuY3lfbGlicyIKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgbGliLGRscHJlb3BlbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9JGRscHJlZmlsZXMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSRkZXBsaWJzCisJZGVwbGlicz0KKyAgICAgIGZpCisKKyAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCisJbGliPQorCWZvdW5kPWZhbHNlCisJY2FzZSAkZGVwbGliIGluCisJLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCisgICAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCisJICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisJICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLWwqKQorCSAgaWYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiJy1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0kc2VhcmNoZGlyL2xpYiRuYW1lJHNlYXJjaF9leHQKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0IC5sYSA9ICIkc2VhcmNoX2V4dCI7IHRoZW4KKwkJICBmb3VuZD06CisJCWVsc2UKKwkJICBmb3VuZD1mYWxzZQorCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgJGZvdW5kOyB0aGVuCisJICAgICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSRsCisJCSAgZG9uZQorCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPWZhbHNlCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5CisJCSAgICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIDs7ICMgLWwKKwkqLmx0ZnJhbWV3b3JrKQorCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktTCopCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICB0ZXN0IGNvbnYgPSAiJHBhc3MiICYmIGNvbnRpbnVlCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGNvbnRpbnVlCisJICAgIGZpCisJICAgIGlmIHRlc3Qgc2NhbiA9ICIkcGFzcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICAgIDs7CisJICAqKQorCSAgICBmdW5jX3dhcm5pbmcgIictTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPWZhbHNlCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPToKKwkJICBmaQorCQk7OworCQlwYXNzX2FsbCkKKwkJICB2YWxpZF9hX2xpYj06CisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmICR2YWxpZF9hX2xpYjsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZWxzZQorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIiB8fCB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fCB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9OgorCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCisJJGZvdW5kIHx8IHRlc3QgLWYgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5ICckbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgJyRkZXBsaWInIgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwlmdW5jX3NvdXJjZSAiJGxpYiIKKworCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MvLWZyYW1ld29yayBcKFteICRdKlwpL1wxLmx0ZnJhbWV3b3JrL2cnYAorCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbworCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVwZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8CisJICAgdGVzdCBwcm9nLHNjYW4gPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSAgIHsgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICAgIHRtcF9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCisJCWNhc2UgIiR0bXBfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgICBkb25lCisJICBlbGlmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBjb252CisKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKwkgICB7IHRlc3QgeWVzID0gIiRwcmVmZXJfc3RhdGljX2xpYnMiIHx8CisJICAgICB0ZXN0IGJ1aWx0LG5vID0gIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCI7IH07IHRoZW4KKwkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisJZWxzZQorCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBsaW5rbGliPSRsCisJICBkb25lCisJZmkKKwlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciAnJGxpYiciCisJZmkKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCWlmIHRlc3QgZGxvcGVuID0gIiRwYXNzIjsgdGhlbgorCSAgdGVzdCAteiAiJGxpYmRpciIgXAorCSAgICAmJiBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6ICckbGliJyIKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CisJICAgICB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fAorCSAgICAgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIgorCSAgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZworCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCisJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICBlbHNlCisJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGRsb3BlbgorCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkbGFkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0kbGFkaXIgOzsKKwkqKQorCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCisJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRsYWRpciciCisJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKKwkgICAgYWJzX2xhZGlyPSRsYWRpcgorCSAgZmkKKwkgIDs7CisJZXNhYworCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJbGFuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KKwkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgJyRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0kbGFkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIKKwkgICAgbGliZGlyPSRhYnNfbGFkaXIKKwkgIGVsc2UKKwkgICAgZGlyPSRsdF9zeXNyb290JGxpYmRpcgorCSAgICBhYnNkaXI9JGx0X3N5c3Jvb3QkbGliZGlyCisJICBmaQorCSAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZGlyPSRsYWRpcgorCSAgICBhYnNkaXI9JGFic19sYWRpcgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0kbGFkaXIvJG9iamRpcgorCSAgICBhYnNkaXI9JGFic19sYWRpci8kb2JqZGlyCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKwkgIGZpCisJZmkgIyAkaW5zdGFsbGVkID0geWVzCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwlpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogJyRsaWInIgorCSAgZmkKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKwkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAorCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKwkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgorCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCisJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCisJICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisJICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKiApCisJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisJICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisKKwlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CisJICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiICMgdXNlZCBmb3IgcHJvZyxzY2FuIHBhc3MKKwkgIGZpCisJICBjb250aW51ZQorCWZpCisKKworCWlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiICYmIHRlc3QgbGluayAhPSAiJHBhc3MiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCisJICBsaW5rYWxsZGVwbGlicz1mYWxzZQorCSAgaWYgdGVzdCBubyAhPSAiJGxpbmtfYWxsX2RlcGxpYnMiIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz06CisJICBmaQorCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgICAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCQkgOzsKKwkgICAgZXNhYworCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CisJICAgIGlmICRsaW5rYWxsZGVwbGliczsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKKwkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisJICBkb25lICMgZm9yIGRlcGxpYgorCSAgY29udGludWUKKwlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KKworCWlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgICAgeyB7IHRlc3Qgbm8gPSAiJHByZWZlcl9zdGF0aWNfbGlicyIgfHwKKwkgICAgICAgICB0ZXN0IGJ1aWx0LHllcyA9ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9IHx8CisJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCI7IHRoZW4KKwkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgICAgY2FzZSAkdGVtcF9ycGF0aDogaW4KKwkgICAgICAqIiRhYnNkaXI6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCisKKwkgIGlmICRhbGxkZXBsaWJzICYmCisJICAgICB7IHRlc3QgcGFzc19hbGwgPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8fAorCSAgICAgICB7IHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmCisJCSB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IH07IH07IHRoZW4KKwkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCisJICAgIGNvbnRpbnVlCisJICBmaQorCWZpCisKKwlsaW5rX3N0YXRpYz1ubyAjIFdoZXRoZXIgdGhlIGRlcGxpYiB3aWxsIGJlIGxpbmtlZCBzdGF0aWNhbGx5CisJdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKKwlpZiB0ZXN0IGJ1aWx0ID0gIiR1c2Vfc3RhdGljX2xpYnMiICYmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCisJICB1c2Vfc3RhdGljX2xpYnM9bm8KKwlmaQorCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgIHsgdGVzdCBubyA9ICIkdXNlX3N0YXRpY19saWJzIiB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqIHwgKm9zMiopCisJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3Qgbm8gPSAiJGluc3RhbGxlZCI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPXllcworCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKKworCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKKwkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQorCSAgZGxvcGVubW9kdWxlPQorCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgorCSAgICAgIGRsb3Blbm1vZHVsZT0kZGxwcmVtb2R1bGV0ZXN0CisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgeWVzID0gIiRzaG91bGRub3RsaW5rIiAmJiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIiAmJgorCSAgICAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2ludG9fbGlicyI7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIjsgdGhlbgorCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQorCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwkgICAgc2hpZnQKKwkgICAgcmVhbG5hbWU9JDEKKwkgICAgc2hpZnQKKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgIHNvbmFtZT0kZGxuYW1lCisJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgICAgICMgYmxlaCB3aW5kb3dzCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKiB8ICpvczIqKQorCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCXZlcnN1ZmZpeD0tJG1ham9yCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwkgICAgZWxzZQorCSAgICAgIHNvbmFtZT0kcmVhbG5hbWUKKwkgICAgZmkKKworCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQorCSAgICBzb3Jvb3Q9JHNvbmFtZQorCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgorCSAgICBzb25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKKwkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKKworCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdworCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgorCSAgICBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gJyRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCisJICAgICMgQ3JlYXRlICRuZXdsaWIKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgJyRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKworCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICBsaWJfbGlua2VkPXllcworCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KKwkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCisJICAgICAgaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0IjsgdGhlbgorCQlhZGQ9JGRpci8kbGlua2xpYgorCQljYXNlICRob3N0IGluCisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPS1MJGRpciA7OworCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPS1MJGRpciA7OworCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAorCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9LUwkZGlyIDs7CisJCSAgKi0qLWRhcndpbiogKQorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2Fubm90CisJCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncworCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsOyB0aGVuCisJCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCisJCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCisJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQkgIGVjaG8KKwkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCisJCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9JGRpci8kb2xkX2xpYnJhcnkKKwkJCWZpCisJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCQkJYWRkPSRkaXIvJG9sZF9saWJyYXJ5CisJCSAgICAgIGZpCisJCSAgICBmaQorCQllc2FjCisJICAgICAgZWxpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9JGRpciA7OworCQllc2FjCisJCWFkZF9kaXI9LUwkZGlyCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSRkaXIKKwkJYWRkPS1sJG5hbWUKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIHJlbGluaykKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgorCSAgICAgICAgIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSI7IHRoZW4KKwkJYWRkPSRkaXIvJGxpbmtsaWIKKwkgICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgorCQlhZGRfZGlyPS1MJGFic2RpcgorCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCSAgY2FzZSAkbGliZGlyIGluCisJCSAgICBbXFwvXSopCisJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJYWRkPS1sJG5hbWUKKwkgICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSRkaXIKKwkJYWRkPS1sJG5hbWUKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKKwkgICAgZXNhYworCisJICAgIGlmIHRlc3QgeWVzICE9ICIkbGliX2xpbmtlZCI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgICBpZiB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkJIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfbWludXNfTCIgJiYKKwkJIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgorCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCQkqIjokbGliZGlyOiIqKSA7OworCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgorCSAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgorCSAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVuCisJICAgICAgYWRkPSRsaWJkaXIvJGxpbmtsaWIKKwkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKwkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgorCSAgICAgIGFkZD0tbCRuYW1lCisJICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisJICAgICAgZXNhYworCSAgICAgIGFkZD0tbCRuYW1lCisJICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgorCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiOyB0aGVuCisJCWFkZD0kaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYgorCSAgICAgIGVsc2UKKwkJYWRkPSRsaWJkaXIvJGxpbmtsaWIKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKwkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGFkZD0tbCRuYW1lCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZCAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICBmaQorCSAgZmkKKwllbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgb25lIG9mIGhhcmRjb2RlX2RpcmVjdCBvciBoYXJkY29kZV9taW51c19MCisJICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKKwkgICMgc2hhcmVkIHBsYXRmb3Jtcy4KKwkgIGlmIHRlc3QgdW5zdXBwb3J0ZWQgIT0gIiRoYXJkY29kZV9kaXJlY3QiOyB0aGVuCisJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0kb2xkX2xpYnJhcnkKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgIGVjaG8KKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW5ub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCisJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCisJICAgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiOyB0aGVuCisJICAgICAgZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgorCSAgICAgIGVjaG8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKwkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCQllY2hvCisJCWVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCQllY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkJZWNobyAiKioqICdubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHx8CisJICAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgfHwKKwkgICAgICAgdGVzdCB5ZXMgPSAiJGxpbmtfc3RhdGljIjsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7CisJCSAgIGVzYWM7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSR0ZW1wX2RlcGxpYnMKKwkgIGZpCisKKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3Qgbm8gPSAiJGxpbmtfc3RhdGljIiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgY2FzZSAkZGVwbGliIGluCisgICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKyAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OworICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKKyAgICAgICAgICAgIGVzYWMKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKKyAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBkb25lCisKKwkgIGlmIHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJzIjsgdGhlbgorCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgcGF0aD0KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAtTCopIHBhdGg9JGRlcGxpYiA7OworCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgorCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0kZGlyIDs7CisJCSopCisJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCisJCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRkaXInIgorCQkgICAgYWJzZGlyPSRkaXIKKwkJICBmaQorCQkgIDs7CisJCWVzYWMKKwkJaWYgJEdSRVAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotZGFyd2luKikKKwkJICBkZXBkZXBsPQorCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJFNFRCAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiOyB0aGVuCisJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCI7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0kYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MIC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAkT1RPT0w2NCAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wtZHlsaWJfZmlsZSAkd2wkZGFyd2luX2luc3RhbGxfbmFtZTokZGVwZGVwbCIKKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJGRhcndpbl9pbnN0YWxsX25hbWU6JGRlcGRlcGwiCisJCSAgICAgIHBhdGg9CisJCSAgICBmaQorCQkgIGZpCisJCSAgOzsKKwkJKikKKwkJICBwYXRoPS1MJGFic2Rpci8kb2JqZGlyCisJCSAgOzsKKwkJZXNhYworCQllbHNlCisJCSAgZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiJyRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisKKwkJICBwYXRoPS1MJGFic2RpcgorCQlmaQorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRwYXRoICIqKSA7OworCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCisJZmkgIyBsaW5rbW9kZSA9IGxpYgorICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKKyAgICAgIGlmIHRlc3QgbGluayA9ICIkcGFzcyI7IHRoZW4KKwlpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKKwkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaQorICAgICAgZmkKKyAgICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCisgICAgICBpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCisJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbworCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwlkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCBkbG9wZW4gIT0gIiRwYXNzIjsgdGhlbgorCXRlc3QgY29udiA9ICIkcGFzcyIgfHwgeworCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgbmV3bGliX3NlYXJjaF9wYXRoPQorCX0KKworCWlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgorCWVsc2UKKwkgIHZhcnM9ZGVwbGlicworCWZpCisJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCisJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKwkgIG5ld19saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCisJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCisJICAgICMgICAgICAgIHRoYXQgc29tZSBuYXN0eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRlbnRhbGx5CisJICAgICMgICAgICAgIGJyb2tlbjoKKwkgICAgI25ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIKKwkgICAgIyBQcmFnbWF0aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZlcnkgZmV3IHByb2JsZW1zIGluCisJICAgICMgcHJhY3RpY2U6CisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgLVIqKSA7OworCSAgICAqKQorCSAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCisJICAgICAgIyB0aGFuIG9uY2UgYXMgYW4gZXhwbGljaXQgZGVwZW5kZW5jZSBvZiBhIGxpYnJhcnksIG9yCisJICAgICAgIyBpcyBpbXBsaWNpdGx5IGxpbmtlZCBpbiBtb3JlIHRoYW4gb25jZSBieSB0aGUKKwkgICAgICAjIGNvbXBpbGVyLCBpdCBpcyBjb25zaWRlcmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQorCSAgICAgICMgb2NjdXJyZW5jZXMgdGhlcmVvZiBhcmUgbm90IHJlbW92ZWQuICBDb21wYXJlIHRoaXMKKwkgICAgICAjIHdpdGggaGF2aW5nIHRoZSBzYW1lIGxpYnJhcnkgYmVpbmcgbGlzdGVkIGFzIGEKKwkgICAgICAjIGRlcGVuZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFyaWVzOiBpbiB0aGlzIGNhc2UsCisJICAgICAgIyB3ZSBrbm93IChwZWRhbnRpY2FsbHksIHdlIGFzc3VtZSkgdGhlIGxpYnJhcnkgZG9lcyBub3QKKwkgICAgICAjIG5lZWQgdG8gYmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLCBzbyB3ZSBrZWVwIG9ubHkgdGhlCisJICAgICAgIyBsYXN0IGNvcHkuICBUaGlzIGlzIG5vdCBhbHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCisJICAgICAgIyBlbm91Z2ggdGhhdCB3ZSByZXF1aXJlIHVzZXJzIHRoYXQgcmVhbGx5IG1lYW4gdG8gcGxheQorCSAgICAgICMgc3VjaCB1bnBvcnRhYmxlIGxpbmtpbmcgdHJpY2tzIHRvIGxpbmsgdGhlIGxpYnJhcnkKKwkgICAgICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQgbGlidG9vbCBkb2VzIG5vdCBjb25zaWRlciBpdAorCSAgICAgICMgZm9yIGR1cGxpY2F0ZSByZW1vdmFsLgorCSAgICAgIGNhc2UgIiAkc3BlY2lhbGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgICAqKQorCQljYXNlICIgJG5ld19saWJzICIgaW4KKwkJKiIgJGRlcGxpYiAiKikgOzsKKwkJKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCQllc2FjCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkbmV3X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopCisJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKKwlkb25lICMgZm9yIHZhcgorICAgICAgZmkKKworICAgICAgIyBBZGQgU3VuIENDIHBvc3RkZXBzIGlmIHJlcXVpcmVkOgorICAgICAgdGVzdCBDWFggPSAiJHRhZ25hbWUiICYmIHsKKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICBsaW51eCopCisgICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICAgICAgICAgKlN1blwgQyopICMgU3VuIEMrKyA1LjkKKyAgICAgICAgICAgIGZ1bmNfc3VuY2NfY3N0ZF9hYmkKKworICAgICAgICAgICAgaWYgdGVzdCBubyAhPSAiJHN1bmNjX3VzZV9jc3RkX2FiaSI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcG9zdGRlcHMgJyAtbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgOzsKKworICAgICAgICBzb2xhcmlzKikKKyAgICAgICAgICBmdW5jX2NjX2Jhc2VuYW1lICIkQ0MiCisgICAgICAgICAgY2FzZSAkZnVuY19jY19iYXNlbmFtZV9yZXN1bHQgaW4KKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgICAgICAgICAgICBmdW5jX3N1bmNjX2NzdGRfYWJpCisKKyAgICAgICAgICAgIGlmIHRlc3Qgbm8gIT0gIiRzdW5jY191c2VfY3N0ZF9hYmkiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHBvc3RkZXBzICcgLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIH0KKworICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKyAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQorICAgICAgdG1wX2xpYnM9CisgICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPQorCSAgOzsKKwllc2FjCisJaWYgdGVzdCAtbiAiJGkiOyB0aGVuCisJICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKyAgICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKKyAgICBmaQorICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKyAgICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKKyAgICBmaQorCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBvbGRsaWIpCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgorCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiJy1sJyBhbmQgJy1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSRvdXRwdXQKKyAgICAgIGZ1bmNfYXBwZW5kIG9ianMgIiRvbGRfZGVwbGlicyIKKyAgICAgIDs7CisKKyAgICBsaWIpCisgICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSAnbGliTkFNRS5sYScuCisgICAgICBjYXNlICRvdXRwdXRuYW1lIGluCisgICAgICBsaWIqKQorCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorCTs7CisgICAgICAqKQorCXRlc3Qgbm8gPSAiJG1vZHVsZSIgXAorCSAgJiYgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCAnbGliJyIKKworCWlmIHRlc3Qgbm8gIT0gIiRuZWVkX2xpYl9wcmVmaXgiOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCisJZWxzZQorCSAgZWNobworCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJG9ianMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIHRlc3Qgbm8gPSAiJGRsc2VsZiIgXAorCXx8IGZ1bmNfd2FybmluZyAiJy1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0IDEgLWx0ICIkIyIgXAorCSYmIGZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgJy1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKworICAgICAgaW5zdGFsbF9saWJkaXI9JDEKKworICAgICAgb2xkbGlicz0KKyAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgJy5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKwkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCisJICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKKwkgIGJ1aWxkX29sZF9saWJzPXllcworCWZpCisKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisKKwl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCSAgZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKyAgICAgIGVsc2UKKworCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCisJc2F2ZV9pZnM9JElGUzsgSUZTPToKKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKKwlJRlM9JHNhdmVfaWZzCisKKwl0ZXN0IC1uICIkNyIgJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvICctdmVyc2lvbi1pbmZvJyIKKworCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCisJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorCisJY2FzZSAkdmluZm9fbnVtYmVyIGluCisJeWVzKQorCSAgbnVtYmVyX21ham9yPSQxCisJICBudW1iZXJfbWlub3I9JDIKKwkgIG51bWJlcl9yZXZpc2lvbj0kMworCSAgIworCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcworCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAorCSAgIyB0aGF0IGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgorCSAgIworCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICAjIGNvcnJlY3QgbGludXggdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwkgIGRhcndpbnxmcmVlYnNkLWVsZnxsaW51eHxvc2Z8d2luZG93c3xub25lKQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0kbnVtYmVyX21pbm9yCisJICAgIHJldmlzaW9uPSRudW1iZXJfcmV2aXNpb24KKwkgICAgOzsKKwkgIGZyZWVic2QtYW91dHxxbnh8c3Vub3MpCisJICAgIGN1cnJlbnQ9JG51bWJlcl9tYWpvcgorCSAgICByZXZpc2lvbj0kbnVtYmVyX21pbm9yCisJICAgIGFnZT0wCisJICAgIDs7CisJICBpcml4fG5vbnN0b3B1eCkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9JG51bWJlcl9taW5vcgorCSAgICByZXZpc2lvbj0kbnVtYmVyX21pbm9yCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIiRtb2RlbmFtZTogdW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSAnJHZlcnNpb25fdHlwZSciCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0kMQorCSAgcmV2aXNpb249JDIKKwkgIGFnZT0kMworCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgJyRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRyZXZpc2lvbiBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiUkVWSVNJT04gJyRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkYWdlIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJBR0UgJyRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgJyRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyICckY3VycmVudCciCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCisJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgorCSAgZnVuY19hcml0aCAkY3VycmVudCArIDEKKwkgIG1pbm9yX2N1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICB4bGN2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisgICAgICAgICAgIyBPbiBEYXJ3aW4gb3RoZXIgY29tcGlsZXJzCisgICAgICAgICAgY2FzZSAkQ0MgaW4KKyAgICAgICAgICAgICAgbmFnZm9yKikKKyAgICAgICAgICAgICAgICAgIHZlcnN0cmluZz0iJHdsLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudCAkd2wtY3VycmVudF92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKwkgIDs7CisKKwlmcmVlYnNkLWFvdXQpCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJldmlzaW9uCisJICA7OworCisJZnJlZWJzZC1lbGYpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0IG5vID0gIiRsdF9pcml4X2luY3JlbWVudCI7IHRoZW4KKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIGVsc2UKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCisJICBmaQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CisJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKKwkgIGVzYWMKKwkgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24KKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0IDAgLW5lICIkbG9vcCI7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZworCSAgZG9uZQorCisJICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiAnLicuCisJICBtYWpvcj0uJG1ham9yCisJICB2ZXJzdWZmaXg9JG1ham9yLiRyZXZpc2lvbgorCSAgOzsKKworCWxpbnV4KSAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCisJICA7OworCisJb3NmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24KKwkgIHZlcnN0cmluZz0kY3VycmVudC4kYWdlLiRyZXZpc2lvbgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kYWdlCisJICB3aGlsZSB0ZXN0IDAgLW5lICIkbG9vcCI7IGRvCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSR2ZXJzdHJpbmc6JGlmYWNlLjAKKwkgIGRvbmUKKworCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgorCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JGN1cnJlbnQuMCIKKwkgIDs7CisKKwlxbngpCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQKKwkgIDs7CisKKwlzY28pCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQKKwkgIDs7CisKKwlzdW5vcykKKwkgIG1ham9yPS4kY3VycmVudAorCSAgdmVyc3VmZml4PS4kY3VycmVudC4kcmV2aXNpb24KKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlIHN5c3RlbXMuCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9LSRtYWpvcgorCSAgOzsKKworCSopCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgJyR2ZXJzaW9uX3R5cGUnIgorCSAgOzsKKwllc2FjCisKKwkjIENsZWFyIHRoZSB2ZXJzaW9uIGluZm8gaWYgd2UgZGVmYXVsdGVkLCBhbmQgdGhleSBzcGVjaWZpZWQgYSByZWxlYXNlLgorCWlmIHRlc3QgLXogIiR2aW5mbyIgJiYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCisJICBtYWpvcj0KKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2luKQorCSAgICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBpbiBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1b3RpbmcKKwkgICAgIyBwcm9ibGVtcywgc28gd2UgcmVzZXQgaXQgY29tcGxldGVseQorCSAgICB2ZXJzdHJpbmc9CisJICAgIDs7CisJICAqKQorCSAgICB2ZXJzdHJpbmc9MC4wCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IG5vID0gIiRuZWVkX3ZlcnNpb24iOyB0aGVuCisJICAgIHZlcnN1ZmZpeD0KKwkgIGVsc2UKKwkgICAgdmVyc3VmZml4PS4wLjAKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgeWVzLG5vID0gIiRhdm9pZF92ZXJzaW9uLCRuZWVkX3ZlcnNpb24iOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0KKwlmaQorCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgorCWlmIHRlc3QgeWVzID0gIiRhbGxvd191bmRlZmluZWQiOyB0aGVuCisJICBpZiB0ZXN0IHVuc3VwcG9ydGVkID0gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllczsgYnVpbGRpbmcgc3RhdGljIG9ubHkiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGVsc2UKKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW4ndCBidWlsZCAkaG9zdCBzaGFyZWQgbGlicmFyeSB1bmxlc3MgLW5vLXVuZGVmaW5lZCBpcyBzcGVjaWZpZWQiCisJICAgIGZpCisJICBmaQorCWVsc2UKKwkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0kbm9fdW5kZWZpbmVkX2ZsYWcKKwlmaQorCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgOgorICAgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRzeW1maWxlb2JqIgorICAgICAgdGVzdCAiICIgPSAiJGxpYm9ianMiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgcmVsaW5rICE9ICIkb3B0X21vZGUiOyB0aGVuCisJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKwkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKwlyZW1vdmVsaXN0PQorCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCisJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbworCSAgY2FzZSAkcCBpbgorCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCisJICAgICAgIDs7CisJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuKikKKwkgICAgICAgaWYgdGVzdCAtbiAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IjsgdGhlbgorCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKwkJIHRoZW4KKwkJICAgY29udGludWUKKwkJIGZpCisJICAgICAgIGZpCisJICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKKwkgICAgICAgOzsKKwkgICAgKikgOzsKKwkgIGVzYWMKKwlkb25lCisJdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIgXCRyZW1vdmVsaXN0IgorICAgICAgZmkKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIHRlc3QgY29udmVuaWVuY2UgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJZnVuY19hcHBlbmQgb2xkbGlicyAiICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisKKwkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCisJb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJGxpYmV4dCQvZDsgJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KKyAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICIkbGliX3NlYXJjaF9wYXRoICIgfCAkU0VEICJzJSAkcGF0aCAlICVnImAKKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIiRkZXBsaWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIkZGVwZW5kZW5jeV9saWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgI2RvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKwlpZiB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2ludG9fbGlicyIgfHwgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0kZGxmaWxlcworICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKKyAgICAgIG9sZF9kbHByZWZpbGVzPSRkbHByZWZpbGVzCisgICAgICBkbHByZWZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQorCSAgICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMgc3VjaCkhCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIDs7CisJICAqLSotbmV0YnNkKikKKwkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIDs7CisJICAqKQorCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgorCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtbGMiCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkKKworCSMgVHJhbnNmb3JtIGRlcGxpYnMgaW50byBvbmx5IGRlcGxpYnMgdGhhdCBjYW4gYmUgbGlua2VkIGluIHNoYXJlZC4KKwluYW1lX3NhdmU9JG5hbWUKKwlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKKwlyZWxlYXNlX3NhdmU9JHJlbGVhc2UKKwl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4CisJbWFqb3Jfc2F2ZT0kbWFqb3IKKwkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluaworCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bworCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PworCXJlbGVhc2U9CisJdmVyc3VmZml4PQorCW1ham9yPQorCW5ld2RlcGxpYnM9CisJZHJvcHBlZGRlcHM9bm8KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCXBhc3NfYWxsKQorCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCisJICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCisJICAjIHdoZXRoZXIgdGhlIGxpYnJhcnkgZXhpc3RzIG9yIG5vdC4gIEJ1dCB0aGlzIGlzIG9uCisJICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKKwkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgorCSAgbmV3ZGVwbGlicz0kZGVwbGlicworCSAgOzsKKwl0ZXN0X2NvbXBpbGUpCisJICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cworCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QuYworCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkgIGlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRkZXBsaWJzOyB0aGVuCisJICAgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KKwkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAqIiAkaSAiKikKKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJICAgIGk9CisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJaWYgdGVzdCAtbiAiJGkiOyB0aGVuCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwOyB0aGVuCisJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICBlY2hvCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKKwkJICAgIGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgIyBFcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlyc3QgY29tcGlsZS4gIExldCdzIHRyeSB0byBzYWx2YWdlCisJICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgorCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkJICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgICBpPQorCQkgICAgICA7OworCQkgICAgZXNhYworCQkgIGZpCisJCSAgaWYgdGVzdCAtbiAiJGkiOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMDsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgICBlbHNlCisJCSAgICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgICBlY2hvCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgICAgZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZmkKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgZWNobworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgIGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaQorCSAgOzsKKwlmaWxlX21hZ2ljKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0KKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCisJCWVsc2UKKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorCQlmaQorCQl0ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIiAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBpZiB0ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIjsgdGhlbgorCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgICAgJG5vY2FzZWdsb2IKKwkJICBlbHNlCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgZmkKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9JHBvdGVudF9saWIKKwkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICRTRUQgJ3MvLiogLT4gLy8nYAorCQkJY2FzZSAkcG90bGlibGluayBpbgorCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9JHBvdGxpYmxpbms7OworCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzfFteL10qJHx8J2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJCWFfZGVwbGliPQorCQkJYnJlYWsgMgorCQkgICAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiI7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9CisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSRwb3RlbnRfbGliICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CisJCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAorCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJICAgICAgYV9kZXBsaWI9CisJCSAgICAgIGJyZWFrIDIKKwkJICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIjsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPQorCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncy8gLWxjJC8vOyBzLyAtW0xSXVteIF0qLy9nJ2AKKwkgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKwkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCisJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJHRtcF9kZXBsaWJzIiB8ICRTRUQgInN8JGl8fCJgCisJICAgIGRvbmUKKwkgIGZpCisJICBjYXNlICR0bXBfZGVwbGlicyBpbgorCSAgKlshXAlcIF0qKQorCSAgICBlY2hvCisJICAgIGlmIHRlc3Qgbm9uZSA9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgorCSAgICBlbHNlCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKwkgICAgZmkKKwkgICAgZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQorCW1ham9yPSRtYWpvcl9zYXZlCisJcmVsZWFzZT0kcmVsZWFzZV9zYXZlCisJbGlibmFtZT0kbGlibmFtZV9zYXZlCisJbmFtZT0kbmFtZV9zYXZlCisKKwljYXNlICRob3N0IGluCisJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgeWVzID0gIiRkcm9wcGVkZGVwcyI7IHRoZW4KKwkgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiOyB0aGVuCisJICAgIGVjaG8KKwkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKKwkgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgIGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKwkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyAnbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgIGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICBlY2hvICIqKiogJ25tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICBmaQorCSAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgICAgICBvbGRsaWJzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgIGVsc2UKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZWNobyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKwkgICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorCisJICAgIGlmIHRlc3Qgbm8gPSAiJGFsbG93X3VuZGVmaW5lZCI7IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKwkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkJb2xkbGlicz0kb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0CisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKwlmaQorCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQorCWRlcGxpYnM9JG5ld2RlcGxpYnMKKyAgICAgIGZpCisgICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisgICAgICBjYXNlICRob3N0IGluCisJKi0qLWRhcndpbiopCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGRlcGxpYnM9JG5ld19saWJzCisKKyAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KKyAgICAgIGxpYnJhcnlfbmFtZXM9CisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIGRsbmFtZT0KKworICAgICAgIyBUZXN0IGFnYWluLCB3ZSBtYXkgaGF2ZSBkZWNpZGVkIG5vdCB0byBidWlsZCBpdCBhbnkgbW9yZQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkjIFJlbW92ZSAkd2wgaW5zdGFuY2VzIHdoZW4gbGlua2luZyB3aXRoIGxkLgorCSMgRklYTUU6IHNob3VsZCB0ZXN0IHRoZSByaWdodCBfY21kcyB2YXJpYWJsZS4KKwljYXNlICRhcmNoaXZlX2NtZHMgaW4KKwkgICpcJExEXCAqKSB3bD0gOzsKKyAgICAgICAgZXNhYworCWlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9pbnRvX2xpYnMiOyB0aGVuCisJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisJICBoYXJkY29kZV9saWJkaXJzPQorCSAgZGVwX3JwYXRoPQorCSAgcnBhdGg9JGZpbmFsaXplX3JwYXRoCisJICB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRjb21waWxlX3JwYXRoJHJwYXRoCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKKwkJZWxzZQorCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkJICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJICAgIDs7CisJCSAgKikKKwkJICAgIGZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCSAgICAgIGVsc2UKKwkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKwkgICAgICBmaQorCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBkb25lCisJICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCisJICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgICAgcnBhdGg9CisJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgICBkb25lCisJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorCSAgZmkKKwkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisJZmkKKworCXNobGlicGF0aD0kZmluYWxpemVfc2hsaWJwYXRoCisJdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBzaGxpYnBhdGg9JGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aAorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0kMQorCXNoaWZ0CisKKwlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJZWxzZQorCSAgc29uYW1lPSRyZWFsbmFtZQorCWZpCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgIGRsbmFtZT0kc29uYW1lCisJZmkKKworCWxpYj0kb3V0cHV0X29iamRpci8kcmVhbG5hbWUKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCisJZG9uZQorCisJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKKwl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAKKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzIgorCWZpCisKKwlvcmlnX2V4cG9ydF9zeW1ib2xzPQorCWNhc2UgJGhvc3Rfb3MgaW4KKwljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQorCSAgICBmdW5jX2RsbF9kZWZfcCAiJGV4cG9ydF9zeW1ib2xzIiB8fCB7CisJICAgICAgIyBhbmQgaXQncyBOT1QgYWxyZWFkeSBhIC5kZWYgZmlsZS4gTXVzdCBmaWd1cmUgb3V0CisJICAgICAgIyB3aGljaCBvZiB0aGUgZ2l2ZW4gc3ltYm9scyBhcmUgZGF0YSBzeW1ib2xzIGFuZCB0YWcKKwkgICAgICAjIHRoZW0gYXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4cG9ydF9zeW1ib2xzX2NtZHMuCisJICAgICAgIyBleHBvcnRfc3ltYm9scyBnZXRzIHJlYXNzaWduZWQgaW5zaWRlIHRoZSAicHJlcGFyZQorCSAgICAgICMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyIgaWYgc3RhdGVtZW50LCBzbyB0aGUKKwkgICAgICAjIGluY2x1ZGVfZXhwc3ltcyBsb2dpYyBzdGlsbCB3b3Jrcy4KKwkgICAgICBvcmlnX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scworCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgfQorCSAgZmkKKwkgIDs7CisJZXNhYworCisJIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwlpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyIKKwkgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwCisJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKKwkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9JHNhdmVfaWZzCisJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKKwkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKwkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgorCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCisJCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCisJCSAgZXZhbCBjbWQ9XCIkY21kMVwiCisJCSAgZnVuY19sZW4gIiAkY21kIgorCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisJCSAgOzsKKwkJKikKKwkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubworCQkgIDs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgeWVzID0gIiR0cnlfbm9ybWFsX2JyYW5jaCIgXAorCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAorCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQorCSAgICAgIHRoZW4KKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgorCQlmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJCXNhdmVfbGlib2Jqcz0kbGlib2JqcworCQlzYXZlX291dHB1dD0kb3V0cHV0CisJCW91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLm5tCisJCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICROTSBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkJICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkJZG9uZSA+ICIkb3V0cHV0IgorCQlldmFsIGNtZD1cIiRjbWQxXCIKKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisJCWxpYm9ianM9JHNhdmVfbGlib2JqcworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsc2UKKwkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCisJCWZ1bmNfdmVyYm9zZSAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCisJCXNraXBwZWRfZXhwb3J0PToKKwkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKKwkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCisJCWJyZWFrCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgICBJRlM9JHNhdmVfaWZzCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSRvcmlnX2V4cG9ydF9zeW1ib2xzCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwlmaQorCisJaWYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICMgJ3MnIGNvbW1hbmRzLCB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKwkgICopCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwlkZXBsaWJzPSR0bXBfZGVwbGlicworCisJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgorCSAgICB0ZXN0IHllcyA9ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiAmJgorCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KKwkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCisJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZWxzZQorCSAgICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKKwkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCB5ZXMgPSAiJHRocmVhZF9zYWZlIiAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworCWZpCisKKwkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgZmkKKwllbHNlCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJgorCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKKwkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQorCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisJICAjIHNjcmlwdC4KKworCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKwkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQorCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQorCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKwkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCisJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisJICAjIHRoZSBzcGVjLgorCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgZmkKKwkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKwkgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJICBvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisKKwkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCisJICAjIGluaXRpYWxpemUgayB0byBvbmUuCisJICB0ZXN0X2NtZHM9CisJICBjb25jYXRfY21kcz0KKwkgIG9iamxpc3Q9CisJICBsYXN0X3JvYmo9CisJICBrPTEKKworCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rc2NyaXB0CisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKwkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0CisJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZWNobyAnKScgPj4gJG91dHB1dAorCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYgdGVzdCAtbiAiJGZpbGVfbGlzdF9zcGVjIjsgdGhlbgorCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0IHllcyA9ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IjsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0CisJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgICAgICBsZW49JGxlbjAKKworCSAgICAgICMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUgbGlua2VkLgorCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICAgIGRvCisJCWZ1bmNfbGVuICIgJG9iaiIKKwkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQlsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWlmIHRlc3QgLXogIiRvYmpsaXN0IiB8fAorCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkJZWxzZQorCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkJICBpZiB0ZXN0IDEgLWVxICIkayI7IHRoZW4KKwkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCisJCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJCSAgZWxzZQorCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKwkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCQkgIGZpCisJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAorCQkgIGZ1bmNfYXJpdGggJGsgKyAxCisJCSAgaz0kZnVuY19hcml0aF9yZXN1bHQKKwkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0CisJCSAgb2JqbGlzdD0iICRvYmoiCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJHJlbG9hZF9jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKworCSAgICBlbHNlCisJICAgICAgb3V0cHV0PQorCSAgICBmaQorCisJICAgICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9ICYmIHsKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBsaWJvYmpzPSRvdXRwdXQKKwkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgfQorCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KKwkgICAgICBJRlM9JHNhdmVfaWZzCisJICAgICAgJG9wdF9xdWlldCB8fCB7CisJCSAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICB9CisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkJbHRfZXhpdD0kPworCisJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCQlpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCisJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCQlmaQorCisJCWV4aXQgJGx0X2V4aXQKKwkgICAgICB9CisJICAgIGRvbmUKKwkgICAgSUZTPSRzYXZlX2lmcworCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisKKyAgICAgICAgICAke3NraXBwZWRfZXhwb3J0LWZhbHNlfSAmJiB7CisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCisJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0kb3JpZ19leHBvcnRfc3ltYm9scworCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICAgICAjICdzJyBjb21tYW5kcywgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJICAgIGZpCisJICB9CisKKwkgIGxpYm9ianM9JG91dHB1dAorCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCisJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQorCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCisKKwkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwkgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyI7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKwkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCisJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorCWZpCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJZmkKKworCXNhdmVfaWZzPSRJRlM7IElGUz0nficKKwlmb3IgY21kIGluICRjbWRzOyBkbworCSAgSUZTPSRzcCRubAorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgIElGUz0kc2F2ZV9pZnMKKwkgICRvcHRfcXVpZXQgfHwgeworCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgIH0KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJICAgIGx0X2V4aXQ9JD8KKworCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkgICAgaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSRzYXZlX2lmcworCisJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwkgICAgZmkKKwkgIGZpCisKKwkgIGV4aXQgJEVYSVRfU1VDQ0VTUworCWZpCisKKwkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgorCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbworCSAgaWYgdGVzdCAiJHJlYWxuYW1lIiAhPSAiJGxpbmtuYW1lIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkbGlua25hbWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlua25hbWUiKScgJ2V4aXQgJD8nCisJICBmaQorCWRvbmUKKworCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCisJaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgfHwgdGVzdCB5ZXMgPSAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgorCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9iaikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCisJZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIictbCcgYW5kICctTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAgICoubG8pCisJdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCAnJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJOzsKKyAgICAgICopCisJbGlib2JqPQorCW9iaj0kb3V0cHV0CisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb2JqICRsaWJvYmoKKworICAgICAgIyBPYmplY3RzIGZyb20gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgVGhpcyBhc3N1bWVzCisgICAgICAjIHNpbmdsZS12ZXJzaW9uIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFdoZW5ldmVyIHdlIGNyZWF0ZQorICAgICAgIyBkaWZmZXJlbnQgb25lcyBmb3IgUElDL25vbi1QSUMsIHRoaXMgd2UnbGwgaGF2ZSB0byBkdXBsaWNhdGUKKyAgICAgICMgdGhlIGV4dHJhY3Rpb24uCisgICAgICByZWxvYWRfY29udl9vYmpzPQorICAgICAgZ2VudG9wPQorICAgICAgIyBpZiByZWxvYWRfY21kcyBydW5zICRMRCBkaXJlY3RseSwgZ2V0IHJpZCBvZiAtV2wgZnJvbQorICAgICAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGggdHVybmluZyBjb21tYQorICAgICAgIyBpbnRvIHNwYWNlLgorICAgICAgY2FzZSAkcmVsb2FkX2NtZHMgaW4KKyAgICAgICAgKlwkTERbXCBcJF0qKSB3bD0gOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgIHRlc3QgLW4gIiR3bCIgfHwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9YCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzCisJZWxzZQorCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b2JqfXgKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcworICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgbGlib2Jqcz0kbm9uX3BpY19vYmplY3RzCisKKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgcmVsb2FkX29ianM9JG9ianMkb2xkX2RlcGxpYnMnICdgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiRsaWJleHQkL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCcgJyRyZWxvYWRfY29udl9vYmpzCisKKyAgICAgIG91dHB1dD0kb2JqCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKworICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCisgICAgICBpZiB0ZXN0IC16ICIkbGlib2JqIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB7CisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgfQorCisgICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgZGVmYXVsdCAhPSAiJHBpY19tb2RlIjsgdGhlbgorCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCisJcmVsb2FkX29ianM9IiRsaWJvYmpzICRyZWxvYWRfY29udl9vYmpzIgorCW91dHB1dD0kbGlib2JqCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworICAgICAgZXNhYworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICAkcHJlbG9hZCBcCisJJiYgdGVzdCB1bmtub3duLHVua25vd24sdW5rbm93biA9ICIkZGxvcGVuX3N1cHBvcnQsJGRsb3Blbl9zZWxmLCRkbG9wZW5fc2VsZl9zdGF0aWMiIFwKKwkmJiBmdW5jX3dhcm5pbmcgIidMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1kYXJ3aW4qKQorCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKKwkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgorCWlmIHRlc3QgQ1hYID0gIiR0YWduYW1lIjsgdGhlbgorCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgorCSAgICAxMC5bMDEyM10pCisJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsLWJpbmRfYXRfbG9hZCIKKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsLWJpbmRfYXRfbG9hZCIKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwk7OworICAgICAgZXNhYworCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBjb21waWxlX2RlcGxpYnM9JG5ld19saWJzCisKKworICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkZmluYWxpemVfZGVwbGlicyIKKworICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJZm9yIGxpYmRpciBpbiAkcnBhdGggJHhycGF0aDsgZG8KKwkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGxpYmRpciIgfCAkU0VEIC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGxpYmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRsaWJkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSRycGF0aAorCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0kaGFyZGNvZGVfbGliZGlycworCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGZpbmFsaXplX3JwYXRoPSRycGF0aAorCisgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiBmYWxzZQorCisgICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAorICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHByZWxpbmtfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICB3cmFwcGVyc19yZXF1aXJlZD06CisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCisgICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MgYW5kIG1pbmd3MzJjZSBob3N0cywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCisgICAgICAgIDs7CisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCBubyA9ICIkbmVlZF9yZWxpbmsiIHx8IHRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAkd3JhcHBlcnNfcmVxdWlyZWQgfHwgeworCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJbGlua19jb21tYW5kPSRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAorCisJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4kb2JqZXh0IjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCInCisJZmkKKworCWV4aXQgJGV4aXRfc3RhdHVzCisgICAgICB9CisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKKyAgICAgIGZpCisKKyAgICAgIGNvbXBpbGVfdmFyPQorICAgICAgZmluYWxpemVfdmFyPQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgZG9uZQorCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisJaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisJICBkb25lCisJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IHllcyA9ICIkbm9faW5zdGFsbCI7IHRoZW4KKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisJbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwlsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKwkjIExpbmsgdGhlIGV4ZWN1dGFibGUgYW5kIGV4aXQKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24sJGZhc3RfaW5zdGFsbCBpbgorICAgICAgICByZWxpbmssKikKKwkgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorCSAgbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAorCSAgcmVsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCisKKwkgIGZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJICBmdW5jX3dhcm5pbmcgIickb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCisJICA7OworICAgICAgICAqLHllcykKKwkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorCSAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorICAgICAgICAgIDs7CisJKixubykKKwkgIGxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorICAgICAgICAgIDs7CisJKixuZWVkbGVzcykKKwkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorCSAgcmVsaW5rX2NvbW1hbmQ9CisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiCisJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKwlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZmkKKwlkb25lCisJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKwlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jCisJICAgIGN3cmFwcGVyPSRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlCisJICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCisJICAgIHRyYXAgIiRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgPiAkY3dyYXBwZXJzb3VyY2UKKworCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAorCSAgICAjIGJlY2F1c2UgaXQgY29udGFpbnMgJGhvc3QgcGF0aHMgYW5kIGZpbGVzLiBJZiBjcm9zcy0KKwkgICAgIyBjb21waWxpbmcsIGl0LCBsaWtlIHRoZSB0YXJnZXQgZXhlY3V0YWJsZSwgbXVzdCBiZQorCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1vICRjd3JhcHBlciAkY3dyYXBwZXJzb3VyY2UKKwkgICAgICAkU1RSSVAgJGN3cmFwcGVyCisJICAgIH0KKworCSAgICAjIE5vdywgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVuY19zb3VyY2UgdXNlOgorCSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICRjd3JhcHBlcgorCSAgICAkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgIyBub3RlOiB0aGlzIHNjcmlwdCB3aWxsIG5vdCBiZSBleGVjdXRlZCwgc28gZG8gbm90IGNobW9kLgorCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCI7IHRoZW4KKwkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBlbHNlCisJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZmkKKwkgICAgfQorCSAgOzsKKwkgICogKQorCSAgICAkUk0gJG91dHB1dAorCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRvdXRwdXQKKwkgICAgY2htb2QgK3ggJG91dHB1dAorCSAgOzsKKwllc2FjCisgICAgICB9CisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCisgICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KKworICAgICAgY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluCisgICAgICAgIGNvbnZlbmllbmNlKQorCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwkgIGFkZGxpYnM9JGNvbnZlbmllbmNlCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgIDs7CisJbW9kdWxlKQorCSAgb2xkb2Jqcz0kbGlib2Jqc19zYXZlCisJICBhZGRsaWJzPSRvbGRfY29udmVuaWVuY2UKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgICAgIDs7CisJKikKKwkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgorCSAgJHByZWxvYWQgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiIFwKKwkgICAgJiYgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgorCSAgYWRkbGlicz0kb2xkX2NvbnZlbmllbmNlCisJICA7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKwlnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKKwlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKKwlmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKyAgICAgIGVsc2UKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisKKwkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKKwkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQorCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisJIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKKwkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQorCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKwlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisJICA6CisJZWxzZQorCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgY291bnRlcj0xCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgIG9iamJhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCisJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CisJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKKwkgICAgICB3aGlsZSA6OyBkbworCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbworCQkjIG92ZXJsYXBzLgorCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQorCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQorCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQljYXNlICIgJG9sZG9ianMgIiBpbgorCQkqW1wgL10iJG5ld29iaiAiKikgOzsKKwkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OworCQllc2FjCisJICAgICAgZG9uZQorCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKwkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwl0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCisJZnVuY19sZW4gIiAkY21kcyIKKwlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgY29tbWFuZCBmaWxlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIGZvciBvYmogaW4gJG9sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQiCisJICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxzZQorCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIHNhdmVfUkFOTElCPSRSQU5MSUIKKwkgIFJBTkxJQj06CisJICBvYmpsaXN0PQorCSAgY29uY2F0X2NtZHM9CisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgbGFzdF9vbGRvYmo9JG9iagorCSAgZG9uZQorCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgIGxlbj0kbGVuMAorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2xlbiAiICRvYmoiCisJICAgIGZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkgICAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJICAgICAgOgorCSAgICBlbHNlCisJICAgICAgIyB0aGUgYWJvdmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZworCSAgICAgIG9sZG9ianM9JG9iamxpc3QKKwkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiOyB0aGVuCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgICAgIG9iamxpc3Q9CisJICAgICAgbGVuPSRsZW4wCisJICAgIGZpCisJICBkb25lCisJICBSQU5MSUI9JHNhdmVfUkFOTElCCisJICBvbGRvYmpzPSRvYmpsaXN0CisJICBpZiB0ZXN0IC16ICIkb2xkb2JqcyI7IHRoZW4KKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCisJICBlbHNlCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIkZ2VuZXJhdGVkIgorCisgICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgKi5sYSkKKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiAmJiBvbGRfbGlicmFyeT0kbGlibmFtZS4kbGliZXh0CisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwllbHNlCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMIFwiJHByb2dwYXRoXCIgJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKKyAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KKwlyZWxpbmtfY29tbWFuZD0KKyAgICAgIGZpCisKKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfWkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAtTCopCisJCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLUwkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorCQk7OworCSAgICAgIC1SKikKKwkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJCTs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSRuZXdkZXBlbmRlbmN5X2xpYnMKKwkgICAgbmV3ZGxmaWxlcz0KKworCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcworCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJCSMgT25seSBwYXNzIHByZW9wZW5lZCBmaWxlcyB0byB0aGUgcHNldWRvLWFyY2hpdmUgKGZvcgorCQkjIGV2ZW50dWFsIGxpbmtpbmcgd2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBpZiB3ZQorCQkjIGRpZG4ndCBhbHJlYWR5IGxpbmsgdGhlIHByZW9wZW5lZCBvYmplY3RzIGRpcmVjdGx5IGludG8KKwkJIyB0aGUgbGlicmFyeToKKwkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9JGxpYiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgorCSAgICBkb25lCisJICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9JGxpYiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKKwkgIGZpCisJICAkUk0gJG91dHB1dAorCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCisJICAjIEluIGZhY3QsIGl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgdXNlIHRoaXMgY29kZSBmb3IgYWxsIHRhcmdldAorCSAgIyBzeXN0ZW1zIHRoYXQgY2FuJ3QgaGFyZC1jb2RlIGxpYnJhcnkgcGF0aHMgaW50byB0aGVpciBleGVjdXRhYmxlcworCSAgIyBhbmQgdGhhdCBoYXZlIG5vIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUgaW5kZXBlbmRlbnQgb2YgUEFUSCwKKwkgICMgYnV0IGl0IHR1cm5zIG91dCB3ZSBjYW4ndCBlYXNpbHkgZGV0ZXJtaW5lIHRoYXQgZnJvbSBpbnNwZWN0aW5nCisJICAjIGxpYnRvb2wgdmFyaWFibGVzLCBzbyB3ZSBoYXZlIHRvIGhhcmQtY29kZSB0aGUgT1NzIHRvIHdoaWNoIGl0CisJICAjIGFwcGxpZXMgaGVyZTsgYXQgdGhlIG1vbWVudCwgdGhhdCBtZWFucyBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIFBFCisJICAjIG9iamVjdCBmb3JtYXQgd2l0aCBETEwgZmlsZXMuICBTZWUgdGhlIGxvbmcgY29tbWVudCBhdCB0aGUgdG9wIG9mCisJICAjIHRlc3RzL2JpbmRpci5hdCBmb3IgZnVsbCBkZXRhaWxzLgorCSAgdGRsbmFtZT0kZGxuYW1lCisJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkKKwkgICAgICAjIElmIGEgLWJpbmRpciBhcmd1bWVudCB3YXMgc3VwcGxpZWQsIHBsYWNlIHRoZSBkbGwgdGhlcmUuCisJICAgICAgaWYgdGVzdCAtbiAiJGJpbmRpciI7IHRoZW4KKwkJZnVuY19yZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIiICIkYmluZGlyIgorCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyRkbG5hbWUKKwkgICAgICBlbHNlCisJCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCisJCXRkbG5hbWU9Li4vYmluLyRkbG5hbWUKKwkgICAgICBmaQorCSAgICAgIDs7CisJICBlc2FjCisJICAkRUNITyA+ICRvdXRwdXQgIlwKKyMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9JyR0ZGxuYW1lJworCisjIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KK2xpYnJhcnlfbmFtZXM9JyRsaWJyYXJ5X25hbWVzJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCisKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2Fubm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KK2N1cnJlbnQ9JGN1cnJlbnQKK2FnZT0kYWdlCityZXZpc2lvbj0kcmV2aXNpb24KKworIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz0kbW9kdWxlCisKKyMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgorZGxvcGVuPSckZGxmaWxlcycKK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKwkgIGlmIHRlc3Qgbm8seWVzID0gIiRpbnN0YWxsZWQsJG5lZWRfcmVsaW5rIjsgdGhlbgorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorCSAgZmkKKwlkb25lCisgICAgICB9CisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCitpZiB0ZXN0IGxpbmsgPSAiJG9wdF9tb2RlIiB8fCB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCisgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorZmkKKworCisjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfdW5pbnN0YWxsICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgUk09JG5vbm9wdAorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9ZmFsc2UKKyAgICBleGl0X3N0YXR1cz0wCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9JG1hZ2ljCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9OiA7OworICAgICAgLSopIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyIgOzsKKyAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkUk0iICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIgorCisgICAgcm1kaXJzPQorCisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICBkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIGlmIHRlc3QgLiA9ICIkZGlyIjsgdGhlbgorCW9kaXI9JG9iamRpcgorICAgICAgZWxzZQorCW9kaXI9JGRpci8kb2JqZGlyCisgICAgICBmaQorICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorICAgICAgdGVzdCB1bmluc3RhbGwgPSAiJG9wdF9tb2RlIiAmJiBvZGlyPSRkaXIKKworICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICAgIGlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgorCWNhc2UgIiAkcm1kaXJzICIgaW4KKwkgICoiICRvZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7CisJZXNhYworICAgICAgZmkKKworICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KKyAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJOgorICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKwlleGl0X3N0YXR1cz0xCisJY29udGludWUKKyAgICAgIGVsaWYgJHJtZm9yY2U7IHRoZW4KKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgcm1maWxlcz0kZmlsZQorCisgICAgICBjYXNlICRuYW1lIGluCisgICAgICAqLmxhKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbiIKKwkgIGRvbmUKKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKKworCSAgY2FzZSAkb3B0X21vZGUgaW4KKwkgIGNsZWFuKQorCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgorCSAgICAqIiAkZGxuYW1lICIqKSA7OworCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKKwkgICAgZXNhYworCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWkiCisJICAgIDs7CisJICB1bmluc3RhbGwpCisJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAnJHJtZm9yY2UgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJyRybWZvcmNlIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmIHRlc3Qgbm9uZSAhPSAiJHBpY19vYmplY3QiOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICopCisJaWYgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCisJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiRvYmpleHQiCisJICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5hbWUiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbm9leGVuYW1lLmMiCisJICAgIGZpCisJICBmaQorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJworICAgIGRvbmUKKworICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJG9iamRpcidzIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCit9CisKK2lmIHRlc3QgdW5pbnN0YWxsID0gIiRvcHRfbW9kZSIgfHwgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCisgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CitmaQorCit0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgaGVscD0kZ2VuZXJpY19oZWxwCisgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCit9CisKK3Rlc3QgLXogIiRleGVjX2NtZCIgJiYgXAorICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSciCisKK2lmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworZXhpdCAkZXhpdF9zdGF0dXMKKworCisjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorIyB3aGVyZSB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCisjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKKyMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgorIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQorIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOnNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjoyCisjIEVuZDoKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL200L2F4X2NoZWNrX3VzZXJfbmFtZXNwYWNlLm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvYXhfY2hlY2tfdXNlcl9uYW1lc3BhY2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiYTY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2F4X2NoZWNrX3VzZXJfbmFtZXNwYWNlLm00CkBAIC0wLDAgKzEsNTQgQEAKKyMgLSotIEF1dG9jb25mIC0qLQorCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ0hFQ0tfVVNFUl9OQU1FU1BBQ0UKKyMKKyMgREVTQ1JJUFRJT04KKyMKKyMgICBUaGlzIG1hY3JvIGNoZWNrcyB3aGV0aGVyIHRoZSBsb2NhbCBzeXN0ZW0gc3VwcG9ydHMgTGludXggdXNlciBuYW1lc3BhY2VzLgorIyAgIElmIHNvLCBpdCBjYWxscyBBQ19ERUZJTkUoSEFWRV9VU0VSX05BTUVTUEFDRSkuCisKK0FDX0RFRlVOKFtBWF9DSEVDS19VU0VSX05BTUVTUEFDRV0sW2RubAorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHVzZXIgbmFtZXNwYWNlcyBhcmUgc3VwcG9ydGVkXSwKKyAgYXhfY3ZfdXNlcl9uYW1lc3BhY2UsWworICBBQ19MQU5HX1BVU0goW0NdKQorICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKK2ludCB1c2VyZm4odm9pZCAqZCkgeworICB1c2xlZXAoMTAwMDAwKTsgIC8qIHN5bmNocm9uaXplIGJ5IHNsZWVwICovCisgIHJldHVybiAoZ2V0dWlkKCkgIT0gMCk7Cit9CitjaGFyIHVzZXJzdFsxMDI0KjEwMjRdOworaW50IG1haW4oKSB7CisgIGNoYXIgYnVmZmVyWzEwMjRdOworICBpbnQgcmMsIHN0YXR1cywgZmQ7CisgIHBpZF90IGNoaWxkID0gY2xvbmUodXNlcmZuLCB1c2Vyc3QgKyAxMDI0KjEwMjQsIENMT05FX05FV1VTRVJ8U0lHQ0hMRCwgMCk7CisgIGlmIChjaGlsZCA8IDApIHJldHVybiAxOworCisgIHNwcmludGYoYnVmZmVyLCAiL3Byb2MvJWQvdWlkX21hcCIsIGNoaWxkKTsKKyAgZmQgPSBvcGVuKGJ1ZmZlciwgT19DUkVBVHxPX1dST05MWXxPX1RSVU5DLCAwNzU1KTsKKyAgc3ByaW50ZihidWZmZXIsICIwICVkIDFcbiIsIGdldHVpZCgpKTsKKyAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICBjbG9zZShmZCk7CisKKyAgcmMgPSB3YWl0cGlkKGNoaWxkLCAmc3RhdHVzLCAwKTsKKyAgaWYgKHJjIDw9IDApIHJldHVybiAxOworICBpZiAoIVdJRkVYSVRFRChzdGF0dXMpKSByZXR1cm4gMTsKKyAgcmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7Cit9CisgIF1dKV0sW2F4X2N2X3VzZXJfbmFtZXNwYWNlPXllc10sW2F4X2N2X3VzZXJfbmFtZXNwYWNlPW5vXSxbYXhfY3ZfdXNlcl9uYW1lc3BhY2U9bm9dKQorIEFDX0xBTkdfUE9QKFtDXSkKKyBdKQorIGlmIHRlc3QgIiRheF9jdl91c2VyX25hbWVzcGFjZSIgPSB5ZXM7IHRoZW4KKyAgIEFDX0RFRklORShbSEFWRV9VU0VSX05BTUVTUEFDRV0sWzFdLFtXaGV0aGVyIHVzZXIgbmFtZXNwYWNlcyBhcmUgYXZhaWxhYmxlXSkKKyBmaQorXSkgIyBBWF9DSEVDS19VU0VSX05BTUVTUEFDRQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQvYXhfY2hlY2tfdXRzX25hbWVzcGFjZS5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2F4X2NoZWNrX3V0c19uYW1lc3BhY2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3YjE0NQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2F4X2NoZWNrX3V0c19uYW1lc3BhY2UubTQKQEAgLTAsMCArMSw3NiBAQAorIyAtKi0gQXV0b2NvbmYgLSotCisKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9DSEVDS19VVFNfTkFNRVNQQUNFCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBjaGVja3Mgd2hldGhlciB0aGUgbG9jYWwgc3lzdGVtIHN1cHBvcnRzIExpbnV4IFVUUyBuYW1lc3BhY2VzLgorIyAgIEFsc28gcmVxdWlyZXMgdXNlciBuYW1lc3BhY2VzIHRvIGJlIGF2YWlsYWJsZSwgc28gdGhhdCBub24tcm9vdCB1c2VycworIyAgIGNhbiBlbnRlciB0aGUgbmFtZXNwYWNlLgorIyAgIElmIHNvLCBpdCBjYWxscyBBQ19ERUZJTkUoSEFWRV9VVFNfTkFNRVNQQUNFKS4KKworQUNfREVGVU4oW0FYX0NIRUNLX1VUU19OQU1FU1BBQ0VdLFtkbmwKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBVVFMgbmFtZXNwYWNlcyBhcmUgc3VwcG9ydGVkXSwKKyAgYXhfY3ZfdXRzX25hbWVzcGFjZSxbCisgIEFDX0xBTkdfUFVTSChbQ10pCisgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworaW50IHV0c2ZuKHZvaWQgKmQpIHsKKyAgY2hhciBidWZmZXJbMTAyNF07CisgIGNvbnN0IGNoYXIgKm5hbWUgPSAiYXV0b2NvbmZ0ZXN0IjsKKyAgaW50IHJjID0gc2V0aG9zdG5hbWUobmFtZSwgc3RybGVuKG5hbWUpKTsKKyAgaWYgKHJjICE9IDApIHJldHVybiAxOworICBnZXRob3N0bmFtZShidWZmZXIsIDEwMjQpOworICByZXR1cm4gKHN0cmNtcChidWZmZXIsIG5hbWUpICE9IDApOworfQorCitjaGFyIHN0MlsxMDI0KjEwMjRdOworaW50IGZuKHZvaWQgKmQpIHsKKyAgcGlkX3QgY2hpbGQ7CisgIGludCByYywgc3RhdHVzOworICB1c2xlZXAoMTAwMDAwKTsgIC8qIHN5bmNocm9uaXplIGJ5IHNsZWVwICovCisgIGlmIChnZXR1aWQoKSAhPSAwKSByZXR1cm4gMTsKKyAgY2hpbGQgPSBjbG9uZSh1dHNmbiwgc3QyICsgMTAyNCoxMDI0LCBDTE9ORV9ORVdVVFN8U0lHQ0hMRCwgMCk7CisgIGlmIChjaGlsZCA8IDApIHJldHVybiAxOworICByYyA9IHdhaXRwaWQoY2hpbGQsICZzdGF0dXMsIDApOworICBpZiAocmMgPD0gMCkgcmV0dXJuIDE7CisgIGlmICghV0lGRVhJVEVEKHN0YXR1cykpIHJldHVybiAxOworICByZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsKK30KK2NoYXIgc3RbMTAyNCoxMDI0XTsKK2ludCBtYWluKCkgeworICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgaW50IHJjLCBzdGF0dXMsIGZkOworICBwaWRfdCBjaGlsZCA9IGNsb25lKGZuLCBzdCArIDEwMjQqMTAyNCwgQ0xPTkVfTkVXVVNFUnxTSUdDSExELCAwKTsKKyAgaWYgKGNoaWxkIDwgMCkgcmV0dXJuIDE7CisKKyAgc3ByaW50ZihidWZmZXIsICIvcHJvYy8lZC91aWRfbWFwIiwgY2hpbGQpOworICBmZCA9IG9wZW4oYnVmZmVyLCBPX0NSRUFUfE9fV1JPTkxZfE9fVFJVTkMsIDA3NTUpOworICBzcHJpbnRmKGJ1ZmZlciwgIjAgJWQgMVxuIiwgZ2V0dWlkKCkpOworICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgIGNsb3NlKGZkKTsKKworICByYyA9IHdhaXRwaWQoY2hpbGQsICZzdGF0dXMsIDApOworICBpZiAocmMgPD0gMCkgcmV0dXJuIDE7CisgIGlmICghV0lGRVhJVEVEKHN0YXR1cykpIHJldHVybiAxOworICByZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsKK30KK11dKQorICBdLFtheF9jdl91dHNfbmFtZXNwYWNlPXllc10sW2F4X2N2X3V0c19uYW1lc3BhY2U9bm9dLFtheF9jdl91dHNfbmFtZXNwYWNlPW5vXSkKKyBBQ19MQU5HX1BPUChbQ10pCisgXSkKKyBpZiB0ZXN0ICIkYXhfY3ZfdXRzX25hbWVzcGFjZSIgPSB5ZXM7IHRoZW4KKyAgIEFDX0RFRklORShbSEFWRV9VVFNfTkFNRVNQQUNFXSxbMV0sW1doZXRoZXIgVVRTIG5hbWVzcGFjZXMgYXJlIGF2YWlsYWJsZV0pCisgZmkKK10pICMgQVhfQ0hFQ0tfVVRTX05BTUVTUEFDRQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQvYXhfY29kZV9jb3ZlcmFnZS5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2F4X2NvZGVfY292ZXJhZ2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyMGMzYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2F4X2NvZGVfY292ZXJhZ2UubTQKQEAgLTAsMCArMSwyMTkgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9jb2RlX2NvdmVyYWdlLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ09ERV9DT1ZFUkFHRSgpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgRGVmaW5lcyBDT0RFX0NPVkVSQUdFX0NGTEFHUyBhbmQgQ09ERV9DT1ZFUkFHRV9MREZMQUdTIHdoaWNoIHNob3VsZCBiZQorIyAgIGluY2x1ZGVkIGluIHRoZSBDRkxBR1MgYW5kIExJQlMvTERGTEFHUyB2YXJpYWJsZXMgb2YgZXZlcnkgYnVpbGQgdGFyZ2V0CisjICAgKHByb2dyYW0gb3IgbGlicmFyeSkgd2hpY2ggc2hvdWxkIGJlIGJ1aWx0IHdpdGggY29kZSBjb3ZlcmFnZSBzdXBwb3J0LgorIyAgIEFsc28gZGVmaW5lcyBDT0RFX0NPVkVSQUdFX1JVTEVTIHdoaWNoIHNob3VsZCBiZSBzdWJzdGl0dXRlZCBpbiB5b3VyCisjICAgTWFrZWZpbGU7IGFuZCAkZW5hYmxlX2NvZGVfY292ZXJhZ2Ugd2hpY2ggY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudAorIyAgIGNvbmZpZ3VyZSBvdXRwdXQuIENPREVfQ09WRVJBR0VfRU5BQkxFRCBpcyBkZWZpbmVkIGFuZCBzdWJzdGl0dXRlZCwgYW5kCisjICAgY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIG9mIHRoZSAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlIG9wdGlvbiwgd2hpY2gKKyMgICBkZWZhdWx0cyB0byBiZWluZyBkaXNhYmxlZC4KKyMKKyMgICBUZXN0IGFsc28gZm9yIGdjb3YgcHJvZ3JhbSBhbmQgY3JlYXRlIEdDT1YgdmFyaWFibGUgdGhhdCBjb3VsZCBiZQorIyAgIHN1YnN0aXR1dGVkLgorIworIyAgIE5vdGUgdGhhdCBhbGwgb3B0aW1pc2F0aW9uIGZsYWdzIGluIENGTEFHUyBtdXN0IGJlIGRpc2FibGVkIHdoZW4gY29kZQorIyAgIGNvdmVyYWdlIGlzIGVuYWJsZWQuCisjCisjICAgVXNhZ2UgZXhhbXBsZToKKyMKKyMgICBjb25maWd1cmUuYWM6CisjCisjICAgICBBWF9DT0RFX0NPVkVSQUdFCisjCisjICAgTWFrZWZpbGUuYW06CisjCisjICAgICBAQ09ERV9DT1ZFUkFHRV9SVUxFU0AKKyMgICAgIG15X3Byb2dyYW1fTElCUyA9IC4uLiAkKENPREVfQ09WRVJBR0VfTERGTEFHUykgLi4uCisjICAgICBteV9wcm9ncmFtX0NGTEFHUyA9IC4uLiAkKENPREVfQ09WRVJBR0VfQ0ZMQUdTKSAuLi4KKyMKKyMgICBUaGlzIHJlc3VsdHMgaW4gYSAiY2hlY2stY29kZS1jb3ZlcmFnZSIgcnVsZSBiZWluZyBhZGRlZCB0byBhbnkKKyMgICBNYWtlZmlsZS5hbSB3aGljaCBpbmNsdWRlcyAiQENPREVfQ09WRVJBR0VfUlVMRVNAIiAoYXNzdW1pbmcgdGhlIG1vZHVsZQorIyAgIGhhcyBiZWVuIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlKS4gUnVubmluZyBgbWFrZQorIyAgIGNoZWNrLWNvZGUtY292ZXJhZ2VgIGluIHRoYXQgZGlyZWN0b3J5IHdpbGwgcnVuIHRoZSBtb2R1bGUncyB0ZXN0IHN1aXRlCisjICAgKGBtYWtlIGNoZWNrYCkgYW5kIGJ1aWxkIGEgY29kZSBjb3ZlcmFnZSByZXBvcnQgZGV0YWlsaW5nIHRoZSBjb2RlIHdoaWNoCisjICAgd2FzIHRvdWNoZWQsIHRoZW4gcHJpbnQgdGhlIFVSSSBmb3IgdGhlIHJlcG9ydC4KKyMKKyMgICBUaGlzIGNvZGUgd2FzIGRlcml2ZWQgZnJvbSBNYWtlZmlsZS5kZWNsIGluIEdMaWIsIG9yaWdpbmFsbHkgbGljZW5jZWQKKyMgICB1bmRlciBMR1BMdjIuMSsuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMTIgUGhpbGlwIFdpdGhuYWxsCisjICAgQ29weXJpZ2h0IChjKSAyMDEyIFhhbiBMb3BlegorIyAgIENvcHlyaWdodCAoYykgMjAxMiBDaHJpc3RpYW4gUGVyc2NoCisjICAgQ29weXJpZ2h0IChjKSAyMDEyIFBhb2xvIEJvcmVsbGkKKyMgICBDb3B5cmlnaHQgKGMpIDIwMTIgRGFuIFdpbnNoaXAKKyMgICBDb3B5cmlnaHQgKGMpIDIwMTUgQmFzdGllbiBST1VDQVJJRVMKKyMKKyMgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisjICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIKKyMgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworI3NlcmlhbCA1CisKK0FDX0RFRlVOKFtBWF9DT0RFX0NPVkVSQUdFXSxbCisJZG5sIENoZWNrIGZvciAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlCisJQUNfUkVRVUlSRShbQUNfUFJPR19TRURdKQorCisJIyBhbGxvdyB0byBvdmVycmlkZSBnY292IGxvY2F0aW9uCisJQUNfQVJHX1dJVEgoW2djb3ZdLAorCSAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ2Nvdls9R0NPVl1dLCBbdXNlIGdpdmVuIEdDT1YgZm9yIGNvdmVyYWdlIChHQ09WPWdjb3YpLl0pXSwKKwkgIFtfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSD0kd2l0aF9nY292XSwKKwkgIFtfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSD1nY292XSkKKworCUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCB3aXRoIGNvZGUgY292ZXJhZ2Ugc3VwcG9ydF0pCisJQUNfQVJHX0VOQUJMRShbY29kZS1jb3ZlcmFnZV0sCisJICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY29kZS1jb3ZlcmFnZV0sCisJICBbV2hldGhlciB0byBlbmFibGUgY29kZSBjb3ZlcmFnZSBzdXBwb3J0XSksLAorCSAgZW5hYmxlX2NvZGVfY292ZXJhZ2U9bm8pCisKKwlBTV9DT05ESVRJT05BTChbQ09ERV9DT1ZFUkFHRV9FTkFCTEVEXSwgW3Rlc3QgeCRlbmFibGVfY29kZV9jb3ZlcmFnZSA9IHh5ZXNdKQorCUFDX1NVQlNUKFtDT0RFX0NPVkVSQUdFX0VOQUJMRURdLCBbJGVuYWJsZV9jb2RlX2NvdmVyYWdlXSkKKwlBQ19NU0dfUkVTVUxUKCRlbmFibGVfY29kZV9jb3ZlcmFnZSkKKworCUFTX0lGKFsgdGVzdCAiJGVuYWJsZV9jb2RlX2NvdmVyYWdlIiA9ICJ5ZXMiIF0sIFsKKwkJIyBjaGVjayBmb3IgZ2NvdgorCQlBQ19DSEVDS19UT09MKFtHQ09WXSwKKwkJICBbJF9BWF9DT0RFX0NPVkVSQUdFX0dDT1ZfUFJPR19XSVRIXSwKKwkJICBbOl0pCisJCUFTX0lGKFt0ZXN0ICJYJEdDT1YiID0gIlg6Il0sCisJCSAgW0FDX01TR19FUlJPUihbZ2NvdiBpcyBuZWVkZWQgdG8gZG8gY292ZXJhZ2VdKV0pCisJCUFDX1NVQlNUKFtHQ09WXSkKKworCQlkbmwgQ2hlY2sgaWYgZ2NjIGlzIGJlaW5nIHVzZWQKKwkJQVNfSUYoWyB0ZXN0ICIkR0NDIiA9ICJubyIgXSwgWworCQkJQUNfTVNHX0VSUk9SKFtub3QgY29tcGlsaW5nIHdpdGggZ2NjLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgZ2NvdiBjb2RlIGNvdmVyYWdlXSkKKwkJXSkKKworCQkjIExpc3Qgb2Ygc3VwcG9ydGVkIGxjb3YgdmVyc2lvbnMuCisJCWxjb3ZfdmVyc2lvbl9saXN0PSIxLjYgMS43IDEuOCAxLjkgMS4xMCAxLjExIgorCisJCUFDX0NIRUNLX1BST0coW0xDT1ZdLCBbbGNvdl0sIFtsY292XSkKKwkJQUNfQ0hFQ0tfUFJPRyhbR0VOSFRNTF0sIFtnZW5odG1sXSwgW2dlbmh0bWxdKQorCisJCUFTX0lGKFsgdGVzdCAiJExDT1YiIF0sIFsKKwkJCUFDX0NBQ0hFX0NIRUNLKFtmb3IgbGNvdiB2ZXJzaW9uXSwgYXhfY3ZfbGNvdl92ZXJzaW9uLCBbCisJCQkJYXhfY3ZfbGNvdl92ZXJzaW9uPWludmFsaWQKKwkJCQlsY292X3ZlcnNpb249YCRMQ09WIC12IDI+L2Rldi9udWxsIHwgJFNFRCAtZSAncy9eLiogLy8nYAorCQkJCWZvciBsY292X2NoZWNrX3ZlcnNpb24gaW4gJGxjb3ZfdmVyc2lvbl9saXN0OyBkbworCQkJCQlpZiB0ZXN0ICIkbGNvdl92ZXJzaW9uIiA9ICIkbGNvdl9jaGVja192ZXJzaW9uIjsgdGhlbgorCQkJCQkJYXhfY3ZfbGNvdl92ZXJzaW9uPSIkbGNvdl9jaGVja192ZXJzaW9uIChvaykiCisJCQkJCWZpCisJCQkJZG9uZQorCQkJXSkKKwkJXSwgWworCQkJbGNvdl9tc2c9IlRvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIHJlcG9ydGluZyB5b3UgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxjb3YgdmVyc2lvbnMgaW5zdGFsbGVkOiAkbGNvdl92ZXJzaW9uX2xpc3QiCisJCQlBQ19NU0dfRVJST1IoWyRsY292X21zZ10pCisJCV0pCisKKwkJY2FzZSAkYXhfY3ZfbGNvdl92ZXJzaW9uIGluCisJCQkiInxpbnZhbGlkWyldCisJCQkJbGNvdl9tc2c9IllvdSBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgb2YgbGNvdjogJGxjb3ZfdmVyc2lvbl9saXN0IChmb3VuZDogJGxjb3ZfdmVyc2lvbikuIgorCQkJCUFDX01TR19FUlJPUihbJGxjb3ZfbXNnXSkKKwkJCQlMQ09WPSJleGl0IDA7IgorCQkJOzsKKwkJZXNhYworCisJCUFTX0lGKFsgdGVzdCAteiAiJEdFTkhUTUwiIF0sIFsKKwkJCUFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgZ2VuaHRtbCBmcm9tIHRoZSBsY292IHBhY2thZ2VdKQorCQldKQorCisJCWRubCBCdWlsZCB0aGUgY29kZSBjb3ZlcmFnZSBmbGFncworCQlDT0RFX0NPVkVSQUdFX0NGTEFHUz0iLU8wIC1nIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKwkJQ09ERV9DT1ZFUkFHRV9MREZMQUdTPSItbGdjb3YiCisKKwkJQUNfU1VCU1QoW0NPREVfQ09WRVJBR0VfQ0ZMQUdTXSkKKwkJQUNfU1VCU1QoW0NPREVfQ09WRVJBR0VfTERGTEFHU10pCisKK0NPREVfQ09WRVJBR0VfUlVMRVM9JworIyBDb2RlIGNvdmVyYWdlCisjCisjIE9wdGlvbmFsOgorIyAgLSBDT0RFX0NPVkVSQUdFX0RJUkVDVE9SWTogVG9wLWxldmVsIGRpcmVjdG9yeSBmb3IgY29kZSBjb3ZlcmFnZSByZXBvcnRpbmcuCisjICAgIChEZWZhdWx0OiAkKHRvcF9idWlsZGRpcikpCisjICAtIENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEU6IEZpbGVuYW1lIGFuZCBwYXRoIGZvciB0aGUgLmluZm8gZmlsZSBnZW5lcmF0ZWQKKyMgICAgYnkgbGNvdiBmb3IgY29kZSBjb3ZlcmFnZS4gKERlZmF1bHQ6CisjICAgICQoUEFDS0FHRV9OQU1FKS0kKFBBQ0tBR0VfVkVSU0lPTiktY292ZXJhZ2UuaW5mbykKKyMgIC0gQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRElSRUNUT1JZOiBEaXJlY3RvcnkgZm9yIGdlbmVyYXRlZCBjb2RlIGNvdmVyYWdlCisjICAgIHJlcG9ydHMgdG8gYmUgY3JlYXRlZC4gKERlZmF1bHQ6CisjICAgICQoUEFDS0FHRV9OQU1FKS0kKFBBQ0tBR0VfVkVSU0lPTiktY292ZXJhZ2UpCisjICAtIENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0dDT1ZQQVRIOiAtLWdjb3YtdG9vbCBwYXRodG9nY292CisjICAtIENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0RFRkFVTFQ6IEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgbGNvdiBpbnN0YW5jZS4KKyMgICAgKERlZmF1bHQ6ICRDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19HQ09WUEFUSCkKKyMgIC0gQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlM6IEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgbGNvdiBpbnN0YW5jZS4KKyMgICAgKERlZmF1bHQ6ICRDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19ERUZBVUxUKQorIyAgLSBDT0RFX0NPVkVSQUdFX0dFTkhUTUxfT1BUSU9OUzogRXh0cmEgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBnZW5odG1sCisjICAgIGluc3RhbmNlLiAoRGVmYXVsdDogZW1wdHkpCisjICAtIENPREVfQ09WRVJBR0VfSUdOT1JFX1BBVFRFUk46IEV4dHJhIGdsb2IgcGF0dGVybiBvZiBmaWxlcyB0byBpZ25vcmUKKyMKKyMgVGhlIGdlbmVyYXRlZCByZXBvcnQgd2lsbCBiZSB0aXRsZWQgdXNpbmcgdGhlICQoUEFDS0FHRV9OQU1FKSBhbmQKKyMgJChQQUNLQUdFX1ZFUlNJT04pLiBJbiBvcmRlciB0byBhZGQgdGhlIGN1cnJlbnQgZ2l0IGhhc2ggdG8gdGhlIHRpdGxlLAorIyB1c2UgdGhlIGdpdC12ZXJzaW9uLWdlbiBzY3JpcHQsIGF2YWlsYWJsZSBvbmxpbmUuCisKKyMgT3B0aW9uYWwgdmFyaWFibGVzCitDT0RFX0NPVkVSQUdFX0RJUkVDVE9SWSA/PSAkKHRvcF9idWlsZGRpcikKK0NPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUgPz0gJChQQUNLQUdFX05BTUUpLSQoUEFDS0FHRV9WRVJTSU9OKS1jb3ZlcmFnZS5pbmZvCitDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlkgPz0gJChQQUNLQUdFX05BTUUpLSQoUEFDS0FHRV9WRVJTSU9OKS1jb3ZlcmFnZQorQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfR0NPVlBBVEggPz0gLS1nY292LXRvb2wgIiQoR0NPVikiCitDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19ERUZBVUxUID89ICQoQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfR0NPVlBBVEgpCitDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OUyA/PSAkKENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0RFRkFVTFQpCitDT0RFX0NPVkVSQUdFX0dFTkhUTUxfT1BUSU9OUyA/PQorQ09ERV9DT1ZFUkFHRV9JR05PUkVfUEFUVEVSTiA/PQorCitjb2RlX2NvdmVyYWdlX3F1aWV0ID0gJChjb2RlX2NvdmVyYWdlX3F1aWV0XyQoVikpCitjb2RlX2NvdmVyYWdlX3F1aWV0XyA9Citjb2RlX2NvdmVyYWdlX3F1aWV0XzAgPSAtLXF1aWV0CisKKyMgVXNlIHJlY3Vyc2l2ZSBtYWtlcyBpbiBvcmRlciB0byBpZ25vcmUgZXJyb3JzIGR1cmluZyBjaGVjaworY2hlY2stY29kZS1jb3ZlcmFnZToKKwktJChNQUtFKSAkKEFNX01BS0VGTEFHUykgLWsgY2hlY2sKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjb2RlLWNvdmVyYWdlLWNhcHR1cmUKKworIyBDYXB0dXJlIGNvZGUgY292ZXJhZ2UgZGF0YQorY29kZS1jb3ZlcmFnZS1jYXB0dXJlOiBjb2RlLWNvdmVyYWdlLWNhcHR1cmUtaG9vaworCSQoTENPVikgJChjb2RlX2NvdmVyYWdlX3F1aWV0KSAtLWRpcmVjdG9yeSAkKENPREVfQ09WRVJBR0VfRElSRUNUT1JZKSAtLWNhcHR1cmUgLS1vdXRwdXQtZmlsZSAiJChDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFKS50bXAiIC0tdGVzdC1uYW1lICIkKFBBQ0tBR0VfTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pIiAtLW5vLWNoZWNrc3VtIC0tY29tcGF0LWxpYnRvb2wgJChDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OUykKKwkkKExDT1YpICQoY29kZV9jb3ZlcmFnZV9xdWlldCkgLS1kaXJlY3RvcnkgJChDT0RFX0NPVkVSQUdFX0RJUkVDVE9SWSkgLS1yZW1vdmUgIiQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkudG1wIiAiL3RtcC8qIiAkKENPREVfQ09WRVJBR0VfSUdOT1JFX1BBVFRFUk4pIC0tb3V0cHV0LWZpbGUgIiQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkiCisJLUBybSAtZiAkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcAorCUxBTkc9QyAkKEdFTkhUTUwpICQoY29kZV9jb3ZlcmFnZV9xdWlldCkgLS1wcmVmaXggJChDT0RFX0NPVkVSQUdFX0RJUkVDVE9SWSkgLS1vdXRwdXQtZGlyZWN0b3J5ICIkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSkiIC0tdGl0bGUgIiQoUEFDS0FHRV9OQU1FKS0kKFBBQ0tBR0VfVkVSU0lPTikgQ29kZSBDb3ZlcmFnZSIgLS1sZWdlbmQgLS1zaG93LWRldGFpbHMgIiQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkiICQoQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlMpCisJQGVjaG8gImZpbGU6Ly8kKGFic19idWlsZGRpcikvJChDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlkpL2luZGV4Lmh0bWwiCisKKyMgSG9vayBydWxlIGV4ZWN1dGVkIGJlZm9yZSBjb2RlLWNvdmVyYWdlLWNhcHR1cmUsIG92ZXJyaWRhYmxlIGJ5IHRoZSB1c2VyCitjb2RlLWNvdmVyYWdlLWNhcHR1cmUtaG9vazoKKworY2xlYW46IGNvZGUtY292ZXJhZ2UtY2xlYW4KK2NvZGUtY292ZXJhZ2UtY2xlYW46CisJLSQoTENPVikgLS1kaXJlY3RvcnkgJCh0b3BfYnVpbGRkaXIpIC16CisJLXJtIC1yZiAkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpICQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkudG1wICQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRElSRUNUT1JZKQorCS1maW5kIC4gLW5hbWUgIiouZ2NkYSIgLW8gLW5hbWUgIiouZ2NvdiIgLWRlbGV0ZQorCitHSVRJR05PUkVGSUxFUyA/PQorR0lUSUdOT1JFRklMRVMgKz0gJChDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFKSAkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSkKKworRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyA/PQorRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyArPSAtLWRpc2FibGUtY29kZS1jb3ZlcmFnZQorCisuUEhPTlk6IGNoZWNrLWNvZGUtY292ZXJhZ2UgY29kZS1jb3ZlcmFnZS1jYXB0dXJlIGNvZGUtY292ZXJhZ2UtY2FwdHVyZS1ob29rIGNvZGUtY292ZXJhZ2UtY2xlYW4KKycKKwlBQ19TVUJTVChbQ09ERV9DT1ZFUkFHRV9SVUxFU10pCisJXSkKKworCW00X2lmZGVmKFtfQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRShbQ09ERV9DT1ZFUkFHRV9SVUxFU10pXSkKK10pCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5ZGUzMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNApAQCAtMCwwICsxLDE2MyBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzExKFtleHR8bm9leHRdLFttYW5kYXRvcnl8b3B0aW9uYWxdKQorIworIyBERVNDUklQVElPTgorIworIyAgIENoZWNrIGZvciBiYXNlbGluZSBsYW5ndWFnZSBjb3ZlcmFnZSBpbiB0aGUgY29tcGlsZXIgZm9yIHRoZSBDKysxMQorIyAgIHN0YW5kYXJkOyBpZiBuZWNlc3NhcnksIGFkZCBzd2l0Y2hlcyB0byBDWFhGTEFHUyB0byBlbmFibGUgc3VwcG9ydC4KKyMKKyMgICBUaGUgZmlyc3QgYXJndW1lbnQsIGlmIHNwZWNpZmllZCwgaW5kaWNhdGVzIHdoZXRoZXIgeW91IGluc2lzdCBvbiBhbgorIyAgIGV4dGVuZGVkIG1vZGUgKGUuZy4gLXN0ZD1nbnUrKzExKSBvciBhIHN0cmljdCBjb25mb3JtYW5jZSBtb2RlIChlLmcuCisjICAgLXN0ZD1jKysxMSkuICBJZiBuZWl0aGVyIGlzIHNwZWNpZmllZCwgeW91IGdldCB3aGF0ZXZlciB3b3Jrcywgd2l0aAorIyAgIHByZWZlcmVuY2UgZm9yIGFuIGV4dGVuZGVkIG1vZGUuCisjCisjICAgVGhlIHNlY29uZCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkICdtYW5kYXRvcnknIG9yIGlmIGxlZnQgdW5zcGVjaWZpZWQsCisjICAgaW5kaWNhdGVzIHRoYXQgYmFzZWxpbmUgQysrMTEgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgdGhhdCB0aGUgbWFjcm8KKyMgICBzaG91bGQgZXJyb3Igb3V0IGlmIG5vIG1vZGUgd2l0aCB0aGF0IHN1cHBvcnQgaXMgZm91bmQuICBJZiBzcGVjaWZpZWQKKyMgICAnb3B0aW9uYWwnLCB0aGVuIGNvbmZpZ3VyYXRpb24gcHJvY2VlZHMgcmVnYXJkbGVzcywgYWZ0ZXIgZGVmaW5pbmcKKyMgICBIQVZFX0NYWDExIGlmIGFuZCBvbmx5IGlmIGEgc3VwcG9ydGluZyBtb2RlIGlzIGZvdW5kLgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA4IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIyAgIENvcHlyaWdodCAoYykgMjAxMiBaYWNrIFdlaW5iZXJnIDx6YWNrd0BwYW5peC5jb20+CisjICAgQ29weXJpZ2h0IChjKSAyMDEzIFJveSBTdG9nbmVyIDxyb3lzdGduckBpY2VzLnV0ZXhhcy5lZHU+CisjICAgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1IEdvb2dsZSBJbmMuOyBjb250cmlidXRlZCBieSBBbGV4ZXkgU29rb2xvdiA8c29rb2xvdkBnb29nbGUuY29tPgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCA5CisKK200X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENYWF8xMV90ZXN0Ym9keV0sIFtbCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBjaGVjaworICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKFQpLCAibm90IGJpZyBlbm91Z2giKTsKKyAgICB9OworCisgICAgc3RydWN0IEJhc2UgeworICAgIHZpcnR1YWwgdm9pZCBmKCkge30KKyAgICB9OworICAgIHN0cnVjdCBDaGlsZCA6IHB1YmxpYyBCYXNlIHsKKyAgICB2aXJ0dWFsIHZvaWQgZigpIG92ZXJyaWRlIHt9CisgICAgfTsKKworICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8Ym9vbD4+IHJpZ2h0X2FuZ2xlX2JyYWNrZXRzOworCisgICAgaW50IGE7CisgICAgZGVjbHR5cGUoYSkgYjsKKworICAgIHR5cGVkZWYgY2hlY2s8aW50PiBjaGVja190eXBlOworICAgIGNoZWNrX3R5cGUgYzsKKyAgICBjaGVja190eXBlJiYgY3IgPSBzdGF0aWNfY2FzdDxjaGVja190eXBlJiY+KGMpOworCisgICAgYXV0byBkID0gYTsKKyAgICBhdXRvIGwgPSBbXSgpe307CisKKyAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzNzI4MTg0L3RlbXBsYXRlLWFsaWFzZXMtYW5kLXNmaW5hZQorICAgIC8vIENsYW5nIDMuMSBmYWlscyB3aXRoIGhlYWRlcnMgb2YgbGlic3RkKysgNC44LjMgd2hlbiB1c2luZyBzdGQ6OmZ1bmN0aW9uIGJlY2F1c2Ugb2YgdGhpcworICAgIG5hbWVzcGFjZSB0ZXN0X3RlbXBsYXRlX2FsaWFzX3NmaW5hZSB7CisgICAgICAgIHN0cnVjdCBmb28ge307CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgdXNpbmcgbWVtYmVyID0gdHlwZW5hbWUgVDo6bWVtYmVyX3R5cGU7CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgdm9pZCBmdW5jKC4uLikge30KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICB2b2lkIGZ1bmMobWVtYmVyPFQ+Kikge30KKworICAgICAgICB2b2lkIHRlc3QoKTsKKworICAgICAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICBmdW5jPGZvbz4oMCk7CisgICAgICAgIH0KKyAgICB9CitdXSkKKworQUNfREVGVU4oW0FYX0NYWF9DT01QSUxFX1NURENYWF8xMV0sIFtkbmwKKyAgbTRfaWYoWyQxXSwgW10sIFtdLAorICAgICAgICBbJDFdLCBbZXh0XSwgW10sCisgICAgICAgIFskMV0sIFtub2V4dF0sIFtdLAorICAgICAgICBbbTRfZmF0YWwoW2ludmFsaWQgYXJndW1lbnQgYCQxJyB0byBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTFdKV0pZG5sCisgIG00X2lmKFskMl0sIFtdLCBbYXhfY3h4X2NvbXBpbGVfY3h4MTFfcmVxdWlyZWQ9dHJ1ZV0sCisgICAgICAgIFskMl0sIFttYW5kYXRvcnldLCBbYXhfY3h4X2NvbXBpbGVfY3h4MTFfcmVxdWlyZWQ9dHJ1ZV0sCisgICAgICAgIFskMl0sIFtvcHRpb25hbF0sIFtheF9jeHhfY29tcGlsZV9jeHgxMV9yZXF1aXJlZD1mYWxzZV0sCisgICAgICAgIFttNF9mYXRhbChbaW52YWxpZCBzZWNvbmQgYXJndW1lbnQgYCQyJyB0byBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTFdKV0pCisgIEFDX0xBTkdfUFVTSChbQysrXSlkbmwKKyAgYWNfc3VjY2Vzcz1ubworICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrMTEgZmVhdHVyZXMgYnkgZGVmYXVsdCwKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTEsCisgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfMTFfdGVzdGJvZHldKV0sCisgICAgW2F4X2N2X2N4eF9jb21waWxlX2N4eDExPXllc10sCisgICAgW2F4X2N2X2N4eF9jb21waWxlX2N4eDExPW5vXSldKQorICBpZiB0ZXN0IHgkYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTEgPSB4eWVzOyB0aGVuCisgICAgYWNfc3VjY2Vzcz15ZXMKKyAgZmkKKworICBtNF9pZihbJDFdLCBbbm9leHRdLCBbXSwgW2RubAorICBpZiB0ZXN0IHgkYWNfc3VjY2VzcyA9IHhubzsgdGhlbgorICAgIGZvciBzd2l0Y2ggaW4gLXN0ZD1nbnUrKzExIC1zdGQ9Z251KysweDsgZG8KKyAgICAgIGNhY2hldmFyPUFTX1RSX1NIKFtheF9jdl9jeHhfY29tcGlsZV9jeHgxMV8kc3dpdGNoXSkKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJENYWCBzdXBwb3J0cyBDKysxMSBmZWF0dXJlcyB3aXRoICRzd2l0Y2gsCisgICAgICAgICAgICAgICAgICAgICAkY2FjaGV2YXIsCisgICAgICAgIFthY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCisgICAgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTICRzd2l0Y2giCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfMTFfdGVzdGJvZHldKV0sCisgICAgICAgICAgW2V2YWwgJGNhY2hldmFyPXllc10sCisgICAgICAgICAgW2V2YWwgJGNhY2hldmFyPW5vXSkKKyAgICAgICAgIENYWEZMQUdTPSIkYWNfc2F2ZV9DWFhGTEFHUyJdKQorICAgICAgaWYgZXZhbCB0ZXN0IHhcJCRjYWNoZXZhciA9IHh5ZXM7IHRoZW4KKyAgICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkc3dpdGNoIgorICAgICAgICBhY19zdWNjZXNzPXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpXSkKKworICBtNF9pZihbJDFdLCBbZXh0XSwgW10sIFtkbmwKKyAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICBmb3Igc3dpdGNoIGluIC1zdGQ9YysrMTEgLXN0ZD1jKysweDsgZG8KKyAgICAgIGNhY2hldmFyPUFTX1RSX1NIKFtheF9jdl9jeHhfY29tcGlsZV9jeHgxMV8kc3dpdGNoXSkKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJENYWCBzdXBwb3J0cyBDKysxMSBmZWF0dXJlcyB3aXRoICRzd2l0Y2gsCisgICAgICAgICAgICAgICAgICAgICAkY2FjaGV2YXIsCisgICAgICAgIFthY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCisgICAgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTICRzd2l0Y2giCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfMTFfdGVzdGJvZHldKV0sCisgICAgICAgICAgW2V2YWwgJGNhY2hldmFyPXllc10sCisgICAgICAgICAgW2V2YWwgJGNhY2hldmFyPW5vXSkKKyAgICAgICAgIENYWEZMQUdTPSIkYWNfc2F2ZV9DWFhGTEFHUyJdKQorICAgICAgaWYgZXZhbCB0ZXN0IHhcJCRjYWNoZXZhciA9IHh5ZXM7IHRoZW4KKyAgICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkc3dpdGNoIgorICAgICAgICBhY19zdWNjZXNzPXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpXSkKKyAgQUNfTEFOR19QT1AoW0MrK10pCisgIGlmIHRlc3QgeCRheF9jeHhfY29tcGlsZV9jeHgxMV9yZXF1aXJlZCA9IHh0cnVlOyB0aGVuCisgICAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbKioqIEEgY29tcGlsZXIgd2l0aCBzdXBwb3J0IGZvciBDKysxMSBsYW5ndWFnZSBmZWF0dXJlcyBpcyByZXF1aXJlZC5dKQorICAgIGZpCisgIGVsc2UKKyAgICBpZiB0ZXN0IHgkYWNfc3VjY2VzcyA9IHhubzsgdGhlbgorICAgICAgSEFWRV9DWFgxMT0wCisgICAgICBBQ19NU0dfTk9USUNFKFtObyBjb21waWxlciB3aXRoIEMrKzExIHN1cHBvcnQgd2FzIGZvdW5kXSkKKyAgICBlbHNlCisgICAgICBIQVZFX0NYWDExPTEKKyAgICAgIEFDX0RFRklORShIQVZFX0NYWDExLDEsCisgICAgICAgICAgICAgICAgW2RlZmluZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYmFzaWMgQysrMTEgc3ludGF4XSkKKyAgICBmaQorCisgICAgQUNfU1VCU1QoSEFWRV9DWFgxMSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9heF9wdGhyZWFkLm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvYXhfcHRocmVhZC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgzYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvYXhfcHRocmVhZC5tNApAQCAtMCwwICsxLDMzMiBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X3B0aHJlYWQuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9QVEhSRUFEKFtBQ1RJT04tSUYtRk9VTkRbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgQyBwcm9ncmFtcyB1c2luZyBQT1NJWCB0aHJlYWRzLiBJdAorIyAgIHNldHMgdGhlIFBUSFJFQURfTElCUyBvdXRwdXQgdmFyaWFibGUgdG8gdGhlIHRocmVhZHMgbGlicmFyeSBhbmQgbGlua2VyCisjICAgZmxhZ3MsIGFuZCB0aGUgUFRIUkVBRF9DRkxBR1Mgb3V0cHV0IHZhcmlhYmxlIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIKKyMgICBmbGFncyB0aGF0IGFyZSBuZWVkZWQuIChUaGUgdXNlciBjYW4gYWxzbyBmb3JjZSBjZXJ0YWluIGNvbXBpbGVyCisjICAgZmxhZ3MvbGlicyB0byBiZSB0ZXN0ZWQgYnkgc2V0dGluZyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuKQorIworIyAgIEFsc28gc2V0cyBQVEhSRUFEX0NDIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIgdGhhdCBpcyBuZWVkZWQgZm9yCisjICAgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgKGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBDQyBvdGhlcndpc2UpLiAoVGhpcworIyAgIGlzIG5lY2Vzc2FyeSBvbiBBSVggdG8gdXNlIHRoZSBzcGVjaWFsIGNjX3IgY29tcGlsZXIgYWxpYXMuKQorIworIyAgIE5PVEU6IFlvdSBhcmUgYXNzdW1lZCB0byBub3Qgb25seSBjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoIHRoZXNlIGZsYWdzLAorIyAgIGJ1dCBhbHNvIGxpbmsgaXQgd2l0aCB0aGVtIGFzIHdlbGwuIGUuZy4geW91IHNob3VsZCBsaW5rIHdpdGgKKyMgICAkUFRIUkVBRF9DQyAkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyAkTERGTEFHUyAuLi4gJFBUSFJFQURfTElCUyAkTElCUworIworIyAgIElmIHlvdSBhcmUgb25seSBidWlsZGluZyB0aHJlYWRzIHByb2dyYW1zLCB5b3UgbWF5IHdpc2ggdG8gdXNlIHRoZXNlCisjICAgdmFyaWFibGVzIGluIHlvdXIgZGVmYXVsdCBMSUJTLCBDRkxBR1MsIGFuZCBDQzoKKyMKKyMgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisjICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorIyAgICAgQ0M9IiRQVEhSRUFEX0NDIgorIworIyAgIEluIGFkZGl0aW9uLCBpZiB0aGUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdGhyZWFkLWF0dHJpYnV0ZSBjb25zdGFudAorIyAgIGhhcyBhIG5vbnN0YW5kYXJkIG5hbWUsIGRlZmluZXMgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdG8gdGhhdCBuYW1lCisjICAgKGUuZy4gUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRCBvbiBBSVgpLgorIworIyAgIEFsc28gSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVCBpcyBkZWZpbmVkIGlmIHB0aHJlYWQgaXMgZm91bmQgYW5kIHRoZQorIyAgIFBUSFJFQURfUFJJT19JTkhFUklUIHN5bWJvbCBpcyBkZWZpbmVkIHdoZW4gY29tcGlsaW5nIHdpdGgKKyMgICBQVEhSRUFEX0NGTEFHUy4KKyMKKyMgICBBQ1RJT04tSUYtRk9VTkQgaXMgYSBsaXN0IG9mIHNoZWxsIGNvbW1hbmRzIHRvIHJ1biBpZiBhIHRocmVhZHMgbGlicmFyeQorIyAgIGlzIGZvdW5kLCBhbmQgQUNUSU9OLUlGLU5PVC1GT1VORCBpcyBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIGl0IGlmIGl0CisjICAgaXMgbm90IGZvdW5kLiBJZiBBQ1RJT04tSUYtRk9VTkQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgYWN0aW9uCisjICAgd2lsbCBkZWZpbmUgSEFWRV9QVEhSRUFELgorIworIyAgIFBsZWFzZSBsZXQgdGhlIGF1dGhvcnMga25vdyBpZiB0aGlzIG1hY3JvIGZhaWxzIG9uIGFueSBwbGF0Zm9ybSwgb3IgaWYKKyMgICB5b3UgaGF2ZSBhbnkgb3RoZXIgc3VnZ2VzdGlvbnMgb3IgY29tbWVudHMuIFRoaXMgbWFjcm8gd2FzIGJhc2VkIG9uIHdvcmsKKyMgICBieSBTR0ogb24gYXV0b2NvbmYgc2NyaXB0cyBmb3IgRkZUVyAoaHR0cDovL3d3dy5mZnR3Lm9yZy8pICh3aXRoIGhlbHAKKyMgICBmcm9tIE0uIEZyaWdvKSwgYXMgd2VsbCBhcyBhY19wdGhyZWFkIGFuZCBoYl9wdGhyZWFkIG1hY3JvcyBwb3N0ZWQgYnkKKyMgICBBbGVqYW5kcm8gRm9yZXJvIEN1ZXJ2byB0byB0aGUgYXV0b2NvbmYgbWFjcm8gcmVwb3NpdG9yeS4gV2UgYXJlIGFsc28KKyMgICBncmF0ZWZ1bCBmb3IgdGhlIGhlbHBmdWwgZmVlZGJhY2sgb2YgbnVtZXJvdXMgdXNlcnMuCisjCisjICAgVXBkYXRlZCBmb3IgQXV0b2NvbmYgMi42OCBieSBEYW5pZWwgUmljaGFyZCBHLgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBHLiBKb2huc29uIDxzdGV2ZW5qQGFsdW0ubWl0LmVkdT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTEgRGFuaWVsIFJpY2hhcmQgRy4gPHNrdW5rQGlTS1VOSy5PUkc+CisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisjICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbAorIyAgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgICB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0IG93bmVyCisjICAgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZSBjb25maWd1cmUKKyMgICBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nIHRoZSBNYWNyby4gWW91CisjICAgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2hlbiB1c2luZworIyAgIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoIHBvcnRpb25zIG9mIHRoZSB0ZXh0IG9mIHRoZQorIyAgIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4KKyMgICBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0IGNvbnN0aXR1dGVzIHRoZSBBdXRvY29uZiBNYWNyby4KKyMKKyMgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUgQXV0b2NvbmYKKyMgICBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhCisjICAgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQXV0b2NvbmYgTWFjcm8sIHlvdSBtYXkgZXh0ZW5kIHRoaXMgc3BlY2lhbAorIyAgIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBhcyB3ZWxsLgorCisjc2VyaWFsIDIxCisKK0FVX0FMSUFTKFtBQ1hfUFRIUkVBRF0sIFtBWF9QVEhSRUFEXSkKK0FDX0RFRlVOKFtBWF9QVEhSRUFEXSwgWworQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorQUNfTEFOR19QVVNIKFtDXSkKK2F4X3B0aHJlYWRfb2s9bm8KKworIyBXZSB1c2VkIHRvIGNoZWNrIGZvciBwdGhyZWFkLmggZmlyc3QsIGJ1dCB0aGlzIGZhaWxzIGlmIHB0aHJlYWQuaAorIyByZXF1aXJlcyBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzIChlLmcuIG9uIFRydWU2NCBvciBTZXF1ZW50KS4KKyMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KKworIyBGaXJzdCBvZiBhbGwsIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBzZXQgYW55IG9mIHRoZSBQVEhSRUFEX0xJQlMsCisjIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZworIyB0aGVtOgoraWYgdGVzdCB4IiRQVEhSRUFEX0xJQlMkUFRIUkVBRF9DRkxBR1MiICE9IHg7IHRoZW4KKyAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB0aHJlYWRfam9pbiBpbiBMSUJTPSRQVEhSRUFEX0xJQlMgd2l0aCBDRkxBR1M9JFBUSFJFQURfQ0ZMQUdTXSkKKyAgICAgICAgQUNfVFJZX0xJTktfRlVOQyhbcHRocmVhZF9qb2luXSwgW2F4X3B0aHJlYWRfb2s9eWVzXSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJGF4X3B0aHJlYWRfb2tdKQorICAgICAgICBpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKyAgICAgICAgZmkKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCitmaQorCisjIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CisjIG5hbWVzOyB0aGUgb3JkZXJpbmcgaXMgdmVyeSBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHN5c3RlbXMKKyMgKGUuZy4gREVDKSBoYXZlIGJvdGggLWxwdGhyZWFkIGFuZCAtbHB0aHJlYWRzLCB3aGVyZSBvbmUgb2YgdGhlCisjIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCisKKyMgQ3JlYXRlIGEgbGlzdCBvZiB0aHJlYWQgZmxhZ3MgdG8gdHJ5LiAgSXRlbXMgc3RhcnRpbmcgd2l0aCBhICItIiBhcmUKKyMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorIyB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSB0cnkgd2l0aG91dCBhbnkgZmxhZ3MgYXQgYWxsLCBhbmQgInB0aHJlYWQtY29uZmlnIgorIyB3aGljaCBpcyBhIHByb2dyYW0gcmV0dXJuaW5nIHRoZSBmbGFncyBmb3IgdGhlIFB0aCBlbXVsYXRpb24gbGlicmFyeS4KKworYXhfcHRocmVhZF9mbGFncz0icHRocmVhZHMgbm9uZSAtS3RocmVhZCAta3RocmVhZCBsdGhyZWFkIC1wdGhyZWFkIC1wdGhyZWFkcyAtbXRocmVhZHMgcHRocmVhZCAtLXRocmVhZC1zYWZlIC1tdCBwdGhyZWFkLWNvbmZpZyIKKworIyBUaGUgb3JkZXJpbmcgKmlzKiAoc29tZXRpbWVzKSBpbXBvcnRhbnQuICBTb21lIG5vdGVzIG9uIHRoZQorIyBpbmRpdmlkdWFsIGl0ZW1zIGZvbGxvdzoKKworIyBwdGhyZWFkczogQUlYIChtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIC1scHRocmVhZCkKKyMgbm9uZTogaW4gY2FzZSB0aHJlYWRzIGFyZSBpbiBsaWJjOyBzaG91bGQgYmUgdHJpZWQgYmVmb3JlIC1LdGhyZWFkIGFuZAorIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworIyAtS3RocmVhZDogU2VxdWVudCAodGhyZWFkcyBpbiBsaWJjLCBidXQgLUt0aHJlYWQgbmVlZGVkIGZvciBwdGhyZWFkLmgpCisjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCisjIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorIyAtcHRocmVhZDogTGludXgvZ2NjIChrZXJuZWwgdGhyZWFkcyksIEJTRC9nY2MgKHVzZXJsYW5kIHRocmVhZHMpCisjIC1wdGhyZWFkczogU29sYXJpcy9nY2MKKyMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKKyMgLW10OiBTdW4gV29ya3Nob3AgQyAobWF5IG9ubHkgbGluayBTdW5PUyB0aHJlYWRzIFstbHRocmVhZF0sIGJ1dCBpdAorIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIHRvbzsKKyMgICAgICBhbHNvIGRlZmluZXMgLURfUkVFTlRSQU5UKQorIyAgICAgIC4uLiAtbXQgaXMgYWxzbyB0aGUgcHRocmVhZHMgZmxhZyBmb3IgSFAvYUNDCisjIHB0aHJlYWQ6IExpbnV4LCBldGNldGVyYQorIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCisjIHB0aHJlYWQtY29uZmlnOiB1c2UgcHRocmVhZC1jb25maWcgcHJvZ3JhbSAoZm9yIEdOVSBQdGggbGlicmFyeSkKKworY2FzZSAke2hvc3Rfb3N9IGluCisgICAgICAgIHNvbGFyaXMqKQorCisgICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCisgICAgICAgICMgKG5vbi1mdW5jdGlvbmFsKSB2ZXJzaW9ucyBvZiB0aGUgcHRocmVhZHMgcm91dGluZXMsIHNvIGxpbmstYmFzZWQKKyAgICAgICAgIyB0ZXN0cyB3aWxsIGVycm9uZW91c2x5IHN1Y2NlZWQuICAoV2UgbmVlZCB0byBsaW5rIHdpdGggLXB0aHJlYWRzLy1tdC8KKyAgICAgICAgIyAtbHB0aHJlYWQuKSAgKFRoZSBzdHVicyBhcmUgbWlzc2luZyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyCisgICAgICAgICMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyBtYWNybywgc28gd2UgY291bGQgY2hlY2sgZm9yIHRoYXQsIGJ1dAorICAgICAgICAjIHdobyBrbm93cyB3aGV0aGVyIHRoZXknbGwgc3R1YiB0aGF0IHRvbyBpbiBhIGZ1dHVyZSBsaWJjLikgIFNvLAorICAgICAgICAjIHdlJ2xsIGp1c3QgbG9vayBmb3IgLXB0aHJlYWRzIGFuZCAtbHB0aHJlYWQgZmlyc3Q6CisKKyAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRzIHB0aHJlYWQgLW10IC1wdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworCisgICAgICAgIGRhcndpbiopCisgICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworZXNhYworCisjIENsYW5nIGRvZXNuJ3QgY29uc2lkZXIgdW5yZWNvZ25pemVkIG9wdGlvbnMgYW4gZXJyb3IgdW5sZXNzIHdlIHNwZWNpZnkKKyMgLVdlcnJvci4gV2UgdGhyb3cgaW4gc29tZSBleHRyYSBDbGFuZy1zcGVjaWZpYyBvcHRpb25zIHRvIGVuc3VyZSB0aGF0CisjIHRoaXMgZG9lc24ndCBoYXBwZW4gZm9yIEdDQywgd2hpY2ggYWxzbyBhY2NlcHRzIC1XZXJyb3IuCisKK0FDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgbmVlZHMgLVdlcnJvciB0byByZWplY3QgdW5rbm93biBmbGFnc10pCitzYXZlX0NGTEFHUz0iJENGTEFHUyIKK2F4X3B0aHJlYWRfZXh0cmFfZmxhZ3M9Ii1XZXJyb3IiCitDRkxBR1M9IiRDRkxBR1MgJGF4X3B0aHJlYWRfZXh0cmFfZmxhZ3MgLVd1bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xc2l6ZW9mLWFycmF5LWFyZ3VtZW50IgorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbaW50IGZvbyh2b2lkKTtdLFtmb28oKV0pXSwKKyAgICAgICAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sCisgICAgICAgICAgICAgICAgICBbYXhfcHRocmVhZF9leHRyYV9mbGFncz0KKyAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pXSkKK0NGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCitmb3IgZmxhZyBpbiAkYXhfcHRocmVhZF9mbGFnczsgZG8KKworICAgICAgICBjYXNlICRmbGFnIGluCisgICAgICAgICAgICAgICAgbm9uZSkKKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFnc10pCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIC0qKQorICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWddKQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyIKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgcHRocmVhZC1jb25maWcpCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfUFJPRyhbYXhfcHRocmVhZF9jb25maWddLCBbcHRocmVhZC1jb25maWddLCBbeWVzXSwgW25vXSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfY29uZmlnIiA9IHhubzsgdGhlbiBjb250aW51ZTsgZmkKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9ImBwdGhyZWFkLWNvbmZpZyAtLWxkZmxhZ3NgIGBwdGhyZWFkLWNvbmZpZyAtLWxpYnNgIgorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IC1sJGZsYWddKQorICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWwkZmxhZyIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MgJGF4X3B0aHJlYWRfZXh0cmFfZmxhZ3MiCisKKyAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBmdW5jdGlvbnMuICBXZSBtdXN0IGluY2x1ZGUgcHRocmVhZC5oLAorICAgICAgICAjIHNpbmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCisgICAgICAgICMgbmVlZCBhIHNwZWNpYWwgZmxhZyAtS3RocmVhZCB0byBtYWtlIHRoaXMgaGVhZGVyIGNvbXBpbGUuKQorICAgICAgICAjIFdlIGNoZWNrIGZvciBwdGhyZWFkX2pvaW4gYmVjYXVzZSBpdCBpcyBpbiAtbHB0aHJlYWQgb24gSVJJWAorICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRlIGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKKyAgICAgICAgIyBkdWUgdG8gREVDIGNyYXppbmVzcyB3aXRoIC1scHRocmVhZHMuICBXZSBjaGVjayBmb3IKKyAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCBiZWNhdXNlIGl0IGlzIG9uZSBvZiB0aGUgZmV3IHB0aHJlYWQKKyAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KKyAgICAgICAgIyBXZSB0cnkgcHRocmVhZF9jcmVhdGUgb24gZ2VuZXJhbCBwcmluY2lwbGVzLgorICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8cHRocmVhZC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcm91dGluZSh2b2lkICphKSB7IGEgPSAwOyB9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCAqc3RhcnRfcm91dGluZSh2b2lkICphKSB7IHJldHVybiBhOyB9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgW3B0aHJlYWRfdCB0aDsgcHRocmVhZF9hdHRyX3QgYXR0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0aCwgMCwgc3RhcnRfcm91dGluZSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2pvaW4odGgsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3B1c2gocm91dGluZSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NsZWFudXBfcG9wKDApIC8qIDsgKi9dKV0sCisgICAgICAgICAgICAgICAgW2F4X3B0aHJlYWRfb2s9eWVzXSwKKyAgICAgICAgICAgICAgICBbXSkKKworICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworICAgICAgICBBQ19NU0dfUkVTVUxUKFskYXhfcHRocmVhZF9va10pCisgICAgICAgIGlmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZpCisKKyAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCitkb25lCitmaQorCisjIFZhcmlvdXMgb3RoZXIgY2hlY2tzOgoraWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisKKyAgICAgICAgIyBEZXRlY3QgQUlYIGxvc3NhZ2U6IEpPSU5BQkxFIGF0dHJpYnV0ZSBpcyBjYWxsZWQgVU5ERVRBQ0hFRC4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igam9pbmFibGUgcHRocmVhZCBhdHRyaWJ1dGVdKQorICAgICAgICBhdHRyX25hbWU9dW5rbm93bgorICAgICAgICBmb3IgYXR0ciBpbiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEOyBkbworICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ludCBhdHRyID0gJGF0dHI7IHJldHVybiBhdHRyIC8qIDsgKi9dKV0sCisgICAgICAgICAgICAgICAgW2F0dHJfbmFtZT0kYXR0cjsgYnJlYWtdLAorICAgICAgICAgICAgICAgIFtdKQorICAgICAgICBkb25lCisgICAgICAgIEFDX01TR19SRVNVTFQoWyRhdHRyX25hbWVdKQorICAgICAgICBpZiB0ZXN0ICIkYXR0cl9uYW1lIiAhPSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRTsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtQVEhSRUFEX0NSRUFURV9KT0lOQUJMRV0sIFskYXR0cl9uYW1lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIG5lY2Vzc2FyeSBzeW1ib2wgaWYgdGhpcyBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIGEgbm9uLXN0YW5kYXJkIG5hbWUgb24geW91ciBzeXN0ZW0uXSkKKyAgICAgICAgZmkKKworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzXSkKKyAgICAgICAgZmxhZz1ubworICAgICAgICBjYXNlICR7aG9zdF9vc30gaW4KKyAgICAgICAgICAgIGFpeCogfCBmcmVlYnNkKiB8IGRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZFIjs7CisgICAgICAgICAgICBvc2YqIHwgaHB1eCopIGZsYWc9Ii1EX1JFRU5UUkFOVCI7OworICAgICAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgZmxhZz0iLURfUkVFTlRSQU5UIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICMgVE9ETzogV2hhdCBhYm91dCBDbGFuZyBvbiBTb2xhcmlzPworICAgICAgICAgICAgICAgIGZsYWc9Ii1tdCAtRF9SRUVOVFJBTlQiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBBQ19NU0dfUkVTVUxUKFskZmxhZ10pCisgICAgICAgIGlmIHRlc3QgIngkZmxhZyIgIT0geG5vOyB0aGVuCisgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGZsYWcgJFBUSFJFQURfQ0ZMQUdTIgorICAgICAgICBmaQorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgUFRIUkVBRF9QUklPX0lOSEVSSVRdLAorICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUXSwgWworICAgICAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8cHRocmVhZC5oPl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tpbnQgaSA9IFBUSFJFQURfUFJJT19JTkhFUklUO11dKV0sCisgICAgICAgICAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVD15ZXNdLAorICAgICAgICAgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9bm9dKQorICAgICAgICAgICAgXSkKKyAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQiID0gInh5ZXMiXSwKKyAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9QUklPX0lOSEVSSVRdLCBbMV0sIFtIYXZlIFBUSFJFQURfUFJJT19JTkhFUklULl0pXSkKKworICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworICAgICAgICAjIE1vcmUgQUlYIGxvc3NhZ2U6IGNvbXBpbGUgd2l0aCAqX3IgdmFyaWFudAorICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0geHllczsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgIGFpeCopCisgICAgICAgICAgICAgICAgQVNfQ0FTRShbIngvJENDIl0sCisgICAgICAgICAgICAgICAgICBbeCovYzg5fHgqL2M4OV8xMjh8eCovYzk5fHgqL2M5OV8xMjh8eCovY2N8eCovY2MxMjh8eCoveGxjfHgqL3hsY192Nnx4Ki94bGMxMjh8eCoveGxjMTI4X3Y2XSwKKyAgICAgICAgICAgICAgICAgIFsjaGFuZGxlIGFic29sdXRlIHBhdGggZGlmZmVyZW50bHkgZnJvbSBQQVRIIGJhc2VkIHByb2dyYW0gbG9va3VwCisgICAgICAgICAgICAgICAgICAgQVNfQ0FTRShbIngkQ0MiXSwKKyAgICAgICAgICAgICAgICAgICAgIFt4LypdLAorICAgICAgICAgICAgICAgICAgICAgW0FTX0lGKFtBU19FWEVDVVRBQkxFX1AoWyR7Q0N9X3JdKV0sW1BUSFJFQURfQ0M9IiR7Q0N9X3IiXSldLAorICAgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX1BST0dTKFtQVEhSRUFEX0NDXSxbJHtDQ31fcl0sWyRDQ10pXSldKQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgIGZpCitmaQorCit0ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJENDIgorCitBQ19TVUJTVChbUFRIUkVBRF9MSUJTXSkKK0FDX1NVQlNUKFtQVEhSRUFEX0NGTEFHU10pCitBQ19TVUJTVChbUFRIUkVBRF9DQ10pCisKKyMgRmluYWxseSwgZXhlY3V0ZSBBQ1RJT04tSUYtRk9VTkQvQUNUSU9OLUlGLU5PVC1GT1VORDoKK2lmIHRlc3QgeCIkYXhfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisgICAgICAgIGlmZWxzZShbJDFdLCxbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURdLFsxXSxbRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMuXSldLFskMV0pCisgICAgICAgIDoKK2Vsc2UKKyAgICAgICAgYXhfcHRocmVhZF9vaz1ubworICAgICAgICAkMgorZmkKK0FDX0xBTkdfUE9QCitdKWRubCBBWF9QVEhSRUFECmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9jYXJlcy1jb21waWxlcnMubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9jYXJlcy1jb21waWxlcnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5OGE2OAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2NhcmVzLWNvbXBpbGVycy5tNApAQCAtMCwwICsxLDE1ODcgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgYnkgRGFuaWVsIFN0ZW5iZXJnIGV0IGFsCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCisjIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisjIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyMgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisjIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyMgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisjIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIEZpbGUgdmVyc2lvbiBmb3IgJ2FjbG9jYWwnIHVzZS4gS2VlcCBpdCBhIHNpbmdsZSBudW1iZXIuCisjIHNlcmlhbCA3NQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgdGhlIEMgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBrbm93bi4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSXSwgWworICAjCisgIGNvbXBpbGVyX2lkPSJ1bmtub3duIgorICBjb21waWxlcl9udW09IjAiCisgICMKKyAgZmxhZ3NfZGJnX2FsbD0idW5rbm93biIKKyAgZmxhZ3NfZGJnX3llcz0idW5rbm93biIKKyAgZmxhZ3NfZGJnX29mZj0idW5rbm93biIKKyAgZmxhZ3Nfb3B0X2FsbD0idW5rbm93biIKKyAgZmxhZ3Nfb3B0X3llcz0idW5rbm93biIKKyAgZmxhZ3Nfb3B0X29mZj0idW5rbm93biIKKyAgIworICBmbGFnc19wcmVmZXJfY3BwZmxhZ3M9Im5vIgorICAjCisgIENBUkVTX0NIRUNLX0NPTVBJTEVSX0RFQ19DCisgIENBUkVTX0NIRUNLX0NPTVBJTEVSX0hQVVhfQworICBDQVJFU19DSEVDS19DT01QSUxFUl9JQk1fQworICBDQVJFU19DSEVDS19DT01QSUxFUl9JTlRFTF9DCisgIENBUkVTX0NIRUNLX0NPTVBJTEVSX0NMQU5HCisgIENBUkVTX0NIRUNLX0NPTVBJTEVSX0dOVV9DCisgIENBUkVTX0NIRUNLX0NPTVBJTEVSX0xDQworICBDQVJFU19DSEVDS19DT01QSUxFUl9TR0lfTUlQU1BST19DCisgIENBUkVTX0NIRUNLX0NPTVBJTEVSX1NHSV9NSVBTX0MKKyAgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfU1VOUFJPX0MKKyAgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfVElOWV9DCisgIENBUkVTX0NIRUNLX0NPTVBJTEVSX1dBVENPTV9DCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJ1bmtub3duIjsgdGhlbgorICBjYXQgPDxfRU9GIDE+JjIKKyoqKgorKioqIFdhcm5pbmc6IFRoaXMgY29uZmlndXJlIHNjcmlwdCBkb2VzIG5vdCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorKioqIGNvbXBpbGVyIHlvdSBhcmUgdXNpbmcsIHJlbGF0aXZlIHRvIHRoZSBmbGFncyByZXF1aXJlZCB0byBlbmFibGUgb3IKKyoqKiBkaXNhYmxlIGdlbmVyYXRpb24gb2YgZGVidWcgaW5mbywgb3B0aW1pemF0aW9uIG9wdGlvbnMgb3Igd2FybmluZ3MuCisqKioKKyoqKiBXaGF0ZXZlciBzZXR0aW5ncyBhcmUgcHJlc2VudCBpbiBDRkxBR1Mgd2lsbCBiZSB1c2VkIGZvciB0aGlzIHJ1bi4KKyoqKgorKioqIElmIHlvdSB3aXNoIHRvIGhlbHAgdGhlIGMtYXJlcyBwcm9qZWN0IHRvIGJldHRlciBzdXBwb3J0IHlvdXIgY29tcGlsZXIKKyoqKiB5b3UgY2FuIHJlcG9ydCB0aGlzIGFuZCB0aGUgcmVxdWlyZWQgaW5mbyBvbiB0aGUgYy1hcmVzIGRldmVsb3BtZW50CisqKiogbWFpbGluZyBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vYy1hcmVzLworKioqCitfRU9GCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9DTEFORworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBjbGFuZy4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSX0NMQU5HXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfR05VX0NdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIGNsYW5nXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fY2xhbmdfX10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19jbGFuZ19fIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9pZD0iQ0xBTkciCisgICAgY2xhbmd2ZXI9YCRDQyAtZHVtcHZlcnNpb25gCisgICAgY2xhbmd2aGk9YGVjaG8gJGNsYW5ndmVyIHwgY3V0IC1kIC4gLWYxYAorICAgIGNsYW5ndmxvPWBlY2hvICRjbGFuZ3ZlciB8IGN1dCAtZCAuIC1mMmAKKyAgICBjb21waWxlcl9udW09YChleHByICRjbGFuZ3ZoaSAiKiIgMTAwICsgJGNsYW5ndmxvKSAyPi9kZXYvbnVsbGAKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdnZGIiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdzdGFicyIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ3N0YWJzKyIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ2NvZmYiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWd4Y29mZiIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ2R3YXJmLTIiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWd2bXMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PcyAtTzMgLU80IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PcyIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9ERUNfQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBERUMgQy4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSX0RFQ19DXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIERFQy9Db21wYXEvSFAgQ10pCisgIENVUkxfQ0hFQ0tfREVGKFtfX0RFQ0NdLCBbXSwgW3NpbGVudF0pCisgIENVUkxfQ0hFQ0tfREVGKFtfX0RFQ0NfVkVSXSwgW10sIFtzaWxlbnRdKQorICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0RFQ0MiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0RFQ0NfVkVSIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9pZD0iREVDX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nMiIKKyAgICBmbGFnc19kYmdfb2ZmPSItZzAiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gLU8wIC1PMSAtTzIgLU8zIC1PNCIKKyAgICBmbGFnc19vcHRfeWVzPSItTzEiCisgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfR05VX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgR05VIEMuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19DT01QSUxFUl9HTlVfQ10sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSU5URUxfQ10pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0NIRUNLX0NPTVBJTEVSX0NMQU5HXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBHTlUgQ10pCisgIENVUkxfQ0hFQ0tfREVGKFtfX0dOVUNfX10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX18iID0gInllcyIgJiYKKyAgICB0ZXN0ICIkY29tcGlsZXJfaWQiID0gInVua25vd24iOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9pZD0iR05VX0MiCisgICAgZ2NjdmVyPWAkQ0MgLWR1bXB2ZXJzaW9uYAorICAgIGdjY3ZoaT1gZWNobyAkZ2NjdmVyIHwgY3V0IC1kIC4gLWYxYAorICAgIGdjY3Zsbz1gZWNobyAkZ2NjdmVyIHwgY3V0IC1kIC4gLWYyYAorICAgIGNvbXBpbGVyX251bT1gKGV4cHIgJGdjY3ZoaSAiKiIgMTAwICsgJGdjY3ZsbykgMj4vZGV2L251bGxgCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nZ2RiIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nc3RhYnMiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdzdGFicysiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdjb2ZmIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1neGNvZmYiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdkd2FyZi0yIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1ndm1zIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9zIgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgICAgQ1VSTF9DSEVDS19ERUYoW19XSU4zMl0sIFtdLCBbc2lsZW50XSkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0NPTVBJTEVSX0hQVVhfQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBIUC1VWCBDLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSFBVWF9DXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIEhQLVVYIENdKQorICBDVVJMX0NIRUNLX0RFRihbX19IUF9jY10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19IUF9jYyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY29tcGlsZXJfaWQ9IkhQX1VYX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLXMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLXMiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gK08wICtPMSArTzIgK08zICtPNCIKKyAgICBmbGFnc19vcHRfeWVzPSIrTzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iK08wIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSUJNX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgSUJNIEMuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19DT01QSUxFUl9JQk1fQ10sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBJQk0gQ10pCisgIENVUkxfQ0hFQ0tfREVGKFtfX0lCTUNfX10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19JQk1DX18iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX2lkPSJJQk1fQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PMyAtTzQgLU81IgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xbm9vcHRpbWl6ZSIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTAiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT0xIgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9MiIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTMiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT00IgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9NSIKKyAgICBmbGFnc19vcHRfeWVzPSItTzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iLXFub29wdGltaXplIgorICAgIGZsYWdzX3ByZWZlcl9jcHBmbGFncz0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSU5URUxfQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBJbnRlbCBDLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSU5URUxfQ10sIFsKKyAgQUNfQkVGT1JFKFskMF0sW0NBUkVTX0NIRUNLX0NPTVBJTEVSX0dOVV9DXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBJbnRlbCBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fSU5URUxfQ09NUElMRVJdLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fSU5URUxfQ09NUElMRVIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX251bT0iJGN1cmxfY3ZfZGVmX19fSU5URUxfQ09NUElMRVIiCisgICAgQ1VSTF9DSEVDS19ERUYoW19fdW5peF9fXSwgW10sIFtzaWxlbnRdKQorICAgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fdW5peF9fIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBjb21waWxlcl9pZD0iSU5URUxfVU5JWF9DIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIgorICAgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgICBmbGFnc19kYmdfb2ZmPSItZzAiCisgICAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9zIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICAgIGVsc2UKKyAgICAgIGNvbXBpbGVyX2lkPSJJTlRFTF9XSU5ET1dTX0MiCisgICAgICBmbGFnc19kYmdfYWxsPSIvWkkgL1ppIC96SSAvemkgL1pEIC9aZCAvekQgL3pkIC9aNyAvejcgL095IC9PeS0iCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWciCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6bm9uZSIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzptaW5pbWFsIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgL2RlYnVnOnBhcnRpYWwiCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6ZnVsbCIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzpzZW1hbnRpY19zdGVwcGluZyIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzpleHRlbmRlZCIKKyAgICAgIGZsYWdzX2RiZ195ZXM9Ii9aaSAvT3ktIgorICAgICAgZmxhZ3NfZGJnX29mZj0iL2RlYnVnOm5vbmUgL095LSIKKyAgICAgIGZsYWdzX29wdF9hbGw9Ii9PIC9PMCAvTzEgL08yIC9PMyAvT2QgL09nIC9PZy0gL09pIC9PaS0iCisgICAgICBmbGFnc19vcHRfeWVzPSIvTzIiCisgICAgICBmbGFnc19vcHRfb2ZmPSIvT2QiCisgICAgZmkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0NPTVBJTEVSX0xDQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBMQ0MuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19DT01QSUxFUl9MQ0NdLCBbCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaXMgTENDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fTENDX19dLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fTENDX18iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX2lkPSJMQ0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWciCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgIGZsYWdzX29wdF9hbGw9IiIKKyAgICBmbGFnc19vcHRfeWVzPSIiCisgICAgZmxhZ3Nfb3B0X29mZj0iIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfU0dJX01JUFNfQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBTR0kgTUlQUyBDLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfU0dJX01JUFNfQ10sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfU0dJX01JUFNQUk9fQ10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaXMgU0dJIE1JUFMgQ10pCisgIENVUkxfQ0hFQ0tfREVGKFtfX0dOVUNfX10sIFtdLCBbc2lsZW50XSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fc2dpXSwgW10sIFtzaWxlbnRdKQorICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0dOVUNfXyIgPSAibm8iICYmCisgICAgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19zZ2kiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkY29tcGlsZXJfaWQiID0gInVua25vd24iOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9pZD0iU0dJX01JUFNfQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PMyAtT2Zhc3QiCisgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgIGZsYWdzX29wdF9vZmY9Ii1PMCIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0NPTVBJTEVSX1NHSV9NSVBTUFJPX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgU0dJIE1JUFNwcm8gQy4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSX1NHSV9NSVBTUFJPX0NdLCBbCisgIEFDX0JFRk9SRShbJDBdLFtDQVJFU19DSEVDS19DT01QSUxFUl9TR0lfTUlQU19DXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBTR0kgTUlQU3BybyBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fR05VQ19fXSwgW10sIFtzaWxlbnRdKQorICBDVVJMX0NIRUNLX0RFRihbX0NPTVBJTEVSX1ZFUlNJT05dLCBbXSwgW3NpbGVudF0pCisgIENVUkxfQ0hFQ0tfREVGKFtfU0dJX0NPTVBJTEVSX1ZFUlNJT05dLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fIiA9ICJubyIgJiYKKyAgICAodGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX1NHSV9DT01QSUxFUl9WRVJTSU9OIiA9ICJ5ZXMiIHx8CisgICAgIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19DT01QSUxFUl9WRVJTSU9OIiA9ICJ5ZXMiKTsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY29tcGlsZXJfaWQ9IlNHSV9NSVBTUFJPX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9mYXN0IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9TVU5QUk9fQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBTdW5Qcm8gQy4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSX1NVTlBST19DXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIFN1blBybyBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fU1VOUFJPX0NdLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fU1VOUFJPX0MiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX2lkPSJTVU5QUk9fQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtcyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSItcyIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAteE8gLXhPMSAteE8yIC14TzMgLXhPNCAteE81IgorICAgIGZsYWdzX29wdF95ZXM9Ii14TzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfVElOWV9DCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb21waWxlciBiZWluZyB1c2VkIGlzIFRpbnkgQy4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSX1RJTllfQ10sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBUaW55IENdKQorICBDVVJMX0NIRUNLX0RFRihbX19USU5ZQ19fXSwgW10sIFtzaWxlbnRdKQorICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX1RJTllDX18iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX2lkPSJUSU5ZX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWIiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgIGZsYWdzX29wdF9hbGw9IiIKKyAgICBmbGFnc19vcHRfeWVzPSIiCisgICAgZmxhZ3Nfb3B0X29mZj0iIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfV0FUQ09NX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgV2F0Y29tIEMuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19DT01QSUxFUl9XQVRDT01fQ10sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBXYXRjb20gQ10pCisgIENVUkxfQ0hFQ0tfREVGKFtfX1dBVENPTUNfX10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19XQVRDT01DX18iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIENVUkxfQ0hFQ0tfREVGKFtfX1VOSVhfX10sIFtdLCBbc2lsZW50XSkKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX1VOSVhfXyIgPSAieWVzIjsgdGhlbgorICAgICAgY29tcGlsZXJfaWQ9IldBVENPTV9VTklYX0MiCisgICAgICBmbGFnc19kYmdfYWxsPSItZzEgLWcxKyAtZzIgLWczIgorICAgICAgZmxhZ3NfZGJnX3llcz0iLWcyIgorICAgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgICAgZmxhZ3Nfb3B0X2FsbD0iLU8wIC1PMSAtTzIgLU8zIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICAgIGVsc2UKKyAgICAgIGNvbXBpbGVyX2lkPSJXQVRDT01fV0lORE9XU19DIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iIgorICAgICAgZmxhZ3NfZGJnX3llcz0iIgorICAgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgICAgZmxhZ3Nfb3B0X2FsbD0iIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iIgorICAgIGZpCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DT05WRVJUX0lOQ0xVREVfVE9fSVNZU1RFTQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGFuZ2VzIHN0YW5kYXJkIGluY2x1ZGUgcGF0aHMgcHJlc2VudCBpbiBDRkxBR1MKK2RubCBhbmQgQ1BQRkxBR1MgaW50byBpc3lzdGVtIGluY2x1ZGUgcGF0aHMuIFRoaXMgaXMKK2RubCBkb25lIHRvIHByZXZlbnQgR05VQyBmcm9tIGdlbmVyYXRpbmcgd2FybmluZ3Mgb24KK2RubCBoZWFkZXJzIGZyb20gdGhlc2UgbG9jYXRpb25zLCBhbHRob3VnaCBvbiBhbmNpZW50CitkbmwgR05VQyB2ZXJzaW9ucyB0aGVzZSB3YXJuaW5ncyBhcmUgbm90IHNpbGVuY2VkLgorCitBQ19ERUZVTihbQ0FSRVNfQ09OVkVSVF9JTkNMVURFX1RPX0lTWVNURU1dLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX1NIRlVOQ19TUVVFRVpFXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJdKWRubAorICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkdOVV9DIiB8fAorICAgIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiQ0xBTkciOyB0aGVuCisgICAgdG1wX2hhc19pbmNsdWRlPSJubyIKKyAgICB0bXBfY2hnX0ZMQUdTPSIkQ0ZMQUdTIgorICAgIGZvciB3b3JkMSBpbiAkdG1wX2NoZ19GTEFHUzsgZG8KKyAgICAgIGNhc2UgIiR3b3JkMSIgaW4KKyAgICAgICAgLUkqKQorICAgICAgICAgIHRtcF9oYXNfaW5jbHVkZT0ieWVzIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiR0bXBfaGFzX2luY2x1ZGUiID0gInllcyI7IHRoZW4KKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy9eLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy8gLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIENGTEFHUz0iJHRtcF9jaGdfRkxBR1MiCisgICAgICBzcXVlZXplIENGTEFHUworICAgIGZpCisgICAgdG1wX2hhc19pbmNsdWRlPSJubyIKKyAgICB0bXBfY2hnX0ZMQUdTPSIkQ1BQRkxBR1MiCisgICAgZm9yIHdvcmQxIGluICR0bXBfY2hnX0ZMQUdTOyBkbworICAgICAgY2FzZSAiJHdvcmQxIiBpbgorICAgICAgICAtSSopCisgICAgICAgICAgdG1wX2hhc19pbmNsdWRlPSJ5ZXMiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgaWYgdGVzdCAiJHRtcF9oYXNfaW5jbHVkZSIgPSAieWVzIjsgdGhlbgorICAgICAgdG1wX2NoZ19GTEFHUz1gZWNobyAiJHRtcF9jaGdfRkxBR1MiIHwgIiRTRUQiICdzL14tSS8gLWlzeXN0ZW0gL2cnYAorICAgICAgdG1wX2NoZ19GTEFHUz1gZWNobyAiJHRtcF9jaGdfRkxBR1MiIHwgIiRTRUQiICdzLyAtSS8gLWlzeXN0ZW0gL2cnYAorICAgICAgQ1BQRkxBR1M9IiR0bXBfY2hnX0ZMQUdTIgorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgIGZpCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DT01QSUxFUl9XT1JLU19JRkVMU0UgKFtBQ1RJT04tSUYtV09SS1NdLCBbQUNUSU9OLUlGLU5PVC1XT1JLU10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiB0aGUgQyBjb21waWxlciBzZWVtcyB0byB3b3JrIHdpdGggdGhlCitkbmwgc2V0dGluZ3MgdGhhdCBhcmUgJ2FjdGl2ZScgYXQgdGhlIHRpbWUgdGhlIHRlc3QKK2RubCBpcyBwZXJmb3JtZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DT01QSUxFUl9XT1JLU19JRkVMU0VdLCBbCisgIGRubCBjb21waWxhdGlvbiBjYXBhYmlsaXR5IHZlcmlmaWNhdGlvbgorICB0bXBfY29tcGlsZXJfd29ya3M9InVua25vd24iCisgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICBdXSxbWworICAgICAgaW50IGkgPSAxOworICAgICAgcmV0dXJuIGk7CisgICAgXV0pCisgIF0sWworICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorICBdLFsKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgIGVjaG8gIiAiID4mNgorICAgIHNlZCAncy9eL2NjLWZhaWw6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgICBlY2hvICIgIiA+JjYKKyAgXSkKKyAgZG5sIGxpbmtpbmcgY2FwYWJpbGl0eSB2ZXJpZmljYXRpb24KKyAgaWYgdGVzdCAiJHRtcF9jb21waWxlcl93b3JrcyIgPSAieWVzIjsgdGhlbgorICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgXV0sW1sKKyAgICAgICAgaW50IGkgPSAxOworICAgICAgICByZXR1cm4gaTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisgICAgXSxbCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgICAgZWNobyAiICIgPiY2CisgICAgICBzZWQgJ3MvXi9saW5rLWZhaWw6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgICAgIGVjaG8gIiAiID4mNgorICAgIF0pCisgIGZpCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRtcF9jb21waWxlcl93b3JrcyIgPSAieWVzIjsgdGhlbgorICAgIEFDX1JVTl9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjICAgICAgIGlmZGVmIF9fU1REQ19fCisjICAgICAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisjICAgICAgIGVuZGlmCisgICAgICBdXSxbWworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGV4aXQoaSk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorICAgIF0sWworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgZWNobyAicnVuLWZhaWw6IHRlc3QgcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKyAgICBdKQorICBmaQorICBkbmwgYnJhbmNoIHVwb24gdGVzdCByZXN1bHQKKyAgaWYgdGVzdCAiJHRtcF9jb21waWxlcl93b3JrcyIgPSAieWVzIjsgdGhlbgorICBpZmVsc2UoJDEsLDosWyQxXSkKKyAgaWZlbHNlKCQyLCwsW2Vsc2UKKyAgICAkMl0pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19TRVRfQ09NUElMRVJfQkFTSUNfT1BUUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXRzIGNvbXBpbGVyIHNwZWNpZmljIG9wdGlvbnMvZmxhZ3Mgd2hpY2ggZG8gbm90CitkbmwgZGVwZW5kIG9uIGNvbmZpZ3VyZSdzIGRlYnVnLCBvcHRpbWl6ZSBvciB3YXJuaW5ncworZG5sIG9wdGlvbnMuCisKK0FDX0RFRlVOKFtDQVJFU19TRVRfQ09NUElMRVJfQkFTSUNfT1BUU10sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19TSEZVTkNfU1FVRUVaRV0pZG5sCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiAhPSAidW5rbm93biI7IHRoZW4KKyAgICAjCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJHTlVfQyIgfHwKKyAgICAgIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiQ0xBTkciOyB0aGVuCisgICAgICBDQVJFU19DT05WRVJUX0lOQ0xVREVfVE9fSVNZU1RFTQorICAgIGZpCisgICAgIworICAgIHRtcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9DUFBGTEFHUz0iIgorICAgIHRtcF9DRkxBR1M9IiIKKyAgICAjCisgICAgY2FzZSAiJGNvbXBpbGVyX2lkIiBpbgorICAgICAgICAjCisgICAgICBDTEFORykKKyAgICAgICAgIworICAgICAgICBkbmwgRGlzYWJsZSB3YXJuaW5ncyBmb3IgdW51c2VkIGFyZ3VtZW50cywgb3RoZXJ3aXNlIGNsYW5nIHdpbGwKKyAgICAgICAgZG5sIHdhcm4gYWJvdXQgY29tcGlsZS10aW1lIGFyZ3VtZW50cyB1c2VkIGR1cmluZyBsaW5rLXRpbWUsIGxpa2UKKyAgICAgICAgZG5sIC1PIGFuZCAtZyBhbmQgLXBlZGFudGljLgorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtUXVudXNlZC1hcmd1bWVudHMiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIERFQ19DKQorICAgICAgICAjCisgICAgICAgIGRubCBTZWxlY3Qgc3RyaWN0IEFOU0kgQyBjb21waWxlciBtb2RlCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1zdGQxIgorICAgICAgICBkbmwgVHVybiBvZmYgb3B0aW1pemVyIEFOU0kgQyBhbGlhc2luZyBydWxlcworICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtbm9hbnNpX2FsaWFzIgorICAgICAgICBkbmwgR2VuZXJhdGUgd2FybmluZ3MgZm9yIG1pc3NpbmcgZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtd2FybnByb3RvcyIKKyAgICAgICAgZG5sIENoYW5nZSBzb21lIHdhcm5pbmdzIGludG8gZmF0YWwgZXJyb3JzCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1tc2dfZmF0YWwgdG9vZmV3YXJncyx0b29tYW55YXJncyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgR05VX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBIUF9VWF9DKQorICAgICAgICAjCisgICAgICAgIGRubCBEaXNhbGxvdyBydW4tdGltZSBkZXJlZmVyZW5jaW5nIG9mIG51bGwgcG9pbnRlcnMKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXoiCisgICAgICAgIGRubCBEaXNhYmxlIHNvbWUgcmVtYXJrcworICAgICAgICBkbmwgIzQyMjc6IHBhZGRpbmcgc3RydWN0IHdpdGggbiBieXRlcyB0byBhbGlnbiBtZW1iZXIKKyAgICAgICAgZG5sICM0MjU1OiBwYWRkaW5nIHNpemUgb2Ygc3RydWN0IHdpdGggbiBieXRlcyB0byBhbGlnbm1lbnQgYm91bmRhcnkKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgK1cgNDIyNyw0MjU1IgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJQk1fQykKKyAgICAgICAgIworICAgICAgICBkbmwgRW5zdXJlIHRoYXQgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBhcmUgYWx3YXlzIHRocmVhZC1zYWZlLgorICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXF0aHJlYWRlZCIKKyAgICAgICAgZG5sIERpc2FibGUgdHlwZSBiYXNlZCBzdHJpY3QgYWxpYXNpbmcgb3B0aW1pemF0aW9ucywgdXNpbmcgd29yc3QKKyAgICAgICAgZG5sIGNhc2UgYWxpYXNpbmcgYXNzdW1wdGlvbnMgd2hlbiBjb21waWxpbmcuIFR5cGUgYmFzZWQgYWxpYXNpbmcKKyAgICAgICAgZG5sIHdvdWxkIHJlc3RyaWN0IHRoZSBsdmFsdWVzIHRoYXQgY291bGQgYmUgc2FmZWx5IHVzZWQgdG8gYWNjZXNzCisgICAgICAgIGRubCBhIGRhdGEgb2JqZWN0LgorICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXFub2Fuc2lhbGlhcyIKKyAgICAgICAgZG5sIEZvcmNlIGNvbXBpbGVyIHRvIHN0b3AgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIHBoYXNlLCB3aXRob3V0CisgICAgICAgIGRubCBnZW5lcmF0aW5nIGFuIG9iamVjdCBjb2RlIGZpbGUgd2hlbiBjb21waWxhdGlvbiBoYXMgZXJyb3JzLgorICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXFoYWx0PWUiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1VOSVhfQykKKyAgICAgICAgIworICAgICAgICBkbmwgT24gdW5peCB0aGlzIGNvbXBpbGVyIHVzZXMgZ2NjJ3MgaGVhZGVyIGZpbGVzLCBzbworICAgICAgICBkbmwgd2Ugc2VsZWN0IEFOU0kgQzg5IGRpYWxlY3QgcGx1cyBHTlUgZXh0ZW5zaW9ucy4KKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXN0ZD1nbnU4OSIKKyAgICAgICAgZG5sIENoYW5nZSBzb21lIHdhcm5pbmdzIGludG8gZXJyb3JzCisgICAgICAgIGRubCAjMTQwOiB0b28gbWFueSBhcmd1bWVudHMgaW4gZnVuY3Rpb24gY2FsbAorICAgICAgICBkbmwgIzE0NzogZGVjbGFyYXRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggJ3ByZXZpb3VzIG9uZScKKyAgICAgICAgZG5sICMxNjU6IHRvbyBmZXcgYXJndW1lbnRzIGluIGZ1bmN0aW9uIGNhbGwKKyAgICAgICAgZG5sICMyNjY6IGZ1bmN0aW9uIGRlY2xhcmVkIGltcGxpY2l0bHkKKyAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC13ZSAxNDAsMTQ3LDE2NSwyNjYiCisgICAgICAgIGRubCBEaXNhYmxlIHNvbWUgcmVtYXJrcworICAgICAgICBkbmwgIzI3OTogY29udHJvbGxpbmcgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorICAgICAgICBkbmwgIzk4MTogb3BlcmFuZHMgYXJlIGV2YWx1YXRlZCBpbiB1bnNwZWNpZmllZCBvcmRlcgorICAgICAgICBkbmwgIzE0Njk6ICJjYyIgY2xvYmJlciBpZ25vcmVkCisgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtd2QgMjc5LDk4MSwxNDY5IgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJTlRFTF9XSU5ET1dTX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBMQ0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIERpc2FsbG93IHJ1bi10aW1lIGRlcmVmZXJlbmNpbmcgb2YgbnVsbCBwb2ludGVycworICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtbiIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgU0dJX01JUFNfQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNHSV9NSVBTUFJPX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBTVU5QUk9fQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFRJTllfQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFdBVENPTV9VTklYX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBXQVRDT01fV0lORE9XU19DKQorICAgICAgICAjCisgICAgICAgIGRubCBQbGFjZWhvbGRlcgorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgIGVzYWMKKyAgICAjCisgICAgc3F1ZWV6ZSB0bXBfQ1BQRkxBR1MKKyAgICBzcXVlZXplIHRtcF9DRkxBR1MKKyAgICAjCisgICAgaWYgdGVzdCAhIC16ICIkdG1wX0NGTEFHUyIgfHwgdGVzdCAhIC16ICIkdG1wX0NQUEZMQUdTIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBhY2NlcHRzIHNvbWUgYmFzaWMgb3B0aW9uc10pCisgICAgICBDUFBGTEFHUz0iJHRtcF9zYXZlX0NQUEZMQUdTICR0bXBfQ1BQRkxBR1MiCisgICAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MgJHRtcF9DRkxBR1MiCisgICAgICBzcXVlZXplIENQUEZMQUdTCisgICAgICBzcXVlZXplIENGTEFHUworICAgICAgQ0FSRVNfQ09NUElMRVJfV09SS1NfSUZFTFNFKFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgQUNfTVNHX05PVElDRShbY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHU10pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBBQ19NU0dfV0FSTihbY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHU10pCisgICAgICAgIGRubCByZXN0b3JlIGluaXRpYWwgc2V0dGluZ3MKKyAgICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTIgorICAgICAgXSkKKyAgICBmaQorICAgICMKKyAgZmkKK10pCisKKworZG5sIENBUkVTX1NFVF9DT01QSUxFUl9ERUJVR19PUFRTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldHMgY29tcGlsZXIgc3BlY2lmaWMgb3B0aW9ucy9mbGFncyB3aGljaCBkZXBlbmQKK2RubCBvbiBjb25maWd1cmUncyBkZWJ1ZyBvcHRpb24uCisKK0FDX0RFRlVOKFtDQVJFU19TRVRfQ09NUElMRVJfREVCVUdfT1BUU10sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfT1BUSU9OX0RFQlVHXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19TSEZVTkNfU1FVRUVaRV0pZG5sCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiAhPSAidW5rbm93biI7IHRoZW4KKyAgICAjCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgIworICAgIHRtcF9vcHRpb25zPSIiCisgICAgdG1wX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBDQVJFU19WQVJfU1RSSVAoW3RtcF9DRkxBR1NdLFskZmxhZ3NfZGJnX2FsbF0pCisgICAgQ0FSRVNfVkFSX1NUUklQKFt0bXBfQ1BQRkxBR1NdLFskZmxhZ3NfZGJnX2FsbF0pCisgICAgIworICAgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGFjY2VwdHMgZGVidWcgZW5hYmxpbmcgb3B0aW9uc10pCisgICAgICB0bXBfb3B0aW9ucz0iJGZsYWdzX2RiZ195ZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkd2FudF9kZWJ1ZyIgPSAibm8iOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGFjY2VwdHMgZGVidWcgZGlzYWJsaW5nIG9wdGlvbnNdKQorICAgICAgdG1wX29wdGlvbnM9IiRmbGFnc19kYmdfb2ZmIgorICAgIGZpCisgICAgIworICAgIGlmIHRlc3QgIiRmbGFnc19wcmVmZXJfY3BwZmxhZ3MiID0gInllcyI7IHRoZW4KKyAgICAgIENQUEZMQUdTPSIkdG1wX0NQUEZMQUdTICR0bXBfb3B0aW9ucyIKKyAgICAgIENGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgZWxzZQorICAgICAgQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MiCisgICAgICBDRkxBR1M9IiR0bXBfQ0ZMQUdTICR0bXBfb3B0aW9ucyIKKyAgICBmaQorICAgIHNxdWVlemUgQ1BQRkxBR1MKKyAgICBzcXVlZXplIENGTEFHUworICAgIENBUkVTX0NPTVBJTEVSX1dPUktTX0lGRUxTRShbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgQUNfTVNHX05PVElDRShbY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9vcHRpb25zXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIEFDX01TR19XQVJOKFtjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX29wdGlvbnNdKQorICAgICAgZG5sIHJlc3RvcmUgaW5pdGlhbCBzZXR0aW5ncworICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyIKKyAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKyAgICBdKQorICAgICMKKyAgZmkKK10pCisKKworZG5sIENBUkVTX1NFVF9DT01QSUxFUl9PUFRJTUlaRV9PUFRTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldHMgY29tcGlsZXIgc3BlY2lmaWMgb3B0aW9ucy9mbGFncyB3aGljaCBkZXBlbmQKK2RubCBvbiBjb25maWd1cmUncyBvcHRpbWl6ZSBvcHRpb24uCisKK0FDX0RFRlVOKFtDQVJFU19TRVRfQ09NUElMRVJfT1BUSU1JWkVfT1BUU10sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfT1BUSU9OX09QVElNSVpFXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19TSEZVTkNfU1FVRUVaRV0pZG5sCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiAhPSAidW5rbm93biI7IHRoZW4KKyAgICAjCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgIworICAgIHRtcF9vcHRpb25zPSIiCisgICAgdG1wX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBob25vcl9vcHRpbWl6ZV9vcHRpb249InllcyIKKyAgICAjCisgICAgZG5sIElmIG9wdGltaXphdGlvbiByZXF1ZXN0IHNldHRpbmcgaGFzIG5vdCBiZWVuIGV4cGxpY2l0bHkgc3BlY2lmaWVkLAorICAgIGRubCBpdCBoYXMgYmVlbiBkZXJpdmVkIGZyb20gdGhlIGRlYnVnIHNldHRpbmcgYW5kIGluaXRpYWxseSBhc3N1bWVkLgorICAgIGRubCBUaGlzIGluaXRpYWxseSBhc3N1bWVkIG9wdGltaXplciBzZXR0aW5nIHdpbGwgZmluYWxseSBiZSBpZ25vcmVkCisgICAgZG5sIGlmIENGTEFHUyBvciBDUFBGTEFHUyBhbHJlYWR5IGhvbGQgb3B0aW1pemVyIGZsYWdzLiBUaGlzIGltcGxpZXMKKyAgICBkbmwgdGhhdCBhbiBpbml0aWFsbHkgYXNzdW1lZCBvcHRpbWl6ZXIgc2V0dGluZyBtaWdodCBub3QgYmUgaG9ub3JlZC4KKyAgICAjCisgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gImFzc3VtZV9ubyIgfHwKKyAgICAgICB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAiYXNzdW1lX3llcyI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgb3B0aW1pemVyIGFzc3VtZWQgc2V0dGluZyBtaWdodCBiZSB1c2VkXSkKKyAgICAgIENBUkVTX1ZBUl9NQVRDSF9JRkVMU0UoW3RtcF9DRkxBR1NdLFskZmxhZ3Nfb3B0X2FsbF0sWworICAgICAgICBob25vcl9vcHRpbWl6ZV9vcHRpb249Im5vIgorICAgICAgXSkKKyAgICAgIENBUkVTX1ZBUl9NQVRDSF9JRkVMU0UoW3RtcF9DUFBGTEFHU10sWyRmbGFnc19vcHRfYWxsXSxbCisgICAgICAgIGhvbm9yX29wdGltaXplX29wdGlvbj0ibm8iCisgICAgICBdKQorICAgICAgQUNfTVNHX1JFU1VMVChbJGhvbm9yX29wdGltaXplX29wdGlvbl0pCisgICAgICBpZiB0ZXN0ICIkaG9ub3Jfb3B0aW1pemVfb3B0aW9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIiR3YW50X29wdGltaXplIiA9ICJhc3N1bWVfeWVzIjsgdGhlbgorICAgICAgICAgIHdhbnRfb3B0aW1pemU9InllcyIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gImFzc3VtZV9ubyI7IHRoZW4KKyAgICAgICAgICB3YW50X29wdGltaXplPSJubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICAjCisgICAgaWYgdGVzdCAiJGhvbm9yX29wdGltaXplX29wdGlvbiIgPSAieWVzIjsgdGhlbgorICAgICAgQ0FSRVNfVkFSX1NUUklQKFt0bXBfQ0ZMQUdTXSxbJGZsYWdzX29wdF9hbGxdKQorICAgICAgQ0FSRVNfVkFSX1NUUklQKFt0bXBfQ1BQRkxBR1NdLFskZmxhZ3Nfb3B0X2FsbF0pCisgICAgICBpZiB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAieWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGFjY2VwdHMgb3B0aW1pemVyIGVuYWJsaW5nIG9wdGlvbnNdKQorICAgICAgICB0bXBfb3B0aW9ucz0iJGZsYWdzX29wdF95ZXMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gIm5vIjsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGFjY2VwdHMgb3B0aW1pemVyIGRpc2FibGluZyBvcHRpb25zXSkKKyAgICAgICAgdG1wX29wdGlvbnM9IiRmbGFnc19vcHRfb2ZmIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRmbGFnc19wcmVmZXJfY3BwZmxhZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgJHRtcF9vcHRpb25zIgorICAgICAgICBDRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgZWxzZQorICAgICAgICBDUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkdG1wX0NGTEFHUyAkdG1wX29wdGlvbnMiCisgICAgICBmaQorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgICAgc3F1ZWV6ZSBDRkxBR1MKKyAgICAgIENBUkVTX0NPTVBJTEVSX1dPUktTX0lGRUxTRShbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIEFDX01TR19OT1RJQ0UoW2NvbXBpbGVyIG9wdGlvbnMgYWRkZWQ6ICR0bXBfb3B0aW9uc10pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBBQ19NU0dfV0FSTihbY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9vcHRpb25zXSkKKyAgICAgICAgZG5sIHJlc3RvcmUgaW5pdGlhbCBzZXR0aW5ncworICAgICAgICBDUFBGTEFHUz0iJHRtcF9zYXZlX0NQUEZMQUdTIgorICAgICAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MiCisgICAgICBdKQorICAgIGZpCisgICAgIworICBmaQorXSkKKworCitkbmwgQ0FSRVNfU0VUX0NPTVBJTEVSX1dBUk5JTkdfT1BUUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXRzIGNvbXBpbGVyIG9wdGlvbnMvZmxhZ3Mgd2hpY2ggZGVwZW5kIG9uCitkbmwgY29uZmlndXJlJ3Mgd2FybmluZ3MgZ2l2ZW4gb3B0aW9uLgorCitBQ19ERUZVTihbQ0FSRVNfU0VUX0NPTVBJTEVSX1dBUk5JTkdfT1BUU10sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfT1BUSU9OX1dBUk5JTkdTXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19TSEZVTkNfU1FVRUVaRV0pZG5sCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiAhPSAidW5rbm93biI7IHRoZW4KKyAgICAjCisgICAgdG1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0bXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgdG1wX0NQUEZMQUdTPSIiCisgICAgdG1wX0NGTEFHUz0iIgorICAgICMKKyAgICBjYXNlICIkY29tcGlsZXJfaWQiIGluCisgICAgICAgICMKKyAgICAgIENMQU5HKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXBlZGFudGljIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XYWxsIC1XZXh0cmEiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdwb2ludGVyLWFyaXRoIC1Xd3JpdGUtc3RyaW5ncyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3NoYWRvdyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2lubGluZSAtV25lc3RlZC1leHRlcm5zIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1sb25nLWxvbmciCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdmbG9hdC1lcXVhbCIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLW11bHRpY2hhciAtV3NpZ24tY29tcGFyZSIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VuZGVmIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdlbmRpZi1sYWJlbHMgLVdzdHJpY3QtcHJvdG90eXBlcyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Nhc3QtYWxpZ24iCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1zeXN0ZW0taGVhZGVycyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3Nob3J0ZW4tNjQtdG8tMzIiCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGNsYW5nIDEuMSBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMTAxIjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd1bnVzZWQiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgREVDX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgU2VsZWN0IGEgaGlnaGVyIHdhcm5pbmcgbGV2ZWwgdGhhbiBkZWZhdWx0IGxldmVsMgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1tc2dfZW5hYmxlIGxldmVsMyIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgR05VX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIERvIG5vdCBlbmFibGUgLXBlZGFudGljIHdoZW4gY3Jvc3MtY29tcGlsaW5nIHdpdGggYSBnY2Mgb2xkZXIKKyAgICAgICAgICBkbmwgdGhhbiAzLjAsIHRvIGF2b2lkIHdhcm5pbmdzIGZyb20gdGhpcmQgcGFydHkgc3lzdGVtIGhlYWRlcnMuCisgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiB8fAorICAgICAgICAgICAgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDAiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtcGVkYW50aWMiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIFNldCBvZiBvcHRpb25zIHdlIGJlbGlldmUgKkFMTCogZ2NjIHZlcnNpb25zIHN1cHBvcnQ6CisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdhbGwgLVciCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGdjYyAxLjQgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjEwNCI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgICBkbmwgSWYgbm90IGNyb3NzLWNvbXBpbGluZyB3aXRoIGEgZ2NjIG9sZGVyIHRoYW4gMy4wCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiIHx8CisgICAgICAgICAgICAgIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VudXNlZCAtV3NoYWRvdyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDIuNyBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMjA3IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdpbmxpbmUgLVduZXN0ZWQtZXh0ZXJucyIKKyAgICAgICAgICAgIGRubCBJZiBub3QgY3Jvc3MtY29tcGlsaW5nIHdpdGggYSBnY2Mgb2xkZXIgdGhhbiAzLjAKKyAgICAgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgfHwKKyAgICAgICAgICAgICAgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDAiOyB0aGVuCisgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1wcm90b3R5cGVzIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICBkbmwgT25seSBnY2MgMi45NSBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMjk1IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1sb25nLWxvbmciCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDIuOTYgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjI5NiI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XZmxvYXQtZXF1YWwiCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLW11bHRpY2hhciAtV3NpZ24tY29tcGFyZSIKKyAgICAgICAgICAgIGRubCAtV3VuZGVmIHVzZWQgb25seSBpZiBnY2MgaXMgMi45NiBvciBsYXRlciBzaW5jZSB3ZSBnZXQKKyAgICAgICAgICAgIGRubCBsb3RzIG9mICJgX1BPU0lYX0NfU09VUkNFJyBpcyBub3QgZGVmaW5lZCIgaW4gc3lzdGVtCisgICAgICAgICAgICBkbmwgaGVhZGVycyB3aXRoIGdjYyAyLjk1LjQgb24gRnJlZUJTRCA0LjkKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XdW5kZWYiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDIuOTcgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjI5NyI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDMuMCBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgICAgZG5sIC1XdW5yZWFjaGFibGUtY29kZSBzZWVtcyB0b3RhbGx5IHVucmVsaWFibGUgb24gbXkgZ2NjIDMuMy4yIG9uCisgICAgICAgICAgICBkbmwgb24gaTY4Ni1MaW51eCBhcyBpdCBnaXZlcyB1cyBoZWFwcyB3aXRoIGZhbHNlIHBvc2l0aXZlcy4KKyAgICAgICAgICAgIGRubCBBbHNvLCBvbiBnY2MgNC4wLlggaXQgaXMgdG90YWxseSB1bmJlYXJhYmxlIGFuZCBjb21wbGFpbnMgYWxsCisgICAgICAgICAgICBkbmwgb3ZlciBtYWtpbmcgaXQgdW51c2FibGUgZm9yIGdlbmVyaWMgcHVycG9zZXMuIExldCdzIG5vdCB1c2UgaXQuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICBkbmwgT25seSBnY2MgMy4zIG9yIGxhdGVyCisgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDMiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2VuZGlmLWxhYmVscyAtV3N0cmljdC1wcm90b3R5cGVzIgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGdjYyAzLjQgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjMwNCI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGdjYyA0LjAgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjQwMCI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xc3RyaWN0LWFsaWFzaW5nPTMiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDQuMiBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiNDAyIjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdjYXN0LWFsaWduIgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGdjYyA0LjMgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjQwMyI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XdHlwZS1saW1pdHMgLVdvbGQtc3R5bGUtZGVjbGFyYXRpb24iCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV21pc3NpbmctcGFyYW1ldGVyLXR5cGUgLVdlbXB0eS1ib2R5IgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdjbG9iYmVyZWQgLVdpZ25vcmVkLXF1YWxpZmllcnMiCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2NvbnZlcnNpb24gLVduby1zaWduLWNvbnZlcnNpb24gLVd2bGEiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDQuNSBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiNDA1IjsgdGhlbgorICAgICAgICAgICAgZG5sIE9ubHkgd2luZG93cyB0YXJnZXRzCisgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fV0lOMzIiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQiCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICBmaQorICAgICAgICAjCisgICAgICAgIGRubCBEbyBub3QgaXNzdWUgd2FybmluZ3MgZm9yIGNvZGUgaW4gc3lzdGVtIGluY2x1ZGUgcGF0aHMuCisgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tc3lzdGVtLWhlYWRlcnMiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBkbmwgV2hlbiBjcm9zcy1jb21waWxpbmcgd2l0aCBhIGdjYyBvbGRlciB0aGFuIDMuMCwgZGlzYWJsZQorICAgICAgICAgIGRubCBzb21lIHdhcm5pbmdzIHRyaWdnZXJlZCBvbiB0aGlyZCBwYXJ0eSBzeXN0ZW0gaGVhZGVycy4KKyAgICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMTA0IjsgdGhlbgorICAgICAgICAgICAgICBkbmwgZ2NjIDEuNCBvciBsYXRlcgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLXVudXNlZCAtV25vLXNoYWRvdyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjIwNyI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIGdjYyAyLjcgb3IgbGF0ZXIKKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1taXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIEhQX1VYX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgSXNzdWUgYWxsIHdhcm5pbmdzCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgK3cxIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJQk1fQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1VOSVhfQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1ndCAiNjAwIjsgdGhlbgorICAgICAgICAgICAgZG5sIFNob3cgZXJyb3JzLCB3YXJuaW5ncywgYW5kIHJlbWFya3MKKyAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2FsbCAtdzIiCisgICAgICAgICAgICBkbmwgUGVyZm9ybSBleHRyYSBjb21waWxlLXRpbWUgY29kZSBjaGVja2luZworICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XY2hlY2siCisgICAgICAgICAgICBkbmwgV2FybiBvbiBuZXN0ZWQgY29tbWVudHMKKyAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2NvbW1lbnQiCisgICAgICAgICAgICBkbmwgU2hvdyB3YXJuaW5ncyByZWxhdGl2ZSB0byBkZXByZWNhdGVkIGZlYXR1cmVzCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdkZXByZWNhdGVkIgorICAgICAgICAgICAgZG5sIEVuYWJsZSB3YXJuaW5ncyBmb3IgbWlzc2luZyBwcm90b3R5cGVzCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgICBkbmwgRW5hYmxlIHdhcm5pbmdzIGZvciA2NC1iaXQgcG9ydGFiaWxpdHkgaXNzdWVzCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdwNjQiCisgICAgICAgICAgICBkbmwgRW5hYmxlIHdhcm5pbmdzIGZvciBxdWVzdGlvbmFibGUgcG9pbnRlciBhcml0aG1ldGljCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdwb2ludGVyLWFyaXRoIgorICAgICAgICAgICAgZG5sIENoZWNrIGZvciBmdW5jdGlvbiByZXR1cm4gdHlwdyBpc3N1ZXMKKyAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV3JldHVybi10eXBlIgorICAgICAgICAgICAgZG5sIFdhcm4gb24gdmFyaWFibGUgZGVjbGFyYXRpb25zIGhpZGluZyBhIHByZXZpb3VzIG9uZQorICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1Xc2hhZG93IgorICAgICAgICAgICAgZG5sIFdhcm4gd2hlbiBhIHZhcmlhYmxlIGlzIHVzZWQgYmVmb3JlIGluaXRpYWxpemVkCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVd1bmluaXRpYWxpemVkIgorICAgICAgICAgICAgZG5sIFdhcm4gaWYgYSBkZWNsYXJlZCBmdW5jdGlvbiBpcyBub3QgdXNlZAorICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XdW51c2VkLWZ1bmN0aW9uIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGRubCBEaXNhYmxlIHVzaW5nIEVCUCByZWdpc3RlciBpbiBvcHRpbWl6YXRpb25zCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIgorICAgICAgICBkbmwgRGlzYWJsZSB1c2Ugb2YgQU5TSSBDIGFsaWFzaW5nIHJ1bGVzIGluIG9wdGltaXphdGlvbnMKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZuby1zdHJpY3QtYWxpYXNpbmciCisgICAgICAgIGRubCBWYWx1ZS1zYWZlIG9wdGltaXphdGlvbnMgb24gZmxvYXRpbmctcG9pbnQgZGF0YQorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtZnAtbW9kZWwgcHJlY2lzZSIKKyAgICAgICAgZG5sIE9ubHkgaWNjIDEwLjAgb3IgbGF0ZXIKKyAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDAwIjsgdGhlbgorICAgICAgICAgIGRubCBEaXNhYmxlIHZlY3Rvcml6ZXIgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC12ZWMtcmVwb3J0MCIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgSU5URUxfV0lORE9XU19DKQorICAgICAgICAjCisgICAgICAgIGRubCBQbGFjZWhvbGRlcgorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgTENDKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIEhpZ2hlc3Qgd2FybmluZyBsZXZlbCBpcyBkb3VibGUgLUEsIG5leHQgaXMgc2luZ2xlIC1BLgorICAgICAgICAgIGRubCBEdWUgdG8gdGhlIGJpZyBudW1iZXIgb2Ygd2FybmluZ3MgdGhlc2UgdHJpZ2dlciBvbiB0aGlyZAorICAgICAgICAgIGRubCBwYXJ0eSBoZWFkZXIgZmlsZXMgaXQgaXMgaW1wcmFjdGljYWwgZm9yIHVzIHRvIHVzZSBhbnkgb2YKKyAgICAgICAgICBkbmwgdGhlbSBoZXJlLiBJZiB5b3Ugd2FudCB0aGVtIHNpbXBseSBkZWZpbmUgaXQgaW4gQ1BQRkxBR1MuCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNHSV9NSVBTX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgUGVyZm9ybSBzdHJpY3RlciBzZW1hbnRpYyBhbmQgbGludC1saWtlIGNoZWNrcworICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mdWxsd2FybiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgU0dJX01JUFNQUk9fQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgIGRubCBQZXJmb3JtIHN0cmljdGVyIHNlbWFudGljIGFuZCBsaW50LWxpa2UgY2hlY2tzCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZ1bGx3YXJuIgorICAgICAgICAgIGRubCBEaXNhYmxlIHNvbWUgcmVtYXJrcworICAgICAgICAgIGRubCAjMTIwOTogY29udHJvbGxpbmcgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC13b2ZmIDEyMDkiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNVTlBST19DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIFBlcmZvcm0gc3RyaWN0ZXIgc2VtYW50aWMgYW5kIGxpbnQtbGlrZSBjaGVja3MKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtdiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgVElOWV9DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIEFjdGl2YXRlIGFsbCB3YXJuaW5ncworICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XYWxsIgorICAgICAgICAgIGRubCBNYWtlIHN0cmluZyBjb25zdGFudHMgYmUgb2YgdHlwZSBjb25zdCBjaGFyICoKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgZG5sIFdhcm4gdXNlIG9mIHVuc3VwcG9ydGVkIEdDQyBmZWF0dXJlcyBpZ25vcmVkIGJ5IFRDQworICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XdW5zdXBwb3J0ZWQiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFdBVENPTV9VTklYX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgSXNzdWUgYWxsIHdhcm5pbmdzCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdhbGwgLVdleHRyYSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgV0FUQ09NX1dJTkRPV1NfQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICBlc2FjCisgICAgIworICAgIHNxdWVlemUgdG1wX0NQUEZMQUdTCisgICAgc3F1ZWV6ZSB0bXBfQ0ZMQUdTCisgICAgIworICAgIGlmIHRlc3QgISAteiAiJHRtcF9DRkxBR1MiIHx8IHRlc3QgISAteiAiJHRtcF9DUFBGTEFHUyI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgYWNjZXB0cyBzdHJpY3Qgd2FybmluZyBvcHRpb25zXSkKKyAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MgJHRtcF9DUFBGTEFHUyIKKyAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyAkdG1wX0NGTEFHUyIKKyAgICAgIHNxdWVlemUgQ1BQRkxBR1MKKyAgICAgIHNxdWVlemUgQ0ZMQUdTCisgICAgICBDQVJFU19DT01QSUxFUl9XT1JLU19JRkVMU0UoWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICBBQ19NU0dfTk9USUNFKFtjb21waWxlciBvcHRpb25zIGFkZGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIEFDX01TR19XQVJOKFtjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTXSkKKyAgICAgICAgZG5sIHJlc3RvcmUgaW5pdGlhbCBzZXR0aW5ncworICAgICAgICBDUFBGTEFHUz0iJHRtcF9zYXZlX0NQUEZMQUdTIgorICAgICAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MiCisgICAgICBdKQorICAgIGZpCisgICAgIworICBmaQorXSkKKworCitkbmwgQ0FSRVNfU0hGVU5DX1NRVUVFWkUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRGVjbGFyZXMgYSBzaGVsbCBmdW5jdGlvbiBzcXVlZXplKCkgd2hpY2ggcmVtb3ZlcworZG5sIHJlZHVuZGFudCB3aGl0ZXNwYWNlIG91dCBvZiBhIHNoZWxsIHZhcmlhYmxlLgorCitBQ19ERUZVTihbQ0FSRVNfU0hGVU5DX1NRVUVFWkVdLCBbCitzcXVlZXplKCkgeworICBfc3F6X3Jlc3VsdD0iIgorICBldmFsIF9zcXpfaW5wdXQ9XFskXVskXTEKKyAgZm9yIF9zcXpfdG9rZW4gaW4gJF9zcXpfaW5wdXQ7IGRvCisgICAgaWYgdGVzdCAteiAiJF9zcXpfcmVzdWx0IjsgdGhlbgorICAgICAgX3Nxel9yZXN1bHQ9IiRfc3F6X3Rva2VuIgorICAgIGVsc2UKKyAgICAgIF9zcXpfcmVzdWx0PSIkX3Nxel9yZXN1bHQgJF9zcXpfdG9rZW4iCisgICAgZmkKKyAgZG9uZQorICBldmFsIFskXTE9XCRfc3F6X3Jlc3VsdAorICByZXR1cm4gMAorfQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfQ1VSTERFQlVHCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldHRpbmdzIHdoaWNoIGRlcGVuZCBvbiBjb25maWd1cmUncyBjdXJsZGVidWcgZ2l2ZW4KK2RubCBvcHRpb24sIGFuZCBvdGhlciBhZGRpdGlvbmFsIGNvbmZpZ3VyZSBwcmUtcmVxdWlzaXRlcy4KK2RubCBVc2luZyB0aGUgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmcgZmVhdHVyZSBpbiBjLWFyZXMKK2RubCBpcyBhIGhhY2sgdGhhdCBhY3R1YWxseSBjYW4gb25seSBiZSB1c2VkL2VuYWJsZWQgd2hlbgorZG5sIGMtYXJlcyBpcyBidWlsdCBkaXJlY3RseSBpbiBjdXJsJ3MgQ1ZTIHRyZWUsIGFzIGEgc3RhdGljCitkbmwgbGlicmFyeSBvciBhcyBhIHNoYXJlZCBvbmUgb24gdGhvc2Ugc3lzdGVtcyBvbiB3aGljaAorZG5sIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydCB1bmRlZmluZWQgc3ltYm9scywgYWxvbmcgd2l0aAorZG5sIGFuIGVxdWFsbHkgY29uZmlndXJlZCBsaWJjdXJsLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfQ1VSTERFQlVHXSwgWworICBBQ19SRVFVSVJFKFtYQ19MSUJUT09MXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfU0hGVU5DX1NRVUVFWkVdKWRubAorICBjYXJlc19idWlsZGRpcj1gcHdkYAorICBzdXBwb3J0c19jdXJsZGVidWc9InVua25vd24iCisgIGlmIHRlc3QgIiR3YW50X2N1cmxkZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInhubyIgJiYKKyAgICAgIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbdW5rbm93biBlbmFibGVfc2hhcmVkIHNldHRpbmcuXSkKKyAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiICE9ICJ4bm8iICYmCisgICAgICB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW3Vua25vd24gZW5hYmxlX3N0YXRpYyBzZXR0aW5nLl0pCisgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgIGZpCisgICAgaWYgdGVzdCAiJHN1cHBvcnRzX2N1cmxkZWJ1ZyIgIT0gIm5vIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gInllcyIgJiYKKyAgICAgICAgdGVzdCAieCR4Y19sdF9zaGxpYl91c2Vfbm9fdW5kZWZpbmVkIiA9ICd4eWVzJzsgdGhlbgorICAgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgICAgICBBQ19NU0dfV0FSTihbc2hhcmVkIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgc3ltYm9scy5dKQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgISAtZiAiJHNyY2Rpci8uLi9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguZGlzdCI7IHRoZW4KKyAgICAgICAgQUNfTVNHX1dBUk4oW2MtYXJlcyBzb3VyY2Ugbm90IGVtYmVkZGVkIGluIGN1cmwncyBDVlMgdHJlZS5dKQorICAgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgICAgZWxpZiB0ZXN0ICEgLWYgIiRzcmNkaXIvLi4vaW5jbHVkZS9jdXJsL01ha2VmaWxlLmluIjsgdGhlbgorICAgICAgICBBQ19NU0dfV0FSTihbY3VybCdzIGJ1aWxkY29uZiBoYXMgbm90IGJlZW4gcnVuLl0pCisgICAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgICBlbGlmIHRlc3QgISAtZiAiJGNhcmVzX2J1aWxkZGlyLy4uL2xpYmN1cmwucGMiIHx8CisgICAgICAgIHRlc3QgISAtZiAiJGNhcmVzX2J1aWxkZGlyLy4uL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCI7IHRoZW4KKyAgICAgICAgQUNfTVNHX1dBUk4oW2N1cmwncyBjb25maWd1cmUgaGFzIG5vdCBiZWVuIHJ1bi5dKQorICAgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgICAgZWxpZiB0ZXN0ICEgLWYgIiRjYXJlc19idWlsZGRpci8uLi9saWIvY3VybF9jb25maWcuaCI7IHRoZW4KKyAgICAgICAgQUNfTVNHX1dBUk4oW2xpYmN1cmwncyBjdXJsX2NvbmZpZy5oIGlzIG1pc3NpbmcuXSkKKyAgICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICAgIGVsaWYgdGVzdCAhIC1mICIkY2FyZXNfYnVpbGRkaXIvLi4vY29uZmlnLnN0YXR1cyI7IHRoZW4KKyAgICAgICAgQUNfTVNHX1dBUk4oW2N1cmwncyBjb25maWcuc3RhdHVzIGlzIG1pc3NpbmcuXSkKKyAgICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkc3VwcG9ydHNfY3VybGRlYnVnIiAhPSAibm8iOyB0aGVuCisgICAgICAgIGdyZXAgJ14jZGVmaW5lIFVTRV9BUkVTJyAiJGNhcmVzX2J1aWxkZGlyLy4uL2xpYi9jdXJsX2NvbmZpZy5oIiA+L2Rldi9udWxsCisgICAgICAgIGlmIHRlc3QgIiQ/IiAtbmUgIjAiOyB0aGVuCisgICAgICAgICAgQUNfTVNHX1dBUk4oW2xpYmN1cmwgY29uZmlndXJlZCB3aXRob3V0IGMtYXJlcyBzdXBwb3J0Ll0pCisgICAgICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkc3VwcG9ydHNfY3VybGRlYnVnIiAhPSAibm8iOyB0aGVuCisgICAgICAgIGdyZXAgJ0NQUEZMQUdTLipDVVJMREVCVUcnICIkY2FyZXNfYnVpbGRkaXIvLi4vY29uZmlnLnN0YXR1cyIgPi9kZXYvbnVsbAorICAgICAgICBpZiB0ZXN0ICIkPyIgLW5lICIwIjsgdGhlbgorICAgICAgICAgIEFDX01TR19XQVJOKFtsaWJjdXJsIGNvbmZpZ3VyZWQgd2l0aG91dCBjdXJsZGVidWcgc3VwcG9ydC5dKQorICAgICAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHdhbnRfY3VybGRlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyBjYW4gYmUgZW5hYmxlZF0pCisgICAgdGVzdCAiJHN1cHBvcnRzX2N1cmxkZWJ1ZyIgPSAibm8iIHx8IHN1cHBvcnRzX2N1cmxkZWJ1Zz0ieWVzIgorICAgIEFDX01TR19SRVNVTFQoWyRzdXBwb3J0c19jdXJsZGVidWddKQorICAgIGlmIHRlc3QgIiRzdXBwb3J0c19jdXJsZGVidWciID0gIm5vIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW2Nhbm5vdCBlbmFibGUgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmcuXSkKKyAgICAgIHdhbnRfY3VybGRlYnVnPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR3YW50X2N1cmxkZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgIGRubCBUT0RPOiBWZXJpZnkgaWYgdGhlIEJVSUxESU5HX0xJQkNVUkwgZGVmaW5pdGlvbiBpcyBzdGlsbCByZXF1aXJlZC4KKyAgICBBQ19ERUZJTkUoQlVJTERJTkdfTElCQ1VSTCwgMSwgW3doZW4gYnVpbGRpbmcgYXMgc3RhdGljIHBhcnQgb2YgbGliY3VybF0pCisgICAgQ1BQRkxBR1M9Ii1EQ1VSTERFQlVHICRDUFBGTEFHUyIKKyAgICBzcXVlZXplIENQUEZMQUdTCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHdhbnRfZGVidWciID0gInllcyI7IHRoZW4KKyAgICBDUFBGTEFHUz0iLURERUJVR0JVSUxEICRDUFBGTEFHUyIKKyAgICBzcXVlZXplIENQUEZMQUdTCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9IQUxUX09OX0VSUk9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmaWVzIGlmIHRoZSBjb21waWxlciBhY3R1YWxseSBoYWx0cyBhZnRlciB0aGUKK2RubCBjb21waWxhdGlvbiBwaGFzZSB3aXRob3V0IGdlbmVyYXRpbmcgYW55IG9iamVjdAorZG5sIGNvZGUgZmlsZSwgd2hlbiB0aGUgc291cmNlIGNvbXBpbGVzIHdpdGggZXJyb3JzLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSEFMVF9PTl9FUlJPUl0sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBoYWx0cyBvbiBjb21waWxhdGlvbiBlcnJvcnNdKQorICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgXV0sW1sKKyAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBBQ19NU0dfRVJST1IoW2NvbXBpbGVyIGRvZXMgbm90IGhhbHQgb24gY29tcGlsYXRpb24gZXJyb3JzLl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIF0pCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9BUlJBWV9TSVpFX05FR0FUSVZFCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmaWVzIGlmIHRoZSBjb21waWxlciBhY3R1YWxseSBoYWx0cyBhZnRlciB0aGUKK2RubCBjb21waWxhdGlvbiBwaGFzZSB3aXRob3V0IGdlbmVyYXRpbmcgYW55IG9iamVjdAorZG5sIGNvZGUgZmlsZSwgd2hlbiB0aGUgc291cmNlIGNvZGUgdHJpZXMgdG8gZGVmaW5lIGEKK2RubCB0eXBlIGZvciBhIGNvbnN0YW50IGFycmF5IHdpdGggbmVnYXRpdmUgZGltZW5zaW9uLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfQVJSQVlfU0laRV9ORUdBVElWRV0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSEFMVF9PTl9FUlJPUl0pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaGFsdHMgb24gbmVnYXRpdmUgc2l6ZWQgYXJyYXlzXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgdHlwZWRlZiBjaGFyIGJhZF90W3NpemVvZihjaGFyKSA9PSBzaXplb2YoaW50KSA/IC0xIDogLTEgXTsKKyAgICBdXSxbWworICAgICAgYmFkX3QgZHVtbXk7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBBQ19NU0dfRVJST1IoW2NvbXBpbGVyIGRvZXMgbm90IGhhbHQgb24gbmVnYXRpdmUgc2l6ZWQgYXJyYXlzLl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIF0pCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9TVFJVQ1RfTUVNQkVSX1NJWkUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZpZXMgaWYgdGhlIGNvbXBpbGVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlCitkbmwgc2l6ZSBvZiBhIHN0cnVjdCBtZW1iZXIsIHN0cnVjdCB3aGljaCBpcyBhIGZ1bmN0aW9uCitkbmwgcmVzdWx0LCBhcyBhIGNvbXBpbGF0aW9uLXRpbWUgY29uZGl0aW9uIGluc2lkZSB0aGUKK2RubCB0eXBlIGRlZmluaXRpb24gb2YgYSBjb25zdGFudCBhcnJheS4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSX1NUUlVDVF9NRU1CRVJfU0laRV0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfQVJSQVlfU0laRV9ORUdBVElWRV0pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgc3RydWN0IG1lbWJlciBzaXplIGNoZWNraW5nIHdvcmtzXSkKKyAgdHN0X2NvbXBpbGVyX2NoZWNrX29uZV93b3Jrcz0idW5rbm93biIKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgc3RydWN0IG15c3RydWN0IHsKKyAgICAgICAgaW50ICBtaTsKKyAgICAgICAgY2hhciBtYzsKKyAgICAgICAgc3RydWN0IG15c3RydWN0ICpuZXh0OworICAgICAgfTsKKyAgICAgIHN0cnVjdCBteXN0cnVjdCBteWZ1bmMoKTsKKyAgICAgIHR5cGVkZWYgY2hhciBnb29kX3QxW3NpemVvZihteWZ1bmMoKS5taSkgPT0gc2l6ZW9mKGludCkgID8gMSA6IC0xIF07CisgICAgICB0eXBlZGVmIGNoYXIgZ29vZF90MltzaXplb2YobXlmdW5jKCkubWMpID09IHNpemVvZihjaGFyKSA/IDEgOiAtMSBdOworICAgIF1dLFtbCisgICAgICBnb29kX3QxIGR1bW15MTsKKyAgICAgIGdvb2RfdDIgZHVtbXkyOworICAgIF1dKQorICBdLFsKKyAgICB0c3RfY29tcGlsZXJfY2hlY2tfb25lX3dvcmtzPSJ5ZXMiCisgIF0sWworICAgIHRzdF9jb21waWxlcl9jaGVja19vbmVfd29ya3M9Im5vIgorICAgIHNlZCAncy9eL2NjLXNyYzogLycgY29uZnRlc3QuJGFjX2V4dCA+JjYKKyAgICBzZWQgJ3MvXi9jYy1lcnI6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgXSkKKyAgdHN0X2NvbXBpbGVyX2NoZWNrX3R3b193b3Jrcz0idW5rbm93biIKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgc3RydWN0IG15c3RydWN0IHsKKyAgICAgICAgaW50ICBtaTsKKyAgICAgICAgY2hhciBtYzsKKyAgICAgICAgc3RydWN0IG15c3RydWN0ICpuZXh0OworICAgICAgfTsKKyAgICAgIHN0cnVjdCBteXN0cnVjdCBteWZ1bmMoKTsKKyAgICAgIHR5cGVkZWYgY2hhciBiYWRfdDFbc2l6ZW9mKG15ZnVuYygpLm1pKSAhPSBzaXplb2YoaW50KSAgPyAxIDogLTEgXTsKKyAgICAgIHR5cGVkZWYgY2hhciBiYWRfdDJbc2l6ZW9mKG15ZnVuYygpLm1jKSAhPSBzaXplb2YoY2hhcikgPyAxIDogLTEgXTsKKyAgICBdXSxbWworICAgICAgYmFkX3QxIGR1bW15MTsKKyAgICAgIGJhZF90MiBkdW1teTI7CisgICAgXV0pCisgIF0sWworICAgIHRzdF9jb21waWxlcl9jaGVja190d29fd29ya3M9Im5vIgorICBdLFsKKyAgICB0c3RfY29tcGlsZXJfY2hlY2tfdHdvX3dvcmtzPSJ5ZXMiCisgIF0pCisgIGlmIHRlc3QgIiR0c3RfY29tcGlsZXJfY2hlY2tfb25lX3dvcmtzIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waWxlcl9jaGVja190d29fd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIEFDX01TR19FUlJPUihbY29tcGlsZXIgZmFpbHMgc3RydWN0IG1lbWJlciBzaXplIGNoZWNraW5nLl0pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9TWU1CT0xfSElESU5HCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb21waWxlciBzdXBwb3J0cyBoaWRpbmcgbGlicmFyeSBpbnRlcm5hbCBzeW1ib2xzLCBzZXR0aW5nCitkbmwgc2hlbGwgdmFyaWFibGUgc3VwcG9ydHNfc3ltYm9sX2hpZGluZyB2YWx1ZSBhcyBhcHByb3ByaWF0ZSwgYXMgd2VsbCBhcworZG5sIHZhcmlhYmxlcyBzeW1ib2xfaGlkaW5nX0NGTEFHUyBhbmQgc3ltYm9sX2hpZGluZ19FWFRFUk4gd2hlbiBzdXBwb3J0ZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19DT01QSUxFUl9TWU1CT0xfSElESU5HXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19DSEVDS19DT01QSUxFUl0pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtDQVJFU19DT05GSUdVUkVfU1lNQk9MX0hJRElOR10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgc3VwcG9ydHMgaGlkaW5nIGxpYnJhcnkgaW50ZXJuYWwgc3ltYm9sc10pCisgIHN1cHBvcnRzX3N5bWJvbF9oaWRpbmc9Im5vIgorICBzeW1ib2xfaGlkaW5nX0NGTEFHUz0iIgorICBzeW1ib2xfaGlkaW5nX0VYVEVSTj0iIgorICB0bXBfQ0ZMQUdTPSIiCisgIHRtcF9FWFRFUk49IiIKKyAgY2FzZSAiJGNvbXBpbGVyX2lkIiBpbgorICAgIENMQU5HKQorICAgICAgZG5sIEFsbCB2ZXJzaW9ucyBvZiBjbGFuZyBzdXBwb3J0IC1mdmlzaWJpbGl0eT0KKyAgICAgIHRtcF9FWFRFUk49Il9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoXCJkZWZhdWx0XCIpKSkiCisgICAgICB0bXBfQ0ZMQUdTPSItZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgc3VwcG9ydHNfc3ltYm9sX2hpZGluZz0ieWVzIgorICAgICAgOzsKKyAgICBHTlVfQykKKyAgICAgIGRubCBPbmx5IGdjYyAzLjQgb3IgbGF0ZXIKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzA0IjsgdGhlbgorICAgICAgICBpZiAkQ0MgLS1oZWxwIC0tdmVyYm9zZSAyPiYxIHwgZ3JlcCBmdmlzaWJpbGl0eT0gPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgdG1wX0VYVEVSTj0iX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fIChcImRlZmF1bHRcIikpKSIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSItZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgICAgIHN1cHBvcnRzX3N5bWJvbF9oaWRpbmc9InllcyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICA7OworICAgIElOVEVMX1VOSVhfQykKKyAgICAgIGRubCBPbmx5IGljYyA5LjAgb3IgbGF0ZXIKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiOTAwIjsgdGhlbgorICAgICAgICBpZiAkQ0MgLS1oZWxwIC0tdmVyYm9zZSAyPiYxIHwgZ3JlcCBmdmlzaWJpbGl0eT0gPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworIyAgICAgICAgICAgICBpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgICAgcHJpbnRmKCJpY2MgZnZpc2liaWxpdHkgYnVnIHRlc3QiKTsKKyAgICAgICAgICAgIF1dKQorICAgICAgICAgIF0sWworICAgICAgICAgICAgdG1wX0VYVEVSTj0iX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fIChcImRlZmF1bHRcIikpKSIKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9Ii1mdmlzaWJpbGl0eT1oaWRkZW4iCisgICAgICAgICAgICBzdXBwb3J0c19zeW1ib2xfaGlkaW5nPSJ5ZXMiCisgICAgICAgICAgXSkKKyAgICAgICAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MiCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgOzsKKyAgICBTVU5QUk9fQykKKyAgICAgIGlmICRDQyAyPiYxIHwgZ3JlcCBmbGFncyA+L2Rldi9udWxsICYmICRDQyAtZmxhZ3MgfCBncmVwIHhsZHNjb3BlPSA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgICB0bXBfRVhURVJOPSJfX2dsb2JhbCIKKyAgICAgICAgdG1wX0NGTEFHUz0iLXhsZHNjb3BlPWhpZGRlbiIKKyAgICAgICAgc3VwcG9ydHNfc3ltYm9sX2hpZGluZz0ieWVzIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJHN1cHBvcnRzX3N5bWJvbF9oaWRpbmciID0gInllcyI7IHRoZW4KKyAgICB0bXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTICR0bXBfQ0ZMQUdTIgorICAgIHNxdWVlemUgQ0ZMQUdTCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICR0bXBfRVhURVJOIGNoYXIgKmR1bW15KGNoYXIgKmJ1ZmYpOworICAgICAgICBjaGFyICpkdW1teShjaGFyICpidWZmKQorICAgICAgICB7CisgICAgICAgICBpZihidWZmKQorICAgICAgICAgICByZXR1cm4gKytidWZmOworICAgICAgICAgZWxzZQorICAgICAgICAgICByZXR1cm4gYnVmZjsKKyAgICAgICAgfQorICAgICAgXV0sW1sKKyAgICAgICAgY2hhciBiWzE2XTsKKyAgICAgICAgY2hhciAqciA9IGR1bW15KCZiWzBdKTsKKyAgICAgICAgaWYocikKKyAgICAgICAgICByZXR1cm4gKGludCkqcjsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgc3VwcG9ydHNfc3ltYm9sX2hpZGluZz0ieWVzIgorICAgICAgaWYgdGVzdCAtZiBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgZ3JlcCAndmlzaWJpbGl0eScgY29uZnRlc3QuZXJyID4vZGV2L251bGwKKyAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAiMCI7IHRoZW4KKyAgICAgICAgICBzdXBwb3J0c19zeW1ib2xfaGlkaW5nPSJubyIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgXSxbCisgICAgICBzdXBwb3J0c19zeW1ib2xfaGlkaW5nPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgc2VkICdzL14vY2Mtc3JjOiAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNgorICAgICAgc2VkICdzL14vY2MtZXJyOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKyAgICBdKQorICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKyAgZmkKKyAgaWYgdGVzdCAiJHN1cHBvcnRzX3N5bWJvbF9oaWRpbmciID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHN5bWJvbF9oaWRpbmdfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICBzeW1ib2xfaGlkaW5nX0VYVEVSTj0iJHRtcF9FWFRFUk4iCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19DT01QSUxFUl9QUk9UT1RZUEVfTUlTTUFUQ0gKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZpZXMgaWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IGhhbHRzIGFmdGVyIHRoZQorZG5sIGNvbXBpbGF0aW9uIHBoYXNlIHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkgb2JqZWN0CitkbmwgY29kZSBmaWxlLCB3aGVuIHRoZSBzb3VyY2UgY29kZSB0cmllcyB0byByZWRlZmluZQorZG5sIGEgcHJvdG90eXBlIHdoaWNoIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzIG9uZS4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0NPTVBJTEVSX1BST1RPVFlQRV9NSVNNQVRDSF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJfSEFMVF9PTl9FUlJPUl0pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaGFsdHMgb24gZnVuY3Rpb24gcHJvdG90eXBlIG1pc21hdGNoXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICBpbnQgcmFuZChpbnQgbik7CisgICAgICBpbnQgcmFuZChpbnQgbikKKyAgICAgIHsKKyAgICAgICAgaWYobikKKyAgICAgICAgICByZXR1cm4gKytuOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIG47CisgICAgICB9CisgICAgXV0sW1sKKyAgICAgIGludCBpWzJdOworICAgICAgaW50IGogPSByYW5kKGlbMF0pOworICAgICAgaWYoaikKKyAgICAgICAgcmV0dXJuIGo7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBBQ19NU0dfRVJST1IoW2NvbXBpbGVyIGRvZXMgbm90IGhhbHQgb24gZnVuY3Rpb24gcHJvdG90eXBlIG1pc21hdGNoLl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIF0pCitdKQorCisKK2RubCBDQVJFU19WQVJfTUFUQ0ggKFZBUk5BTUUsIFZBTFVFKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZmllcyBpZiBzaGVsbCB2YXJpYWJsZSBWQVJOQU1FIGNvbnRhaW5zIFZBTFVFLgorZG5sIENvbnRlbnRzIG9mIHZhcmlhYmxlIFZBUk5BTUUgYW5kIFZBTFVFIGFyZSBoYW5kbGVkCitkbmwgYXMgd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdHMgb2Ygd29yZHMuIElmIGF0IGxlYXN0Citkbmwgb25lIHdvcmQgb2YgVkFMVUUgaXMgcHJlc2VudCBpbiBWQVJOQU1FIHRoZSBtYXRjaAorZG5sIGlzIGNvbnNpZGVyZWQgcG9zaXRpdmUsIG90aGVyd2lzZSBmYWxzZS4KKworQUNfREVGVU4oW0NBUkVTX1ZBUl9NQVRDSF0sIFsKKyAgYWNfdmFyX21hdGNoX3dvcmQ9Im5vIgorICBmb3Igd29yZDEgaW4gJFskMV07IGRvCisgICAgZm9yIHdvcmQyIGluIFskMl07IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX21hdGNoX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitdKQorCisKK2RubCBDQVJFU19WQVJfTUFUQ0hfSUZFTFNFIChWQVJOQU1FLCBWQUxVRSwKK2RubCAgICAgICAgICAgICAgICAgICAgICAgIFtBQ1RJT04tSUYtTUFUQ0hdLCBbQUNUSU9OLUlGLU5PVC1NQVRDSF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgcGVyZm9ybXMgYSBDVVJMX1ZBUl9NQVRDSCBjaGVjayBhbmQgZXhlY3V0ZXMKK2RubCBmaXJzdCBicmFuY2ggaWYgdGhlIG1hdGNoIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UKK2RubCB0aGUgc2Vjb25kIGJyYW5jaCBpcyBleGVjdXRlZC4KKworQUNfREVGVU4oW0NBUkVTX1ZBUl9NQVRDSF9JRkVMU0VdLCBbCisgIENBUkVTX1ZBUl9NQVRDSChbJDFdLFskMl0pCisgIGlmIHRlc3QgIiRhY192YXJfbWF0Y2hfd29yZCIgPSAieWVzIjsgdGhlbgorICBpZmVsc2UoJDMsLDosWyQzXSkKKyAgaWZlbHNlKCQ0LCwsW2Vsc2UKKyAgICAkNF0pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19WQVJfU1RSSVAgKFZBUk5BTUUsIFZBTFVFKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb250ZW50cyBvZiB2YXJpYWJsZSBWQVJOQU1FIGFuZCBWQUxVRSBhcmUgaGFuZGxlZAorZG5sIGFzIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3RzIG9mIHdvcmRzLiBFYWNoIHdvcmQKK2RubCBmcm9tIFZBTFVFIGlzIHJlbW92ZWQgZnJvbSBWQVJOQU1FIHdoZW4gcHJlc2VudC4KKworQUNfREVGVU4oW0NBUkVTX1ZBUl9TVFJJUF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfU0hGVU5DX1NRVUVFWkVdKWRubAorICBhY192YXJfc3RyaXBwZWQ9IiIKKyAgZm9yIHdvcmQxIGluICRbJDFdOyBkbworICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJubyIKKyAgICBmb3Igd29yZDIgaW4gWyQyXTsgZG8KKyAgICAgIGlmIHRlc3QgIiR3b3JkMSIgPSAiJHdvcmQyIjsgdGhlbgorICAgICAgICBhY192YXJfc3RyaXBfd29yZD0ieWVzIgorICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgdGVzdCAiJGFjX3Zhcl9zdHJpcF93b3JkIiA9ICJubyI7IHRoZW4KKyAgICAgIGFjX3Zhcl9zdHJpcHBlZD0iJGFjX3Zhcl9zdHJpcHBlZCAkd29yZDEiCisgICAgZmkKKyAgZG9uZQorICBkbmwgc3F1ZWV6ZSB3aGl0ZXNwYWNlIG91dCBvZiByZXN1bHQKKyAgWyQxXT0iJGFjX3Zhcl9zdHJpcHBlZCIKKyAgc3F1ZWV6ZSBbJDFdCitdKQorCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9jYXJlcy1jb25mb3B0cy5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2NhcmVzLWNvbmZvcHRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTAzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9jYXJlcy1jb25mb3B0cy5tNApAQCAtMCwwICsxLDM5NiBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDEzIGJ5IERhbmllbCBTdGVuYmVyZyBldCBhbAorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorIyB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisjIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorIyBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisjIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisjIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorIyB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBGaWxlIHZlcnNpb24gZm9yICdhY2xvY2FsJyB1c2UuIEtlZXAgaXQgYSBzaW5nbGUgbnVtYmVyLgorIyBzZXJpYWwgMTEKKworCitkbmwgQ0FSRVNfQ0hFQ0tfT1BUSU9OX0NVUkxERUJVRworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS1jdXJsZGVidWcgb3IgLS1kaXNhYmxlLWN1cmxkZWJ1ZywgYW5kIHNldAorZG5sIHNoZWxsIHZhcmlhYmxlIHdhbnRfY3VybGRlYnVnIHZhbHVlIGFzIGFwcHJvcHJpYXRlLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfT1BUSU9OX0NVUkxERUJVR10sIFsKKyAgQUNfQkVGT1JFKFskMF0sW0NBUkVTX0NIRUNLX0NVUkxERUJVR10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmddKQorICBPUFRfQ1VSTERFQlVHX0JVSUxEPSJkZWZhdWx0IgorICBBQ19BUkdfRU5BQkxFKGN1cmxkZWJ1ZywKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jdXJsZGVidWddLFtFbmFibGUgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmddKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1jdXJsZGVidWddLFtEaXNhYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nXSksCisgIE9QVF9DVVJMREVCVUdfQlVJTEQ9JGVuYWJsZXZhbCkKKyAgY2FzZSAiJE9QVF9DVVJMREVCVUdfQlVJTEQiIGluCisgICAgbm8pCisgICAgICBkbmwgLS1kaXNhYmxlLWN1cmxkZWJ1ZyBvcHRpb24gdXNlZAorICAgICAgd2FudF9jdXJsZGVidWc9Im5vIgorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgZG5sIGNvbmZpZ3VyZSBvcHRpb24gbm90IHNwZWNpZmllZAorICAgICAgd2FudF9jdXJsZGVidWc9Im5vIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZG5sIC0tZW5hYmxlLWN1cmxkZWJ1ZyBvcHRpb24gdXNlZC4KKyAgICAgIGRubCBUaGUgdXNlIG9mIHRoaXMgb3B0aW9uIHZhbHVlIGlzIGEgcmVxdWVzdCB0byBlbmFibGUgY3VybCdzCisgICAgICBkbmwgZGVidWcgbWVtb3J5IHRyYWNraW5nIGZvciB0aGUgYy1hcmVzIGxpYnJhcnkuIFRoaXMgaXMgYSBiaWcKKyAgICAgIGRubCBoYWNrIHRoYXQgY2FuIG9ubHkgYmUgZG9uZSB3aGVuIGEgd2hvbGUgYnVuY2ggb2YgcmVxdWlzaXRlcworICAgICAgZG5sIGFyZSBzaW11bHRhbmVvdXNseSBzYXRpc2ZpZWQuIExhdGVyIG9uLCB0aGVzZSByZXF1aXNpdGVzIGFyZQorICAgICAgZG5sIHZlcmlmaWVkIGFuZCBpZiB0aGV5IGFyZSBub3QgZnVsbHkgc2F0aXNmaWVkIHRoZSBvcHRpb24gd2lsbAorICAgICAgZG5sIGJlIGlnbm9yZWQgYW5kIGFjdCBhcyBpZiAtLWRpc2FibGUtY3VybGRlYnVnIGhhZCBiZWVuIGdpdmVuCisgICAgICBkbmwgc2V0dGluZyBzaGVsbCB2YXJpYWJsZSB3YW50X2N1cmxkZWJ1ZyB0byAnbm8nLgorICAgICAgd2FudF9jdXJsZGVidWc9InllcyIKKyAgICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJHdhbnRfY3VybGRlYnVnXSkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX09QVElPTl9ERUJVRworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS1kZWJ1ZyBvciAtLWRpc2FibGUtZGVidWcsIGFuZCBzZXQgc2hlbGwKK2RubCB2YXJpYWJsZSB3YW50X2RlYnVnIHZhbHVlIGFzIGFwcHJvcHJpYXRlLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfT1BUSU9OX0RFQlVHXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ0FSRVNfQ0hFQ0tfT1BUSU9OX1dBUk5JTkdTXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW0NBUkVTX0NIRUNLX09QVElPTl9DVVJMREVCVUddKWRubAorICBBQ19CRUZPUkUoWyQwXSxbWENfQ0hFQ0tfUFJPR19DQ10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgZGVidWcgYnVpbGQgb3B0aW9uc10pCisgIE9QVF9ERUJVR19CVUlMRD0iZGVmYXVsdCIKKyAgQUNfQVJHX0VOQUJMRShkZWJ1ZywKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kZWJ1Z10sW0VuYWJsZSBkZWJ1ZyBidWlsZCBvcHRpb25zXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZGVidWddLFtEaXNhYmxlIGRlYnVnIGJ1aWxkIG9wdGlvbnNdKSwKKyAgT1BUX0RFQlVHX0JVSUxEPSRlbmFibGV2YWwpCisgIGNhc2UgIiRPUFRfREVCVUdfQlVJTEQiIGluCisgICAgbm8pCisgICAgICBkbmwgLS1kaXNhYmxlLWRlYnVnIG9wdGlvbiB1c2VkCisgICAgICB3YW50X2RlYnVnPSJubyIKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgIGRubCBjb25maWd1cmUgb3B0aW9uIG5vdCBzcGVjaWZpZWQKKyAgICAgIHdhbnRfZGVidWc9Im5vIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZG5sIC0tZW5hYmxlLWRlYnVnIG9wdGlvbiB1c2VkCisgICAgICB3YW50X2RlYnVnPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyR3YW50X2RlYnVnXSkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX09QVElPTl9OT05CTE9DS0lORworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS1ub25ibG9ja2luZyBvciAtLWRpc2FibGUtbm9uYmxvY2tpbmcsIGFuZAorZG5sIHNldCBzaGVsbCB2YXJpYWJsZSB3YW50X25vbmJsb2NraW5nIGFzIGFwcHJvcHJpYXRlLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfT1BUSU9OX05PTkJMT0NLSU5HXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ0FSRVNfQ0hFQ0tfTk9OQkxPQ0tJTkdfU09DS0VUXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBub24tYmxvY2tpbmcgY29tbXVuaWNhdGlvbnNdKQorICBPUFRfTk9OQkxPQ0tJTkc9ImRlZmF1bHQiCisgIEFDX0FSR19FTkFCTEUobm9uYmxvY2tpbmcsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbm9uYmxvY2tpbmddLFtFbmFibGUgbm9uLWJsb2NraW5nIGNvbW11bmljYXRpb25zXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbm9uYmxvY2tpbmddLFtEaXNhYmxlIG5vbi1ibG9ja2luZyBjb21tdW5pY2F0aW9uc10pLAorICBPUFRfTk9OQkxPQ0tJTkc9JGVuYWJsZXZhbCkKKyAgY2FzZSAiJE9QVF9OT05CTE9DS0lORyIgaW4KKyAgICBubykKKyAgICAgIGRubCAtLWRpc2FibGUtbm9uYmxvY2tpbmcgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfbm9uYmxvY2tpbmc9Im5vIgorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgZG5sIGNvbmZpZ3VyZSBvcHRpb24gbm90IHNwZWNpZmllZAorICAgICAgd2FudF9ub25ibG9ja2luZz0ieWVzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZG5sIC0tZW5hYmxlLW5vbmJsb2NraW5nIG9wdGlvbiB1c2VkCisgICAgICB3YW50X25vbmJsb2NraW5nPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyR3YW50X25vbmJsb2NraW5nXSkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX09QVElPTl9PUFRJTUlaRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS1vcHRpbWl6ZSBvciAtLWRpc2FibGUtb3B0aW1pemUsIGFuZCBzZXQKK2RubCBzaGVsbCB2YXJpYWJsZSB3YW50X29wdGltaXplIHZhbHVlIGFzIGFwcHJvcHJpYXRlLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfT1BUSU9OX09QVElNSVpFXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19DSEVDS19PUFRJT05fREVCVUddKWRubAorICBBQ19CRUZPUkUoWyQwXSxbWENfQ0hFQ0tfUFJPR19DQ10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgY29tcGlsZXIgb3B0aW1pemVyXSkKKyAgT1BUX0NPTVBJTEVSX09QVElNSVpFPSJkZWZhdWx0IgorICBBQ19BUkdfRU5BQkxFKG9wdGltaXplLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW9wdGltaXplKD1PUFQpXSxbRW5hYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgKGRlZmF1bHQ9LU8yKV0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLW9wdGltaXplXSxbRGlzYWJsZSBjb21waWxlciBvcHRpbWl6YXRpb25zXSksCisgIE9QVF9DT01QSUxFUl9PUFRJTUlaRT0kZW5hYmxldmFsKQorICBjYXNlICIkT1BUX0NPTVBJTEVSX09QVElNSVpFIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS1vcHRpbWl6ZSBvcHRpb24gdXNlZC4gV2Ugd2lsbCBoYW5kbGUgdGhpcyBhcworICAgICAgZG5sIGEgcmVxdWVzdCB0byBkaXNhYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgaWYgcG9zc2libGUuCisgICAgICBkbmwgSWYgdGhlIGNvbXBpbGVyIGlzIGtub3duIENGTEFHUyBhbmQgQ1BQRkxBR1Mgd2lsbCBiZQorICAgICAgZG5sIG92ZXJyaWRkZW4sIG90aGVyd2lzZSB0aGlzIGNhbiBub3QgYmUgaG9ub3JlZC4KKyAgICAgIHdhbnRfb3B0aW1pemU9Im5vIgorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgZG5sIGNvbmZpZ3VyZSdzIG9wdGltaXplIG9wdGlvbiBub3Qgc3BlY2lmaWVkLiBJbml0aWFsbHkgd2Ugd2lsbAorICAgICAgZG5sIGhhbmRsZSB0aGlzIGFzIGEgYSByZXF1ZXN0IGNvbnRyYXJ5IHRvIGNvbmZpZ3VyZSdzIHNldHRpbmcKKyAgICAgIGRubCBmb3IgLS1lbmFibGUtZGVidWcuIElPVywgaW5pdGlhbGx5LCBmb3IgZGVidWctZW5hYmxlZCBidWlsZHMKKyAgICAgIGRubCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBhcyBhIHJlcXVlc3QgdG8gZGlzYWJsZSBvcHRpbWl6YXRpb25zIGlmCisgICAgICBkbmwgcG9zc2libGUsIGFuZCBmb3IgZGVidWctZGlzYWJsZWQgYnVpbGRzIHRoaXMgd2lsbCBiZSBoYW5kbGVkCisgICAgICBkbmwgaW5pdGlhbGx5IGFzIGEgcmVxdWVzdCB0byBlbmFibGUgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KKyAgICAgIGRubCBGaW5hbGx5LCBpZiB0aGUgY29tcGlsZXIgaXMga25vd24gYW5kIENGTEFHUyBhbmQgQ1BQRkxBR1MgZG8KKyAgICAgIGRubCBub3QgaGF2ZSBhbnkgb3B0aW1pemVyIGZsYWcgdGhlIHJlcXVlc3Qgd2lsbCBiZSBob25vcmVkLCBpbgorICAgICAgZG5sIGFueSBvdGhlciBjYXNlIHRoZSByZXF1ZXN0IGNhbiBub3QgYmUgaG9ub3JlZC4KKyAgICAgIGRubCBJT1csIGV4aXN0aW5nIG9wdGltaXplciBmbGFncyBkZWZpbmVkIGluIENGTEFHUyBvciBDUFBGTEFHUworICAgICAgZG5sIHdpbGwgYWx3YXlzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGFueSBpbml0aWFsIGFzc3VtcHRpb24uCisgICAgICBpZiB0ZXN0ICIkd2FudF9kZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgICAgICB3YW50X29wdGltaXplPSJhc3N1bWVfbm8iCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vdCBzcGVjaWZpZWQgKGFzc3VtaW5nIG5vKV0pCisgICAgICBlbHNlCisgICAgICAgIHdhbnRfb3B0aW1pemU9ImFzc3VtZV95ZXMiCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vdCBzcGVjaWZpZWQgKGFzc3VtaW5nIHllcyldKQorICAgICAgZmkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGRubCAtLWVuYWJsZS1vcHRpbWl6ZSBvcHRpb24gdXNlZC4gV2Ugd2lsbCBoYW5kbGUgdGhpcyBhcworICAgICAgZG5sIGEgcmVxdWVzdCB0byBlbmFibGUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KKyAgICAgIGRubCBJZiB0aGUgY29tcGlsZXIgaXMga25vd24gQ0ZMQUdTIGFuZCBDUFBGTEFHUyB3aWxsIGJlCisgICAgICBkbmwgb3ZlcnJpZGRlbiwgb3RoZXJ3aXNlIHRoaXMgY2FuIG5vdCBiZSBob25vcmVkLgorICAgICAgd2FudF9vcHRpbWl6ZT0ieWVzIgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENBUkVTX0NIRUNLX09QVElPTl9TWU1CT0xfSElESU5HCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb25maWd1cmUgaGFzIGJlZW4gaW52b2tlZCB3aXRoIG9wdGlvbgorZG5sIC0tZW5hYmxlLXN5bWJvbC1oaWRpbmcgb3IgLS1kaXNhYmxlLXN5bWJvbC1oaWRpbmcsCitkbmwgc2V0dGluZyBzaGVsbCB2YXJpYWJsZSB3YW50X3N5bWJvbF9oaWRpbmcgdmFsdWUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19PUFRJT05fU1lNQk9MX0hJRElOR10sIFsKKyAgQUNfQkVGT1JFKFskMF0sW0NBUkVTX0NIRUNLX0NPTVBJTEVSX1NZTUJPTF9ISURJTkddKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGhpZGluZyBvZiBsaWJyYXJ5IGludGVybmFsIHN5bWJvbHNdKQorICBPUFRfU1lNQk9MX0hJRElORz0iZGVmYXVsdCIKKyAgQUNfQVJHX0VOQUJMRShzeW1ib2wtaGlkaW5nLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN5bWJvbC1oaWRpbmddLFtFbmFibGUgaGlkaW5nIG9mIGxpYnJhcnkgaW50ZXJuYWwgc3ltYm9sc10pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXN5bWJvbC1oaWRpbmddLFtEaXNhYmxlIGhpZGluZyBvZiBsaWJyYXJ5IGludGVybmFsIHN5bWJvbHNdKSwKKyAgT1BUX1NZTUJPTF9ISURJTkc9JGVuYWJsZXZhbCkKKyAgY2FzZSAiJE9QVF9TWU1CT0xfSElESU5HIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS1zeW1ib2wtaGlkaW5nIG9wdGlvbiB1c2VkLgorICAgICAgZG5sIFRoaXMgaXMgYW4gaW5kaWNhdGlvbiB0byBub3QgYXR0ZW1wdCBoaWRpbmcgb2YgbGlicmFyeSBpbnRlcm5hbAorICAgICAgZG5sIHN5bWJvbHMuIERlZmF1bHQgc3ltYm9sIHZpc2liaWxpdHkgd2lsbCBiZSB1c2VkLCB3aGljaCBub3JtYWxseQorICAgICAgZG5sIGV4cG9zZXMgYWxsIGxpYnJhcnkgaW50ZXJuYWwgc3ltYm9scy4KKyAgICAgIHdhbnRfc3ltYm9sX2hpZGluZz0ibm8iCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICBkbmwgY29uZmlndXJlJ3Mgc3ltYm9sLWhpZGluZyBvcHRpb24gbm90IHNwZWNpZmllZC4KKyAgICAgIGRubCBIYW5kbGUgdGhpcyBhcyBpZiAtLWVuYWJsZS1zeW1ib2wtaGlkaW5nIG9wdGlvbiB3YXMgZ2l2ZW4uCisgICAgICB3YW50X3N5bWJvbF9oaWRpbmc9InllcyIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICA7OworICAgICopCisgICAgICBkbmwgLS1lbmFibGUtc3ltYm9sLWhpZGluZyBvcHRpb24gdXNlZC4KKyAgICAgIGRubCBUaGlzIGlzIGFuIGluZGljYXRpb24gdG8gYXR0ZW1wdCBoaWRpbmcgb2YgbGlicmFyeSBpbnRlcm5hbAorICAgICAgZG5sIHN5bWJvbHMuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgb24gc29tZSBjb21waWxlcnMvbGlua2Vycy4KKyAgICAgIHdhbnRfc3ltYm9sX2hpZGluZz0ieWVzIgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENBUkVTX0NIRUNLX09QVElPTl9FWFBPU0VfU1RBVElDUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS1leHBvc2Utc3RhdGljcyBvciAtLWRpc2FibGUtZXhwb3NlLXN0YXRpY3MsCitkbmwgc2V0dGluZyBzaGVsbCB2YXJpYWJsZSB3YW50X2V4cG9zZV9zdGF0aWNzIHZhbHVlLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfT1BUSU9OX0VYUE9TRV9TVEFUSUNTXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZXhwb3NlIGludGVybmFsIHN0YXRpYyBmdW5jdGlvbnMgZm9yIHRlc3RpbmddKQorICBPUFRfRVhQT1NFX1NUQVRJQ1M9ImRlZmF1bHQiCisgIEFDX0FSR19FTkFCTEUoZXhwb3NlLXN0YXRpY3MsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXhwb3NlLXN0YXRpY3NdLFtFbmFibGUgZXhwb3N1cmUgb2YgaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucyBmb3IgdGVzdGluZ10pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWV4cG9zZS1zdGF0aWNzXSxbRGlzYWJsZSBleHBvc3VyZSBvZiBpbnRlcm5hbCBzdGF0aWMgZnVuY3Rpb25zIGZvciB0ZXN0aW5nXSksCisgIE9QVF9FWFBPU0VfU1RBVElDUz0kZW5hYmxldmFsKQorICBjYXNlICIkT1BUX0VYUE9TRV9TVEFUSUNTIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS1leHBvc2Utc3RhdGljcyBvcHRpb24gdXNlZC4KKyAgICAgIHdhbnRfZXhwb3NlX3N0YXRpY3M9Im5vIgorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgZG5sIGNvbmZpZ3VyZSdzIGV4cG9zZS1zdGF0aWNzIG9wdGlvbiBub3Qgc3BlY2lmaWVkLgorICAgICAgZG5sIEhhbmRsZSB0aGlzIGFzIGlmIC0tZGlzYWJsZS1leHBvc2Utc3RhdGljcyBvcHRpb24gd2FzIGdpdmVuLgorICAgICAgd2FudF9leHBvc2Vfc3RhdGljcz0ibm8iCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICA7OworICAgICopCisgICAgICBkbmwgLS1lbmFibGUtZXhwb3NlLXN0YXRpY3Mgb3B0aW9uIHVzZWQuCisgICAgICB3YW50X2V4cG9zZV9zdGF0aWNzPSJ5ZXMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkd2FudF9leHBvc2Vfc3RhdGljcyIgPSAieWVzIjsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChDQVJFU19FWFBPU0VfU1RBVElDUywgMSwKKyAgICAgIFtEZWZpbmVkIGZvciBidWlsZCB0aGF0IGV4cG9zZXMgaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucyBmb3IgdGVzdGluZy5dKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfT1BUSU9OX1dBUk5JTkdTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb25maWd1cmUgaGFzIGJlZW4gaW52b2tlZCB3aXRoIG9wdGlvbgorZG5sIC0tZW5hYmxlLXdhcm5pbmdzIG9yIC0tZGlzYWJsZS13YXJuaW5ncywgYW5kIHNldAorZG5sIHNoZWxsIHZhcmlhYmxlIHdhbnRfd2FybmluZ3MgYXMgYXBwcm9wcmlhdGUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19PUFRJT05fV0FSTklOR1NdLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX0NIRUNLX09QVElPTl9ERUJVR10pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtDQVJFU19DSEVDS19PUFRJT05fV0VSUk9SXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW1hDX0NIRUNLX1BST0dfQ0NdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIHN0cmljdCBjb21waWxlciB3YXJuaW5nc10pCisgIE9QVF9DT01QSUxFUl9XQVJOSU5HUz0iZGVmYXVsdCIKKyAgQUNfQVJHX0VOQUJMRSh3YXJuaW5ncywKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS13YXJuaW5nc10sW0VuYWJsZSBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3NdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS13YXJuaW5nc10sW0Rpc2FibGUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzXSksCisgIE9QVF9DT01QSUxFUl9XQVJOSU5HUz0kZW5hYmxldmFsKQorICBjYXNlICIkT1BUX0NPTVBJTEVSX1dBUk5JTkdTIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS13YXJuaW5ncyBvcHRpb24gdXNlZAorICAgICAgd2FudF93YXJuaW5ncz0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICBkbmwgY29uZmlndXJlIG9wdGlvbiBub3Qgc3BlY2lmaWVkLCBzbworICAgICAgZG5sIHVzZSBzYW1lIHNldHRpbmcgYXMgLS1lbmFibGUtZGVidWcKKyAgICAgIHdhbnRfd2FybmluZ3M9IiR3YW50X2RlYnVnIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZG5sIC0tZW5hYmxlLXdhcm5pbmdzIG9wdGlvbiB1c2VkCisgICAgICB3YW50X3dhcm5pbmdzPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyR3YW50X3dhcm5pbmdzXSkKK10pCisKK2RubCBDQVJFU19DSEVDS19PUFRJT05fV0VSUk9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb25maWd1cmUgaGFzIGJlZW4gaW52b2tlZCB3aXRoIG9wdGlvbgorZG5sIC0tZW5hYmxlLXdlcnJvciBvciAtLWRpc2FibGUtd2Vycm9yLCBhbmQgc2V0Citkbmwgc2hlbGwgdmFyaWFibGUgd2FudF93ZXJyb3IgYXMgYXBwcm9wcmlhdGUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19PUFRJT05fV0VSUk9SXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ0FSRVNfQ0hFQ0tfQ09NUElMRVJdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGNvbXBpbGVyIHdhcm5pbmdzIGFzIGVycm9yc10pCisgIE9QVF9DT01QSUxFUl9XRVJST1I9ImRlZmF1bHQiCisgIEFDX0FSR19FTkFCTEUod2Vycm9yLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXdlcnJvcl0sW0VuYWJsZSBjb21waWxlciB3YXJuaW5ncyBhcyBlcnJvcnNdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS13ZXJyb3JdLFtEaXNhYmxlIGNvbXBpbGVyIHdhcm5pbmdzIGFzIGVycm9yc10pLAorICBPUFRfQ09NUElMRVJfV0VSUk9SPSRlbmFibGV2YWwpCisgIGNhc2UgIiRPUFRfQ09NUElMRVJfV0VSUk9SIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS13ZXJyb3Igb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfd2Vycm9yPSJubyIKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgIGRubCBjb25maWd1cmUgb3B0aW9uIG5vdCBzcGVjaWZpZWQKKyAgICAgIHdhbnRfd2Vycm9yPSJubyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGRubCAtLWVuYWJsZS13ZXJyb3Igb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfd2Vycm9yPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyR3YW50X3dlcnJvcl0pCitdKQorCisKK2RubCBDQVJFU19DSEVDS19OT05CTE9DS0lOR19TT0NLRVQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGhvdyB0byBzZXQgYSBzb2NrZXQgaW50byBub24tYmxvY2tpbmcgc3RhdGUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19OT05CTE9DS0lOR19TT0NLRVRdLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX0NIRUNLX09QVElPTl9OT05CTE9DS0lOR10pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0NIRUNLX0ZVTkNfRkNOVExdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19DSEVDS19GVU5DX0lPQ1RMXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVF0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfQ0FNRUxdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19DSEVDS19GVU5DX1NFVFNPQ0tPUFRdKWRubAorICAjCisgIHRzdF9tZXRob2Q9InVua25vd24iCisgIGlmIHRlc3QgIiR3YW50X25vbmJsb2NraW5nIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gc2V0IGEgc29ja2V0IGludG8gbm9uLWJsb2NraW5nIG1vZGVdKQorICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19mY250bF9vX25vbmJsb2NrIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iZmNudGwgT19OT05CTE9DSyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iaW9jdGwgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iaW9jdGxzb2NrZXQgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iSW9jdGxTb2NrZXQgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0ic2V0c29ja29wdCBTT19OT05CTE9DSyIKKyAgICBmaQorICAgIEFDX01TR19SRVNVTFQoWyR0c3RfbWV0aG9kXSkKKyAgICBpZiB0ZXN0ICIkdHN0X21ldGhvZCIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19XQVJOKFtjYW5ub3QgZGV0ZXJtaW5lIG5vbi1ibG9ja2luZyBzb2NrZXQgbWV0aG9kLl0pCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9tZXRob2QiID0gInVua25vd24iOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFVTRV9CTE9DS0lOR19TT0NLRVRTLCAxLAorICAgICAgW0RlZmluZSB0byBkaXNhYmxlIG5vbi1ibG9ja2luZyBzb2NrZXRzLl0pCisgICAgQUNfTVNHX1dBUk4oW25vbi1ibG9ja2luZyBzb2NrZXRzIGRpc2FibGVkLl0pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DT05GSUdVUkVfU1lNQk9MX0hJRElORworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBEZXBlbmRpbmcgb24gLS1lbmFibGUtc3ltYm9sLWhpZGluZyBvciAtLWRpc2FibGUtc3ltYm9sLWhpZGluZworZG5sIGNvbmZpZ3VyZSBvcHRpb24sIGFuZCBjb21waWxlciBjYXBhYmlsaXR5IHRvIGFjdHVhbGx5IGhvbm9yIHN1Y2gKK2RubCBvcHRpb24sIHRoaXMgd2lsbCBtb2RpZnkgY29tcGlsZXIgZmxhZ3MgYXMgYXBwcm9wcmlhdGUgYW5kIGFsc28KK2RubCBwcm92aWRlIG5lZWRlZCBkZWZpbml0aW9ucyBmb3IgY29uZmlndXJhdGlvbiBhbmQgTWFrZWZpbGUuYW0gZmlsZXMuCitkbmwgVGhpcyBtYWNybyBzaG91bGQgbm90IGJlIHVzZWQgdW50aWwgYWxsIGNvbXBpbGF0aW9uIHRlc3RzIGhhdmUKK2RubCBiZWVuIGRvbmUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2VzIG9uIG90aGVyIHRlc3RzLgorCitBQ19ERUZVTihbQ0FSRVNfQ09ORklHVVJFX1NZTUJPTF9ISURJTkddLCBbCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBoaWRpbmcgb2YgbGlicmFyeSBpbnRlcm5hbCBzeW1ib2xzIHdpbGwgYWN0dWFsbHkgaGFwcGVuXSkKKyAgQ0ZMQUdfQ0FSRVNfU1lNQk9MX0hJRElORz0iIgorICBkb2luZ19zeW1ib2xfaGlkaW5nPSJubyIKKyAgaWYgdGVzdCB4IiRhY19jdl9uYXRpdmVfd2luZG93cyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHdhbnRfc3ltYm9sX2hpZGluZyIgPSAieWVzIiAmJgorICAgIHRlc3QgIiRzdXBwb3J0c19zeW1ib2xfaGlkaW5nIiA9ICJ5ZXMiOyB0aGVuCisgICAgZG9pbmdfc3ltYm9sX2hpZGluZz0ieWVzIgorICAgIENGTEFHX0NBUkVTX1NZTUJPTF9ISURJTkc9IiRzeW1ib2xfaGlkaW5nX0NGTEFHUyIKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoQ0FSRVNfU1lNQk9MX1NDT1BFX0VYVEVSTiwgJHN5bWJvbF9oaWRpbmdfRVhURVJOLAorICAgICAgW0RlZmluaXRpb24gdG8gbWFrZSBhIGxpYnJhcnkgc3ltYm9sIGV4dGVybmFsbHkgdmlzaWJsZS5dKQorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCisgIEFNX0NPTkRJVElPTkFMKERPSU5HX0NBUkVTX1NZTUJPTF9ISURJTkcsIHRlc3QgeCRkb2luZ19zeW1ib2xfaGlkaW5nID0geHllcykKKyAgQUNfU1VCU1QoQ0ZMQUdfQ0FSRVNfU1lNQk9MX0hJRElORykKKyAgaWYgdGVzdCAiJGRvaW5nX3N5bWJvbF9oaWRpbmciID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoQ0FSRVNfU1lNQk9MX0hJRElORywgMSwKKyAgICAgIFtEZWZpbmVkIGZvciBidWlsZCB3aXRoIHN5bWJvbCBoaWRpbmcuXSkKKyAgZmkKK10pCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL200L2NhcmVzLWZ1bmN0aW9ucy5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2NhcmVzLWZ1bmN0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzdjOTJiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvY2FyZXMtZnVuY3Rpb25zLm00CkBAIC0wLDAgKzEsMzYxNSBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDEyIGJ5IERhbmllbCBTdGVuYmVyZyBldCBhbAorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorIyB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisjIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorIyBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisjIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisjIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorIyB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBGaWxlIHZlcnNpb24gZm9yICdhY2xvY2FsJyB1c2UuIEtlZXAgaXQgYSBzaW5nbGUgbnVtYmVyLgorIyBzZXJpYWwgNDYKKworCitkbmwgQ0FSRVNfSU5DTFVERVNfQVJQQV9JTkVUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIGFycGEvaW5ldC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ0FSRVNfSU5DTFVERVNfQVJQQV9JTkVUXSwgWworY2FyZXNfaW5jbHVkZXNfYXJwYV9pbmV0PSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCBuZXRpbmV0L2luLmggYXJwYS9pbmV0LmgsCisgICAgW10sIFtdLCBbJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldF0pCitdKQorCisKK2RubCBDQVJFU19JTkNMVURFU19GQ05UTAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBmY250bC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ0FSRVNfSU5DTFVERVNfRkNOVExdLCBbCitjYXJlc19pbmNsdWRlc19mY250bD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjICBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggdW5pc3RkLmggZmNudGwuaCwKKyAgICBbXSwgW10sIFskY2FyZXNfaW5jbHVkZXNfZmNudGxdKQorXSkKKworCitkbmwgQ0FSRVNfSU5DTFVERVNfTkVUREIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gbmV0ZGIuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NBUkVTX0lOQ0xVREVTX05FVERCXSwgWworY2FyZXNfaW5jbHVkZXNfbmV0ZGI9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBuZXRkYi5oLAorICAgIFtdLCBbXSwgWyRjYXJlc19pbmNsdWRlc19uZXRkYl0pCitdKQorCisKK2RubCBDQVJFU19JTkNMVURFU19TT0NLRVQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gc29ja2V0LmggaXMgdG8gYmUgaW5jbHVkZWQuCisKK0FDX0RFRlVOKFtDQVJFU19JTkNMVURFU19TT0NLRVRdLCBbCitjYXJlc19pbmNsdWRlc19zb2NrZXQ9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzb2NrZXQuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oIHNvY2tldC5oLAorICAgIFtdLCBbXSwgWyRjYXJlc19pbmNsdWRlc19zb2NrZXRdKQorXSkKKworCitkbmwgQ0FSRVNfSU5DTFVERVNfU1RETElCCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHN0ZGxpYi5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ0FSRVNfSU5DTFVERVNfU1RETElCXSwgWworY2FyZXNfaW5jbHVkZXNfc3RkbGliPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBzdGRsaWIuaCwKKyAgICBbXSwgW10sIFskY2FyZXNfaW5jbHVkZXNfc3RkbGliXSkKK10pCisKKworZG5sIENBUkVTX0lOQ0xVREVTX1NUUklORworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzdHJpbmcocykuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NBUkVTX0lOQ0xVREVTX1NUUklOR10sIFsKK2NhcmVzX2luY2x1ZGVzX3N0cmluZz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oIHN0cmluZy5oIHN0cmluZ3MuaCwKKyAgICBbXSwgW10sIFskY2FyZXNfaW5jbHVkZXNfc3RyaW5nXSkKK10pCisKKworZG5sIENBUkVTX0lOQ0xVREVTX1NUUk9QVFMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gc3Ryb3B0cy5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ0FSRVNfSU5DTFVERVNfU1RST1BUU10sIFsKK2NhcmVzX2luY2x1ZGVzX3N0cm9wdHM9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RST1BUU19ICisjICBpbmNsdWRlIDxzdHJvcHRzLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCB1bmlzdGQuaCBzeXMvc29ja2V0Lmggc3lzL2lvY3RsLmggc3Ryb3B0cy5oLAorICAgIFtdLCBbXSwgWyRjYXJlc19pbmNsdWRlc19zdHJvcHRzXSkKK10pCisKKworZG5sIENBUkVTX0lOQ0xVREVTX1NZU19TT0NLRVQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gc3lzL3NvY2tldC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ0FSRVNfSU5DTFVERVNfU1lTX1NPQ0tFVF0sIFsKK2NhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQ9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oLAorICAgIFtdLCBbXSwgWyRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0XSkKK10pCisKKworZG5sIENBUkVTX0lOQ0xVREVTX1NZU19UWVBFUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzeXMvdHlwZXMuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NBUkVTX0lOQ0xVREVTX1NZU19UWVBFU10sIFsKK2NhcmVzX2luY2x1ZGVzX3N5c190eXBlcz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oLAorICAgIFtdLCBbXSwgWyRjYXJlc19pbmNsdWRlc19zeXNfdHlwZXNdKQorXSkKKworCitkbmwgQ0FSRVNfSU5DTFVERVNfU1lTX1VJTworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzeXMvdWlvLmggaXMgdG8gYmUgaW5jbHVkZWQuCisKK0FDX0RFRlVOKFtDQVJFU19JTkNMVURFU19TWVNfVUlPXSwgWworY2FyZXNfaW5jbHVkZXNfc3lzX3Vpbz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VJT19ICisjICBpbmNsdWRlIDxzeXMvdWlvLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBzeXMvdWlvLmgsCisgICAgW10sIFtdLCBbJGNhcmVzX2luY2x1ZGVzX3N5c191aW9dKQorXSkKKworCitkbmwgQ0FSRVNfSU5DTFVERVNfVU5JU1RECitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHVuaXN0ZC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ0FSRVNfSU5DTFVERVNfVU5JU1REXSwgWworY2FyZXNfaW5jbHVkZXNfdW5pc3RkPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCB1bmlzdGQuaCwKKyAgICBbXSwgW10sIFskY2FyZXNfaW5jbHVkZXNfdW5pc3RkXSkKK10pCisKKworZG5sIENBUkVTX0lOQ0xVREVTX1dJTlNPQ0syCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHdpbnNvY2soMikuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NBUkVTX0lOQ0xVREVTX1dJTlNPQ0syXSwgWworY2FyZXNfaW5jbHVkZXNfd2luc29jazI9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyMgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjICAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjICBlbHNlCisjICAgIGlmZGVmIEhBVkVfV0lOU09DS19ICisjICAgICAgaW5jbHVkZSA8d2luc29jay5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBDVVJMX0NIRUNLX0hFQURFUl9XSU5ET1dTCisgIENVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0sKKyAgQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DSzIKK10pCisKKworZG5sIENBUkVTX0lOQ0xVREVTX1dTMlRDUElQCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHdzMnRjcGlwLmggaXMgdG8gYmUgaW5jbHVkZWQuCisKK0FDX0RFRlVOKFtDQVJFU19JTkNMVURFU19XUzJUQ1BJUF0sIFsKK2NhcmVzX2luY2x1ZGVzX3dzMnRjcGlwPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgICBpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyMgICAgICAgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XUworICBDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMgorICBDVVJMX0NIRUNLX0hFQURFUl9XUzJUQ1BJUAorXSkKKworCitkbmwgQ0FSRVNfUFJFUFJPQ0VTU19DQUxMQ09OVgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBhIHByZXByb2Nlc3NvciBibG9jayB3aGljaAorZG5sIGRlZmluZXMgZnVuY3Rpb24gY2FsbGluZyBjb252ZW50aW9uLgorCitBQ19ERUZVTihbQ0FSRVNfUFJFUFJPQ0VTU19DQUxMQ09OVl0sIFsKK2NhcmVzX3ByZXByb2Nlc3NfY2FsbGNvbnY9IlwKKy8qIHByZXByb2Nlc3Mgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorIyAgZGVmaW5lIEZVTkNBTExDT05WIF9fc3RkY2FsbAorI2Vsc2UKKyMgIGRlZmluZSBGVU5DQUxMQ09OVgorI2VuZGlmCisvKiBwcmVwcm9jZXNzIGVuZCAqLyIKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfQ0xPU0VTT0NLRVQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNsb3Nlc29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2Nsb3Nlc29ja2V0LCB0aGVuCitkbmwgSEFWRV9DTE9TRVNPQ0tFVCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0NMT1NFU09DS0VUXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NPQ0tFVF0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2Nsb3Nlc29ja2V0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fY2xvc2Vzb2NrZXQ9InVua25vd24iCisgIHRzdF9jb21waV9jbG9zZXNvY2tldD0idW5rbm93biIKKyAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgY2xvc2Vzb2NrZXQgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3NvY2tldAorICAgIF1dLFtbCisgICAgICBpZigwICE9IGNsb3Nlc29ja2V0KDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfY2xvc2Vzb2NrZXQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19jbG9zZXNvY2tldD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19jbG9zZXNvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgY2xvc2Vzb2NrZXQgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtjbG9zZXNvY2tldF0sWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fY2xvc2Vzb2NrZXQ9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgY2xvc2Vzb2NrZXQgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IGNsb3Nlc29ja2V0KDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfY2xvc2Vzb2NrZXQ9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9jbG9zZXNvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgY2xvc2Vzb2NrZXQgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19jbG9zZXNvY2tldCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0PSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgY2xvc2Vzb2NrZXQgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfY2xvc2Vzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0NMT1NFU09DS0VULCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjbG9zZXNvY2tldCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfY2xvc2Vzb2NrZXQ9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0PSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfQ0xPU0VTT0NLRVRfQ0FNRUwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIENsb3NlU29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2Nsb3Nlc29ja2V0X2NhbWVsLAorZG5sIHRoZW4gSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0NMT1NFU09DS0VUX0NBTUVMXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TWVNfU09DS0VUXSlkbmwKKyAgIworICB0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBDbG9zZVNvY2tldCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBDbG9zZVNvY2tldCgwKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIENsb3NlU29ja2V0IGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbQ2xvc2VTb2NrZXRdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgQ2xvc2VTb2NrZXQgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IENsb3NlU29ja2V0KDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgQ2xvc2VTb2NrZXQgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19jbG9zZXNvY2tldF9jYW1lbCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0X2NhbWVsPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgQ2xvc2VTb2NrZXQgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0NMT1NFU09DS0VUX0NBTUVMLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBDbG9zZVNvY2tldCBjYW1lbCBjYXNlIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19jbG9zZXNvY2tldF9jYW1lbD0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19DT05ORUNUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb25uZWN0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2Nvbm5lY3QsIHRoZW4KK2RubCBIQVZFX0NPTk5FQ1Qgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19DT05ORUNUXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NZU19TT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TT0NLRVRdKWRubAorICAjCisgIHRzdF9saW5rc19jb25uZWN0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fY29ubmVjdD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Nvbm5lY3Q9InVua25vd24iCisgIHRzdF9hbGxvd19jb25uZWN0PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29ubmVjdCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGNhcmVzX2luY2x1ZGVzX3NvY2tldAorICAgIF1dLFtbCisgICAgICBpZigwICE9IGNvbm5lY3QoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19jb25uZWN0PSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfY29ubmVjdD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19jb25uZWN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb25uZWN0IGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbY29ubmVjdF0sWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGNhcmVzX2luY2x1ZGVzX3NvY2tldAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19jb25uZWN0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fY29ubmVjdD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2Nvbm5lY3QiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbm5lY3QgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IGNvbm5lY3QoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfY29ubmVjdD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2Nvbm5lY3Q9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9jb25uZWN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb25uZWN0IHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfY29ubmVjdCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2Nvbm5lY3Q9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfY29ubmVjdD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbm5lY3QgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY29ubmVjdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2Nvbm5lY3QiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9jb25uZWN0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfY29ubmVjdCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfQ09OTkVDVCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY29ubmVjdCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfY29ubmVjdD0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfY29ubmVjdD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX0ZDTlRMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBmY250bCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19mY250bCwgdGhlbgorZG5sIEhBVkVfRkNOVEwgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19GQ05UTF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfRkNOVExdKWRubAorICAjCisgIHRzdF9saW5rc19mY250bD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2ZjbnRsPSJ1bmtub3duIgorICB0c3RfY29tcGlfZmNudGw9InVua25vd24iCisgIHRzdF9hbGxvd19mY250bD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZjbnRsIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtmY250bF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2ZjbnRsPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZmNudGw9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZmNudGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZjbnRsIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZmNudGxdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19mY250bAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19mY250bD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2ZjbnRsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZmNudGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZjbnRsIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfZmNudGwKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZmNudGwoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfZmNudGw9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9mY250bD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZjbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmY250bCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2ZjbnRsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZmNudGw9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZmNudGw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmY250bCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mY250bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZjbnRsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZmNudGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mY250bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRkNOVEwsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZjbnRsIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19mY250bD0ieWVzIgorICAgIENBUkVTX0NIRUNLX0ZVTkNfRkNOVExfT19OT05CTE9DSworICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZmNudGw9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19GQ05UTF9PX05PTkJMT0NLCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBmY250bCB3aXRoIHN0YXR1cyBmbGFnIE9fTk9OQkxPQ0sgaXMKK2RubCBhdmFpbGFibGUsIGNhbiBiZSBjb21waWxlZCwgYW5kIHNlZW1zIHRvIHdvcmsuIElmCitkbmwgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCB0aGVuIEhBVkVfRkNOVExfT19OT05CTE9DSworZG5sIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfRkNOVExfT19OT05CTE9DS10sIFsKKyAgIworICB0c3RfY29tcGlfZmNudGxfb19ub25ibG9jaz0idW5rbm93biIKKyAgdHN0X2FsbG93X2ZjbnRsX29fbm9uYmxvY2s9InVua25vd24iCisgICMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHN1bm9zNCogfCBhaXgzKiB8IGJlb3MqKQorICAgICAgZG5sIE9fTk9OQkxPQ0sgZG9lcyBub3Qgd29yayBvbiB0aGVzZSBwbGF0Zm9ybXMKKyAgICAgIGNhcmVzX2Rpc2FsbG93X2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgICAgIDs7CisgIGVzYWMKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19mY250bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmNudGwgT19OT05CTE9DSyBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX2ZjbnRsCisgICAgICBdXSxbWworICAgICAgICBpbnQgZmxhZ3MgPSAwOworICAgICAgICBpZigwICE9IGZjbnRsKDAsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfZmNudGxfb19ub25ibG9jaz0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2ZjbnRsX29fbm9uYmxvY2s9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mY250bF9vX25vbmJsb2NrIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmY250bCBPX05PTkJMT0NLIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfZmNudGxfb19ub25ibG9jayIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZmNudGxfb19ub25ibG9jaz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZjbnRsIE9fTk9OQkxPQ0sgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZmNudGxfb19ub25ibG9jayIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZjbnRsX29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZDTlRMX09fTk9OQkxPQ0ssIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGZjbnRsIE9fTk9OQkxPQ0sgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2ZjbnRsX29fbm9uYmxvY2s9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19GUkVFQUREUklORk8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGZyZWVhZGRyaW5mbyBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsCitkbmwgYW5kIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLAorZG5sIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19mcmVlYWRkcmluZm8sIHRoZW4KK2RubCBIQVZFX0ZSRUVBRERSSU5GTyB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0ZSRUVBRERSSU5GT10sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfV1MyVENQSVBdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TWVNfU09DS0VUXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfTkVUREJdKWRubAorICAjCisgIHRzdF9saW5rc19mcmVlYWRkcmluZm89InVua25vd24iCisgIHRzdF9wcm90b19mcmVlYWRkcmluZm89InVua25vd24iCisgIHRzdF9jb21waV9mcmVlYWRkcmluZm89InVua25vd24iCisgIHRzdF9hbGxvd19mcmVlYWRkcmluZm89InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVlYWRkcmluZm8gY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjYXJlc19pbmNsdWRlc193czJ0Y3BpcAorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorICAgIF1dLFtbCisgICAgICBmcmVlYWRkcmluZm8oMCk7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbz0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbz0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mcmVlYWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZyZWVhZGRyaW5mbyBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2ZyZWVhZGRyaW5mb10sWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbz0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZnJlZWFkZHJpbmZvIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisgICAgICBdXSxbWworICAgICAgICBmcmVlYWRkcmluZm8oMCk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfZnJlZWFkZHJpbmZvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfZnJlZWFkZHJpbmZvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZnJlZWFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVlYWRkcmluZm8gdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19mcmVlYWRkcmluZm8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19mcmVlYWRkcmluZm89InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZnJlZWFkZHJpbmZvPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZnJlZWFkZHJpbmZvIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2ZyZWVhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZyZWVhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRlJFRUFERFJJTkZPLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmcmVlYWRkcmluZm8gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2ZyZWVhZGRyaW5mbz0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZnJlZWFkZHJpbmZvPSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfR0VUQUREUklORk8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGdldGFkZHJpbmZvIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgY2FuCitkbmwgYmUgY29tcGlsZWQgYW5kIHNlZW1zIHRvIHdvcmsuIElmIGFsbCBvZiB0aGVzZSBhcmUKK2RubCB0cnVlLCBhbmQgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZAorZG5sIHdpdGggc2hlbGwgdmFyaWFibGUgY2FyZXNfZGlzYWxsb3dfZ2V0YWRkcmluZm8sIHRoZW4KK2RubCBIQVZFX0dFVEFERFJJTkZPIHdpbGwgYmUgZGVmaW5lZC4gQWRkaXRpb25hbGx5IHdoZW4KK2RubCBIQVZFX0dFVEFERFJJTkZPIGdldHMgZGVmaW5lZCB0aGlzIHdpbGwgYWxzbyBhdHRlbXB0CitkbmwgdG8gZmluZCBvdXQgaWYgZ2V0YWRkcmluZm8gaGFwcGVucyB0byBiZSB0aHJlYWRzYWZlLAorZG5sIGRlZmluaW5nIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB3aGVuIHRydWUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0dFVEFERFJJTkZPXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19XUzJUQ1BJUF0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NURExJQl0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NUUklOR10pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NZU19TT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19ORVREQl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfTkFUSVZFX1dJTkRPV1NdKWRubAorICAjCisgIHRzdF9saW5rc19nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0YWRkcmluZm89InVua25vd24iCisgIHRzdF93b3Jrc19nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X2FsbG93X2dldGFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRhZGRyaW5mbyBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gZ2V0YWRkcmluZm8oMCwgMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nZXRhZGRyaW5mbz0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2dldGFkZHJpbmZvPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRhZGRyaW5mbyBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2dldGFkZHJpbmZvXSxbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fZ2V0YWRkcmluZm89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRhZGRyaW5mbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRhZGRyaW5mbyBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBnZXRhZGRyaW5mbygwLCAwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9nZXRhZGRyaW5mbz0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2dldGFkZHJpbmZvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gc2VlbXMgdG8gd29ya10pCisgICAgQUNfUlVOX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdGRsaWIKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKyAgICAgIF1dLFtbCisgICAgICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKKyAgICAgICAgc3RydWN0IGFkZHJpbmZvICphaSA9IDA7CisgICAgICAgIGludCBlcnJvcjsKKworICAgICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgICAgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKyAgICAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworICAgICAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworICAgICAgICBlcnJvciA9IGdldGFkZHJpbmZvKCIxMjcuMC4wLjEiLCAwLCAmaGludHMsICZhaSk7CisgICAgICAgIGlmKGVycm9yIHx8ICFhaSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICBleGl0KDApOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3dvcmtzX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3Rfd29ya3NfZ2V0YWRkcmluZm89Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9nZXRhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgIHRlc3QgIiR0c3Rfd29ya3NfZ2V0YWRkcmluZm8iICE9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGFkZHJpbmZvIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfZ2V0YWRkcmluZm8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19nZXRhZGRyaW5mbz0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19nZXRhZGRyaW5mbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGFkZHJpbmZvIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZ2V0YWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfZ2V0YWRkcmluZm8iICE9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEFERFJJTkZPLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBnZXRhZGRyaW5mbyBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm89InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvPSJubyIKKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvX3RocmVhZHNhZmU9Im5vIgorICBmaQorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2dldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRhZGRyaW5mbyBpcyB0aHJlYWRzYWZlXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzEyMzRdXS4qIHwgYWl4NS5bWzAxXV0uKikKKyAgICAgICAgZG5sIGFpeCA1LjEgYW5kIG9sZGVyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBhaXgqKQorICAgICAgICBkbmwgYWl4IDUuMiBhbmQgbmV3ZXIKKyAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgICAgIDs7CisgICAgICBkYXJ3aW5bWzEyMzQ1XV0uKikKKyAgICAgICAgZG5sIGRhcndpbiA1LjAgYW5kIG1hYyBvcyB4IDEwLjEuWCBhbmQgb2xkZXIKKyAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJubyIKKyAgICAgICAgOzsKKyAgICAgIGRhcndpbiopCisgICAgICAgIGRubCBkYXJ3aW4gNi4wIGFuZCBtYWMgb3MgeCAxMC4yLlggYW5kIG5ld2VyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgZnJlZWJzZFtbMTIzNF1dLiogfCBmcmVlYnNkNS5bWzEyMzRdXSopCisgICAgICAgIGRubCBmcmVlYnNkIDUuNCBhbmQgb2xkZXIKKyAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJubyIKKyAgICAgICAgOzsKKyAgICAgIGZyZWVic2QqKQorICAgICAgICBkbmwgZnJlZWJzZCA1LjUgYW5kIG5ld2VyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgaHB1eFtbMTIzNDU2Nzg5XV0uKiB8IGhwdXgxMC4qIHwgaHB1eDExLjAqIHwgaHB1eDExLjEwKikKKyAgICAgICAgZG5sIGhwdXggMTEuMTAgYW5kIG9sZGVyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBocHV4KikKKyAgICAgICAgZG5sIGhwdXggMTEuMTEgYW5kIG5ld2VyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgbmV0YnNkW1sxMjNdXS4qKQorICAgICAgICBkbmwgbmV0YnNkIDMuWCBhbmQgb2xkZXIKKyAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJubyIKKyAgICAgICAgOzsKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGRubCBuZXRic2QgNC5YIGFuZCBuZXdlcgorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICAgICpic2QqKQorICAgICAgICBkbmwgQWxsIG90aGVyIGJzZCdzCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBzb2xhcmlzMiopCisgICAgICAgIGRubCBzb2xhcmlzIHdoaWNoIGhhdmUgaXQKKyAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgIiR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID0gInVua25vd24iICYmCisgICAgICAgdGVzdCAiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID0gInVua25vd24iOyB0aGVuCisgICAgICBDVVJMX0NIRUNLX0RFRl9DQyhbaF9lcnJub10sIFsKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisgICAgICAgIF0sIFtzaWxlbnRdKQorICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfaF9lcnJubyIgPSAieWVzIjsgdGhlbgorICAgICAgICB0c3RfaF9lcnJub19tYWNybz0ieWVzIgorICAgICAgZWxzZQorICAgICAgICB0c3RfaF9lcnJub19tYWNybz0ibm8iCisgICAgICBmaQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorICAgICAgICBdXSxbWworICAgICAgICAgIGhfZXJybm8gPSAyOworICAgICAgICAgIGlmKDAgIT0gaF9lcnJubykKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICB0c3RfaF9lcnJub19tb2RpZmlhYmxlX2x2YWx1ZT0ieWVzIgorICAgICAgXSxbCisgICAgICAgIHRzdF9oX2Vycm5vX21vZGlmaWFibGVfbHZhbHVlPSJubyIKKyAgICAgIF0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICBdXSxbWworI2lmIGRlZmluZWQoX1BPU0lYX0NfU09VUkNFKSAmJiAoX1BPU0lYX0NfU09VUkNFID49IDIwMDgwOUwpCisgICAgICAgICAgcmV0dXJuIDA7CisjZWxpZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpICYmIChfWE9QRU5fU09VUkNFID49IDcwMCkKKyAgICAgICAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgICAgICAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICB0c3RfaF9lcnJub19zYnNfaXNzdWVfNz0ieWVzIgorICAgICAgXSxbCisgICAgICAgIHRzdF9oX2Vycm5vX3Nic19pc3N1ZV83PSJubyIKKyAgICAgIF0pCisgICAgICBpZiB0ZXN0ICIkdHN0X2hfZXJybm9fbWFjcm8iID0gIm5vIiAmJgorICAgICAgICAgdGVzdCAiJHRzdF9oX2Vycm5vX21vZGlmaWFibGVfbHZhbHVlIiA9ICJubyIgJiYKKyAgICAgICAgIHRlc3QgIiR0c3RfaF9lcnJub19zYnNfaXNzdWVfNyIgPSAibm8iOyB0aGVuCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICBlbHNlCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgZmkKKyAgICBmaQorICAgIEFDX01TR19SRVNVTFQoWyR0c3RfdHNhZmVfZ2V0YWRkcmluZm9dKQorICAgIGlmIHRlc3QgIiR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24gaXMgdGhyZWFkc2FmZS5dKQorICAgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mb190aHJlYWRzYWZlPSJ5ZXMiCisgICAgZWxzZQorICAgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mb190aHJlYWRzYWZlPSJubyIKKyAgICBmaQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19HRVRFTlYKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGdldGVudiBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19nZXRlbnYsIHRoZW4KK2RubCBIQVZFX0dFVEVOViB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0dFVEVOVl0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfU1RETElCXSlkbmwKKyAgIworICB0c3RfbGlua3NfZ2V0ZW52PSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0ZW52PSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0ZW52PSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0ZW52PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0ZW52IGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtnZXRlbnZdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nZXRlbnY9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19nZXRlbnY9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0ZW52IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRlbnYgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtnZXRlbnZdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19zdGRsaWIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fZ2V0ZW52PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZ2V0ZW52PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0ZW52IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRlbnYgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdGRsaWIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZ2V0ZW52KDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2dldGVudj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2dldGVudj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGVudiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0ZW52IHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfZ2V0ZW52IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZ2V0ZW52PSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldGVudj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGVudiBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRlbnYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRlbnYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRlbnYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRlbnYiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEVOViwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0ZW52IGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19nZXRlbnY9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGVudj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX0dFVEhPU1RCWUFERFIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGdldGhvc3RieWFkZHIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLAorZG5sIGFuZCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwKK2RubCBhbmQgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY2FyZXNfZGlzYWxsb3dfZ2V0aG9zdGJ5YWRkciwgdGhlbgorZG5sIEhBVkVfR0VUSE9TVEJZQUREUiB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0dFVEhPU1RCWUFERFJdLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1dJTlNPQ0syXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfTkVUREJdKWRubAorICAjCisgIHRzdF9saW5rc19nZXRob3N0YnlhZGRyPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHI9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5YWRkciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBnZXRob3N0YnlhZGRyKDAsIDAsIDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkcj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2dldGhvc3RieWFkZHI9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5YWRkciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2dldGhvc3RieWFkZHJdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RieWFkZHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnlhZGRyPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5YWRkciBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBnZXRob3N0YnlhZGRyKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5YWRkciB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2dldGhvc3RieWFkZHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RieWFkZHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnlhZGRyIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieWFkZHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnlhZGRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieWFkZHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEhPU1RCWUFERFIsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHIgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieWFkZHI9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieWFkZHI9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19HRVRIT1NUQllOQU1FCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBnZXRob3N0YnluYW1lIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwKK2RubCBhbmQgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsCitkbmwgYW5kIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2dldGhvc3RieW5hbWUsIHRoZW4KK2RubCBIQVZFX0dFVEhPU1RCWU5BTUUgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19HRVRIT1NUQllOQU1FXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX05FVERCXSlkbmwKKyAgIworICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZT0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RieW5hbWU9InVua25vd24iCisgIHRzdF9jb21waV9nZXRob3N0YnluYW1lPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZT0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWUgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX25ldGRiCisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5bmFtZSgwKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2dldGhvc3RieW5hbWU9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19nZXRob3N0YnluYW1lPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWUgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtnZXRob3N0YnluYW1lXSxbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnluYW1lPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdGJ5bmFtZT0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWUgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5bmFtZSgwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9nZXRob3N0YnluYW1lPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZT0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWUgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19nZXRob3N0YnluYW1lIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZT0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnluYW1lPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5bmFtZSBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0YnluYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdGJ5bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRob3N0YnluYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9HRVRIT1NUQllOQU1FLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfR0VUSE9TVE5BTUUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGdldGhvc3RuYW1lIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2dldGhvc3RuYW1lLCB0aGVuCitkbmwgSEFWRV9HRVRIT1NUTkFNRSB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0dFVEhPU1ROQU1FXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1VOSVNURF0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX1BSRVBST0NFU1NfQ0FMTENPTlZdKWRubAorICAjCisgIHRzdF9saW5rc19nZXRob3N0bmFtZT0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RuYW1lPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0aG9zdG5hbWU9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0bmFtZT0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RuYW1lIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjYXJlc19pbmNsdWRlc191bmlzdGQKKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBnZXRob3N0bmFtZSgwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2dldGhvc3RuYW1lPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZ2V0aG9zdG5hbWU9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RuYW1lIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZ2V0aG9zdG5hbWVdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3VuaXN0ZAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19nZXRob3N0bmFtZT0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RuYW1lPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RuYW1lIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3VuaXN0ZAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBnZXRob3N0bmFtZSgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9nZXRob3N0bmFtZT0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2dldGhvc3RuYW1lPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBnZXRob3N0bmFtZSBhcmcgMiBkYXRhIHR5cGVdKQorICAgIHRzdF9nZXRob3N0bmFtZV90eXBlX2FyZzI9InVua25vd24iCisgICAgZm9yIHRzdF9hcmcxIGluICdjaGFyIConICd1bnNpZ25lZCBjaGFyIConICd2b2lkIConOyBkbworICAgICAgZm9yIHRzdF9hcmcyIGluICdpbnQnICd1bnNpZ25lZCBpbnQnICdzaXplX3QnOyBkbworICAgICAgICBpZiB0ZXN0ICIkdHN0X2dldGhvc3RuYW1lX3R5cGVfYXJnMiIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICAgICAgICRjYXJlc19pbmNsdWRlc191bmlzdGQKKyAgICAgICAgICAgICAgJGNhcmVzX3ByZXByb2Nlc3NfY2FsbGNvbnYKKyAgICAgICAgICAgICAgZXh0ZXJuIGludCBGVU5DQUxMQ09OViBnZXRob3N0bmFtZSgkdHN0X2FyZzEsICR0c3RfYXJnMik7CisgICAgICAgICAgICBdXSxbWworICAgICAgICAgICAgICBpZigwICE9IGdldGhvc3RuYW1lKDAsIDApKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgXV0pCisgICAgICAgICAgXSxbCisgICAgICAgICAgICB0c3RfZ2V0aG9zdG5hbWVfdHlwZV9hcmcyPSIkdHN0X2FyZzIiCisgICAgICAgICAgXSkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgQUNfTVNHX1JFU1VMVChbJHRzdF9nZXRob3N0bmFtZV90eXBlX2FyZzJdKQorICAgIGlmIHRlc3QgIiR0c3RfZ2V0aG9zdG5hbWVfdHlwZV9hcmcyIiAhPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChHRVRIT1NUTkFNRV9UWVBFX0FSRzIsICR0c3RfZ2V0aG9zdG5hbWVfdHlwZV9hcmcyLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRob3N0bmFtZS5dKQorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9nZXRob3N0bmFtZSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdG5hbWUgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19nZXRob3N0bmFtZSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RuYW1lPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RuYW1lPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdG5hbWUgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdG5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RuYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEhPU1ROQU1FLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0bmFtZSBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdG5hbWU9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RuYW1lPSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfR0VUU0VSVkJZUE9SVF9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBnZXRzZXJ2Ynlwb3J0X3IgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLAorZG5sIGFuZCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY2FyZXNfZGlzYWxsb3dfZ2V0c2VydmJ5cG9ydF9yLCB0aGVuCitkbmwgSEFWRV9HRVRTRVJWQllQT1JUX1Igd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19HRVRTRVJWQllQT1JUX1JdLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX05FVERCXSlkbmwKKyAgIworICB0c3RfbGlua3NfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtnZXRzZXJ2Ynlwb3J0X3JdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRzZXJ2Ynlwb3J0X3IgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtnZXRzZXJ2Ynlwb3J0X3JdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19uZXRkYgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIHRha2VzIDQgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjQiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIHRha2VzIDUgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjUiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIHRha2VzIDYgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY2FyZXNfaW5jbHVkZXNfbmV0ZGIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjYiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldHNlcnZieXBvcnRfciBpcyBjb21waWxhYmxlXSkKKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfZ2V0c2VydmJ5cG9ydF9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldHNlcnZieXBvcnRfcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldHNlcnZieXBvcnRfciBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVFNFUlZCWVBPUlRfUiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0c2VydmJ5cG9ydF9yIGZ1bmN0aW9uLl0pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEdFVFNFUlZCWVBPUlRfUl9BUkdTLCAkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciwKKyAgICAgIFtTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gZ2V0c2VydmJ5cG9ydF9yXSkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciIgLWVxICI0IjsgdGhlbgorICAgICAgQUNfREVGSU5FKEdFVFNFUlZCWVBPUlRfUl9CVUZTSVpFLCBzaXplb2Yoc3RydWN0IHNlcnZlbnRfZGF0YSksCisgICAgICAgIFtTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBwYXNzIHRvIGdldHNlcnZieXBvcnRfcl0pCisgICAgZWxzZQorICAgICAgQUNfREVGSU5FKEdFVFNFUlZCWVBPUlRfUl9CVUZTSVpFLCA0MDk2LAorICAgICAgICBbU3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gcGFzcyB0byBnZXRzZXJ2Ynlwb3J0X3JdKQorICAgIGZpCisgICAgYWNfY3ZfZnVuY19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldHNlcnZieXBvcnRfcj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX0lORVRfTkVUX1BUT04KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGluZXRfbmV0X3B0b24gaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBjYW4KK2RubCBiZSBjb21waWxlZCBhbmQgc2VlbXMgdG8gd29yay4gSWYgYWxsIG9mIHRoZXNlIGFyZQorZG5sIHRydWUsIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkCitkbmwgd2l0aCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19pbmV0X25ldF9wdG9uLCB0aGVuCitkbmwgSEFWRV9JTkVUX05FVF9QVE9OIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfSU5FVF9ORVRfUFRPTl0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfU1RETElCXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfQVJQQV9JTkVUXSlkbmwKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3NfaW5ldF9uZXRfcHRvbj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2luZXRfbmV0X3B0b249InVua25vd24iCisgIHRzdF9jb21waV9pbmV0X25ldF9wdG9uPSJ1bmtub3duIgorICB0c3Rfd29ya3NfaW5ldF9uZXRfcHRvbj0idW5rbm93biIKKyAgdHN0X2FsbG93X2luZXRfbmV0X3B0b249InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpbmV0X25ldF9wdG9uIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtpbmV0X25ldF9wdG9uXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfaW5ldF9uZXRfcHRvbj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2luZXRfbmV0X3B0b249Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9uZXRfcHRvbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9uZXRfcHRvbiBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2luZXRfbmV0X3B0b25dLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19hcnBhX2luZXQKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9faW5ldF9uZXRfcHRvbj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2luZXRfbmV0X3B0b249Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pbmV0X25ldF9wdG9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpbmV0X25ldF9wdG9uIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfYXJwYV9pbmV0CisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IGluZXRfbmV0X3B0b24oMCwgMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW5ldF9uZXRfcHRvbj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2luZXRfbmV0X3B0b249Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgZG5sIG9ubHkgZG8gcnVudGltZSB2ZXJpZmljYXRpb24gd2hlbiBub3QgY3Jvc3MtY29tcGlsaW5nCisgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfbmV0X3B0b24iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbmV0X3B0b24gc2VlbXMgdG8gd29ya10pCisgICAgQUNfUlVOX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfYXJwYV9pbmV0CisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKyAgICAgIF1dLFtbCisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXB2NmFbMTYrMV07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXB2NGFbNCsxXTsKKyAgICAgICAgY29uc3QgY2hhciAqaXB2Nm5ldDEgPSAiZmU4MDo6MjE0OjRmZmY6ZmUwYjo3NmM4IjsKKyAgICAgICAgY29uc3QgY2hhciAqaXB2Nm5ldDIgPSAiOjpmZmZlOjdmMDA6MSI7CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjZuZXQzID0gIjdmMjA6MTo6LzY0IjsKKyAgICAgICAgY29uc3QgY2hhciAqaXB2Nm5ldDQgPSAiN2YyMDoxOjovMjE0NzQ4MzY0OSI7CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjRuZXQxID0gIjE5Mi4xNjguMTAwLjEiOworICAgICAgICBjb25zdCBjaGFyICppcHY0bmV0MiA9ICIxOTIuMTY4LjEwMC8zMiI7CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjRuZXQzID0gIjE5Mi4xNjguMTAwLjEvMjE0NzQ4MzY0OSI7CisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgbWVtc2V0KGlwdjRhLCAxLCBzaXplb2YoaXB2NGEpKTsKKyAgICAgICAgaWYoMzIgIT0gaW5ldF9uZXRfcHRvbihBRl9JTkVULCBpcHY0bmV0MSwgaXB2NGEsIDQpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjRhWzB4MDBdICE9IDB4YzApIHx8CisgICAgICAgICAgICAoaXB2NGFbMHgwMV0gIT0gMHhhOCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsweDAyXSAhPSAweDY0KSB8fAorICAgICAgICAgICAgKGlwdjRhWzB4MDNdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NGFbMHgwNF0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NGEsIDEsIHNpemVvZihpcHY0YSkpOworICAgICAgICBpZigzMiAhPSBpbmV0X25ldF9wdG9uKEFGX0lORVQsIGlwdjRuZXQyLCBpcHY0YSwgNCkpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGlmKCAoaXB2NGFbMHgwMF0gIT0gMHhjMCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsweDAxXSAhPSAweGE4KSB8fAorICAgICAgICAgICAgKGlwdjRhWzB4MDJdICE9IDB4NjQpIHx8CisgICAgICAgICAgICAoaXB2NGFbMHgwM10gIT0gMHgwMCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsweDA0XSAhPSAweDAxKSApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIG1lbXNldChpcHY0YSwgMSwgc2l6ZW9mKGlwdjRhKSk7CisgICAgICAgIGlmKC0xICE9IGluZXRfbmV0X3B0b24oQUZfSU5FVCwgaXB2NG5ldDMsIGlwdjRhLCA0KSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgbWVtc2V0KGlwdjZhLCAxLCBzaXplb2YoaXB2NmEpKTsKKyAgICAgICAgaWYoMTI4ICE9IGluZXRfbmV0X3B0b24oQUZfSU5FVDYsIGlwdjZuZXQxLCBpcHY2YSwgMTYpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjZhWzB4MDBdICE9IDB4ZmUpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwMV0gIT0gMHg4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA4XSAhPSAweDAyKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDldICE9IDB4MTQpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwYV0gIT0gMHg0ZikgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBiXSAhPSAweGZmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGNdICE9IDB4ZmUpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwZF0gIT0gMHgwYikgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBlXSAhPSAweDc2KSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGZdICE9IDB4YzgpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgxMF0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjZhWzB4MDJdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDAzXSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwNF0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDVdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA2XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwN10gIT0gMHgwKSApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIG1lbXNldChpcHY2YSwgMCwgc2l6ZW9mKGlwdjZhKSk7CisgICAgICAgIGlwdjZhWzB4MTBdID0gMHgwMTsKKyAgICAgICAgaWYoMTI4ICE9IGluZXRfbmV0X3B0b24oQUZfSU5FVDYsIGlwdjZuZXQyLCBpcHY2YSwgMTYpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjZhWzB4MGFdICE9IDB4ZmYpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwYl0gIT0gMHhmZSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBjXSAhPSAweDdmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGZdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgxMF0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjZhWzB4MDBdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDAxXSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwMl0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDNdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA0XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwNV0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDZdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA3XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwOF0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDldICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBkXSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwZV0gIT0gMHgwKSApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIG1lbXNldChpcHY2YSwgMSwgc2l6ZW9mKGlwdjZhKSk7CisgICAgICAgIGlmKDY0ICE9IGluZXRfbmV0X3B0b24oQUZfSU5FVDYsIGlwdjZuZXQzLCBpcHY2YSwgMTYpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYoIChpcHY2YVsweDAwXSAhPSAweDdmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDFdICE9IDB4MjApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwM10gIT0gMHgwMSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA4XSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDldICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwYV0gIT0gMHgwMSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBiXSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGNdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwZF0gIT0gMHgwMSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDBlXSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MGZdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgxMF0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYoIChpcHY2YVsweDAyXSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwNF0gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDVdICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsweDA2XSAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbMHgwN10gIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzB4MDddICE9IDB4MCkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NmEsIDEsIHNpemVvZihpcHY2YSkpOworICAgICAgICBpZigtMSAhPSBpbmV0X25ldF9wdG9uKEFGX0lORVQ2LCBpcHY2bmV0NCwgaXB2NmEsIDE2KSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgZXhpdCgwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X25ldF9wdG9uPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3Rfd29ya3NfaW5ldF9uZXRfcHRvbj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfbmV0X3B0b24iID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfbmV0X3B0b24iICE9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbmV0X3B0b24gdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19pbmV0X25ldF9wdG9uIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW5ldF9uZXRfcHRvbj0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19pbmV0X25ldF9wdG9uPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9uZXRfcHRvbiBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X25ldF9wdG9uIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW5ldF9uZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfbmV0X3B0b24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pbmV0X25ldF9wdG9uIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfaW5ldF9uZXRfcHRvbiIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5FVF9ORVRfUFRPTiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbmV0X3B0b24gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2luZXRfbmV0X3B0b249InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2luZXRfbmV0X3B0b249Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19JTkVUX05UT1AKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGluZXRfbnRvcCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGNhbgorZG5sIGJlIGNvbXBpbGVkIGFuZCBzZWVtcyB0byB3b3JrLiBJZiBhbGwgb2YgdGhlc2UgYXJlCitkbmwgdHJ1ZSwgYW5kIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQKK2RubCB3aXRoIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2luZXRfbnRvcCwgdGhlbgorZG5sIEhBVkVfSU5FVF9OVE9QIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfSU5FVF9OVE9QXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVERMSUJdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19BUlBBX0lORVRdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19pbmV0X250b3A9InVua25vd24iCisgIHRzdF9wcm90b19pbmV0X250b3A9InVua25vd24iCisgIHRzdF9jb21waV9pbmV0X250b3A9InVua25vd24iCisgIHRzdF93b3Jrc19pbmV0X250b3A9InVua25vd24iCisgIHRzdF9hbGxvd19pbmV0X250b3A9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpbmV0X250b3AgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2luZXRfbnRvcF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2luZXRfbnRvcD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2luZXRfbnRvcD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X250b3AiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvcCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2luZXRfbnRvcF0sWworICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19pbmV0X250b3A9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19pbmV0X250b3A9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pbmV0X250b3AiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvcCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBpbmV0X250b3AoMCwgMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9pbmV0X250b3AiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvcCBzZWVtcyB0byB3b3JrXSkKKyAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjYXJlc19pbmNsdWRlc19hcnBhX2luZXQKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgY2hhciBpcHY2cmVzW3NpemVvZigiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1IildOworICAgICAgICBjaGFyIGlwdjRyZXNbc2l6ZW9mICIyNTUuMjU1LjI1NS4yNTUiXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY2YVsyNl07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXB2NGFbNV07CisgICAgICAgIGNoYXIgKmlwdjZwdHIgPSAwOworICAgICAgICBjaGFyICppcHY0cHRyID0gMDsKKyAgICAgICAgLyogLSAqLworICAgICAgICBpcHY0cmVzWzBdID0gJ1wwJzsKKyAgICAgICAgaXB2NGFbMF0gPSAweGMwOworICAgICAgICBpcHY0YVsxXSA9IDB4YTg7CisgICAgICAgIGlwdjRhWzJdID0gMHg2NDsKKyAgICAgICAgaXB2NGFbM10gPSAweDAxOworICAgICAgICBpcHY0YVs0XSA9IDB4MDE7CisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaXB2NHB0ciA9IGluZXRfbnRvcChBRl9JTkVULCBpcHY0YSwgaXB2NHJlcywgc2l6ZW9mKGlwdjRyZXMpKTsKKyAgICAgICAgaWYoIWlwdjRwdHIpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZihpcHY0cHRyICE9IGlwdjRyZXMpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZighaXB2NHB0clswXSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKG1lbWNtcChpcHY0cmVzLCAiMTkyLjE2OC4xMDAuMSIsIDEzKSAhPSAwKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpcHY2cmVzWzBdID0gJ1wwJzsKKyAgICAgICAgbWVtc2V0KGlwdjZhLCAwLCBzaXplb2YoaXB2NmEpKTsKKyAgICAgICAgaXB2NmFbMF0gPSAweGZlOworICAgICAgICBpcHY2YVsxXSA9IDB4ODA7CisgICAgICAgIGlwdjZhWzhdID0gMHgwMjsKKyAgICAgICAgaXB2NmFbOV0gPSAweDE0OworICAgICAgICBpcHY2YVsxMF0gPSAweDRmOworICAgICAgICBpcHY2YVsxMV0gPSAweGZmOworICAgICAgICBpcHY2YVsxMl0gPSAweGZlOworICAgICAgICBpcHY2YVsxM10gPSAweDBiOworICAgICAgICBpcHY2YVsxNF0gPSAweDc2OworICAgICAgICBpcHY2YVsxNV0gPSAweGM4OworICAgICAgICBpcHY2YVsyNV0gPSAweDAxOworICAgICAgICAvKiAtICovCisgICAgICAgIGlwdjZwdHIgPSBpbmV0X250b3AoQUZfSU5FVDYsIGlwdjZhLCBpcHY2cmVzLCBzaXplb2YoaXB2NnJlcykpOworICAgICAgICBpZighaXB2NnB0cikKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKGlwdjZwdHIgIT0gaXB2NnJlcykKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKCFpcHY2cHRyWzBdKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYobWVtY21wKGlwdjZyZXMsICJmZTgwOjoyMTQ6NGZmZjpmZTBiOjc2YzgiLCAyNCkgIT0gMCkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgZXhpdCgwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X250b3A9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X250b3A9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pbmV0X250b3AiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfbnRvcCIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9wIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfaW5ldF9udG9wIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW5ldF9udG9wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2luZXRfbnRvcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvcCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X250b3AiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19pbmV0X250b3AiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pbmV0X250b3AiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pbmV0X250b3AiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF93b3Jrc19pbmV0X250b3AiICE9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lORVRfTlRPUCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbnRvcCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfaW5ldF9udG9wPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pbmV0X250b3A9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19JTkVUX1BUT04KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGluZXRfcHRvbiBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGNhbgorZG5sIGJlIGNvbXBpbGVkIGFuZCBzZWVtcyB0byB3b3JrLiBJZiBhbGwgb2YgdGhlc2UgYXJlCitkbmwgdHJ1ZSwgYW5kIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQKK2RubCB3aXRoIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2luZXRfcHRvbiwgdGhlbgorZG5sIEhBVkVfSU5FVF9QVE9OIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfSU5FVF9QVE9OXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVERMSUJdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19BUlBBX0lORVRdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9wcm90b19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9jb21waV9pbmV0X3B0b249InVua25vd24iCisgIHRzdF93b3Jrc19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9hbGxvd19pbmV0X3B0b249InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpbmV0X3B0b24gY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2luZXRfcHRvbl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2luZXRfcHRvbj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2luZXRfcHRvbj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X3B0b24iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfcHRvbiBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2luZXRfcHRvbl0sWworICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19pbmV0X3B0b249InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19pbmV0X3B0b249Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pbmV0X3B0b24iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfcHRvbiBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX2FycGFfaW5ldAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBpbmV0X3B0b24oMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW5ldF9wdG9uPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW5ldF9wdG9uPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9pbmV0X3B0b24iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfcHRvbiBzZWVtcyB0byB3b3JrXSkKKyAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjYXJlc19pbmNsdWRlc19hcnBhX2luZXQKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY2YVsxNisxXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY0YVs0KzFdOworICAgICAgICBjb25zdCBjaGFyICppcHY2c3JjID0gImZlODA6OjIxNDo0ZmZmOmZlMGI6NzZjOCI7CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjRzcmMgPSAiMTkyLjE2OC4xMDAuMSI7CisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgbWVtc2V0KGlwdjRhLCAxLCBzaXplb2YoaXB2NGEpKTsKKyAgICAgICAgaWYoMSAhPSBpbmV0X3B0b24oQUZfSU5FVCwgaXB2NHNyYywgaXB2NGEpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjRhWzBdICE9IDB4YzApIHx8CisgICAgICAgICAgICAoaXB2NGFbMV0gIT0gMHhhOCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsyXSAhPSAweDY0KSB8fAorICAgICAgICAgICAgKGlwdjRhWzNdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NGFbNF0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NmEsIDEsIHNpemVvZihpcHY2YSkpOworICAgICAgICBpZigxICE9IGluZXRfcHRvbihBRl9JTkVUNiwgaXB2NnNyYywgaXB2NmEpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjZhWzBdICAhPSAweGZlKSB8fAorICAgICAgICAgICAgKGlwdjZhWzFdICAhPSAweDgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzhdICAhPSAweDAyKSB8fAorICAgICAgICAgICAgKGlwdjZhWzldICAhPSAweDE0KSB8fAorICAgICAgICAgICAgKGlwdjZhWzEwXSAhPSAweDRmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzExXSAhPSAweGZmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzEyXSAhPSAweGZlKSB8fAorICAgICAgICAgICAgKGlwdjZhWzEzXSAhPSAweDBiKSB8fAorICAgICAgICAgICAgKGlwdjZhWzE0XSAhPSAweDc2KSB8fAorICAgICAgICAgICAgKGlwdjZhWzE1XSAhPSAweGM4KSB8fAorICAgICAgICAgICAgKGlwdjZhWzE2XSAhPSAweDAxKSApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGlmKCAoaXB2NmFbMl0gICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVszXSAgIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzRdICAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbNV0gICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVs2XSAgIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzddICAhPSAweDApICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgZXhpdCgwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X3B0b249InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X3B0b249Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pbmV0X3B0b24iID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfcHRvbiIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9wdG9uIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfaW5ldF9wdG9uIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW5ldF9wdG9uPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2luZXRfcHRvbj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfcHRvbiBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X3B0b24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19pbmV0X3B0b24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pbmV0X3B0b24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pbmV0X3B0b24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF93b3Jrc19pbmV0X3B0b24iICE9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lORVRfUFRPTiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfcHRvbiBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfaW5ldF9wdG9uPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pbmV0X3B0b249Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgaW9jdGwgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY2FyZXNfZGlzYWxsb3dfaW9jdGwsIHRoZW4KK2RubCBIQVZFX0lPQ1RMIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfSU9DVExdLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NUUk9QVFNdKWRubAorICAjCisgIHRzdF9saW5rc19pb2N0bD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2lvY3RsPSJ1bmtub3duIgorICB0c3RfY29tcGlfaW9jdGw9InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3RsIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtpb2N0bF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2lvY3RsPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfaW9jdGw9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3RsIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbaW9jdGxdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19zdHJvcHRzCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2lvY3RsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9faW9jdGw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdHJvcHRzCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IGlvY3RsKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2lvY3RsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW9jdGw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19pb2N0bCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2lvY3RsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2lvY3RsPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19pb2N0bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lPQ1RMLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfaW9jdGw9InllcyIKKyAgICBDQVJFU19DSEVDS19GVU5DX0lPQ1RMX0ZJT05CSU8KKyAgICBDQVJFU19DSEVDS19GVU5DX0lPQ1RMX1NJT0NHSUZBRERSCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pb2N0bD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX0lPQ1RMX0ZJT05CSU8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGlvY3RsIHdpdGggdGhlIEZJT05CSU8gY29tbWFuZCBpcworZG5sIGF2YWlsYWJsZSwgY2FuIGJlIGNvbXBpbGVkLCBhbmQgc2VlbXMgdG8gd29yay4gSWYKK2RubCBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIHRoZW4gSEFWRV9JT0NUTF9GSU9OQklPCitkbmwgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTF9GSU9OQklPXSwgWworICAjCisgIHRzdF9jb21waV9pb2N0bF9maW9uYmlvPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbz0idW5rbm93biIKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgRklPTkJJTyBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKyAgICAgIF1dLFtbCisgICAgICAgIGludCBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGwoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bF9maW9uYmlvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW9jdGxfZmlvbmJpbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsX2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3RsIEZJT05CSU8gdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19pb2N0bF9maW9uYmlvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbz0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bF9maW9uYmlvPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgRklPTkJJTyBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9maW9uYmlvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU9DVExfRklPTkJJTywgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgRklPTkJJTyBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfaW9jdGxfZmlvbmJpbz0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfaW9jdGxfZmlvbmJpbz0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX0lPQ1RMX1NJT0NHSUZBRERSCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBpb2N0bCB3aXRoIHRoZSBTSU9DR0lGQUREUiBjb21tYW5kIGlzIGF2YWlsYWJsZSwKK2RubCBzdHJ1Y3QgaWZyZXEgaXMgZGVmaW5lZCwgdGhleSBjYW4gYmUgY29tcGlsZWQsIGFuZCBzZWVtIHRvCitkbmwgd29yay4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCB0aGVuIEhBVkVfSU9DVExfU0lPQ0dJRkFERFIKK2RubCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0lPQ1RMX1NJT0NHSUZBRERSXSwgWworICAjCisgIHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkcj0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bCBTSU9DR0lGQUREUiBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cm9wdHMKKyAgICAgICAgI2luY2x1ZGUgPG5ldC9pZi5oPgorICAgICAgXV0sW1sKKyAgICAgICAgc3RydWN0IGlmcmVxIGlmcjsKKyAgICAgICAgaWYoMCAhPSBpb2N0bCgwLCBTSU9DR0lGQUREUiwgJmlmcikpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW9jdGxfc2lvY2dpZmFkZHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsX3Npb2NnaWZhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bCBTSU9DR0lGQUREUiB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHI9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bCBTSU9DR0lGQUREUiBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JT0NUTF9TSU9DR0lGQUREUiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgU0lPQ0dJRkFERFIgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2lvY3RsX3Npb2NnaWZhZGRyPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pb2N0bF9zaW9jZ2lmYWRkcj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX0lPQ1RMU09DS0VUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBpb2N0bHNvY2tldCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19pb2N0bHNvY2tldCwgdGhlbgorZG5sIEhBVkVfSU9DVExTT0NLRVQgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfV0lOU09DSzJdKWRubAorICAjCisgIHRzdF9saW5rc19pb2N0bHNvY2tldD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0PSJ1bmtub3duIgorICB0c3RfY29tcGlfaW9jdGxzb2NrZXQ9InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3Rsc29ja2V0IGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBpb2N0bHNvY2tldCgwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0PSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfaW9jdGxzb2NrZXQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3Rsc29ja2V0IGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbaW9jdGxzb2NrZXRdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19pb2N0bHNvY2tldD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3Rsc29ja2V0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXQ9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bHNvY2tldCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3Rsc29ja2V0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXQ9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXQ9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bHNvY2tldCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pb2N0bHNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pb2N0bHNvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU9DVExTT0NLRVQsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldD0ieWVzIgorICAgIENBUkVTX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfRklPTkJJTworICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXQ9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVF9GSU9OQklPCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBpb2N0bHNvY2tldCB3aXRoIHRoZSBGSU9OQklPIGNvbW1hbmQgaXMKK2RubCBhdmFpbGFibGUsIGNhbiBiZSBjb21waWxlZCwgYW5kIHNlZW1zIHRvIHdvcmsuIElmCitkbmwgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCB0aGVuIEhBVkVfSU9DVExTT0NLRVRfRklPTkJJTworZG5sIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfRklPTkJJT10sIFsKKyAgIworICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfZmlvbmJpbz0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW89InVua25vd24iCisgICMKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3Rsc29ja2V0IEZJT05CSU8gaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgXV0sW1sKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBpb2N0bHNvY2tldCgwLCBGSU9OQklPLCAmZmxhZ3MpKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9maW9uYmlvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGxzb2NrZXQgRklPTkJJTyB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9maW9uYmlvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW89Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bHNvY2tldCBGSU9OQklPIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pb2N0bHNvY2tldF9maW9uYmlvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bHNvY2tldCBGSU9OQklPIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9maW9uYmlvPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9maW9uYmlvPSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfQ0FNRUwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIElvY3RsU29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsLAorZG5sIHRoZW4gSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0lPQ1RMU09DS0VUX0NBTUVMXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVFJPUFRTXSlkbmwKKyAgIworICB0c3RfbGlua3NfaW9jdGxzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9wcm90b19pb2N0bHNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWw9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBJb2N0bFNvY2tldCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbSW9jdGxTb2NrZXRdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBJb2N0bFNvY2tldCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW0lvY3RsU29ja2V0XSxbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3Ryb3B0cworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIElvY3RsU29ja2V0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3Ryb3B0cworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBJb2N0bFNvY2tldCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIElvY3RsU29ja2V0IHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWwiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIElvY3RsU29ja2V0IG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXRfY2FtZWw9InllcyIKKyAgICBDQVJFU19DSEVDS19GVU5DX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8KKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgSW9jdGxTb2NrZXQgd2l0aCBGSU9OQklPIGNvbW1hbmQgaXMgYXZhaWxhYmxlLAorZG5sIGNhbiBiZSBjb21waWxlZCwgYW5kIHNlZW1zIHRvIHdvcmsuIElmIGFsbCBvZiB0aGVzZSBhcmUKK2RubCB0cnVlLCB0aGVuIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTyB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU9dLCBbCisgICMKKyAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBJb2N0bFNvY2tldCBGSU9OQklPIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3Ryb3B0cworICAgICAgXV0sW1sKKyAgICAgICAgbG9uZyBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIElvY3RsU29ja2V0IEZJT05CSU8gdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgSW9jdGxTb2NrZXQgRklPTkJJTyBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTywgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBGSU9OQklPIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfU0VUU09DS09QVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc2V0c29ja29wdCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19zZXRzb2Nrb3B0LCB0aGVuCitkbmwgSEFWRV9TRVRTT0NLT1BUIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfU0VUU09DS09QVF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfV0lOU09DSzJdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TWVNfU09DS0VUXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc2V0c29ja29wdD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NldHNvY2tvcHQ9InVua25vd24iCisgIHRzdF9jb21waV9zZXRzb2Nrb3B0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfc2V0c29ja29wdD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBzZXRzb2Nrb3B0KDAsIDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc2V0c29ja29wdD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3NldHNvY2tvcHQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2V0c29ja29wdCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2V0c29ja29wdCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3NldHNvY2tvcHRdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc2V0c29ja29wdD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3NldHNvY2tvcHQ9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zZXRzb2Nrb3B0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzZXRzb2Nrb3B0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zZXRzb2Nrb3B0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc2V0c29ja29wdD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19zZXRzb2Nrb3B0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc2V0c29ja29wdD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zZXRzb2Nrb3B0PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc2V0c29ja29wdCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zZXRzb2Nrb3B0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc2V0c29ja29wdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zZXRzb2Nrb3B0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TRVRTT0NLT1BULCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZXRzb2Nrb3B0IGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0PSJ5ZXMiCisgICAgQ0FSRVNfQ0hFQ0tfRlVOQ19TRVRTT0NLT1BUX1NPX05PTkJMT0NLCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0PSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfU0VUU09DS09QVF9TT19OT05CTE9DSworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc2V0c29ja29wdCB3aXRoIHRoZSBTT19OT05CTE9DSyBjb21tYW5kIGlzCitkbmwgYXZhaWxhYmxlLCBjYW4gYmUgY29tcGlsZWQsIGFuZCBzZWVtcyB0byB3b3JrLiBJZgorZG5sIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgdGhlbiBIQVZFX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0sKK2RubCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0tdLCBbCisgICMKKyAgdHN0X2NvbXBpX3NldHNvY2tvcHRfc29fbm9uYmxvY2s9InVua25vd24iCisgIHRzdF9hbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzZXRzb2Nrb3B0KDAsIFNPTF9TT0NLRVQsIFNPX05PTkJMT0NLLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc2V0c29ja29wdF9zb19ub25ibG9jaz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHRfc29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc2V0c29ja29wdF9zb19ub25ibG9jaz0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc2V0c29ja29wdCBTT19OT05CTE9DSyBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc2V0c29ja29wdF9zb19ub25ibG9jayIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSywgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgc2V0c29ja29wdCBTT19OT05CTE9DSyBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc2V0c29ja29wdF9zb19ub25ibG9jaz0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc2V0c29ja29wdF9zb19ub25ibG9jaz0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX1NPQ0tFVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X3NvY2tldCwgdGhlbgorZG5sIEhBVkVfU09DS0VUIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfU09DS0VUXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NZU19TT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TT0NLRVRdKWRubAorICAjCisgIHRzdF9saW5rc19zb2NrZXQ9InVua25vd24iCisgIHRzdF9wcm90b19zb2NrZXQ9InVua25vd24iCisgIHRzdF9jb21waV9zb2NrZXQ9InVua25vd24iCisgIHRzdF9hbGxvd19zb2NrZXQ9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXQgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjYXJlc19pbmNsdWRlc19zb2NrZXQKKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zb2NrZXQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zb2NrZXQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXQgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzb2NrZXRdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGNhcmVzX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjYXJlc19pbmNsdWRlc19zb2NrZXQKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc29ja2V0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc29ja2V0PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXQgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc29ja2V0CisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHNvY2tldCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zb2NrZXQ9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zb2NrZXQ9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNvY2tldCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3NvY2tldCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3NvY2tldD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zb2NrZXQ9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXQgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TT0NLRVQsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNvY2tldCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc29ja2V0PSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zb2NrZXQ9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJDQVNFQ01QCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJjYXNlY21wIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X3N0cmNhc2VjbXAsIHRoZW4KK2RubCBIQVZFX1NUUkNBU0VDTVAgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJDQVNFQ01QXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19zdHJjYXNlY21wPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cmNhc2VjbXA9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJjYXNlY21wPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY2FzZWNtcCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RyY2FzZWNtcF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3N0cmNhc2VjbXA9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJjYXNlY21wPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmNhc2VjbXAgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJjYXNlY21wXSxbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3N0cmNhc2VjbXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJjYXNlY21wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RyY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY2FzZWNtcCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzdHJjYXNlY21wKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cmNhc2VjbXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zdHJjYXNlY21wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RyY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY2FzZWNtcCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3N0cmNhc2VjbXAiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zdHJjYXNlY21wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cmNhc2VjbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJjYXNlY21wIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJjYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RyY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUkNBU0VDTVAsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNhc2VjbXAgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3N0cmNhc2VjbXA9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cmNhc2VjbXA9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJDTVBJCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJjbXBpIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X3N0cmNtcGksIHRoZW4KK2RubCBIQVZFX1NUUkNNUEkgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJDTVBJXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19zdHJjbXBpPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyY21waT0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cmNtcGk9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJjbXBpPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY21waSBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RyY21waV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3N0cmNtcGk9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJjbXBpPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNtcGkiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmNtcGkgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJjbXBpXSxbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3N0cmNtcGk9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJjbXBpPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RyY21waSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY21waSBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzdHJjbXBpKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cmNtcGk9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zdHJjbXBpPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RyY21waSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY21waSB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3N0cmNtcGkiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zdHJjbXBpPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cmNtcGk9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJjbXBpIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJjbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RyY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cmNtcGkiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUkNNUEksIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNtcGkgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3N0cmNtcGk9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cmNtcGk9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJEVVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHN0cmR1cCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19zdHJkdXAsIHRoZW4KK2RubCBIQVZFX1NUUkRVUCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX1NUUkRVUF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyZHVwPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RyZHVwPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyZHVwIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJkdXBdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zdHJkdXA9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJkdXA9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyZHVwIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJkdXAgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJkdXBdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RyZHVwPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc3RyZHVwPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RyZHVwIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJkdXAgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc3RyZHVwKDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cmR1cD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3N0cmR1cD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmR1cCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyZHVwIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfc3RyZHVwIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc3RyZHVwPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cmR1cD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmR1cCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJkdXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJkdXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJkdXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJkdXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUkRVUCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyZHVwIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zdHJkdXA9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cmR1cD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX1NUUklDTVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHN0cmljbXAgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY2FyZXNfZGlzYWxsb3dfc3RyaWNtcCwgdGhlbgorZG5sIEhBVkVfU1RSSUNNUCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX1NUUklDTVBdLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NUUklOR10pZG5sCisgICMKKyAgdHN0X2xpbmtzX3N0cmljbXA9InVua25vd24iCisgIHRzdF9wcm90b19zdHJpY21wPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyaWNtcD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cmljbXA9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJpY21wIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJpY21wXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc3RyaWNtcD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cmljbXA9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyaWNtcCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cmljbXBdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RyaWNtcD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3N0cmljbXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJpY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJpY21wIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHN0cmljbXAoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfc3RyaWNtcD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3N0cmljbXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJpY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJpY21wIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfc3RyaWNtcCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3N0cmljbXA9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RyaWNtcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmljbXAgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJpY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSSUNNUCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc3RyaWNtcD0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RyaWNtcD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX1NUUk5DQVNFQ01QCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJuY2FzZWNtcCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjYXJlc19kaXNhbGxvd19zdHJuY2FzZWNtcCwgdGhlbgorZG5sIEhBVkVfU1RSTkNBU0VDTVAgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJOQ0FTRUNNUF0sIFsKKyAgQUNfUkVRVUlSRShbQ0FSRVNfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RybmNhc2VjbXA9InVua25vd24iCisgIHRzdF9wcm90b19zdHJuY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cm5jYXNlY21wPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RybmNhc2VjbXA9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RybmNhc2VjbXBdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zdHJuY2FzZWNtcD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cm5jYXNlY21wPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5jYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cm5jYXNlY21wXSxbCisgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3N0cm5jYXNlY21wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc3RybmNhc2VjbXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJuY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmNhc2VjbXAgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc3RybmNhc2VjbXAoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfc3RybmNhc2VjbXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zdHJuY2FzZWNtcD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cm5jYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGNhcmVzX2Rpc2FsbG93X3N0cm5jYXNlY21wIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc3RybmNhc2VjbXA9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RybmNhc2VjbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5jYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RybmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJuY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSTkNBU0VDTVAsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5jYXNlY21wIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zdHJuY2FzZWNtcD0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RybmNhc2VjbXA9Im5vIgorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfRlVOQ19TVFJOQ01QSQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc3RybmNtcGkgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY2FyZXNfZGlzYWxsb3dfc3RybmNtcGksIHRoZW4KK2RubCBIQVZFX1NUUk5DTVBJIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfU1RSTkNNUEldLCBbCisgIEFDX1JFUVVJUkUoW0NBUkVTX0lOQ0xVREVTX1NUUklOR10pZG5sCisgICMKKyAgdHN0X2xpbmtzX3N0cm5jbXBpPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RybmNtcGk9InVua25vd24iCisgIHRzdF9jb21waV9zdHJuY21waT0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cm5jbXBpPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmNtcGkgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW3N0cm5jbXBpXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc3RybmNtcGk9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJuY21waT0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuY21waSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmNtcGkgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJuY21waV0sWworICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19zdHJuY21waT0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3N0cm5jbXBpPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RybmNtcGkiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cm5jbXBpIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3RyaW5nCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHN0cm5jbXBpKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cm5jbXBpPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc3RybmNtcGk9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJuY21waSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmNtcGkgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd19zdHJuY21waSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3N0cm5jbXBpPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cm5jbXBpPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmNtcGkgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJuY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cm5jbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RybmNtcGkiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUk5DTVBJLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJuY21waSBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc3RybmNtcGk9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cm5jbXBpPSJubyIKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX0ZVTkNfU1RSTklDTVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHN0cm5pY21wIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X3N0cm5pY21wLCB0aGVuCitkbmwgSEFWRV9TVFJOSUNNUCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19GVU5DX1NUUk5JQ01QXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19zdHJuaWNtcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cm5pY21wPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RybmljbXA9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJuaWNtcD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cm5pY21wIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJuaWNtcF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3N0cm5pY21wPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3Nfc3RybmljbXA9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybmljbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cm5pY21wIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbc3RybmljbXBdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RybmljbXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJuaWNtcD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5pY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuaWNtcCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGNhcmVzX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzdHJuaWNtcCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zdHJuaWNtcD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3N0cm5pY21wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RybmljbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cm5pY21wIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY2FyZXNfZGlzYWxsb3dfc3RybmljbXAiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zdHJuaWNtcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zdHJuaWNtcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cm5pY21wIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5pY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RybmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJuaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cm5pY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVFJOSUNNUCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3N0cm5pY21wPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zdHJuaWNtcD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19GVU5DX1dSSVRFVgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgd3JpdGV2IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGNhcmVzX2Rpc2FsbG93X3dyaXRldiwgdGhlbgorZG5sIEhBVkVfV1JJVEVWIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX0ZVTkNfV1JJVEVWXSwgWworICBBQ19SRVFVSVJFKFtDQVJFU19JTkNMVURFU19TWVNfVUlPXSlkbmwKKyAgIworICB0c3RfbGlua3Nfd3JpdGV2PSJ1bmtub3duIgorICB0c3RfcHJvdG9fd3JpdGV2PSJ1bmtub3duIgorICB0c3RfY29tcGlfd3JpdGV2PSJ1bmtub3duIgorICB0c3RfYWxsb3dfd3JpdGV2PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgd3JpdGV2IGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFt3cml0ZXZdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc193cml0ZXY9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc193cml0ZXY9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfd3JpdGV2IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3cml0ZXYgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFt3cml0ZXZdLFsKKyAgICAgICRjYXJlc19pbmNsdWRlc19zeXNfdWlvCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3dyaXRldj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3dyaXRldj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3dyaXRldiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgd3JpdGV2IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY2FyZXNfaW5jbHVkZXNfc3lzX3VpbworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSB3cml0ZXYoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfd3JpdGV2PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfd3JpdGV2PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfd3JpdGV2IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3cml0ZXYgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjYXJlc19kaXNhbGxvd193cml0ZXYiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd193cml0ZXY9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfd3JpdGV2PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgd3JpdGV2IG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3dyaXRldiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfV1JJVEVWLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3cml0ZXYgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3dyaXRldj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfd3JpdGV2PSJubyIKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9jYXJlcy1vdmVycmlkZS5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2NhcmVzLW92ZXJyaWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDAwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9jYXJlcy1vdmVycmlkZS5tNApAQCAtMCwwICsxLDc2IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyMgRmlsZSB2ZXJzaW9uIGZvciAnYWNsb2NhbCcgdXNlLiBLZWVwIGl0IGEgc2luZ2xlIG51bWJlci4KKyMgc2VyaWFsIDgKKworZG5sIENBUkVTX09WRVJSSURFX0FVVE9DT05GCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFBsYWNpbmcgYSBjYWxsIHRvIHRoaXMgbWFjcm8gaW4gY29uZmlndXJlLmFjIGFmdGVyCitkbmwgdGhlIG9uZSB0byBBQ19JTklUIHdpbGwgbWFrZSBtYWNyb3MgaW4gdGhpcyBmaWxlCitkbmwgdmlzaWJsZSB0byB0aGUgcmVzdCBvZiB0aGUgY29tcGlsYXRpb24gb3ZlcnJpZGluZworZG5sIHRob3NlIGZyb20gQXV0b2NvbmYuCisKK0FDX0RFRlVOKFtDQVJFU19PVkVSUklERV9BVVRPQ09ORl0sIFsKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX0xJQlRPT0xdKQorIyB1c2luZyBjYXJlcy1vdmVycmlkZS5tNAorXSkKKworZG5sIE92ZXJyaWRlIEF1dG9jb25mJ3MgQUNfTEFOR19QUk9HUkFNIChDKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5nCitkbmwgJ2Z1bmN0aW9uIGRlY2xhcmF0aW9uIGlzbid0IGEgcHJvdG90eXBlJworZG5sIGluIGZ1bmN0aW9uIG1haW4uIFRoaXMgcmVxdWlyZXMgYXQgbGVhc3QKK2RubCBhIGM4OSBjb21waWxlciBhbmQgZG9lcyBub3Qgc3Vwb3J0IEsmUi4KKworbTRfZGVmaW5lKFtBQ19MQU5HX1BST0dSQU0oQyldLAorWyQxCitpbnQgbWFpbiAodm9pZCkKK3sKKyQyCisgOworIHJldHVybiAwOworfV0pCisKK2RubCBPdmVycmlkZSBBdXRvY29uZidzIEFDX0xBTkdfQ0FMTCAoQykKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBpcyBhIGJhY2twb3J0IG9mIEF1dG9jb25mJ3MgMi42MCB3aXRoIHRoZQorZG5sIGVtYmVkZGVkIGNvbW1lbnRzIHRoYXQgaGl0IHRoZSByZXN1bHRpbmcgc2NyaXB0CitkbmwgcmVtb3ZlZC4gVGhpcyBpcyBkb25lIHRvIHJlZHVjZSBjb25maWd1cmUgc2l6ZQorZG5sIGFuZCB1c2UgZml4ZWQgbWFjcm8gYWNyb3NzIEF1dG9jb25mIHZlcnNpb25zLgorCittNF9kZWZpbmUoW0FDX0xBTkdfQ0FMTChDKV0sCitbQUNfTEFOR19QUk9HUkFNKFskMQorbTRfaWYoWyQyXSwgW21haW5dLCAsCitbCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkMiAoKTtdKV0sIFtyZXR1cm4gJDIgKCk7XSldKQorCitkbmwgT3ZlcnJpZGUgQXV0b2NvbmYncyBBQ19MQU5HX0ZVTkNfTElOS19UUlkgKEMpCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgaXMgYSBiYWNrcG9ydCBvZiBBdXRvY29uZidzIDIuNjAgd2l0aCB0aGUKK2RubCBlbWJlZGRlZCBjb21tZW50cyB0aGF0IGhpdCB0aGUgcmVzdWx0aW5nIHNjcmlwdAorZG5sIHJlbW92ZWQuIFRoaXMgaXMgZG9uZSB0byByZWR1Y2UgY29uZmlndXJlIHNpemUKK2RubCBhbmQgdXNlIGZpeGVkIG1hY3JvIGFjcm9zcyBBdXRvY29uZiB2ZXJzaW9ucy4KKworbTRfZGVmaW5lKFtBQ19MQU5HX0ZVTkNfTElOS19UUlkoQyldLAorW0FDX0xBTkdfUFJPR1JBTSgKK1sKKyNkZWZpbmUgJDEgaW5ub2N1b3VzXyQxCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmICQxCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkMSAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMSB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQxCitjaG9rZSBtZQorI2VuZGlmCitdLCBbcmV0dXJuICQxICgpO10pXSkKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQvY2FyZXMtcmVlbnRyYW50Lm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvY2FyZXMtcmVlbnRyYW50Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjMyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9jYXJlcy1yZWVudHJhbnQubTQKQEAgLTAsMCArMSw2MTEgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgJElkJAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDA5IGJ5IERhbmllbCBTdGVuYmVyZyBldCBhbAorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorIyB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisjIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorIyBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisjIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisjIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorIyB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBGaWxlIHZlcnNpb24gZm9yICdhY2xvY2FsJyB1c2UuIEtlZXAgaXQgYSBzaW5nbGUgbnVtYmVyLgorIyBzZXJpYWwgNgorCitkbmwgTm90ZSAxCitkbmwgLS0tLS0tCitkbmwgTm9uZSBvZiB0aGUgQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfKiBtYWNyb3Mgc2hhbGwgdXNlIEhBVkVfRk9PX0ggdG8KK2RubCBjb25kaXRpb25hbGx5IGluY2x1ZGUgaGVhZGVyIGZpbGVzLiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgZWFybHkgaW4gdGhlCitkbmwgY29uZmlndXJlIHByb2Nlc3MgbXVjaCBiZWZvcmUgaGVhZGVyIGZpbGUgYXZhaWxhYmlsaXR5IGlzIGtub3duLgorCisKK2RubCBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9FUlJOTworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfUkVFTlRSQU5UIGRlZmluaXRpb24KK2RubCBtYWtlcyBlcnJubyBhdmFpbGFibGUgYXMgYSBwcmVwcm9jZXNzb3IgbWFjcm8uCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9FUlJOT10sIFsKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPGVycm5vLmg+CisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gZXJybm8pCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICB0bXBfZXJybm89InllcyIKKyAgXSxbCisgICAgdG1wX2Vycm5vPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9lcnJubyIgPSAieWVzIjsgdGhlbgorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPGVycm5vLmg+CisgICAgICBdXSxbWworI2lmZGVmIGVycm5vCisgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorICAgICAgXV0pCisgICAgXSxbCisgICAgICB0bXBfZXJybm89ImVycm5vX21hY3JvX2RlZmluZWQiCisgICAgXSxbCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAgICAgXV0sW1sKKyNpZmRlZiBlcnJubworICAgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIHRtcF9lcnJubz0iZXJybm9fbWFjcm9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0dNVElNRV9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIGZ1bmN0aW9uIGdtdGltZV9yIGNvbXBpbGVyIHZpc2libGUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9HTVRJTUVfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ210aW1lX3JdKQorICBdLFsKKyAgICB0bXBfZ210aW1lX3I9InllcyIKKyAgXSxbCisgICAgdG1wX2dtdGltZV9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9nbXRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX0VHUkVQX0NQUChbZ210aW1lX3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisgICAgXSxbCisgICAgICB0bXBfZ210aW1lX3I9InByb3RvX2RlY2xhcmVkIgorICAgIF0sWworICAgICAgQUNfRUdSRVBfQ1BQKFtnbXRpbWVfcl0sWworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9nbXRpbWVfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0xPQ0FMVElNRV9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIGZ1bmN0aW9uIGxvY2FsdGltZV9yIGNvbXBpbGVyIHZpc2libGUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9MT0NBTFRJTUVfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbbG9jYWx0aW1lX3JdKQorICBdLFsKKyAgICB0bXBfbG9jYWx0aW1lX3I9InllcyIKKyAgXSxbCisgICAgdG1wX2xvY2FsdGltZV9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9sb2NhbHRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX0VHUkVQX0NQUChbbG9jYWx0aW1lX3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisgICAgXSxbCisgICAgICB0bXBfbG9jYWx0aW1lX3I9InByb3RvX2RlY2xhcmVkIgorICAgIF0sWworICAgICAgQUNfRUdSRVBfQ1BQKFtsb2NhbHRpbWVfcl0sWworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9sb2NhbHRpbWVfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX1NUUkVSUk9SX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gc3RyZXJyb3JfciBjb21waWxlciB2aXNpYmxlLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfU1RSRVJST1JfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RyZXJyb3Jfcl0pCisgIF0sWworICAgIHRtcF9zdHJlcnJvcl9yPSJ5ZXMiCisgIF0sWworICAgIHRtcF9zdHJlcnJvcl9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJlcnJvcl9yXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgXSxbCisgICAgICB0bXBfc3RyZXJyb3Jfcj0icHJvdG9fZGVjbGFyZWQiCisgICAgXSxbCisgICAgICBBQ19FR1JFUF9DUFAoW3N0cmVycm9yX3JdLFsKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9zdHJlcnJvcl9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorICAgICAgXSkKKyAgICBdKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfU1RSVE9LX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gc3RydG9rX3IgY29tcGlsZXIgdmlzaWJsZS4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX1NUUlRPS19SXSwgWworICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJ0b2tfcl0pCisgIF0sWworICAgIHRtcF9zdHJ0b2tfcj0ieWVzIgorICBdLFsKKyAgICB0bXBfc3RydG9rX3I9Im5vIgorICBdKQorICBpZiB0ZXN0ICIkdG1wX3N0cnRva19yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJ0b2tfcl0sWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorICAgIF0sWworICAgICAgdG1wX3N0cnRva19yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbc3RydG9rX3JdLFsKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9zdHJ0b2tfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0lORVRfTlRPQV9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIGZ1bmN0aW9uIGluZXRfbnRvYV9yIGNvbXBpbGVyIHZpc2libGUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9JTkVUX05UT0FfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbaW5ldF9udG9hX3JdKQorICBdLFsKKyAgICB0bXBfaW5ldF9udG9hX3I9InllcyIKKyAgXSxbCisgICAgdG1wX2luZXRfbnRvYV9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9pbmV0X250b2FfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX0VHUkVQX0NQUChbaW5ldF9udG9hX3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICAgIF0sWworICAgICAgdG1wX2luZXRfbnRvYV9yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbaW5ldF9udG9hX3JdLFsKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgICAgICBdLFsKKyAgICAgICAgdG1wX2luZXRfbnRvYV9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorICAgICAgXSkKKyAgICBdKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR0VUSE9TVEJZQUREUl9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIGZ1bmN0aW9uIGdldGhvc3RieWFkZHJfciBjb21waWxlciB2aXNpYmxlLgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR0VUSE9TVEJZQUREUl9SXSwgWworICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtnZXRob3N0YnlhZGRyX3JdKQorICBdLFsKKyAgICB0bXBfZ2V0aG9zdGJ5YWRkcl9yPSJ5ZXMiCisgIF0sWworICAgIHRtcF9nZXRob3N0YnlhZGRyX3I9Im5vIgorICBdKQorICBpZiB0ZXN0ICIkdG1wX2dldGhvc3RieWFkZHJfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX0VHUkVQX0NQUChbZ2V0aG9zdGJ5YWRkcl9yXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyAgICBdLFsKKyAgICAgIHRtcF9nZXRob3N0YnlhZGRyX3I9InByb3RvX2RlY2xhcmVkIgorICAgIF0sWworICAgICAgQUNfRUdSRVBfQ1BQKFtnZXRob3N0YnlhZGRyX3JdLFsKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgICBdLFsKKyAgICAgICAgdG1wX2dldGhvc3RieWFkZHJfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVEhPU1RCWU5BTUVfUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfUkVFTlRSQU5UIGRlZmluaXRpb24KK2RubCBtYWtlcyBmdW5jdGlvbiBnZXRob3N0YnluYW1lX3IgY29tcGlsZXIgdmlzaWJsZS4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVEhPU1RCWU5BTUVfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0aG9zdGJ5bmFtZV9yXSkKKyAgXSxbCisgICAgdG1wX2dldGhvc3RieW5hbWVfcj0ieWVzIgorICBdLFsKKyAgICB0bXBfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9nZXRob3N0YnluYW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoW2dldGhvc3RieW5hbWVfcl0sWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgXSxbCisgICAgICB0bXBfZ2V0aG9zdGJ5bmFtZV9yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbZ2V0aG9zdGJ5bmFtZV9yXSxbCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9nZXRob3N0YnluYW1lX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisgICAgICBdKQorICAgIF0pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRQUk9UT0JZTkFNRV9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIGZ1bmN0aW9uIGdldHByb3RvYnluYW1lX3IgY29tcGlsZXIgdmlzaWJsZS4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVFBST1RPQllOQU1FX1JdLCBbCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2dldHByb3RvYnluYW1lX3JdKQorICBdLFsKKyAgICB0bXBfZ2V0cHJvdG9ieW5hbWVfcj0ieWVzIgorICBdLFsKKyAgICB0bXBfZ2V0cHJvdG9ieW5hbWVfcj0ibm8iCisgIF0pCisgIGlmIHRlc3QgIiR0bXBfZ2V0cHJvdG9ieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX0VHUkVQX0NQUChbZ2V0cHJvdG9ieW5hbWVfcl0sWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgXSxbCisgICAgICB0bXBfZ2V0cHJvdG9ieW5hbWVfcj0icHJvdG9fZGVjbGFyZWQiCisgICAgXSxbCisgICAgICBBQ19FR1JFUF9DUFAoW2dldHByb3RvYnluYW1lX3JdLFsKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgICBdLFsKKyAgICAgICAgdG1wX2dldHByb3RvYnluYW1lX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisgICAgICBdKQorICAgIF0pCisgIGZpCitdKQorCisKK2RubCBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRTRVJWQllQT1JUX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gZ2V0c2VydmJ5cG9ydF9yIGNvbXBpbGVyIHZpc2libGUuCisKK0FDX0RFRlVOKFtDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRTRVJWQllQT1JUX1JdLCBbCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2dldHNlcnZieXBvcnRfcl0pCisgIF0sWworICAgIHRtcF9nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgXSxbCisgICAgdG1wX2dldHNlcnZieXBvcnRfcj0ibm8iCisgIF0pCisgIGlmIHRlc3QgIiR0bXBfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfRUdSRVBfQ1BQKFtnZXRzZXJ2Ynlwb3J0X3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgIF0sWworICAgICAgdG1wX2dldHNlcnZieXBvcnRfcj0icHJvdG9fZGVjbGFyZWQiCisgICAgXSxbCisgICAgICBBQ19FR1JFUF9DUFAoW2dldHNlcnZieXBvcnRfcl0sWworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyAgICAgIF0sWworICAgICAgICB0bXBfZ2V0c2VydmJ5cG9ydF9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorICAgICAgXSkKKyAgICBdKQorICBmaQorXSkKKworCitkbmwgQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfRlVOQ1RJT05TX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgc2V2ZXJhbCBfciBmdW5jdGlvbnMgY29tcGlsZXIgdmlzaWJsZS4KK2RubCBJbnRlcm5hbCBtYWNybyBmb3IgQ0FSRVNfQ09ORklHVVJFX1JFRU5UUkFOVC4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0ZVTkNUSU9OU19SXSwgWworICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9HTVRJTUVfUgorICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9MT0NBTFRJTUVfUgorICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9TVFJFUlJPUl9SCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX1NUUlRPS19SCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0lORVRfTlRPQV9SCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVEhPU1RCWUFERFJfUgorICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRIT1NUQllOQU1FX1IKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisgICAgQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR0VUUFJPVE9CWU5BTUVfUgorICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRTRVJWQllQT1JUX1IKKyAgZmkKK10pCisKKworZG5sIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX1NZU1RFTQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfUkVFTlRSQU5UIGRlZmluaXRpb24KK2RubCBtdXN0IGJlIHVuY29uZGl0aW9uYWxseSBkb25lIGZvciB0aGlzIHBsYXRmb3JtLgorZG5sIEludGVybmFsIG1hY3JvIGZvciBDQVJFU19DT05GSUdVUkVfUkVFTlRSQU5ULgorCitBQ19ERUZVTihbQ0FSRVNfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfU1lTVEVNXSwgWworICBjYXNlICRob3N0X29zIGluCisgICAgc29sYXJpcyopCisgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ibm8iCisgICAgICA7OworICBlc2FjCitdKQorCisKK2RubCBDQVJFU19DSEVDS19ORUVEX1RIUkVBRF9TQUZFX1NZU1RFTQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfVEhSRUFEX1NBRkUgZGVmaW5pdGlvbgorZG5sIG11c3QgYmUgdW5jb25kaXRpb25hbGx5IGRvbmUgZm9yIHRoaXMgcGxhdGZvcm0uCitkbmwgSW50ZXJuYWwgbWFjcm8gZm9yIENBUkVTX0NPTkZJR1VSRV9USFJFQURfU0FGRS4KKworQUNfREVGVU4oW0NBUkVTX0NIRUNLX05FRURfVEhSRUFEX1NBRkVfU1lTVEVNXSwgWworICBjYXNlICRob3N0X29zIGluCisgICAgYWl4W1sxMjNdXS4qIHwgYWl4NC5bWzAxMl1dLiopCisgICAgICBkbmwgYWl4IDQuMiBhbmQgb2xkZXIKKyAgICAgIHRtcF9uZWVkX3RocmVhZF9zYWZlPSJubyIKKyAgICAgIDs7CisgICAgYWl4KikKKyAgICAgIGRubCBBSVggNC4zIGFuZCBuZXdlcgorICAgICAgdG1wX25lZWRfdGhyZWFkX3NhZmU9InllcyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHRtcF9uZWVkX3RocmVhZF9zYWZlPSJubyIKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENBUkVTX0NPTkZJR1VSRV9GUk9NX05PV19PTl9XSVRIX1JFRU5UUkFOVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIG1hY3JvIGVuc3VyZXMgdGhhdCBjb25maWd1cmF0aW9uIHRlc3RzIGRvbmUKK2RubCBhZnRlciB0aGlzIHdpbGwgZXhlY3V0ZSB3aXRoIHByZXByb2Nlc3NvciBzeW1ib2wKK2RubCBfUkVFTlRSQU5UIGRlZmluZWQuIFRoaXMgbWFjcm8gYWxzbyBlbnN1cmVzIHRoYXQKK2RubCB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlIGRlZmluZXMgTkVFRF9SRUVOVFJBTlQKK2RubCBhbmQgdGhhdCBpbiB0dXJuIHNldHVwLmggd2lsbCBkZWZpbmUgX1JFRU5UUkFOVC4KK2RubCBJbnRlcm5hbCBtYWNybyBmb3IgQ0FSRVNfQ09ORklHVVJFX1JFRU5UUkFOVC4KKworQUNfREVGVU4oW0NBUkVTX0NPTkZJR1VSRV9GUk9NX05PV19PTl9XSVRIX1JFRU5UUkFOVF0sIFsKK0FDX0RFRklORShORUVEX1JFRU5UUkFOVCwgMSwKKyAgW0RlZmluZSB0byAxIGlmIF9SRUVOVFJBTlQgcHJlcHJvY2Vzc29yIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQuXSkKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjaWZuZGVmIF9SRUVOVFJBTlQKKyMgIGRlZmluZSBfUkVFTlRSQU5UCisjZW5kaWYKK19FT0YKK10pCisKKworZG5sIENBUkVTX0NPTkZJR1VSRV9GUk9NX05PV19PTl9XSVRIX1RIUkVBRF9TQUZFCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgbWFjcm8gZW5zdXJlcyB0aGF0IGNvbmZpZ3VyYXRpb24gdGVzdHMgZG9uZQorZG5sIGFmdGVyIHRoaXMgd2lsbCBleGVjdXRlIHdpdGggcHJlcHJvY2Vzc29yIHN5bWJvbAorZG5sIF9USFJFQURfU0FGRSBkZWZpbmVkLiBUaGlzIG1hY3JvIGFsc28gZW5zdXJlcyB0aGF0CitkbmwgdGhlIGdlbmVyYXRlZCBjb25maWcgZmlsZSBkZWZpbmVzIE5FRURfVEhSRUFEX1NBRkUKK2RubCBhbmQgdGhhdCBpbiB0dXJuIHNldHVwLmggd2lsbCBkZWZpbmUgX1RIUkVBRF9TQUZFLgorZG5sIEludGVybmFsIG1hY3JvIGZvciBDQVJFU19DT05GSUdVUkVfVEhSRUFEX1NBRkUuCisKK0FDX0RFRlVOKFtDQVJFU19DT05GSUdVUkVfRlJPTV9OT1dfT05fV0lUSF9USFJFQURfU0FGRV0sIFsKK0FDX0RFRklORShORUVEX1RIUkVBRF9TQUZFLCAxLAorICBbRGVmaW5lIHRvIDEgaWYgX1RIUkVBRF9TQUZFIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLl0pCitjYXQgPj5jb25mZGVmcy5oIDw8X0VPRgorI2lmbmRlZiBfVEhSRUFEX1NBRkUKKyMgIGRlZmluZSBfVEhSRUFEX1NBRkUKKyNlbmRpZgorX0VPRgorXSkKKworCitkbmwgQ0FSRVNfQ09ORklHVVJFX1JFRU5UUkFOVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIGZpcnN0IGNoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQKK2RubCBzeW1ib2wgaXMgYWxyZWFkeSBkZWZpbmVkLiBJZiBpdCBpc24ndCBjdXJyZW50bHkKK2RubCBkZWZpbmVkIGEgc2V0IG9mIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIHZlcmlmeQorZG5sIGlmIGl0cyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIHRvIG1ha2UgdmlzaWJsZSB0bworZG5sIHRoZSBjb21waWxlciBhIHNldCBvZiAqX3IgZnVuY3Rpb25zLiBGaW5hbGx5LCBpZgorZG5sIF9SRUVOVFJBTlQgaXMgYWxyZWFkeSBkZWZpbmVkIG9yIG5lZWRlZCBpdCB0YWtlcworZG5sIGNhcmUgb2YgbWFraW5nIGFkanVzdG1lbnRzIG5lY2Vzc2FyeSB0byBlbnN1cmUKK2RubCB0aGF0IGl0IGlzIGRlZmluZWQgZXF1YWxseSBmb3IgZnVydGhlciBjb25maWd1cmUKK2RubCB0ZXN0cyBhbmQgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlLgorCitBQ19ERUZVTihbQ0FSRVNfQ09ORklHVVJFX1JFRU5UUkFOVF0sIFsKKyAgQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIF9SRUVOVFJBTlQgaXMgYWxyZWFkeSBkZWZpbmVkXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgIF1dLFtbCisjaWZkZWYgX1JFRU5UUkFOVAorICAgICAgaW50IGR1bW15PTE7CisjZWxzZQorICAgICAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRtcF9yZWVudHJhbnRfaW5pdGlhbGx5X2RlZmluZWQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRtcF9yZWVudHJhbnRfaW5pdGlhbGx5X2RlZmluZWQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0bXBfcmVlbnRyYW50X2luaXRpYWxseV9kZWZpbmVkIiA9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIF9SRUVOVFJBTlQgaXMgYWN0dWFsbHkgbmVlZGVkXSkKKyAgICBDQVJFU19DSEVDS19ORUVEX1JFRU5UUkFOVF9TWVNURU0KKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICAgIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0VSUk5PCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICAgIENBUkVTX0NIRUNLX05FRURfUkVFTlRSQU5UX0ZVTkNUSU9OU19SCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgX1JFRU5UUkFOVCBpcyBvbndhcmRzIGRlZmluZWRdKQorICBpZiB0ZXN0ICIkdG1wX3JlZW50cmFudF9pbml0aWFsbHlfZGVmaW5lZCIgPSAieWVzIiB8fAorICAgIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gInllcyI7IHRoZW4KKyAgICBDQVJFU19DT05GSUdVUkVfRlJPTV9OT1dfT05fV0lUSF9SRUVOVFJBTlQKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorICAjCitdKQorCisKK2RubCBDQVJFU19DT05GSUdVUkVfVEhSRUFEX1NBRkUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBmaXJzdCBjaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfVEhSRUFEX1NBRkUKK2RubCBzeW1ib2wgaXMgYWxyZWFkeSBkZWZpbmVkLiBJZiBpdCBpc24ndCBjdXJyZW50bHkKK2RubCBkZWZpbmVkIGEgc2V0IG9mIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIHZlcmlmeQorZG5sIGlmIGl0cyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkLiBGaW5hbGx5LCBpZgorZG5sIF9USFJFQURfU0FGRSBpcyBhbHJlYWR5IGRlZmluZWQgb3IgbmVlZGVkIGl0IHRha2VzCitkbmwgY2FyZSBvZiBtYWtpbmcgYWRqdXN0bWVudHMgbmVjZXNzYXJ5IHRvIGVuc3VyZQorZG5sIHRoYXQgaXQgaXMgZGVmaW5lZCBlcXVhbGx5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyZQorZG5sIHRlc3RzIGFuZCBnZW5lcmF0ZWQgY29uZmlnIGZpbGUuCisKK0FDX0RFRlVOKFtDQVJFU19DT05GSUdVUkVfVEhSRUFEX1NBRkVdLCBbCisgIEFDX1BSRVJFUShbMi41MF0pZG5sCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBfVEhSRUFEX1NBRkUgaXMgYWxyZWFkeSBkZWZpbmVkXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgIF1dLFtbCisjaWZkZWYgX1RIUkVBRF9TQUZFCisgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdG1wX3RocmVhZF9zYWZlX2luaXRpYWxseV9kZWZpbmVkPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0bXBfdGhyZWFkX3NhZmVfaW5pdGlhbGx5X2RlZmluZWQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0bXBfdGhyZWFkX3NhZmVfaW5pdGlhbGx5X2RlZmluZWQiID0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgX1RIUkVBRF9TQUZFIGlzIGFjdHVhbGx5IG5lZWRlZF0pCisgICAgQ0FSRVNfQ0hFQ0tfTkVFRF9USFJFQURfU0FGRV9TWVNURU0KKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfdGhyZWFkX3NhZmUiID0gInllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBfVEhSRUFEX1NBRkUgaXMgb253YXJkcyBkZWZpbmVkXSkKKyAgaWYgdGVzdCAiJHRtcF90aHJlYWRfc2FmZV9pbml0aWFsbHlfZGVmaW5lZCIgPSAieWVzIiB8fAorICAgIHRlc3QgIiR0bXBfbmVlZF90aHJlYWRfc2FmZSIgPSAieWVzIjsgdGhlbgorICAgIENBUkVTX0NPTkZJR1VSRV9GUk9NX05PV19PTl9XSVRIX1RIUkVBRF9TQUZFCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKKyAgIworXSkKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL200L2xpYnRvb2wubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9saWJ0b29sLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMDIwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9saWJ0b29sLm00CkBAIC0wLDAgKzEsODM4OCBAQAorIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgMjAwMy0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQKKyMgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlICBzYW1lCisjIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KK10pCisKKyMgc2VyaWFsIDU4IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjYyXSlkbmwgV2UgdXNlIEFDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDSworQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX0xBTkddKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVERMX0lOSVRdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX0JVSUxERElSXSlkbmwKKworZG5sIEF1dG9jb25mIGRvZXNuJ3QgY2F0Y2ggdW5leHBhbmRlZCBMVF8gbWFjcm9zIGJ5IGRlZmF1bHQ6CittNF9wYXR0ZXJuX2ZvcmJpZChbXl8/TFRfW0EtWl9dKyRdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbXihfTFRfRU9GfExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1d8TFRfTVVMVElfTU9EVUxFKSRdKWRubAorZG5sIGFjbG9jYWwgZG9lc24ndCBwdWxsIGx0b3B0aW9ucy5tNCwgbHRzdWdhci5tNCwgb3IgbHR2ZXJzaW9uLm00CitkbmwgdW5sZXNzIHdlIHJlcXVpcmUgYW4gQUNfREVGVU5lZCBtYWNybzoKK0FDX1JFUVVJUkUoW0xUT1BUSU9OU19WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUU1VHQVJfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFZFUlNJT05fVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVE9CU09MRVRFX1ZFUlNJT05dKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfTFRNQUlOXSlkbmwKKworX0xUX1NIRUxMX0lOSVQoW1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9XSkKKworZG5sIFBhcnNlIE9QVElPTlMKK19MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9JGx0bWFpbgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCitfTFRfU0VUVVAKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorbTRfZGVmaW5lKFtMVF9JTklUXSkKK10pIyBMVF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK0FVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCBbXSkKKworCisjIF9MVF9QUkVQQVJFX0NDX0JBU0VOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUVdLCBbCisjIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KK2Z1bmNfY2NfYmFzZW5hbWUgKCkKK3sKKyAgICBmb3IgY2NfdGVtcCBpbiBAU3xAKiIiOyBkbworICAgICAgY2FzZSAkY2NfdGVtcCBpbgorICAgICAgICBjb21waWxlIHwgKltbXFwvXV1jb21waWxlIHwgY2NhY2hlIHwgKltbXFwvXV1jY2FjaGUgKSA7OworICAgICAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKyAgICAgICAgXC0qKSA7OworICAgICAgICAqKSBicmVhazs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorfQorXSkjIF9MVF9QUkVQQVJFX0NDX0JBU0VOQU1FCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXQgd291bGQgYmUgY2xlYXJlciB0byBjYWxsIEFDX1JFUVVJUkVzIGZyb20gX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUUsCisjIGJ1dCB0aGF0IG1hY3JvIGlzIGFsc28gZXhwYW5kZWQgaW50byBnZW5lcmF0ZWQgbGlidG9vbCBzY3JpcHQsIHdoaWNoCisjIGFycmFuZ2VzIGZvciAkU0VEIGFuZCAkRUNITyB0byBiZSBzZXQgYnkgZGlmZmVyZW50IG1lYW5zLgorbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCitbbTRfcmVxdWlyZShbX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUVdKWRubAorQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKK2Z1bmNfY2NfYmFzZW5hbWUgJDEKK2NjX2Jhc2VuYW1lPSRmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdAorXSkKKworCisjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJdCBpcyBva2F5IHRvIHVzZSB0aGVzZSBmaWxlIGNvbW1hbmRzIGFuZCBhc3N1bWUgdGhleSBoYXZlIGJlZW4gc2V0CisjIHNlbnNpYmx5IGFmdGVyICdtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgorbTRfZGVmdW4oW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdLAorWzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KK10pIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisKKworIyBfTFRfU0VUVVAKKyMgLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1NFVFVQXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorQUNfUkVRVUlSRShbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKWRubAorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorCitfTFRfREVDTChbXSwgW1BBVEhfU0VQQVJBVE9SXSwgWzFdLCBbVGhlIFBBVEggc2VwYXJhdG9yIGZvciB0aGUgYnVpbGQgc3lzdGVtXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtob3N0X2FsaWFzXSwgWzBdLCBbVGhlIGhvc3Qgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9vc10sIFswXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtidWlsZF9hbGlhc10sIFswXSwgW1RoZSBidWlsZCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfb3NdLCBbMF0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK19MVF9ERUNMKFtdLCBbTE5fU10sIFsxXSwgW1doZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3NdKWRubAorZG5sCitBQ19SRVFVSVJFKFtMVF9DTURfTUFYX0xFTl0pZG5sCitfTFRfREVDTChbb2JqZXh0XSwgW2FjX29iamV4dF0sIFswXSwgW09iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCitkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9XSVRIX1NZU1JPT1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9UUlVOQ0FURV0pZG5sCisKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKK10pCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworX0xUX0NIRUNLX09CSkRJUgorCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCitvbGRfQ0M9JENDCitvbGRfQ0ZMQUdTPSRDRkxBR1MKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIF9MVF9QQVRIX01BR0lDCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitMVF9TVVBQT1JURURfVEFHKFtDQ10pCitfTFRfTEFOR19DX0NPTkZJRworX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKK19MVF9DT05GSUdfQ09NTUFORFMKK10pIyBfTFRfU0VUVVAKKworCisjIF9MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGZldyBzZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscCB1cyBkbyByb2J1c3QgcXVvdGluZy4KK200X2RlZnVuKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCitbIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbWyJgJFxcXV1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1siYFxcXV1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKK10pCisKKyMgX0xUX1BST0dfTFRNQUlOCisjIC0tLS0tLS0tLS0tLS0tLQorIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gJ2NvbmZpZ3VyZScsIGFuZCAnY29uZmlnLnN0YXR1cycKKyMgbm93IHRoYXQgd2UgdXNlIEFDX0NPTkZJR19DT01NQU5EUyB0byBnZW5lcmF0ZSBsaWJ0b29sLiAgTm90YWJseSwKKyMgJ2NvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorIyBzbyB3ZSBwYXNzIGEgY29weSBhbG9uZyB0byBtYWtlIHN1cmUgaXQgaGFzIGEgc2Vuc2libGUgdmFsdWUgYW55d2F5LgorbTRfZGVmdW4oW19MVF9QUk9HX0xUTUFJTl0sCitbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJ10pCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlICdsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byAnY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluICdjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KKyMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCisjIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgcHJvcGVybHkuICBJbiBjb25maWd1cmUsIHRoaXMgbWFjcm8gZXhwYW5kcworIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKKyMKKyMgICAgPHZhcj49J2AkRUNITyAiJDx2YXI+IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK200X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisgICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CittNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCitbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAorYXZhaWxhYmxlX3RhZ3M9J19MVF9UQUdTJ2RubAorXSkKKworCisjIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKyMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6CisjCisjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKyMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCittNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAorW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKK200X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAorICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKK200X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAorICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAorICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAorbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlICdsaWJ0b29sJworIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwKKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKKworCisjIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCisKKworIyBfTFRfQ09ORklHX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscworIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKKyMgaW50byAnY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiAnY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCittNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCitbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCisJZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisJZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0CisJZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAorICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCisgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCitdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCitbCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJFtdMQorX0xURUNIT19FT0YnCit9CisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcworICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChGSUxFLCBbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIGNoaWxkIHNjcmlwdCBGSUxFIHdpdGggYWxsIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSB0bworIyByZXVzZSB0aGUgZW52aXJvbm1lbnQgbGVhcm5lZCBieSB0aGUgcGFyZW50IHNjcmlwdCwgYW5kIG1ha2UgdGhlCisjIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQorIyAnIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCisjIG1hY3JvLCBhZGRpdGlvbmFsIHRleHQgY2FuIGJlIGFwcGVuZGVkIHRvIEZJTEUgdG8gZm9ybSB0aGUgYm9keSBvZgorIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCisjIGZpbGUgY291bGQgbm90IGJlIGZ1bGx5IHdyaXR0ZW4gKHN1Y2ggYXMgaWYgdGhlIGRpc2sgaXMgZnVsbCkuCittNF9pZmRlZihbQVNfSU5JVF9HRU5FUkFURURdLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sW0FTX0lOSVRfR0VORVJBVEVEKCRAKV0pXSwKK1ttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLAorW200X3JlcXVpcmUoW0FTX1BSRVBBUkVdKV1kbmwKK1ttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorW2x0X3dyaXRlX2ZhaWw9MAorY2F0ID4kMSA8PF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorJDIKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JDEgPDxcX0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorQVNfU0hFTExfU0FOSVRJWkUKK19BU19QUkVQQVJFCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKK19BU0VPRgordGVzdCAwID0gIiRsdF93cml0ZV9mYWlsIiAmJiBjaG1vZCAreCAkMVtdZG5sCittNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldKV0pIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVAorCisjIExUX09VVFBVVAorIyAtLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorIyB0ZXN0cy4KK0FDX0RFRlVOKFtMVF9PVVRQVVRdLAorWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX0xUXSkKK19MVF9HRU5FUkFURURfRklMRV9JTklUKFsiJENPTkZJR19MVCJdLAorWyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXSkKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorbHRfY2xfc2lsZW50PWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2x0X2NsX2hlbHA9IlwKKyckYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAorZm9yIHVzZSBpbiBmdXJ0aGVyIGNvbmZpZ3VyZSB0aW1lIHRlc3RzIGJlZm9yZSB0aGUgcmVhbCBsaWJ0b29sIGlzCitnZW5lcmF0ZWQuCisKK1VzYWdlOiAkWzBdIFtbT1BUSU9OU11dCisKKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0ICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LiIKKworbHRfY2xfdmVyc2lvbj0iXAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFsgQUNfUEFDS0FHRV9WRVJTSU9OXSkKK2NvbmZpZ3VyZWQgYnkgJFswXSwgZ2VuZXJhdGVkIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLgorCitDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCit3aGlsZSB0ZXN0IDAgIT0gJFsjXQorZG8KKyAgY2FzZSAkWzFdIGluCisgICAgLS12ZXJzaW9uIHwgLS12KiB8IC1WICkKKyAgICAgIGVjaG8gIiRsdF9jbF92ZXJzaW9uIjsgZXhpdCAwIDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgIGVjaG8gIiRsdF9jbF9oZWxwIjsgZXhpdCAwIDs7CisgICAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgICBkZWJ1Zz06IDs7CisgICAgLS1xdWlldCB8IC0tcSogfCAtLXNpbGVudCB8IC0tcyogfCAtcSApCisgICAgICBsdF9jbF9zaWxlbnQ9OiA7OworCisgICAgLSopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIG9wdGlvbjogJFsxXQorVHJ5ICckWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKworICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCitUcnkgJyRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorZmkKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSkKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworQVNfRVhJVCgwKQorX0xURU9GCitjaG1vZCAreCAiJENPTkZJR19MVCIKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBidXQgY29uZmlnLmx0IGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwKKyMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CisjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKyMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KK2x0X2NsX3N1Y2Nlc3M9OgordGVzdCB5ZXMgPSAiJHNpbGVudCIgJiYKKyAgbHRfY29uZmlnX2x0X2FyZ3M9IiRsdF9jb25maWdfbHRfYXJncyAtLXF1aWV0IgorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKKyRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKKyRsdF9jbF9zdWNjZXNzIHx8IEFTX0VYSVQoMSkKK10pIyBMVF9PVVRQVVQKKworCisjIF9MVF9DT05GSUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgSWYgVEFHIGlzIHRoZSBidWlsdC1pbiB0YWcsIGNyZWF0ZSBhbiBpbml0aWFsIGxpYnRvb2wgc2NyaXB0IHdpdGggYQorIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdW50YWdnZWQgY29uZmlnIHZhcnMuICBPdGhlcndpc2UgYWRkIGNvZGUKKyMgdG8gY29uZmlnLnN0YXR1cyBmb3IgYXBwZW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG5hbWVkIGJ5IFRBRyBmcm9tIHRoZQorIyBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCittNF9kZWZ1bihbX0xUX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoWworICBtNF9kZWZpbmUoW19MVF9UQUddLCBtNF9pZihbJDFdLCBbXSwgW0NdLCBbJDFdKSlkbmwKKyAgbTRfaWYoX0xUX1RBRywgW0NdLCBbCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0ke29maWxlfVQKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKworX0xUX0NPUFlJTkcKK19MVF9MSUJUT09MX1RBR1MKKworIyBDb25maWd1cmVkIGRlZmF1bHRzIGZvciBzeXNfbGliX2Rsc2VhcmNoX3BhdGggbXVuZ2luZy4KKzogXCR7TFRfU1lTX0xJQlJBUllfUEFUSD0iJGNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGgifQorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKK19MVF9MSUJUT09MX1RBR19WQVJTCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgICAgY2F0IDw8J19MVF9FT0YnID4+ICIkY2ZnZmlsZSIKKworIyAjIyMgQkVHSU4gRlVOQ1RJT05TIFNIQVJFRCBXSVRIIENPTkZJR1VSRQorCitfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1QKK19MVF9QUkVQQVJFX0NDX0JBU0VOQU1FCisKKyMgIyMjIEVORCBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworICBfTFRfUFJPR19MVE1BSU4KKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorXSwKK1tjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKK2RubCBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gdXNlICQxIGhlcmUsIHNpbmNlIF9MVF9UQUcgaXMgbm90IGV4cGFuZGVkCitkbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0xJQlRPT0xfVEFHX1ZBUlMoX0xUX1RBRykKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfRU9GCitdKWRubCAvbTRfaWYKK10sCitbbTRfaWYoWyQxXSwgW10sIFsKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnXSwgW10pCitdKWRubCAvX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTCitdKSMgX0xUX0NPTkZJRworCisKKyMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFjZSB0aGlzIG1hY3JvIHRvIGRpc2NvdmVyIHdoYXQgdGFncyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ0b29sCisjIC0tdGFnIG9wdGlvbiwgdXNpbmc6CisjICAgIGF1dG9jb25mIC0tdHJhY2UgJ0xUX1NVUFBPUlRFRF9UQUc6JDEnCitBQ19ERUZVTihbTFRfU1VQUE9SVEVEX1RBR10sIFtdKQorCisKKyMgQyBzdXBwb3J0IGlzIGJ1aWx0LWluIGZvciBub3cKK200X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCittNF9kZWZpbmUoW19MVF9UQUdTXSwgW10pCisKKworIyBMVF9MQU5HKExBTkcpCisjIC0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCitBQ19ERUZVTihbTFRfTEFOR10sCitbQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorbTRfY2FzZShbJDFdLAorICBbQ10sCQkJW19MVF9MQU5HKEMpXSwKKyAgW0MrK10sCQlbX0xUX0xBTkcoQ1hYKV0sCisgIFtHb10sCQkJW19MVF9MQU5HKEdPKV0sCisgIFtKYXZhXSwJCVtfTFRfTEFORyhHQ0opXSwKKyAgW0ZvcnRyYW4gNzddLAkJW19MVF9MQU5HKEY3NyldLAorICBbRm9ydHJhbl0sCQlbX0xUX0xBTkcoRkMpXSwKKyAgW1dpbmRvd3MgUmVzb3VyY2VdLAlbX0xUX0xBTkcoUkMpXSwKKyAgW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX0NPTkZJR10sCisgICAgW19MVF9MQU5HKCQxKV0sCisgICAgW200X2ZhdGFsKFskMDogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICIkMSJdKV0pXSlkbmwKK10pIyBMVF9MQU5HCisKKworIyBfTFRfTEFORyhMQU5HTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkddLAorW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSwKKyAgW0xUX1NVUFBPUlRFRF9UQUcoWyQxXSlkbmwKKyAgbTRfYXBwZW5kKFtfTFRfVEFHU10sIFskMSBdKWRubAorICBtNF9kZWZpbmUoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdKWRubAorICBfTFRfTEFOR18kMV9DT05GSUcoJDEpXSlkbmwKK10pIyBfTFRfTEFORworCisKK200X2lmbmRlZihbQUNfUFJPR19HT10sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19HTy4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK200X2RlZnVuKFtBQ19QUk9HX0dPXSwKK1tBQ19MQU5HX1BVU0goR28pZG5sCitBQ19BUkdfVkFSKFtHT0NdLCAgICAgW0dvIGNvbXBpbGVyIGNvbW1hbmRdKWRubAorQUNfQVJHX1ZBUihbR09GTEFHU10sIFtHbyBjb21waWxlciBmbGFnc10pZG5sCitfQUNfQVJHX1ZBUl9MREZMQUdTKClkbmwKK0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbykKK2lmIHRlc3QgLXogIiRHT0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBBQ19DSEVDS19QUk9HKEdPQywgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dLCBbJHthY190b29sX3ByZWZpeH1nY2Nnb10pCisgIGZpCitmaQoraWYgdGVzdCAteiAiJEdPQyI7IHRoZW4KKyAgQUNfQ0hFQ0tfUFJPRyhHT0MsIGdjY2dvLCBnY2NnbywgZmFsc2UpCitmaQorXSkjbTRfZGVmdW4KK10pI200X2lmbmRlZgorCisKKyMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR19ERUZBVUxUX0NPTkZJR10sCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgW0xUX0xBTkcoQ1hYKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtMVF9MQU5HKENYWCldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCisgIFtMVF9MQU5HKEY3NyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbTFRfTEFORyhGNzcpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GQ10sCisgIFtMVF9MQU5HKEZDKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRkNdLCBkZWZuKFtBQ19QUk9HX0ZDXSlbTFRfTEFORyhGQyldKV0pCisKK2RubCBUaGUgY2FsbCB0byBbQV1bTV9QUk9HX0dDSl0gaXMgcXVvdGVkIGxpa2UgdGhhdCB0byBzdG9wIGFjbG9jYWwKK2RubCBwdWxsaW5nIHRoaW5ncyBpbiBuZWVkbGVzc2x5LgorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKKyAgW0xUX0xBTkcoR0NKKV0sCisgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX0dDSl0sCisgICAgICBbTFRfTEFORyhHQ0opXSwKKyAgICAgIFttNF9pZmRlZihbQUNfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtMVF9QUk9HX0dDSl0sCisJW200X2RlZmluZShbTFRfUFJPR19HQ0pdLCBkZWZuKFtMVF9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSldKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR09dLAorICBbTFRfTEFORyhHTyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0dPXSwgZGVmbihbQUNfUFJPR19HT10pW0xUX0xBTkcoR08pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisgIFtMVF9MQU5HKFJDKV0sCisgIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCitdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKworIyBPYnNvbGV0ZSBtYWNyb3M6CitBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtMVF9MQU5HKEZvcnRyYW4gNzcpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbTFRfTEFORyhXaW5kb3dzIFJlc291cmNlKV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtdKQorCisKKyMgX0xUX1RBR19DT01QSUxFUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RBR19DT01QSUxFUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisKK19MVF9ERUNMKFtMVENDXSwgW0NDXSwgWzFdLCBbQSBDIGNvbXBpbGVyXSlkbmwKK19MVF9ERUNMKFtMVENGTEFHU10sIFtDRkxBR1NdLCBbMV0sIFtMVENDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19MVF9UQUdERUNMKFtDQ10sIFtjb21waWxlcl0sIFsxXSwgW0EgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXJdKWRubAorX0xUX1RBR0RFQ0woW3dpdGhfZ2NjXSwgW0dDQ10sIFswXSwgW0lzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyP10pZG5sCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKK10pIyBfTFRfVEFHX0NPTVBJTEVSCisKKworIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKK10pIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKworCisjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgbGlua2VyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgbGluayB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKK10pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW5fb25jZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLFsKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgQUNfQ0hFQ0tfVE9PTChbRFNZTVVUSUxdLCBbZHN5bXV0aWxdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTk1FRElUXSwgW25tZWRpdF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtMSVBPXSwgW2xpcG9dLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0xdLCBbb3Rvb2xdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0w2NF0sIFtvdG9vbDY0XSwgWzpdKQorICAgIF9MVF9ERUNMKFtdLCBbRFNZTVVUSUxdLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtOTUVESVRdLCBbMV0sCisgICAgICBbVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTElQT10sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MXSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MNjRdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjRdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAorICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiRMVF9NVUxUSV9NT0RVTEUiOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCSMgSWYgdGhlcmUgaXMgYSBub24tZW1wdHkgZXJyb3IgbG9nLCBhbmQgInNpbmdsZV9tb2R1bGUiCisJIyBhcHBlYXJzIGluIGl0LCBhc3N1bWUgdGhlIGZsYWcgY2F1c2VkIGEgbGlua2VyIHdhcm5pbmcKKyAgICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgc2luZ2xlX21vZHVsZSBjb25mdGVzdC5lcnI7IHRoZW4KKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCisJIyB0aGUgY29tcGlsZXIsIGl0IHdvcmtlZC4KKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IjsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWddLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdF0sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vXSkKKwlMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZ10sW2x0X2N2X2xkX2ZvcmNlX2xvYWRdLAorICAgICAgW2x0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKKyAgICAgIF9sdF9yZXN1bHQ9JD8KKyAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IiAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcworICAgICAgZWxzZQorCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorICAgIF0pCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bWzkxXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bWzAxMl1dW1ssLl1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR3bC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0gJGxpYicKKyAgICBmaQorICAgIGlmIHRlc3QgOiAhPSAiJERTWU1VVElMIiAmJiB0ZXN0IG5vID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQorCisKKyMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVja3MgZm9yIGxpbmtlciBhbmQgY29tcGlsZXIgZmVhdHVyZXMgb24gZGFyd2luCittNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorWworICBtNF9yZXF1aXJlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworICAgIG00X2Nhc2UoWyQxXSwgW0Y3N10sIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10sCisgICAgICAgICAgICAgICAgICBbRkNdLCAgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSkKKyAgZWxzZQorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICBmaQorICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZAorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCp8bmFnZm9yKikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgeWVzID0gIiRfbHRfZGFyX2Nhbl9zaGFyZWQiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2RzeW11dGlsIgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kc3ltdXRpbCIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgbTRfaWYoWyQxXSwgW0NYWF0sCitbICAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kc3ltdXRpbCIKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgZmkKK10sW10pCisgIGVsc2UKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICBmaQorXSkKKworIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKyMgU3RvcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBmb3IgZWFjaCBUQUdOQU1FLgorIyBBbGxvdyB0byBvdmVycmlkZSB0aGVtIGZvciBhbGwgdGFncyB0aHJvdWdoIGx0X2N2X2FpeF9saWJwYXRoLgorbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAoraWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCisgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSxbCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nWworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9XScKKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaV0sW10pCisgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0vdXNyL2xpYjovbGliCisgIGZpCisgIF0pCisgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQorZmkKK10pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCisKKyMgX0xUX1NIRUxMX0lOSVQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKK1ttNF9kaXZlcnRfdGV4dChbTTRTSC1JTklUXSwgWyQxCitdKV0pIyBfTFRfU0hFTExfSU5JVAorCisKKworIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgorIyBJbiBwYXJ0aWN1bGFyLCB3aXRoIEF1dG9jb25mIDIuNjAgb3IgbGF0ZXIgd2UgYWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQKKyMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHRoYXQgd2lsbCBmaW5kIGEgc2hlbGwgd2l0aCBhIGJ1aWx0aW4KKyMgcHJpbnRmICh0aGF0IHdlIGNhbiB1c2UgYXMgYW4gZWNobyBjb21tYW5kKS4KK200X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcHJpbnQgc3RyaW5nc10pCisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskW10xCitfTFRFQ0hPX0VPRicKKyAgfQorICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCitmaQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCitjYXNlICRFQ0hPIGluCisgIHByaW50ZiopIEFDX01TR19SRVNVTFQoW3ByaW50Zl0pIDs7CisgIHByaW50KikgQUNfTVNHX1JFU1VMVChbcHJpbnQgLXJdKSA7OworICAqKSBBQ19NU0dfUkVTVUxUKFtjYXRdKSA7OworZXNhYworCittNF9pZmRlZihbX0FTX0RFVEVDVF9TVUdHRVNURURdLAorW19BU19ERVRFQ1RfU1VHR0VTVEVEKFsKKyAgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9JHtCQVNIX1ZFUlNJT04rc2V0fSIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisgICAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgICAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCAiWGBwcmludGYgJXMgJEVDSE9gIiA9ICJYJEVDSE8iIFwKKyAgICAgIHx8IHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE9gIiA9ICJYJEVDSE8iICldKV0pCisKK19MVF9ERUNMKFtdLCBbU0hFTExdLCBbMV0sIFtTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzXSkKK19MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKK10pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCisKKyMgX0xUX1dJVEhfU1lTUk9PVAorIyAtLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCitBQ19BUkdfV0lUSChbc3lzcm9vdF0sCitbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXNyb290QDw6QD1ESVJAOj5AXSwKKyAgW1NlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290CisgICBpZiBub3Qgc3BlY2lmaWVkKS5dKV0sCitbXSwgW3dpdGhfc3lzcm9vdD1ub10pCisKK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKK2RubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgorbHRfc3lzcm9vdD0KK2Nhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICBBQ19NU0dfUkVTVUxUKFskd2l0aF9zeXNyb290XSkKKyAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCisgICA7OworZXNhYworCisgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQorX0xUX0RFQ0woW10sIFtsdF9zeXNyb290XSwgWzBdLCBbVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBdZG5sCitbZGVwZW5kZW50IGxpYnJhcmllcywgYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5dKV0pCisKKyMgX0xUX0VOQUJMRV9MT0NLCisjIC0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitbQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKyAgICBbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3Qgbm8gPSAiJGVuYWJsZV9saWJ0b29sX2xvY2siIHx8IGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBtb2RlCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0zMgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT02NAorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCittaXBzNjQqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICdbI11saW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgZW11bD1lbGYKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqMzItYml0KikKKwllbXVsPSIke2VtdWx9MzIiCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWVtdWw9IiR7ZW11bH02NCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTVNCKikKKwllbXVsPSIke2VtdWx9YnRzbWlwIgorCTs7CisgICAgICAqTFNCKikKKwllbXVsPSIke2VtdWx9bHRzbWlwIgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpOMzIqKQorCWVtdWw9IiR7ZW11bH1uMzIiCisJOzsKKyAgICBlc2FjCisgICAgTEQ9IiR7TEQtbGR9IC1tICRlbXVsIgorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNhc2VzIG9ubHkgY292ZXIgdGhlCisgICMgc2l0dWF0aW9ucyB3aGVyZSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgKHN1Y2ggYXMgd2hlbgorICAjIGRvaW5nIDMyLWJpdCBjb21waWxhdGlvbiBmb3IgYSBob3N0IHdoZXJlIGxkIGRlZmF1bHRzIHRvIDY0LWJpdCwgb3IKKyAgIyB2aWNlIHZlcnNhKTsgdGhlIGNvbW1vbiBjYXNlcyB3aGVyZSBubyBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIGRvCisgICMgbm90IGFwcGVhciBpbiB0aGUgbGlzdC4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKwkgICAgICAqeDg2LTY0KikKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3g4Nl82NCIKKwkJOzsKKwkgICAgICAqKQorCQlMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJCTs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIHBvd2VycGM2NGxlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMmxwcGNsaW51eCIKKwkgICAgOzsKKwkgIHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcG93ZXJwY2xlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NGxwcGMiCisJICAgIDs7CisJICBwb3dlcnBjLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0kQ0ZMQUdTCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKKyAgICAgQUNfTEFOR19QT1BdKQorICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2NjX25lZWRzX2JlbGYiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSRTQVZFX0NGTEFHUworICBmaQorICA7OworKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKQorICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKnx4ODZfNjQtKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIExEPSR7TEQtbGR9X3NvbDIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9JGVuYWJsZV9saWJ0b29sX2xvY2sKK10pIyBfTFRfRU5BQkxFX0xPQ0sKKworCisjIF9MVF9QUk9HX0FSCisjIC0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BST0dfQVJdLAorW0FDX0NIRUNLX1RPT0xTKEFSLCBbYXJdLCBmYWxzZSkKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CitfTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKK19MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0sIFtGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydF0sIFtsdF9jdl9hcl9hdF9maWxlXSwKKyAgW2x0X2N2X2FyX2F0X2ZpbGU9bm8KKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAorICAgICBbZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCisgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKyAgICAgIGlmIHRlc3QgMCAtZXEgIiRhY19zdGF0dXMiOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwlBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKwlpZiB0ZXN0IDAgLW5lICIkYWNfc3RhdHVzIjsgdGhlbgorICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorICAgICBdKQorICBdKQorCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9hcl9hdF9maWxlIjsgdGhlbgorICBhcmNoaXZlcl9saXN0X3NwZWM9CitlbHNlCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorZmkKK19MVF9ERUNMKFtdLCBbYXJjaGl2ZXJfbGlzdF9zcGVjXSwgWzFdLAorICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKK10pIyBfTFRfUFJPR19BUgorCisKKyMgX0xUX0NNRF9PTERfQVJDSElWRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCitbX0xUX1BST0dfQVIKKworQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK19MVF9ERUNMKFtdLCBbU1RSSVBdLCBbMV0sIFtBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbV0pCisKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorX0xUX0RFQ0woW10sIFtSQU5MSUJdLCBbMV0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIGJpdHJpZyogfCBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfREVDTChbXSwgW29sZF9wb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb25dLCBbMF0sCisgICAgW1doZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbl0pCitdKSMgX0xUX0NNRF9PTERfQVJDSElWRQorCisKKyMgX0xUX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0NPTVBJTEVSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorXSkKKworaWYgdGVzdCB5ZXMgPSAiWyRdJDIiOyB0aGVuCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZWxzZQorICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKK2ZpCitdKSMgX0xUX0NPTVBJTEVSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW19MVF9DT01QSUxFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorCisKKyMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0xJTktFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICBMREZMQUdTPSIkTERGTEFHUyAkMyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICQyPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKK10pCisKK2lmIHRlc3QgeWVzID0gIlskXSQyIjsgdGhlbgorICAgIG00X2lmKFskNF0sICwgOiwgWyQ0XSkKK2Vsc2UKKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitmaQorXSkjIF9MVF9MSU5LRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW19MVF9MSU5LRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW10pCisKKworIyBMVF9DTURfTUFYX0xFTgorIy0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0NNRF9NQVhfTEVOXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK0FDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisgIGk9MAorICB0ZXN0c3RyaW5nPUFCQ0QKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbWludCopCisgICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBiaXRyaWcqIHwgZGFyd2luKiB8IGRyYWdvbmZseSogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3MyKikKKyAgICAjIFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIG9uIE9TLzIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTIKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKltbCSBdXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgJiYgXAorICAgICAgIHRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4OyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCBYYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0IDE3ICE9ICIkaSIgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSkKK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCitfTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAorICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKK10pIyBMVF9DTURfTUFYX0xFTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKworCisjIF9MVF9IRUFERVJfRExGQ04KKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAorW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKK10pIyBfTFRfSEVBREVSX0RMRkNOCisKKworIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCisjICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK1sjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzaWJpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK31dCitfTFRfRU9GCisgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICAkMworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKK10pIyBfTFRfVFJZX0RMT1BFTl9TRUxGCisKKworIyBMVF9TWVNfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgeWVzICE9ICIkZW5hYmxlX2Rsb3BlbiI7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49bG9hZF9hZGRfb24KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj1Mb2FkTGlicmFyeQorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsXSxbCisgICAgbHRfY3ZfZGxvcGVuPWR5bGQKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICBdKQorICAgIDs7CisKKyAgdHBmKikKKyAgICAjIERvbid0IHRyeSB0byBydW4gYW55IGxpbmsgdGVzdHMgZm9yIFRQRi4gIFdlIGtub3cgaXQncyBpbXBvc3NpYmxlCisgICAgIyBiZWNhdXNlIFRQRiBpcyBhIGNyb3NzLWNvbXBpbGVyLCBhbmQgd2Uga25vdyBob3cgd2Ugb3BlbiBEU09zLgorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICAgIDs7CisKKyAgKikKKyAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCisJICBbbHRfY3ZfZGxvcGVuPXNobF9sb2FkXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisJICAgIFtsdF9jdl9kbG9wZW49c2hsX2xvYWQgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGRdLAorCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ZGxvcGVuXSwKKwkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxdLAorCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCisJCSAgW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxzdmxkXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj1kbGRfbGluayBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZF0pCisJICAgICAgXSkKKwkgICAgXSkKKwkgIF0pCisJXSkKKyAgICAgIF0pCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3Qgbm8gPSAiJGx0X2N2X2Rsb3BlbiI7IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPXllcworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKyAgICB0ZXN0IHllcyA9ICIkYWNfY3ZfaGVhZGVyX2RsZmNuX2giICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9JExJQlMKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9kbG9wZW5fc2VsZiI7IHRoZW4KKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBMSUJTPSRzYXZlX0xJQlMKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbZGxvcGVuX3N1cHBvcnRdLCBbZW5hYmxlX2Rsb3Blbl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl9zdGF0aWNdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpY10sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitdKSMgTFRfU1lTX0RMT1BFTl9TRUxGCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtMVF9TWVNfRExPUEVOX1NFTEZdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfQ19PKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1jIGFuZCAtbyBhcmUgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyLgorIyBUaGlzIG1hY3JvIGRvZXMgbm90IGhhcmQgY29kZSB0aGUgY29tcGlsZXIgbGlrZSBBQ19QUk9HX0NDX0NfTy4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQ19PXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKK10pCitfTFRfVEFHREVDTChbY29tcGlsZXJfY19vXSwgW2x0X2N2X3Byb2dfY29tcGlsZXJfY19vXSwgWzFdLAorCVtEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/XSkKK10pIyBfTFRfQ09NUElMRVJfQ19PCisKKworIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK200X2RlZnVuKFtfTFRfQ09NUElMRVJfRklMRV9MT0NLU10sCitbbTRfcmVxdWlyZShbX0xUX0VOQUJMRV9MT0NLXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTVBJTEVSX0NfTyhbJDFdKQorCitoYXJkX2xpbmtzPW5vdHRlc3RlZAoraWYgdGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0IG5vID0gIiRoYXJkX2xpbmtzIjsgdGhlbgorICAgIEFDX01TR19XQVJOKFsnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKK19MVF9ERUNMKFtdLCBbbmVlZF9sb2Nrc10sIFsxXSwgW011c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uP10pCitdKSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MKKworCisjIF9MVF9DSEVDS19PQkpESVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DSEVDS19PQkpESVJdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCitbcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCitvYmpkaXI9JGx0X2N2X29iamRpcgorX0xUX0RFQ0woW10sIFtvYmpkaXJdLCBbMF0sCisgICAgICAgICBbVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW0xUX09CSkRJUl0pZG5sCitBQ19ERUZJTkVfVU5RVU9URUQoW0xUX09CSkRJUl0sICIkbHRfY3Zfb2JqZGlyLyIsCisgIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCitdKSMgX0xUX0NIRUNLX09CSkRJUgorCisKKyMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSF0sCitbQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKK19MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9CitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8CisgICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAorICAgdGVzdCB5ZXMgPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAmJgorICAgICB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCitmaQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQorCitpZiB0ZXN0IHJlbGluayA9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgfHwKKyAgIHRlc3QgeWVzID0gIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKKyAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2FjdGlvbl0sIFswXSwKKyAgICBbSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGVdKQorXSkjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSAorCisKKyMgX0xUX0NNRF9TVFJJUExJQgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9TVFJJUExJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW10sIFtvbGRfc3RyaXBsaWJdLCBbMV0sIFtDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzdHJpcGxpYl0sIFsxXSkKK10pIyBfTFRfQ01EX1NUUklQTElCCisKKworIyBfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2Ugc3VyZSBmdW5jX211bmdlX3BhdGhfbGlzdCgpIGlzIGRlZmluZWQgY29ycmVjdGx5LgorbTRfZGVmdW4oW19MVF9QUkVQQVJFX01VTkdFX1BBVEhfTElTVF0sCitbWyMgZnVuY19tdW5nZV9wYXRoX2xpc3QgVkFSSUFCTEUgUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBWQVJJQUJMRSBpcyBuYW1lIG9mIHZhcmlhYmxlIGNvbnRhaW5pbmcgX3NwYWNlXyBzZXBhcmF0ZWQgbGlzdCBvZgorIyBkaXJlY3RvcmllcyB0byBiZSBtdW5nZWQgYnkgdGhlIGNvbnRlbnRzIG9mIFBBVEgsIHdoaWNoIGlzIHN0cmluZworIyBoYXZpbmcgYSBmb3JtYXQ6CisjICJESVJbOkRJUl06IgorIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIjpESVJbOkRJUl0iCisjICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCisjICJESVJQWzpESVJQXTo6W0RJUkE6XURJUkEiCisjICAgICAgIHN0cmluZyAiRElSUFsgRElSUF0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFIGFuZCBzdHJpbmcKKyMgICAgICAgIkRJUkFbIERJUkFdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCisjICJESVJbOkRJUl0iCisjICAgICAgIFZBUklBQkxFIHdpbGwgYmUgcmVwbGFjZWQgYnkgIkRJUlsgRElSXSIKK2Z1bmNfbXVuZ2VfcGF0aF9saXN0ICgpCit7CisgICAgY2FzZSB4QFN8QDIgaW4KKyAgICB4KQorICAgICAgICA7OworICAgICo6KQorICAgICAgICBldmFsIEBTfEAxPVwiYCRFQ0hPIEBTfEAyIHwgJFNFRCAncy86LyAvZydgIFxAU3xAQFN8QDFcIgorICAgICAgICA7OworICAgIHg6KikKKyAgICAgICAgZXZhbCBAU3xAMT1cIlxAU3xAQFN8QDEgYCRFQ0hPIEBTfEAyIHwgJFNFRCAncy86LyAvZydgXCIKKyAgICAgICAgOzsKKyAgICAqOjoqKQorICAgICAgICBldmFsIEBTfEAxPVwiXEBTfEBAU3xAMVwgYCRFQ0hPIEBTfEAyIHwgJFNFRCAtZSAncy8uKjo6Ly8nIC1lICdzLzovIC9nJ2BcIgorICAgICAgICBldmFsIEBTfEAxPVwiYCRFQ0hPIEBTfEAyIHwgJFNFRCAtZSAncy86Oi4qLy8nIC1lICdzLzovIC9nJ2BcIFxAU3xAQFN8QDFcIgorICAgICAgICA7OworICAgICopCisgICAgICAgIGV2YWwgQFN8QDE9XCJgJEVDSE8gQFN8QDIgfCAkU0VEICdzLzovIC9nJ2BcIgorICAgICAgICA7OworICAgIGVzYWMKK30KK11dKSMgX0xUX1BSRVBBUkVfUEFUSF9MSVNUCisKKworIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9TWVNfRFlOQU1JQ19MSU5LRVJdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUkVQQVJFX01VTkdFX1BBVEhfTElTVF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCittNF9pZihbJDFdLAorCVtdLCBbCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LywvTFIvJyA7OworICAgICopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8nIDs7CisgIGVzYWMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSdzfD1cKFtbQS1aYS16XV06XCl8XDF8ZycgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PS98L3xnJyA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCisgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKyAgKlw7KikKKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorICAgIDs7CisgICopCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgOzsKKyAgZXNhYworICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4uLgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPS9gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgICMgLi4uYnV0IGlmIHNvbWUgcGF0aCBjb21wb25lbnQgYWxyZWFkeSBlbmRzIHdpdGggdGhlIG11bHRpbGliIGRpciB3ZSBhc3N1bWUKKyAgIyB0aGF0IGFsbCBpcyBmaW5lIGFuZCB0cnVzdCAtcHJpbnQtc2VhcmNoLWRpcnMgYXMgaXMgKEdDQyA0LjI/IG9yIG5ld2VyKS4KKyAgY2FzZSAiJGx0X211bHRpX29zX2RpcjsgJGx0X3NlYXJjaF9wYXRoX3NwZWMgIiBpbgorICAiLzsgIiogfCAiLy47ICIqIHwgIi8uLzsgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIvICIqKQorICAgIGx0X211bHRpX29zX2Rpcj0KKyAgICA7OworICBlc2FjCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsaWYgdGVzdCAtbiAiJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworQkVHSU4ge1JTID0gIiAiOyBGUyA9ICIvfFxuIjt9IHsKKyAgbHRfZm9vID0gIiI7CisgIGx0X2NvdW50ID0gMDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb28gPSAiLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9CisgIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAnc3wvXChbW0EtWmEtel1dOlwpfFwxfGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmldKQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9LnNvCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworQUNfQVJHX1ZBUihbTFRfU1lTX0xJQlJBUllfUEFUSF0sCitbVXNlci1kZWZpbmVkIHJ1bi10aW1lIGxpYnJhcnkgc2VhcmNoIHBhdGguXSkKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgOzsKKworYWl4W1s0LTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgJyMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiAnLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICRDQyAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIFVzaW5nIEltcG9ydCBGaWxlcyBhcyBhcmNoaXZlIG1lbWJlcnMsIGl0IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQKKyAgICAjIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgb2Ygc2hhcmVkIGxpYnJhcnkgYXJjaGl2ZXMgb24gQUlYLiBXaGlsZQorICAgICMgdGhpcyB3b3VsZCB3b3JrIGZvciBib3RoIHdpdGggYW5kIHdpdGhvdXQgcnVudGltZSBsaW5raW5nLCBpdCB3aWxsCisgICAgIyBwcmV2ZW50IHN0YXRpYyBsaW5raW5nIG9mIHN1Y2ggYXJjaGl2ZXMuIFNvIHdlIGRvIGZpbGVuYW1lLWJhc2VkCisgICAgIyBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIHdpdGggLnNvIGV4dGVuc2lvbiBvbmx5LCB3aGljaCBpcyB1c2VkCisgICAgIyB3aGVuIGJvdGggcnVudGltZSBsaW5raW5nIGFuZCBzaGFyZWQgbGlua2luZyBpcyBlbmFibGVkLgorICAgICMgVW5mb3J0dW5hdGVseSwgcnVudGltZSBsaW5raW5nIG1heSBpbXBhY3QgcGVyZm9ybWFuY2UsIHNvIHdlIGRvCisgICAgIyBub3Qgd2FudCB0aGlzIHRvIGJlIHRoZSBkZWZhdWx0IGV2ZW50dWFsbHkuIEFsc28sIHdlIHVzZSB0aGUKKyAgICAjIHZlcnNpb25lZCAuc28gbGlicyBmb3IgZXhlY3V0YWJsZXMgb25seSBpZiB0aGVyZSBpcyB0aGUgLWJydGwKKyAgICAjIGxpbmtlciBmbGFnIGluIExERkxBR1MgYXMgd2VsbCwgb3IgLS13aXRoLWFpeC1zb25hbWU9c3ZyNCBvbmx5LgorICAgICMgVG8gYWxsb3cgZm9yIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgc3VwcG9ydCwgd2UgbmVlZCB0byBjcmVhdGUKKyAgICAjIGxpYk5BTUUuc28uViBhcyBhbiBhcmNoaXZlIGZpbGUsIGNvbnRhaW5pbmc6CisgICAgIyAqKSBhbiBJbXBvcnQgRmlsZSwgcmVmZXJyaW5nIHRvIHRoZSB2ZXJzaW9uZWQgZmlsZW5hbWUgb2YgdGhlCisgICAgIyAgICBhcmNoaXZlIGFzIHdlbGwgYXMgdGhlIHNoYXJlZCBhcmNoaXZlIG1lbWJlciwgdGVsbGluZyB0aGUKKyAgICAjICAgIGJpdHdpZHRoICgzMiBvciA2NCkgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBhbmQgcHJvdmlkaW5nIHRoZQorICAgICMgICAgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgZXZlbnR1YWxseQorICAgICMgICAgZGVjb3JhdGVkIHdpdGggdGhlICd3ZWFrJyBrZXl3b3JkCisgICAgIyAqKSB0aGUgc2hhcmVkIG9iamVjdCB3aXRoIHRoZSBGX0xPQURPTkxZIGZsYWcgc2V0LCB0byByZWFsbHkgYXZvaWQKKyAgICAjICAgIGl0IGJlaW5nIHNlZW4gYnkgdGhlIGxpbmtlci4KKyAgICAjIEF0IHJ1biB0aW1lIHdlIGJldHRlciB1c2UgdGhlIHJlYWwgZmlsZSByYXRoZXIgdGhhbiBhbm90aGVyIHN5bWxpbmssCisgICAgIyBidXQgZm9yIGxpbmsgdGltZSB3ZSBjcmVhdGUgdGhlIHN5bWxpbmsgbGliTkFNRS5zbyAtPiBsaWJOQU1FLnNvLlYKKworICAgIGNhc2UgJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW5ub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGFpeCx5ZXMpICMgdHJhZGl0aW9uYWwgbGlidG9vbAorICAgICAgZHluYW1pY19saW5rZXI9J0FJWCB1bnZlcnNpb25hYmxlIGxpYi5zbycKKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgYWl4LG5vKSAjIHRyYWRpdGlvbmFsIEFJWCBvbmx5CisgICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIGxpYi5hWyhdbGliLnNvLlZbKV0nCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgIDs7CisgICAgc3ZyNCwqKSAjIGZ1bGwgc3ZyNCBvbmx5CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WWyhdJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm9bKV0iCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgICAgOzsKKyAgICAqLHllcykgIyBib3RoLCBwcmVmZXIgc3ZyNAorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVlsoXSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vWyldLCBsaWIuYVsoXWxpYi5zby5WWyldIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuYSBuZWVkcyBleHRyYSBoYW5kbGluZworICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0iJHJlYWxuYW1lIn5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJGxpbmtuYW1lIn4kaW5zdGFsbF9zaGFyZWRfcHJvZyAiJGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQifnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCisgICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2ZvciBuIGluICRsaWJyYXJ5X25hbWVzICRvbGRfbGlicmFyeTsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJG4ifnRlc3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiID0gIiRuIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKKyAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICAgIDs7CisgICAgKixubykgIyBib3RoLCBwcmVmZXIgYWl4CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5hWyhdbGliLnNvLlZbKV0sIGxpYi5zby5WWyhdJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm9bKV0iCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuc28uViBhbmQgc3ltbGluayBsaWJOQU1FLnNvIG5lZWQgZXh0cmEgaGFuZGxpbmcKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8ICRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJGRsbmFtZSAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSRyZWFsbmFtZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbGlua25hbWUifihjZCAiJGRlc3RkaXIiICYmICRMTl9TIC1mICRkbG5hbWUgJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyknCisgICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIn5mb3IgbiBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJG4ifmZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvIicKKyAgICAgIDs7CisgICAgZXNhYworICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCittNF9pZihbJDFdLCBbXSxbCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIl0pCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFtbYS16QS1aXV1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JExJQgorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCittNF9pZihbJDFdLCBbXSxbCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1syM11dLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyLiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1syLTldXSogfCBmcmVlYnNkZWxmMy5bWzItOV1dKiB8IFwKKyAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBpZiB0ZXN0IDMyID0gIiRIUFVYX0lBNjRfTU9ERSI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXgzMgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXg2NAorICAgIGZpCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4W1szLTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworbGludXgqYW5kcm9pZCopCisgIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgZmluaXNoX2NtZHM9CisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCisgICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBBQ19DQUNIRV9WQUwoW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sCisgICAgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICAgIFtBU19JRihbICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbF0sCisJIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKyAgICBdKQorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgSWRlYWxseSwgd2UgY291bGQgdXNlIGxkY29uZmlnIHRvIHJlcG9ydCAqYWxsKiBkaXJlY3RvcmVzIHdoaWNoIGFyZQorICAjIHNlYXJjaGVkIGZvciBsaWJyYXJpZXMsIGhvd2V2ZXIgdGhpcyBpcyBzdGlsbCBub3QgcG9zc2libGUuICBBc2lkZSBmcm9tIG5vdAorICAjIGJlaW5nIGNlcnRhaW4gL3NiaW4vbGRjb25maWcgaXMgYXZhaWxhYmxlLCBjb21tYW5kCisgICMgJ2xkY29uZmlnIC1OIC1YIC12IHwgZ3JlcCBeLycgb24gNjRiaXQgRmVkb3JhIGRvZXMgbm90IHJlcG9ydCAvdXNyL2xpYjY0LAorICAjIGV2ZW4gdGhvdWdoIGl0IGlzIHNlYXJjaGVkIGF0IHJ1bi10aW1lLiAgVHJ5IHRvIGRvIHRoZSBiZXN0IGd1ZXNzIGJ5CisgICMgYXBwZW5kaW5nIGxkLnNvLmNvbmYgY29udGVudHMgKGFuZCBpbmNsdWRlcykgdG8gdGhlIHNlYXJjaCBwYXRoLgorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2RlbGYqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBuZWVkX3ZlcnNpb249bm8KKyAgZWxzZQorICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgZmkKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIE9TLzIgY2FuIG9ubHkgbG9hZCBhIERMTCB3aXRoIGEgYmFzZSBuYW1lIG9mIDggY2hhcmFjdGVycyBvciBsZXNzLgorICBzb25hbWVfc3BlYz0nYHRlc3QgLW4gIiRvczJkbGxuYW1lIiAmJiBsaWJuYW1lPSIkb3MyZGxsbmFtZSI7CisgICAgdj0kKCRFQ0hPICRyZWxlYXNlJHZlcnN1ZmZpeCB8IHRyIC1kIC4tKTsKKyAgICBuPSQoJEVDSE8gJGxpYm5hbWUgfCBjdXQgLWIgLSQoKDggLSAkeyN2fSkpIHwgdHIgLiBfKTsKKyAgICAkRUNITyAkbiR2YCRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1fZGxsLiRsaWJleHQnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1CRUdJTkxJQlBBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICBmaScKKyAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAkUk0gXCRkbHBhdGgnCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPXNjbworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworZmkKKworaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKK2ZpCisKKyMgcmVtZW1iZXIgdW5hdWdtZW50ZWQgc3lzX2xpYl9kbHNlYXJjaF9wYXRoIGNvbnRlbnQgZm9yIGxpYnRvb2wgc2NyaXB0IGRlY2xzLi4uCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIC4uLiBidXQgaXQgbmVlZHMgTFRfU1lTX0xJQlJBUllfUEFUSCBtdW5naW5nIGZvciBvdGhlciBjb25maWd1cmUtdGltZSBjb2RlCitmdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAiJExUX1NZU19MSUJSQVJZX1BBVEgiCisKKyMgdG8gYmUgdXNlZCBhcyBkZWZhdWx0IExUX1NZU19MSUJSQVJZX1BBVEggdmFsdWUgaW4gZ2VuZXJhdGVkIGxpYnRvb2wKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9JExUX1NZU19MSUJSQVJZX1BBVEgKKworX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKKyAgICBbVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisgICAgcmVzdG9yZWQgYXQgbGluayB0aW1lXSkKK19MVF9ERUNMKFtdLCBbbmVlZF9saWJfcHJlZml4XSwgWzBdLAorICAgIFtEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/XSkKK19MVF9ERUNMKFtdLCBbbmVlZF92ZXJzaW9uXSwgWzBdLCBbRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz9dKQorX0xUX0RFQ0woW10sIFt2ZXJzaW9uX3R5cGVdLCBbMF0sIFtMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZV0pCitfTFRfREVDTChbXSwgW3J1bnBhdGhfdmFyXSwgWzBdLCAgW1NoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF92YXJdLCBbMF0sW1NoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLCBbMF0sCisgICAgW0lzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD9dKQorX0xUX0RFQ0woW10sIFtsaWJuYW1lX3NwZWNdLCBbMV0sIFtGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeF0pCitfTFRfREVDTChbXSwgW2xpYnJhcnlfbmFtZXNfc3BlY10sIFsxXSwKKyAgICBbW0xpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisgICAgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRV1dKQorX0xUX0RFQ0woW10sIFtzb25hbWVfc3BlY10sIFsxXSwKKyAgICBbW1RoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lXV0pCitfTFRfREVDTChbXSwgW2luc3RhbGxfb3ZlcnJpZGVfbW9kZV0sIFsxXSwKKyAgICBbUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9ldmFsXSwgWzFdLAorICAgIFtbQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisgICAgbm90IHNob3duXV0pCitfTFRfREVDTChbXSwgW2hhcmRjb2RlX2ludG9fbGlic10sIFswXSwKKyAgICBbV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFtjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoXSwgWzJdLAorICAgIFtEZXRlY3RlZCBydW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGhdLCBbMl0sCisgICAgW0V4cGxpY2l0IExUX1NZU19MSUJSQVJZX1BBVEggc2V0IGR1cmluZyAuL2NvbmZpZ3VyZSB0aW1lXSkKK10pIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHRoYXQgY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCitbY2FzZSAkTUFHSUNfQ01EIGluCitbW1xcLypdIHwgID86W1xcL10qXSkKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JE1BR0lDX0NNRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJDEiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kYWNfZGlyLyIkMSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitfTFRfREVDTChbXSwgW01BR0lDX0NNRF0sIFswXSwKKwkgW1VzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSJdKWRubAorXSkjIF9MVF9QQVRIX1RPT0xfUFJFRklYCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtfTFRfUEFUSF9UT09MX1BSRUZJWF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbXSkKKworCisjIF9MVF9QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gdGhhdCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCitbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIF9MVF9QQVRIX01BR0lDCisKKworIyBMVF9QQVRIX0xECisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgorQUNfREVGVU4oW0xUX1BBVEhfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK0FDX0FSR19XSVRIKFtnbnUtbGRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCisgICAgW3Rlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworYWNfcHJvZz1sZAoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiwgd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZworICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworZWxzZQorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSRsdF9jdl9wYXRoX0xECitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR3bC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2NtZHNdLCBbMl0pZG5sCitdKSMgX0xUX0NNRF9SRUxPQUQKKworCisjIF9MVF9QQVRIX0RECisjIC0tLS0tLS0tLS0tCisjIGZpbmQgYSB3b3JraW5nIGRkCittNF9kZWZ1bihbX0xUX1BBVEhfRERdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgYSB3b3JraW5nIGRkXSwgW2FjX2N2X3BhdGhfbHRfRERdLAorW3ByaW50ZiAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiA+Y29uZnRlc3QuaQorY2F0IGNvbmZ0ZXN0LmkgY29uZnRlc3QuaSA+Y29uZnRlc3QyLmkKKzogJHtsdF9ERDo9JEREfQorQUNfUEFUSF9QUk9HU19GRUFUVVJFX0NIRUNLKFtsdF9ERF0sIFtkZF0sCitbaWYgIiRhY19wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCisgIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCisgICYmIGFjX2N2X3BhdGhfbHRfREQ9IiRhY19wYXRoX2x0X0REIiBhY19wYXRoX2x0X0REX2ZvdW5kPToKK2ZpXSkKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0XSkKK10pIyBfTFRfUEFUSF9ERAorCisKKyMgX0xUX0NNRF9UUlVOQ0FURQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgY29tbWFuZCB0byB0cnVuY2F0ZSBhIGJpbmFyeSBwaXBlCittNF9kZWZ1bihbX0xUX0NNRF9UUlVOQ0FURV0sCitbbTRfcmVxdWlyZShbX0xUX1BBVEhfRERdKQorQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byB0cnVuY2F0ZSBiaW5hcnkgcGlwZXNdLCBbbHRfY3ZfdHJ1bmNhdGVfYmluXSwKK1twcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKK2NhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCitsdF9jdl90cnVuY2F0ZV9iaW49CitpZiAiJGFjX2N2X3BhdGhfbHRfREQiIGJzPTMyIGNvdW50PTEgPGNvbmZ0ZXN0Mi5pID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KKyAgY21wIC1zIGNvbmZ0ZXN0LmkgY29uZnRlc3Qub3V0IFwKKyAgJiYgbHRfY3ZfdHJ1bmNhdGVfYmluPSIkYWNfY3ZfcGF0aF9sdF9ERCBicz00MDk2IGNvdW50PTEiCitmaQorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdDIuaSBjb25mdGVzdC5vdXQKK3Rlc3QgLXogIiRsdF9jdl90cnVuY2F0ZV9iaW4iICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJFNFRCAtZSA0cSJdKQorX0xUX0RFQ0woW2x0X3RydW5jYXRlX2Jpbl0sIFtsdF9jdl90cnVuY2F0ZV9iaW5dLCBbMV0sCisgIFtDb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGVdKQorXSkjIF9MVF9DTURfVFJVTkNBVEUKKworCisjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAorW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjICd1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgdGhhdCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgJ2ZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyICdwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2hhaWt1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXVwuW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7Oworb3MyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbd2FudF9ub2Nhc2VnbG9iXSwgWzFdLAorICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0kTk0KK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9JHthY190b29sX3ByZWZpeH1ubQorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09JGFjX2Rpci8kbHRfdG1wX25tCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCI7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgJ3NlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwkjIE1TWVMgY29udmVydHMgL2Rldi9udWxsIHRvIE5VTCwgTWluR1cgbm0gdHJlYXRzIE5VTCBhcyBlbXB0eQorCWNhc2UgJGJ1aWxkX29zIGluCisJbWluZ3cqKSBsdF9iYWRfZmlsZT1jb25mdGVzdC5ubS9ub2ZpbGUgOzsKKwkqKSBsdF9iYWRfZmlsZT0vZGV2L251bGwgOzsKKwllc2FjCisJY2FzZSBgIiR0bXBfbm0iIC1CICRsdF9iYWRfZmlsZSAyPiYxIHwgc2VkICcxcSdgIGluCisJKiRsdF9iYWRfZmlsZSogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrIDIKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrIDIKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpXSkKK2lmIHRlc3Qgbm8gIT0gIiRsdF9jdl9wYXRoX05NIjsgdGhlbgorICBOTT0kbHRfY3ZfcGF0aF9OTQorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFtkdW1wYmluICJsaW5rIC1kdW1wIl0sIDopCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIEFDX1NVQlNUKFtEVU1QQklOXSkKKyAgaWYgdGVzdCA6ICE9ICIkRFVNUEJJTiI7IHRoZW4KKyAgICBOTT0kRFVNUEJJTgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5CisjIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxpbmsgbGlicmFyeS4KKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9ETExUT09MXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzXSwKK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorW2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2g7CisgICMgZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorICAqLS1pZGVudGlmeS1zdHJpY3QqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorICAgIDs7CisgICopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisgICAgOzsKKyAgZXNhYworICA7OworKikKKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisgIDs7Citlc2FjCitdKQorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCit0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisKK19MVF9ERUNMKFtdLCBbc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXNdKQorXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisKKworIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9jYXRlIHRoZSBtYW5pZmVzdCB0b29sCittNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChNQU5JRkVTVF9UT09MLCBtdCwgOikKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CitBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisgIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK2lmIHRlc3QgeWVzICE9ICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIjsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCitfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisKKworIyBfTFRfRExMX0RFRl9QKFtGSUxFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRydWUgaWZmIEZJTEUgaXMgYSBXaW5kb3dzIERMTCAnLmRlZicgZmlsZS4KKyMgS2VlcCBpbiBzeW5jIHdpdGggZnVuY19kbGxfZGVmX3AgaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitBQ19ERUZVTihbX0xUX0RMTF9ERUZfUF0sCitbZG5sCisgIHRlc3QgREVGID0gImAkU0VEIC1uIGRubAorICAgIC1lICdcJydzL15bWwkgXV0qLy8nXCcnIGRubCBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgZG5sICAgICAgRGVsZXRlIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50cworICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoW1sJIF1dLipcKSokL0RFRi9wJ1wnJyBkbmwKKyAgICAtZSBxIGRubCAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBjb25zaWRlciB0aGUgZmlyc3QgInJlYWwiIGxpbmUKKyAgICAkMWAiIGRubAorXSkjIF9MVF9ETExfREVGX1AKKworCisjIExUX0xJQl9NCisjIC0tLS0tLS0tCisjIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKK0FDX0RFRlVOKFtMVF9MSUJfTV0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jZWdjYyogfCAqLSotY3lnd2luKiB8ICotKi1oYWlrdSogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKKyAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CisgIDs7CisqLW5jci1zeXN2NC4zKikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0tbG13KQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0tbG0pCisgIDs7Citlc2FjCitBQ19TVUJTVChbTElCTV0pCitdKSMgTFRfTElCX00KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIG52Y2MqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYworCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKKyAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQorZmkKK19MVF9UQUdERUNMKFtub19idWlsdGluX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWddLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnNdKQorXSkjIF9MVF9DT01QSUxFUl9OT19SVFRJCisKKworIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCitBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKK1sKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW1tCQ0RUXV0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tbQkRSVF1dJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW1tBQkRUXV0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW1tERk5TVFVdXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKK2VzYWMKKworaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgIyBHZXRzIGxpc3Qgb2YgZGF0YSBzeW1ib2xzIHRvIGltcG9ydC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSJzZWQgLW4gLWUgJ3MvXkkgLiogXCguKlwpJC9cMS9wJyIKKyAgIyBBZGp1c3QgdGhlIGJlbG93IGdsb2JhbCBzeW1ib2wgdHJhbnNmb3JtcyB0byBmaXh1cCBpbXBvcnRlZCB2YXJpYWJsZXMuCisgIGx0X2NkZWNsX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkL2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciBcMTsvcCciCisgIGx0X2NfbmFtZV9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyIKKyAgbHRfY19uYW1lX2xpYl9ob29rPSJcCisgIC1lICdzL15JIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCdcCisgIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSAwfSwvcCciCitlbHNlCisgICMgRGlzYWJsZSBob29rcyBieSBkZWZhdWx0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9CisgIGx0X2NkZWNsX2hvb2s9CisgIGx0X2NfbmFtZV9ob29rPQorICBsdF9jX25hbWVfbGliX2hvb2s9CitmaQorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIlwKKyRsdF9jZGVjbF9ob29rXAorIiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiJcCiskbHRfY19uYW1lX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgd2l0aCBsaWIgcHJlZml4IGFuZAorIyBzeW1ib2wgYWRkcmVzcy4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiJcCiskbHRfY19uYW1lX2xpYl9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uLAorICAgICMgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZSBhbmQgSSBmb3IgYW55IGltcG9ydGVkIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICAvXiAqU3ltYm9sIG5hbWUgKjogL3tzcGxpdChcJCAwLHNuLFwiOlwiKTsgc2k9c3Vic3RyKHNuWzJdLDIpfTsiXAorIiAgICAgL14gKlR5cGUgKjogY29kZS97cHJpbnQgXCJUXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCisiICAgICAvXiAqVHlwZSAqOiBkYXRhL3twcmludCBcIklcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPVwiRFwifTsgXCQgMH4vXChcKS4qXHwve2Y9XCJUXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCxhLC9cfHxcci8pOyBzcGxpdChhWzJdLHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IGYsc1sxXSxzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCBmLHRbMV0sc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQgX19vc2ZfXworLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisJICBMSUJTPWNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCB5ZXMgPSAiJHBpcGVfd29ya3MiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbW0BdXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0XSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW50byBhIGxpc3Qgb2Ygc3ltYm9scyB0byBtYW51YWxseSByZWxvY2F0ZV0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK19MVF9ERUNMKFtubV9pbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwgWzFdLAorICAgIFtUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlXSkKK19MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtc3RhdGljJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgICA7OworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAgICAgIDs7CisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqcW54KiB8ICpudG8qKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeFtbNC05XV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwkgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorCTs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICAgIDs7CisJICBlY3BjKiApCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopCisJICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisJOzsKKyAgICAgICpxbngqIHwgKm50byopCisgICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgICA7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworCTs7CisgICAgZXNhYworICBmaQorXSwKK1sKKyAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgJy1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSAnLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvczIqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLXN0YXRpYycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVhsaW5rZXIgJworICAgICAgaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSItWGNvbXBpbGVyICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBuYWdmb3IqKQorICAgICAgICAjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtc3RhdGljJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCTs7CisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgW1sxLTddXS4qIHwgKlN1bipGb3J0cmFuKlwgOC5bWzAtM11dKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKKwkgIDs7CisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgOzsKKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgOzsKKyAgICAgICAgKkludGVsKlwgW1tDRl1dKkNvbXBpbGVyKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwkgIDs7CisJKlBvcnRsYW5kXCBHcm91cCopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICA7OworZXNhYworCitBQ19DQUNIRV9DSEVDSyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKKyAgICBbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCisgICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7CisgICAgIGVzYWNdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQorZmkKK19MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKwlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKworX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCitfTFRfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAorICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCisgICRsdF90bXBfc3RhdGljX2ZsYWcsCisgIFtdLAorICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCitfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZ10pCitdKSMgX0xUX0NPTVBJTEVSX1BJQworCisKKyMgX0xUX0xJTktFUl9TSExJQlMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAorW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCittNF9pZihbJDFdLCBbQ1hYXSwgWworICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbWzQtOV1dKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEdOVSBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHRvIEFJWCBubS4KKyAgICAjIFdpdGhvdXQgdGhlICItbCIgb3B0aW9uLCBvciB3aXRoIHRoZSAiLUIiIG9wdGlvbiwgQUlYIG5tIHRyZWF0cworICAgICMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzCisgICAgIyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisgICAgIyBXaGlsZSB0aGUgJ3dlYWsnIGtleXdvcmQgaXMgaWdub3JlZCBpbiB0aGUgRXhwb3J0IEZpbGUsIHdlIG5lZWQKKyAgICAjIGl0IGluIHRoZSBJbXBvcnQgRmlsZSBmb3IgdGhlICdhaXgtc29uYW1lJyBmZWF0dXJlLCBzbyB3ZSBoYXZlCisgICAgIyB0byByZXBsYWNlIHRoZSAiLUIiIG9wdGlvbiB3aXRoICItUCIgZm9yIEFJWCBubS4KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IGlmIChcJCAyID09ICJXIikgeyBwcmludCBcJCAzICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMyB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSdgZnVuY19lY2hvX2FsbCAkTk0gfCAkU0VEIC1lICdcJydzL0JcKFtbXkJdXSpcKSQvUFwxLydcJydgIC1QQ3BnbCAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgJiYgKFtzdWJzdHJdKFwkIDEsMSwxKSAhPSAiLiIpKSB7IGlmICgoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgeyBwcmludCBcJCAxICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMSB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JGx0ZGxsX2NtZHMKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgY2wqKQorICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQorICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgIDs7CisgIGVzYWMKK10sIFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKyAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgX0xUX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgJyAoJyBhbmQgJykkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogJ2F8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyAnYScgYW5kICdiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgJ2QnLgorICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KK2RubCBOb3RlIGFsc28gYWRqdXN0IGV4Y2x1ZGVfZXhwc3ltcyBmb3IgQysrIGFib3ZlLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCogfCBiaXRyaWcqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSB8IGdudSopCisgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9bm8KKyAgICA7OworICBlc2FjCisKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKworICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKKyAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCisgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQorCSMgd2l0aCB0aGUgbmF0aXZlIGxpbmtlci4gIEhvd2V2ZXIsIGFzIHRoZSB3YXJuaW5nIGluIHRoZSBHTlUgbGQKKwkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZworCSMgc2hhcmVkIGxpYnJhcmllcywgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJmYWNlIHVzZWQuCisJY2FzZSBgJExEIC12IDI+JjFgIGluCisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLltbMi05XV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFtbMy05XV0qKSA7OworCSAgKikKKwkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCTs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgeWVzID0gIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSI7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPSckd2wnCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKFteKV1cKylcc1wrLy8nIDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZml+CisgICAgICAgICRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIHNocmV4dF9jbWRzPS5kbGwKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJcHJlZml4X2NtZHM9IiRTRUQifgorCWlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJZml+CisJcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0IGxpbnV4LWRpZXRsaWJjID0gIiRob3N0X29zIjsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0IG5vID0gIiR0bXBfZGlldCIKKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisgICAgICAgIG5hZ2ZvciopICAgICAgICAgICAgICAgICAgICAgICAgIyBOQUdGT1IgNS4zCisgICAgICAgICAgdG1wX3NoYXJlZGZsYWc9Jy1XbCwtc2hhcmVkJyA7OworCXhsW1tjQ11dKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJdGNjKikKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1yZHluYW1pYycKKwkgIDs7CisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbm5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIjsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIiAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9CisgICAgICBlbHNlCisJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCisJIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKKwkjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcworCSMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCSMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCisJIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQorCSMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBpZiAoXCQgMiA9PSAiVyIpIHsgcHJpbnQgXCQgMyAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDMgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nYGZ1bmNfZWNob19hbGwgJE5NIHwgJFNFRCAtZSAnXCcncy9CXChbW15CXV0qXCkkL1BcMS8nXCcnYCAtUENwZ2wgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpICYmIChbc3Vic3RyXShcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgaGF2ZSBydW50aW1lIGxpbmtpbmcgZW5hYmxlZCwgYW5kIHVzZSBpdCBmb3IgZXhlY3V0YWJsZXMuCisJIyBGb3Igc2hhcmVkIGxpYnJhcmllcywgd2UgZW5hYmxlL2Rpc2FibGUgcnVudGltZSBsaW5raW5nCisJIyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGNyZWF0ZWQgLQorCSMgd2hlbiAid2l0aF9haXhfc29uYW1lLGFpeF91c2VfcnVudGltZWxpbmtpbmciIGlzOgorCSMgImFpeCxubyIgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKwkjICJhaXgseWVzIiAgbGliLnNvICAgICAgICAgIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisJIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQorCSMgImJvdGgsbm8iICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzCisJIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcworCSMgImJvdGgseWVzIiBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKwkjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vCisJIyAic3ZyNCwqIiAgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKwljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0IHgtYnJ0bCA9ICJ4JGxkX2ZsYWciIHx8IHRlc3QgeC1XbCwtYnJ0bCA9ICJ4JGxkX2ZsYWciKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAjIFdpdGggYWl4LXNvbmFtZT1zdnI0LCB3ZSBjcmVhdGUgdGhlIGxpYi5zby5WIHNoYXJlZCBhcmNoaXZlcyBvbmx5LAorCSAgICAjIHNvIHdlIGRvbid0IGhhdmUgbGliLmEgc2hhcmVkIGxpYnMgdG8gbGluayBvdXIgZXhlY3V0YWJsZXMuCisJICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWJydGwiCisJICBmaQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSckd2wtZiwnCisgICAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAgIGFpeCwqKSA7OyAjIHRyYWRpdGlvbmFsLCBubyBpbXBvcnQgZmlsZQorICAgICAgc3ZyNCwqIHwgKix5ZXMpICMgdXNlIGltcG9ydCBmaWxlCisJIyBUaGUgSW1wb3J0IEZpbGUgZGVmaW5lcyB3aGF0IHRvIGhhcmRjb2RlLgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR3bC1HJworCWZpCisJIyBOZWVkIHRvIGVuc3VyZSBydW50aW1lIGxpbmtpbmcgaXMgZGlzYWJsZWQgZm9yIHRoZSB0cmFkaXRpb25hbAorCSMgc2hhcmVkIGxpYnJhcnksIG9yIHRoZSBsaW5rZXIgbWF5IGV2ZW50dWFsbHkgZmluZCBzaGFyZWQgbGlicmFyaWVzCisJIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KKwlzaGFyZWRfZmxhZ19haXg9Jy1zaGFyZWQnCisJc2hhcmVkX2ZsYWdfc3ZyND0nLXNoYXJlZCAkd2wtRycKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKKwkgIGZpCisJICBzaGFyZWRfZmxhZ19haXg9JyR3bC1iTTpTUkUnCisJICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKKwlmaQorICAgICAgZmkKKworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLWJleHBhbGwnCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCisgICAgICBlbHNlCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisJIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtYmVyb2snCisJICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmR+JE1LRElSICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCSAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCisJICBjb21waWxlcl9mbGFnc19maWx0ZXJlZD0nYGZ1bmNfZWNob19hbGwgIiRjb21waWxlcl9mbGFncyAiIHwgJFNFRCAtZSAicyUtYnJ0bFxcKFtbLCBdXVxcKSUtYmVyb2tcXDElZyJgJworCSAgaWYgdGVzdCBzdnI0ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JENDICckc2hhcmVkX2ZsYWdfYWl4JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZScKKwkgIGZpCisJICBpZiB0ZXN0IGFpeCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX3N2cjQnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JFNUUklQIC1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vfiggZnVuY19lY2hvX2FsbCAiIyEgJHNvbmFtZSgkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiOyBpZiB0ZXN0IHNocl82NCA9ICIkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiMgNjQiOyBlbHNlIGZ1bmNfZWNob19hbGwgIiMgMzIiOyBmaTsgY2F0ICRleHBvcnRfc3ltYm9scyApID4gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcH4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcCcKKwkgIGVsc2UKKwkgICAgIyB1c2VkIGJ5IC1kbHByZW9wZW4gdG8gZ2V0IHRoZSBzeW1ib2xzCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kTVYgICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJG91dHB1dF9vYmpkaXInCisJICBmaQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbWzQ1XV0qKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY2wqKQorCSMgTmF0aXZlIE1TVkMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwlfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCV9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0uZGxsCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgX0xUX0RMTF9ERUZfUChbJGV4cG9ydF9zeW1ib2xzXSk7IHRoZW4KKyAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgIGZpfgorICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjfgorICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPS5kbGwKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyLiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJbTRfaWYoJDEsIFtdLCBbCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCisJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10sCisJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJ10pXSwKKwkgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSkKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtzYXZlX0xERkxBR1M9JExERkxBR1MKKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR3bC1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wvZGV2L251bGwiCisJICAgQUNfTElOS19JRkVMU0UoCisJICAgICBbQUNfTEFOR19TT1VSQ0UoCisJICAgICAgICBbQUNfTEFOR19DQVNFKFtDXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCisJCQkgICAgICBbQysrXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCisJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgZW5kXV0sCisJCQkgICAgICBbRm9ydHJhbl0sIFtbCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgZW5kXV0pXSldLAorCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAorCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ub10pCisgICAgICAgICAgIExERkxBR1M9JHNhdmVfTERGTEFHU10pCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIjsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAkd2wtZXhwb3J0c19maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWZpCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9bm8KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgdGNjKikKKwkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKiB8IGJpdHJpZyopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKwllbHNlCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIHNocmV4dF9jbWRzPS5kbGwKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJcHJlZml4X2NtZHM9IiRTRUQifgorCWlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJZml+CisJcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtaW5wdXQgJHdsJGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwl3bGFyYz0nJHdsJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICBlbHNlCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHdsJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCAnJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCBzZXF1ZW50ID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCBzbmkgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAorCitfTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCitfTFRfREVDTChbXSwgW3NocmV4dF9jbWRzXSwgWzFdLCBbU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIildKWRubAorX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKworICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0sCisJW2x0X2N2X11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSksCisJWyRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJICBwaWNfZmxhZz0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorCSAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKwkgIHRoZW4KKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICBmaQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisJXSkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0kbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCitfTFRfVEFHREVDTChbYnVpbGRfbGlidG9vbF9uZWVkX2xjXSwgW2FyY2hpdmVfY21kc19uZWVkX2xjXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFthbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXNdLAorICAgIFtlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zXSkKK19MVF9UQUdERUNMKFtdLCBbd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlc10pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX25lZWRzX29iamVjdF0sIFsxXSwKKyAgICBbV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHldKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfY21kc10sIFsyXSwgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisgICAgYSBzaGFyZWQgYXJjaGl2ZS5dKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW3dpdGhfZ251X2xkXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3RdKQorX0xUX1RBR0RFQ0woW10sIFthbGxvd191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHRdKQorX0xUX1RBR0RFQ0woW10sIFtub191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisgICAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCitfTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitkbmwgX0xUX1RBR0RFQ0woW10sIFt0aHJlYWRfc2FmZV9mbGFnX3NwZWNdLCBbMV0sCitkbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCitdKSMgX0xUX0xJTktFUl9TSExJQlMKKworCisjIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitsdF9zYXZlX0NDPSRDQworQUNfTEFOR19QVVNIKEMpCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworX0xUX1RBR19DT01QSUxFUgorIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKyAgTFRfU1lTX0RMT1BFTl9TRUxGCisgIF9MVF9DTURfU1RSSVBMSUIKKworICAjIFJlcG9ydCB3aGF0IGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4W1s0LTldXSopCisgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgICBjYXNlICRlbmFibGVfc2hhcmVkLCR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAgIHllcyxhaXgseWVzKSA7OwkJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gZmlsZSBvbmx5CisgICAgICB5ZXMsc3ZyNCwqKSA7OwkJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gYXJjaGl2ZSBtZW1iZXIgb25seQorICAgICAgeWVzLCopIGVuYWJsZV9zdGF0aWM9bm8gOzsJIyBzaGFyZWQgb2JqZWN0IGluIGxpYi5hIGFyY2hpdmUgYXMgd2VsbAorICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKK0FDX0xBTkdfUE9QCitDQz0kbHRfc2F2ZV9DQworXSkjIF9MVF9MQU5HX0NfQ09ORklHCisKKworIyBfTFRfTEFOR19DWFhfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQysrIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAoraWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0IG5vICE9ICIkQ1hYIiAmJgorICAgICggKHRlc3QgZysrID0gIiRDWFgiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgZysrICE9ICIkQ1hYIikpKTsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCisKK0FDX0xBTkdfUFVTSChDKyspCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIjsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltbXV0pIHsgcmV0dXJuKDApOyB9JworCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisgICAgZmkKKworICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgICAgICBMVF9QQVRIX0xECisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPSckd2wnCisKKyAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CisJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgorICAgICAgICAgICMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZworICAgICAgICAgICMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KKyAgICAgICAgICAjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKKyAgICAgICAgICAjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKyAgICAgICAgICAjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcworICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKyAgICAgICAgICAjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubworICAgICAgICAgICMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgaWYgdGVzdCBzdnI0LG5vID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKKwkgICAgICAjIHNvIHdlIGRvbid0IGhhdmUgbGliLmEgc2hhcmVkIGxpYnMgdG8gbGluayBvdXIgZXhlY3V0YWJsZXMuCisJICAgICAgIyBXZSBoYXZlIHRvIGZvcmNlIHJ1bnRpbWUgbGlua2luZyBpbiB0aGlzIGNhc2UuCisJICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWJydGwiCisJICAgIGZpCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHdsLWYsJworICAgICAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAgICAgYWl4LCopIDs7CSMgbm8gaW1wb3J0IGZpbGUKKyAgICAgICAgc3ZyNCwqIHwgKix5ZXMpICMgdXNlIGltcG9ydCBmaWxlCisgICAgICAgICAgIyBUaGUgSW1wb3J0IEZpbGUgZGVmaW5lcyB3aGF0IHRvIGhhcmRjb2RlLgorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0kc2hhcmVkX2ZsYWcnICR3bC1HJworCSAgZmkKKwkgICMgTmVlZCB0byBlbnN1cmUgcnVudGltZSBsaW5raW5nIGlzIGRpc2FibGVkIGZvciB0aGUgdHJhZGl0aW9uYWwKKwkgICMgc2hhcmVkIGxpYnJhcnksIG9yIHRoZSBsaW5rZXIgbWF5IGV2ZW50dWFsbHkgZmluZCBzaGFyZWQgbGlicmFyaWVzCisJICAjIC93aXRoLyBJbXBvcnQgRmlsZSAtIHdlIGRvIG5vdCB3YW50IHRvIG1peCB0aGVtLgorCSAgc2hhcmVkX2ZsYWdfYWl4PSctc2hhcmVkJworCSAgc2hhcmVkX2ZsYWdfc3ZyND0nLXNoYXJlZCAkd2wtRycKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJworCSAgICBmaQorCSAgICBzaGFyZWRfZmxhZ19haXg9JyR3bC1iTTpTUkUnCisJICAgIHNoYXJlZF9mbGFnX3N2cjQ9JyR3bC1HJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwlpZiB0ZXN0IGFpeCx5ZXMgPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKyAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICAgICAgIyBUaGUgIi1HIiBsaW5rZXIgZmxhZyBhbGxvd3MgdW5kZWZpbmVkIHN5bWJvbHMuCisgICAgICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSctYmVybm90b2snCisgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgIyBleGVjdXRhYmxlLgorICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtYmVyb2snCisJICAgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmR+JE1LRElSICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCSAgICAjIC1icnRsIGFmZmVjdHMgbXVsdGlwbGUgbGlua2VyIHNldHRpbmdzLCAtYmVyb2sgZG9lcyBub3QgYW5kIGlzIG92ZXJyaWRkZW4gbGF0ZXIKKwkgICAgY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQ9J2BmdW5jX2VjaG9fYWxsICIkY29tcGlsZXJfZmxhZ3MgIiB8ICRTRUQgLWUgInMlLWJydGxcXChbWywgXV1cXCklLWJlcm9rXFwxJWciYCcKKwkgICAgaWYgdGVzdCBzdnI0ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAgICMgbGlicmFyaWVzLiBOZWVkIC1ibm9ydGwgbGF0ZSwgd2UgbWF5IGhhdmUgLWJydGwgaW4gTERGTEFHUy4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JENDICckc2hhcmVkX2ZsYWdfYWl4JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZScKKwkgICAgZmkKKwkgICAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX3N2cjQnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JFNUUklQIC1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vfiggZnVuY19lY2hvX2FsbCAiIyEgJHNvbmFtZSgkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiOyBpZiB0ZXN0IHNocl82NCA9ICIkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiMgNjQiOyBlbHNlIGZ1bmNfZWNob19hbGwgIiMgMzIiOyBmaTsgY2F0ICRleHBvcnRfc3ltYm9scyApID4gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcH4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcCcKKwkgICAgZWxzZQorCSAgICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kTVYgICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJG91dHB1dF9vYmpkaXInCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIGNob3J1cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgKikKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorCSxjbCogfCBubyxjbCopCisJICAjIE5hdGl2ZSBNU1ZDCisJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCSAgbGliZXh0PWxpYgorCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJICBzaHJleHRfY21kcz0uZGxsCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgX0xUX0RMTF9ERUZfUChbJGV4cG9ydF9zeW1ib2xzXSk7IHRoZW4KKyAgICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICAgIGxpbmtuYW1lcz0nCisJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJICAjIERvbid0IHVzZSByYW5saWIKKwkgIF9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhY34KKyAgICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisgICAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisKKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKKwkgICAgIyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kIEVYUE9SVFMuLi4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisJOzsKKworICAgICAgb3MyKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCXNocmV4dF9jbWRzPS5kbGwKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgIGVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgIHByZWZpeF9jbWRzPSIkU0VEIn4KKwkgIGlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKKwkgIGZpfgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICBlbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QyLiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgaGFpa3UqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgLWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGhwdXgxMCp8aHB1eDExKikKKyAgICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbWzMtOV1dKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgIGVsc2UKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgLWYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiAtZiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbWzEtNV1dLiogfCAqcGdjcHBcIFtbMS01XV0uKikKKwkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisgICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisgICAgICAgICAgICAgICAgJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgICAgICAgICAgICAgICAgJFJBTkxJQiAkb2xkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKyAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLS1ycGF0aCAkd2wkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICB4bCogfCBtcGl4bCogfCBiZ3hsKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgICRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXZlcnNpb24tc2NyaXB0ICR3bCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJOzsKKworICAgICAgb3BlbmJzZCogfCBiaXRyaWcqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJworCSAgZmkKKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgLWYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorICAgICAgICAgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHdsLWlucHV0ICR3bCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKyAgICAgICAgICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLU0gJHdsJGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlICctRycgTk9UICctc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtRyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJCSopCisJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgQ0MqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorCSMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteixub2RlZnMnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmV4cG9ydCcKKwlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJG9sZG9ianN+CisgICAgICAgICAgICAgICciJF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIgorCSAgICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisgICAgICAgICAgICAgICciJF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKSIKKwkgICAgOzsKKwkgICopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorICAgIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9JEdYWAorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0kTEQKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisKKworIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMKKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAorIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisjIHJhdGhlciB0aGFuIHRoZSBsaWJ0b29sIHNjcmlwdC4KK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCitBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKQorZnVuY19zdHJpcG5hbWVfY25mICgpCit7CisgIGNhc2UgQFN8QDIgaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIkBTfEAzIiB8ICRTRUQgInMlXkBTfEAxJSU7IHMlXFxcXEBTfEAyXCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIkBTfEAzIiB8ICRTRUQgInMlXkBTfEAxJSU7IHMlQFN8QDJcJCUlImA7OworICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWVfY25mCitdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorCisKKyMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCittNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSlkbmwKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCittNF9pZihbJDFdLCBbXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitpbnQgYTsKK3ZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CitfTFRfRU9GCitdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCitdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtGQ10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0dPXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitwYWNrYWdlIGZvbworZnVuYyBmb28oKSB7Cit9CitfTFRfRU9GCitdKQorCitfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKypcIC1mdXNlLWxpbmtlci1wbHVnaW4qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby11c2UtbGlua2VyLXBsdWdpbiIgOzsKK2VzYWMKKworZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK2lmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAkcHJldiRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCB4LUwgPSAiJHAiIHx8CisgICAgICAgICAgdGVzdCB4LVIgPSAiJHAiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICBmaQorICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgIGVzYWMKKyAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgorCSBjYXNlICRwcmV2IGluCisJIC1MIHwgLVIpCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSRwcmV2JHAKKwkgICBlbHNlCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICRwcmV2JHAiCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9JHByZXYkcAorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHByZXYkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIHByZXY9CisgICAgICAgOzsKKworICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9JHAKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9JHAKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKK2ZpCisKKyRSTSAtZiBjb25mZXN0LiRvYmpleHQKK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKworIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KK200X2lmKFskMV0sIFtDWFhdLAorW2Nhc2UgJGhvc3Rfb3MgaW4KK2ludGVyaXhbWzMtOV1dKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0KKyAgOzsKK2VzYWMKK10pCisKK2Nhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKyoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Citlc2FjCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KK2lmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJFNFRCAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKyAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwX29iamVjdHNdLCBbMV0sCisgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcF9vYmplY3RzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoXSwgWzFdLAorICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworICAgIGEgc2hhcmVkIGxpYnJhcnldKQorXSkjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMKKworCisjIF9MVF9MQU5HX0Y3N19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKK2lmIHRlc3QgLXogIiRGNzciIHx8IHRlc3Qgbm8gPSAiJEY3NyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRjc3PXllcworZmkKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWYKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GNzciOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0Y3Ny0iZjc3In0KKyAgQ0ZMQUdTPSRGRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorICBHQ0M9JEc3NworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisJICB5ZXMsYWl4LHllcykgOzsJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gZmlsZSBvbmx5CisJICB5ZXMsc3ZyNCwqKSA7OwkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBhcmNoaXZlIG1lbWJlciBvbmx5CisJICB5ZXMsKikgZW5hYmxlX3N0YXRpYz1ubyA7OwkjIHNoYXJlZCBvYmplY3QgaW4gbGliLmEgYXJjaGl2ZSBhcyB3ZWxsCisJICBlc2FjCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9JEc3NworICAgIF9MVF9UQUdWQVIoTEQsICQxKT0kTEQKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0Y3NyIKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GNzdfQ09ORklHCisKKworIyBfTFRfTEFOR19GQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4pCisKK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCBubyA9ICIkRkMiOyB0aGVuCisgIF9sdF9kaXNhYmxlX0ZDPXllcworZmkKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmYyB0ZXN0IHNvdXJjZXMuCithY19leHQ9JHthY19mY19zcmNleHQtZn0KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGZjIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRkMiOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0ZDLSJmOTUifQorICBDRkxBR1M9JEZDRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwkgIGNhc2UgJGVuYWJsZV9zaGFyZWQsJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorCSAgeWVzLGFpeCx5ZXMpIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorCSAgeWVzLHN2cjQsKikgOzsJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gYXJjaGl2ZSBtZW1iZXIgb25seQorCSAgeWVzLCopIGVuYWJsZV9zdGF0aWM9bm8gOzsJIyBzaGFyZWQgb2JqZWN0IGluIGxpYi5hIGFyY2hpdmUgYXMgd2VsbAorCSAgZXNhYworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRhY19jdl9mY19jb21waWxlcl9nbnUKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0ZDIgorCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPXllcworQ0M9JHtHQ0otImdjaiJ9CitDRkxBR1M9JEdDSkZMQUdTCitjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0kTEQKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX0dPX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEdvIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HT19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR09dKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBHbyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Z28KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEdvIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0icGFja2FnZSBtYWluOyBmdW5jIG1haW4oKSB7IH0iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3BhY2thZ2UgbWFpbjsgZnVuYyBtYWluKCkgeyB9JworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dPQy0iZ2NjZ28ifQorQ0ZMQUdTPSRHT0ZMQUdTCitjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0kTEQKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHbyBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKworX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfR09fQ09ORklHCisKKworIyBfTFRfTEFOR19SQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX1JDXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PXJjCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9JGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZQorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK0NGTEFHUz0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19SQ19DT05GSUcKKworCisjIExUX1BST0dfR0NKCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HQ0pdLAorW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCisgIFttNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sIFtBXVtNX1BST0dfR0NKXSwKKyAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCisgICAgICB0ZXN0IHNldCA9ICIke0dDSkZMQUdTK3NldH0iIHx8IEdDSkZMQUdTPSItZyAtTzIiCisgICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19HQ0pdLCBbTFRfUFJPR19HQ0pdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQorCisKKyMgTFRfUFJPR19HTworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HT10sCitbQUNfQ0hFQ0tfVE9PTChHT0MsIGdjY2dvLCkKK10pCisKKworIyBMVF9QUk9HX1JDCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX1JDXSwKK1tBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCkKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19SQ10sIFtMVF9QUk9HX1JDXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sIFtdKQorCisKKyMgX0xUX0RFQ0xfRUdSRVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IGdyZXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfRUdSRVBdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19GR1JFUF0pZG5sCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCitfTFRfREVDTChbXSwgW0dSRVBdLCBbMV0sIFtBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lc10pCitfTFRfREVDTChbXSwgW0VHUkVQXSwgWzFdLCBbQW4gRVJFIG1hdGNoZXJdKQorX0xUX0RFQ0woW10sIFtGR1JFUF0sIFsxXSwgW0EgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlcl0pCitkbmwgTm9uLWJsZWVkaW5nLWVkZ2UgYXV0b2NvbmYgZG9lc24ndCBzdWJzdCBHUkVQLCBzbyBkbyBpdCBoZXJlIHRvbworQUNfU1VCU1QoW0dSRVBdKQorXSkKKworCisjIF9MVF9ERUNMX09CSkRVTVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IG9iamR1bXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfT0JKRFVNUF0sCitbQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW0FuIG9iamVjdCBzeW1ib2wgZHVtcGVyXSkKK0FDX1NVQlNUKFtPQkpEVU1QXSkKK10pCisKKyMgX0xUX0RFQ0xfRExMVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSBETExUT09MIHZhcmlhYmxlIGlzIHNldC4KK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQorQUNfU1VCU1QoW0RMTFRPT0xdKQorXSkKKworIyBfTFRfREVDTF9TRUQKKyMgLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCisjIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCittNF9kZWZ1bihbX0xUX0RFQ0xfU0VEXSwKK1tBQ19QUk9HX1NFRAordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorX0xUX0RFQ0woW10sIFtTRURdLCBbMV0sIFtBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK19MVF9ERUNMKFtdLCBbWHNlZF0sIFsiXCRTRUQgLWUgMXMvXlgvLyJdLAorICAgIFtTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbl0pCitdKSMgX0xUX0RFQ0xfU0VECisKK200X2lmbmRlZihbQUNfUFJPR19TRURdLCBbCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIworIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfU0VELiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAjCisjICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKKyMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK200X2RlZnVuKFtBQ19QUk9HX1NFRF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAorWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCitsdF9hY19tYXg9MAorbHRfYWNfY291bnQ9MAorIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKyMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCitmb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKyAgdGVzdCAhIC1mICIkbHRfYWNfc2VkIiAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiAtZiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgMTAgLWx0ICIkbHRfYWNfY291bnQiICYmIGJyZWFrCisgICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICIkbHRfYWNfY291bnQiIC1ndCAiJGx0X2FjX21heCI7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorX0xUX0RFQ0woW10sIFtsdF91bnNldF0sIFswXSwgW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCJdKWRubAorCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworX0xUX0RFQ0woW1NQMk5MXSwgW2x0X1NQMk5MXSwgWzFdLCBbdHVybiBzcGFjZXMgaW50byBuZXdsaW5lc10pZG5sCitfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKK10pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKworCisjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZSB3aGF0IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieQorIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCisjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KK200X2RlZnVuKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAorW2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICotKi1jeWd3aW4qICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICA7OworZXNhYworXSkKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKK19MVF9ERUNMKFt0b19ob3N0X2ZpbGVfY21kXSwgW2x0X2N2X3RvX2hvc3RfZmlsZV9jbWRdLAorICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAorCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCitbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCitjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKK2VzYWMKK10pCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorXSkjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9sdG9wdGlvbnMubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9sdG9wdGlvbnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiMDgyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2x0b3B0aW9ucy5tNApAQCAtMCwwICsxLDQzNyBAQAorIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDctMjAwOSwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUKKyMgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA4IGx0b3B0aW9ucy5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCisKKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCitbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKworIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCisjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisjIHNhdmVkIGFzIGEgZmxhZy4KK200X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKK200X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uICckMiddKV0pW11kbmwKK10pCisKKworIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKK1ttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorCisKKyMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKKyMgYXJlIHNldC4KK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKK1ttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKwkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCittNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKK10pW11kbmwKK10pCisKKworIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKKyMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCitbIyBTZXQgb3B0aW9ucworbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKworbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworICBkbmwKKyAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90CisgIGRubCBzcGVjaWZpZWQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworICBdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKyAgXSkKKyAgZG5sCisgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCisgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisgIGRubCAnc2hhcmVkJyBub3IgJ2Rpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFthaXgtc29uYW1lPWFpeCBhaXgtc29uYW1lPWJvdGggYWl4LXNvbmFtZT1zdnI0XSwKKwkJICAgW19MVF9XSVRIX0FJWF9TT05BTUUoW2FpeF0pXSkKKyAgXSkKK10pIyBfTFRfU0VUX09QVElPTlMKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1hY3JvcyB0byBoYW5kbGUgTFRfSU5JVCBvcHRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCitbW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKKworCisjIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCitdKSMgTFRfT1BUSU9OX0RFRklORQorCisKKyMgZGxvcGVuCisjIC0tLS0tLQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKK10pCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlICdkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKworCisjIHdpbjMyLWRsbAorIyAtLS0tLS0tLS0KKyMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorW2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlICd3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlICdzaGFyZWQnIGFuZAorIyAnZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3NoYXJlZD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9saWJ0b29sX2xpYnNdLCBbZW5hYmxlX3NoYXJlZF0sIFswXSwKKwlbV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCitdKSMgX0xUX0VOQUJMRV9TSEFSRUQKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtzaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3NoYXJlZF0pCitdKQorCitBQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSkKK10pCisKK0FVX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW0FDX0VOQUJMRV9TSEFSRUQoJEApXSkKK0FVX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbXSkKKworCisKKyMgX0xUX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSAnc3RhdGljJyBhbmQKKyMgJ2Rpc2FibGUtc3RhdGljJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAneWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3N0YXRpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9vbGRfbGlic10sIFtlbmFibGVfc3RhdGljXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NUQVRJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3N0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc3RhdGljXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdmYXN0LWluc3RhbGwnCisjIGFuZCAnZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZhc3QtaW5zdGFsbEA8OkA9UEtHU0A6PkBdLAorICAgIFtvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSRsdF9zYXZlX2lmcworCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgJ2Zhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSAnZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfQUlYX1NPTkFNRShbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtYWl4LXNvbmFtZSBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGFpeC1zb25hbWU9YWl4JworIyBhbmQgYGFpeC1zb25hbWU9Ym90aCcgYW5kIGBhaXgtc29uYW1lPXN2cjQnIExUX0lOSVQgb3B0aW9ucy4gREVGQVVMVAorIyBpcyBlaXRoZXIgYGFpeCcsIGBib3RoJyBvciBgc3ZyNCcuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYWl4Jy4KK200X2RlZmluZShbX0xUX1dJVEhfQUlYX1NPTkFNRV0sCitbbTRfZGVmaW5lKFtfTFRfV0lUSF9BSVhfU09OQU1FX0RFRkFVTFRdLCBbbTRfaWYoJDEsIHN2cjQsIHN2cjQsIG00X2lmKCQxLCBib3RoLCBib3RoLCBhaXgpKV0pZG5sCitzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz0KK2Nhc2UgJGhvc3QsJGVuYWJsZV9zaGFyZWQgaW4KK3Bvd2VyKi0qLWFpeFtbNS05XV0qLHllcykKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZV0pCisgIEFDX0FSR19XSVRIKFthaXgtc29uYW1lXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1haXgtc29uYW1lPWFpeHxzdnI0fGJvdGhdLAorICAgICAgW3NoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgKGFrYSAiU09OQU1FIikgdmFyaWFudCB0byBwcm92aWRlIG9uIEFJWCwgQDw6QGRlZmF1bHQ9XV9MVF9XSVRIX0FJWF9TT05BTUVfREVGQVVMVFtAOj5ALl0pXSwKKyAgICBbY2FzZSAkd2l0aHZhbCBpbgorICAgIGFpeHxzdnI0fGJvdGgpCisgICAgICA7OworICAgICopCisgICAgICBBQ19NU0dfRVJST1IoW1Vua25vd24gYXJndW1lbnQgdG8gLS13aXRoLWFpeC1zb25hbWVdKQorICAgICAgOzsKKyAgICBlc2FjCisgICAgbHRfY3Zfd2l0aF9haXhfc29uYW1lPSR3aXRoX2FpeF9zb25hbWVdLAorICAgIFtBQ19DQUNIRV9WQUwoW2x0X2N2X3dpdGhfYWl4X3NvbmFtZV0sCisgICAgICBbbHRfY3Zfd2l0aF9haXhfc29uYW1lPV1fTFRfV0lUSF9BSVhfU09OQU1FX0RFRkFVTFQpCisgICAgd2l0aF9haXhfc29uYW1lPSRsdF9jdl93aXRoX2FpeF9zb25hbWVdKQorICBBQ19NU0dfUkVTVUxUKFskd2l0aF9haXhfc29uYW1lXSkKKyAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisgICAgIyBGb3IgdGhlIEFJWCB3YXkgb2YgbXVsdGlsaWIsIHdlIG5hbWUgdGhlIHNoYXJlZCBhcmNoaXZlIG1lbWJlcgorICAgICMgYmFzZWQgb24gdGhlIGJpdHdpZHRoIHVzZWQsIHRyYWRpdGlvbmFsbHkgJ3Noci5vJyBvciAnc2hyXzY0Lm8nLAorICAgICMgYW5kICdzaHIuaW1wJyBvciAnc2hyXzY0LmltcCcsIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBJbXBvcnQgRmlsZS4KKyAgICAjIEV2ZW4gd2hlbiBHTlUgY29tcGlsZXJzIGlnbm9yZSBPQkpFQ1RfTU9ERSBidXQgbmVlZCAnLW1haXg2NCcgZmxhZywKKyAgICAjIHRoZSBBSVggdG9vbGNoYWluIHdvcmtzIGJldHRlciB3aXRoIE9CSkVDVF9NT0RFIHNldCAoZGVmYXVsdCAzMikuCisgICAgaWYgdGVzdCA2NCA9ICIke09CSkVDVF9NT0RFLTMyfSI7IHRoZW4KKyAgICAgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPXNocl82NAorICAgIGVsc2UKKyAgICAgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPXNocgorICAgIGZpCisgIGZpCisgIDs7CisqKQorICB3aXRoX2FpeF9zb25hbWU9YWl4CisgIDs7Citlc2FjCisKK19MVF9ERUNMKFtdLCBbc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWNdLCBbMF0sCisgICAgW1NoYXJlZCBhcmNoaXZlIG1lbWJlciBiYXNlbmFtZSwgZm9yIGZpbGVuYW1lIGJhc2VkIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgb24gQUlYXSlkbmwKK10pIyBfTFRfV0lUSF9BSVhfU09OQU1FCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbYWl4LXNvbmFtZT1haXhdLCBbX0xUX1dJVEhfQUlYX1NPTkFNRShbYWl4XSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFthaXgtc29uYW1lPWJvdGhdLCBbX0xUX1dJVEhfQUlYX1NPTkFNRShbYm90aF0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbYWl4LXNvbmFtZT1zdnI0XSwgW19MVF9XSVRIX0FJWF9TT05BTUUoW3N2cjRdKV0pCisKKworIyBfTFRfV0lUSF9QSUMoW01PREVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdwaWMtb25seScgYW5kICduby1waWMnCisjIExUX0lOSVQgb3B0aW9ucy4KKyMgTU9ERSBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICdib3RoJy4KK200X2RlZmluZShbX0xUX1dJVEhfUElDXSwKK1tBQ19BUkdfV0lUSChbcGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1waWNAPDpAPVBLR1NAOj5AXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7CisgICAgKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KKwkgIHBpY19tb2RlPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSldKQorCitfTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAorXSkjIF9MVF9XSVRIX1BJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3BpYy1vbmx5XSwgW19MVF9XSVRIX1BJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtuby1waWNdLCBbX0xUX1dJVEhfUElDKFtub10pXSkKKworIyBPbGQgbmFtZToKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlICdwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLCBbXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExURExfSU5JVCBPcHRpb25zICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCittNF9kZWZpbmUoW19MVERMX01PREVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtub25yZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtub25yZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbcmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbcmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3N1YnByb2plY3RdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtzdWJwcm9qZWN0XSldKQorCittNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtpbnN0YWxsYWJsZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2luc3RhbGxhYmxlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2NvbnZlbmllbmNlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbY29udmVuaWVuY2VdKV0pCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9sdHN1Z2FyLm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvbHRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGJjOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvbHRzdWdhci5tNApAQCAtMCwwICsxLDEyNCBAQAorIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDctMjAwOCwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRzdWdhci5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQorCisKKyMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKKyMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKKyMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KK200X2RlZmluZShbbHRfam9pbl0sCitbbTRfaWYoWyQjXSwgWzFdLCBbXSwKKyAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorbTRfZGVmaW5lKFtfbHRfam9pbl0sCitbbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorCisKKyMgbHRfY2FyKExJU1QpCisjIGx0X2NkcihMSVNUKQorIyAtLS0tLS0tLS0tLS0KKyMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KKyMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAorIyBBdXRvY29uZi0yLjU5LCB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCittNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKK200X2RlZmluZShbbHRfY2RyXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAorICAgICAgIFskI10sIDEsIFtdLAorICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKK200X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQorCisKKyMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgJ1NFUEFSQVRPUicnU1RSSU5HJy4KKyMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAorIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KKyMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50CisjIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgorIworIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCisjIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCittNF9kZWZpbmUoW2x0X2FwcGVuZF0sCitbbTRfZGVmaW5lKFskMV0sCisJICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCisKKworCisjIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCisjIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKKyMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCittNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAorW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCisgICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAorW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKKwkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKKwkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCisJW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQorCisKKyMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAorIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KK200X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAorW200X2lmZGVmKFskMV0sCisJICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCisJCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAorCQkgWyQ1XSldLAorCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQorCisKKyMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRdLAorW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQorCisKKyMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKK1ttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKKworCisjIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKK1ttNF9pZnZhbChbJDNdLAorCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKKyAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKKworCisjIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAorW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCisJWyQ1XSwKKyAgICBbJDZdKV0pCisKKworIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCitbbTRfaWYoWyQ1XSwgW10sIFtdLAorICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAorICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAorCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKK10pCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC9sdHZlcnNpb24ubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC9sdHZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwNGI1MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2x0dmVyc2lvbi5tNApAQCAtMCwwICsxLDIzIEBACisjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBAY29uZmlndXJlX2lucHV0QAorCisjIHNlcmlhbCA0MTc5IGx0dmVyc2lvbi5tNAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjQuNl0pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMi40LjZdKQorCitBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorW21hY3JvX3ZlcnNpb249JzIuNC42JworbWFjcm9fcmV2aXNpb249JzIuNC42JworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL200L2x0fm9ic29sZXRlLm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQvbHR+b2Jzb2xldGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiMjZmOAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L2x0fm9ic29sZXRlLm00CkBAIC0wLDAgKzEsOTkgQEAKKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA3LCAyMDA5LCAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZQorIyAgIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorCisjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyMKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pLAorIyB3aGljaCBoYXZlIGxhdGVyIGJlZW4gY2hhbmdlZCB0byBtNF9kZWZpbmUgYXMgdGhleSBhcmVuJ3QgcGFydCBvZiB0aGUKKyMgZXhwb3J0ZWQgQVBJLCBvciBtb3ZlZCB0byBBdXRvY29uZiBvciBBdXRvbWFrZSB3aGVyZSB0aGV5IGJlbG9uZy4KKyMKKyMgVGhlIHRyb3VibGUgaXMsIGFjbG9jYWwgaXMgYSBiaXQgdGhpY2suICBJdCdsbCBzZWUgdGhlIG9sZCBBQ19ERUZVTgorIyBpbiAvdXNyL3NoYXJlL2FjbG9jYWwvbGlidG9vbC5tNCBhbmQgcmVtZW1iZXIgaXQsIHRoZW4gd2hlbiBpdCBzZWVzIHVzCisjIHVzaW5nIGEgbWFjcm8gd2l0aCB0aGUgc2FtZSBuYW1lIGluIG91ciBsb2NhbCBtNC9saWJ0b29sLm00IGl0J2xsCisjIHB1bGwgdGhlIG9sZCBsaWJ0b29sLm00IGluIChpdCBkb2Vzbid0IHNlZSBvdXIgc2hpbnkgbmV3IG00X2RlZmluZQorIyBhbmQgZG9lc24ndCBrbm93IGFib3V0IEF1dG9jb25mIG1hY3JvcyBhdCBhbGwuKQorIworIyBTbyB3ZSBwcm92aWRlIHRoaXMgZmlsZSwgd2hpY2ggaGFzIGEgc2lsbHkgZmlsZW5hbWUgc28gaXQncyBhbHdheXMKKyMgaW5jbHVkZWQgYWZ0ZXIgZXZlcnl0aGluZyBlbHNlLiAgVGhpcyBwcm92aWRlcyBhY2xvY2FsIHdpdGggdGhlCisjIEFDX0RFRlVOcyBpdCB3YW50cywgYnV0IHdoZW4gbTQgcHJvY2Vzc2VzIGl0LCBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCisjIGJlY2F1c2UgdGhvc2UgbWFjcm9zIGFscmVhZHkgZXhpc3QsIG9yIHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisjIFdlIHVzZSBBQ19ERUZVTiBvdmVyIEFVX0RFRlVOIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYWNsb2NhbC0xLjYuCisjCisjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgorIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorIyB3ZSBnaXZlIHVwIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBiZWZvcmUgMS43LCBhdCB3aGljaCBwb2ludAorIyB3ZSBuZWVkIHRvIGtlZXAgb25seSB0aG9zZSBuYW1lcyB3aGljaCB3ZSBzdGlsbCByZWZlciB0by4KKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9CU09MRVRFX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKK200X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCittNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfRU5BQkxFX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0xURExfRU5BQkxFX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xPQ0tdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTE9DS10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MVERMX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKK200X2lmbmRlZihbQUNfUEFUSF9NQUdJQ10sCQlbQUNfREVGVU4oW0FDX1BBVEhfTUFHSUNdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCittNF9pZm5kZWYoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwJW0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCittNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKK200X2lmbmRlZihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NFVFVQXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdDT05GSUddLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3XSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQorbTRfaWZuZGVmKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sCVtBQ19ERUZVTihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0NYWENQUF0sCQlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0NYWENQUF0pXSkKK200X2lmbmRlZihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAlbQUNfREVGVU4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRkNdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GQ10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSldKQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQveGMtYW0taWZhY2UubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC94Yy1hbS1pZmFjZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTcxYzIxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQveGMtYW0taWZhY2UubTQKQEAgLTAsMCArMSwyNTMgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgeGMtYW0taWZhY2UubTQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIERhbmllbCBTdGVuYmVyZyA8ZGFuaWVsQGhheHguc2U+CisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorIyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisjIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgc2VyaWFsIDEKKworCitkbmwgX1hDX0FVVE9NQUtFX0JPRFkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KK2RubAorZG5sIFRoaXMgbWFjcm8gcGVyZm9ybXMgZW1iZWRkaW5nIG9mIGF1dG9tYWtlIGluaXRpYWxpemF0aW9uCitkbmwgY29kZSBpbnRvIGNvbmZpZ3VyZSBzY3JpcHQuIFdoZW4gYXV0b21ha2UgdmVyc2lvbiAxLjE0IG9yCitkbmwgbmV3ZXIgaXMgdXNlZCBhdCBjb25maWd1cmUgc2NyaXB0IGdlbmVyYXRpb24gdGltZSwgdGhpcworZG5sIHJlc3VsdHMgaW4gJ3N1YmRpci1vYmplY3RzJyBhdXRvbWFrZSBvcHRpb24gYmVpbmcgdXNlZC4KK2RubCBXaGVuIHVzaW5nIGF1dG9tYWtlIHZlcnNpb25zIG9sZGVyIHRoYW4gMS4xNCB0aGlzIG9wdGlvbgorZG5sIGlzIG5vdCB1c2VkIHdoZW4gZ2VuZXJhdGluZyBjb25maWd1cmUgc2NyaXB0LgorZG5sCitkbmwgRXhpc3RlbmNlIG9mIGF1dG9tYWtlIF9BTV9QUk9HX0NDX0NfTyBtNCBwcml2YXRlIG1hY3JvCitkbmwgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGF1dG9tYWtlIHZlcnNpb24gMS4xNCBmcm9tIG9sZGVyCitkbmwgb25lcyB3aGljaCBsYWNrIHRoaXMgbWFjcm8uCisKK200X2RlZmluZShbX1hDX0FVVE9NQUtFX0JPRFldLAorW2RubAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAgU3RhcnQgb2YgYXV0b21ha2UgaW5pdGlhbGl6YXRpb24gY29kZSAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworbTRfaWZkZWYoW19BTV9QUk9HX0NDX0NfT10sCitbCitBTV9JTklUX0FVVE9NQUtFKFtzdWJkaXItb2JqZWN0c10pCitdLFsKK0FNX0lOSVRfQVVUT01BS0UKK10pZG5sCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAgRW5kIG9mIGF1dG9tYWtlIGluaXRpYWxpemF0aW9uIGNvZGUgICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitkbmwKK200X2RlZmluZShbJDBdLCBbXSlbXWRubAorXSkKKworCitkbmwgWENfQVVUT01BS0UKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHVibGljIG1hY3JvLgorZG5sCitkbmwgVGhpcyBtYWNybyBlbWJlZHMgYXV0b21ha2UgbWFjaGluZXJ5IGludG8gY29uZmlndXJlCitkbmwgc2NyaXB0IHJlZ2FyZGxlc3Mgb2YgYXV0b21ha2UgdmVyc2lvbiB1c2VkIGluIG9yZGVyCitkbmwgdG8gZ2VuZXJhdGUgY29uZmlndXJlIHNjcmlwdC4KK2RubAorZG5sIFdoZW4gdXNpbmcgYXV0b21ha2UgdmVyc2lvbiAxLjE0IG9yIG5ld2VyLCBhdXRvbWFrZQorZG5sIGluaXRpYWxpemF0aW9uIG9wdGlvbiAnc3ViZGlyLW9iamVjdHMnIGlzIHVzZWQgdG8KK2RubCBnZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdCwgb3RoZXJ3aXNlIHRoaXMgb3B0aW9uCitkbmwgaXMgbm90IHVzZWQuCisKK0FDX0RFRlVOKFtYQ19BVVRPTUFLRV0sCitbZG5sCitBQ19QUkVSRVEoWzIuNTBdKWRubAorZG5sCitBQ19CRUZPUkUoWyQwXSxbQU1fSU5JVF9BVVRPTUFLRV0pZG5sCitkbmwKK19YQ19BVVRPTUFLRV9CT0RZCitkbmwKK200X2lmZGVmKFtBTV9JTklUX0FVVE9NQUtFXSwKKyAgW200X3VuZGVmaW5lKFtBTV9JTklUX0FVVE9NQUtFXSldKWRubAorZG5sCittNF9kZWZpbmUoWyQwXSwgW10pW11kbmwKK10pCisKKworZG5sIF9YQ19BTUVORF9ESVNUQ0xFQU5fQk9EWSAoW0xJU1QtT0YtU1VCRElSU10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBUaGlzIG1hY3JvIHBlcmZvcm1zIHNoZWxsIGNvZGUgZW1iZWRkaW5nIGludG8KK2RubCBjb25maWd1cmUgc2NyaXB0IGluIG9yZGVyIHRvIG1vZGlmeSBkaXN0Y2xlYW4KK2RubCBhbmQgbWFpbnRhaW5lci1jbGVhbiB0YXJnZXRzIG9mIG1ha2VmaWxlcyB3aGljaAorZG5sIGFyZSBsb2NhdGVkIGluIGdpdmVuIGxpc3Qgb2Ygc3ViZGlycy4KK2RubAorZG5sIFNlZSBYQ19BTUVORF9ESVNUQ0xFQU4gY29tbWVudHMgZm9yIGRldGFpbHMuCisKK200X2RlZmluZShbX1hDX0FNRU5EX0RJU1RDTEVBTl9CT0RZXSwKK1tkbmwKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICBTdGFydCBvZiBkaXN0Y2xlYW4gYW1lbmRpbmcgY29kZSAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworZm9yIHhjX3N1YmRpciBpbiBbJDFdCitkbworCitpZiB0ZXN0ICEgLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUiOyB0aGVuCisgIGVjaG8gIiR4Y19tc2dfZXJyICR4Y19zdWJkaXIvTWFrZWZpbGUgZmlsZSBub3QgZm91bmQuICR4Y19tc2dfYWJydCIgPiYyCisgIGV4aXQgMQorZmkKKworIyBGZXRjaCBkZXBlbmRlbmN5IHRyYWNraW5nIGZpbGUgbGlzdCBmcm9tIE1ha2VmaWxlIGluY2x1ZGUgbGluZXMuCisKK3hjX2luY19saW5lcz1gZ3JlcCAnXmluY2x1ZGUgLiooREVQRElSKScgIiR4Y19zdWJkaXIvTWFrZWZpbGUiIDI+L2Rldi9udWxsYAoreGNfY250X3dvcmRzPWBlY2hvICIkeGNfaW5jX2xpbmVzIiB8IHdjIC13IHwgdHIgLWQgIiR4Y19zcGFjZSR4Y190YWIiYAorCisjIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIG1pZ2h0IGhhdmUgYmVlbiB1c2VkLCBjb25zZXF1ZW50bHkKKyMgdGhlcmUgaXMgbm90aGluZyB0byBhbWVuZCB3aXRob3V0IGEgZGVwZW5kZW5jeSB0cmFja2luZyBmaWxlIGxpc3QuCisKK2lmIHRlc3QgJHhjX2NudF93b3JkcyAtZ3QgMDsgdGhlbgorCitBQ19NU0dfTk9USUNFKFthbWVuZGluZyAkeGNfc3ViZGlyL01ha2VmaWxlXSkKKworIyBCdWlsZCBNYWtlZmlsZSBzcGVjaWZpYyBwYXRjaCBodW5rLgorCit4Y19wPSIkeGNfc3ViZGlyL3hjX3BhdGNoLnRtcCIKKworeGNfcm1fZGVwZmlsZXM9YGVjaG8gIiR4Y19pbmNfbGluZXMiIFwKKyAgfCAkU0VEICdzJWluY2x1ZGUlCS1ybSAtZiUnIDI+L2Rldi9udWxsYAorCit4Y19kZXBfc3ViZGlycz1gZWNobyAiJHhjX2luY19saW5lcyIgXAorICB8ICRTRUQgJ3MlaW5jbHVkZVtbIF1dW1sgXV0qJSUnIDI+L2Rldi9udWxsIFwKKyAgfCAkU0VEICdzJShERVBESVIpLy4qJShERVBESVIpJScgMj4vZGV2L251bGwgXAorICB8IHNvcnQgfCB1bmlxYAorCitlY2hvICIkeGNfcm1fZGVwZmlsZXMiID4keGNfcAorCitmb3IgeGNfZGVwX2RpciBpbiAkeGNfZGVwX3N1YmRpcnM7IGRvCisgIGVjaG8gIiR7eGNfdGFifUB4bV9kZXBfY250PVxgbHMgJHhjX2RlcF9kaXIgfCB3YyAtbCAyPi9kZXYvbnVsbFxgOyBcXCIgICAgICAgICAgICA+PiR4Y19wCisgIGVjaG8gIiR7eGNfdGFifWlmIHRlc3QgXCRcJHhtX2RlcF9jbnQgLWVxIDAgJiYgdGVzdCAtZCAkeGNfZGVwX2RpcjsgdGhlbiBcXCIgICAgICA+PiR4Y19wCisgIGVjaG8gIiR7eGNfdGFifSAgcm0gLXJmICR4Y19kZXBfZGlyOyBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiR4Y19wCisgIGVjaG8gIiR7eGNfdGFifWZpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiR4Y19wCitkb25lCisKKyMgQnVpbGQgTWFrZWZpbGUgcGF0Y2hpbmcgc2VkIHNjcmlwdHMuCisKK3hjX3MxPSIkeGNfc3ViZGlyL3hjX3NjcmlwdF8xLnRtcCIKK3hjX3MyPSIkeGNfc3ViZGlyL3hjX3NjcmlwdF8yLnRtcCIKK3hjX3MzPSIkeGNfc3ViZGlyL3hjX3NjcmlwdF8zLnRtcCIKKworY2F0ID4keGNfczEgPDxcX0VPVAorL15kaXN0Y2xlYW5bWyBdXSo6LywvXltbXgldXVtbXgldXSo6L3sKKyAgcy9eLiooREVQRElSKS9fX194Y19kZXBkaXJfbGluZV9fXy8KK30KKy9ebWFpbnRhaW5lci1jbGVhbltbIF1dKjovLC9eW1teCV1dW1teCV1dKjoveworICBzL14uKihERVBESVIpL19fX3hjX2RlcGRpcl9saW5lX19fLworfQorX0VPVAorCitjYXQgPiR4Y19zMiA8PFxfRU9UCisvX19feGNfZGVwZGlyX2xpbmVfX18kL3sKKyAgTgorICAvX19feGNfZGVwZGlyX2xpbmVfX18kL0QKK30KK19FT1QKKworY2F0ID4keGNfczMgPDxfRU9UCisvXl9fX3hjX2RlcGRpcl9saW5lX19fL3sKKyAgciAkeGNfcAorICBkCit9CitfRU9UCisKKyMgQXBwbHkgcGF0Y2ggdG8gTWFrZWZpbGUgYW5kIGNsZWFudXAuCisKKyRTRUQgLWYgIiR4Y19zMSIgIiR4Y19zdWJkaXIvTWFrZWZpbGUiICAgICAgPiIkeGNfc3ViZGlyL01ha2VmaWxlLnRtcDEiCiskU0VEIC1mICIkeGNfczIiICIkeGNfc3ViZGlyL01ha2VmaWxlLnRtcDEiID4iJHhjX3N1YmRpci9NYWtlZmlsZS50bXAyIgorJFNFRCAtZiAiJHhjX3MzIiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAyIiA+IiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMyIKKworaWYgdGVzdCAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAzIjsgdGhlbgorICBtdiAtZiAiJHhjX3N1YmRpci9NYWtlZmlsZS50bXAzIiAiJHhjX3N1YmRpci9NYWtlZmlsZSIKK2ZpCisKK3Rlc3QgLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMSIgJiYgcm0gLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMSIKK3Rlc3QgLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMiIgJiYgcm0gLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMiIKK3Rlc3QgLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMyIgJiYgcm0gLWYgIiR4Y19zdWJkaXIvTWFrZWZpbGUudG1wMyIKKwordGVzdCAtZiAiJHhjX3AiICAmJiBybSAtZiAiJHhjX3AiCit0ZXN0IC1mICIkeGNfczEiICYmIHJtIC1mICIkeGNfczEiCit0ZXN0IC1mICIkeGNfczIiICYmIHJtIC1mICIkeGNfczIiCit0ZXN0IC1mICIkeGNfczMiICYmIHJtIC1mICIkeGNfczMiCisKK2ZpCisKK2RvbmUKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICBFbmQgb2YgZGlzdGNsZWFuIGFtZW5kaW5nIGNvZGUgICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworZG5sCittNF9kZWZpbmUoWyQwXSwgW10pW11kbmwKK10pCisKKworZG5sIFhDX0FNRU5EX0RJU1RDTEVBTiAoW0xJU1QtT0YtU1VCRElSU10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFB1YmxpYyBtYWNyby4KK2RubAorZG5sIFRoaXMgbWFjcm8gZW1iZWRzIHNoZWxsIGNvZGUgaW50byBjb25maWd1cmUgc2NyaXB0CitkbmwgdGhhdCBhbWVuZHMsIGF0IGNvbmZpZ3VyZSBydW50aW1lLCB0aGUgZGlzdGNsZWFuCitkbmwgYW5kIG1haW50YWluZXItY2xlYW4gdGFyZ2V0cyBvZiBNYWtlZmlsZXMgbG9jYXRlZAorZG5sIGluIGFsbCBzdWJkaXJzIGdpdmVuIGluIHRoZSBtYW5kYXRvcnkgd2hpdGUtc3BhY2UKK2RubCBzZXBhcmF0ZWQgbGlzdCBhcmd1bWVudC4KK2RubAorZG5sIEVtYmVkZGluZyBvbmx5IHRha2VzIHBsYWNlIHdoZW4gdXNpbmcgYXV0b21ha2UgMS4xNAorZG5sIG9yIG5ld2VyLCBvdGhlcndpc2UgYW1lbmRpbmcgY29kZSBpcyBub3QgaW5jbHVkZWQKK2RubCBpbiBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdC4KK2RubAorZG5sIGRpc3RjbGVhbiBhbmQgbWFpbnRhaW5lci1jbGVhbiB0YXJnZXRzIGFyZSBtb2RpZmllZAorZG5sIHRvIGF2b2lkIHVuY29uZGl0aW9uYWwgcmVtb3ZhbCBvZiBkZXBlbmRlbmN5IHN1YmRpcnMKK2RubCB3aGljaCB0cmlnZ2VycyBkaXN0Y2xlYW4gYW5kIG1haW50YWluZXItY2xlYW4gZXJyb3JzCitkbmwgd2hlbiB1c2luZyBhdXRvbWFrZSAnc3ViZGlyLW9iamVjdHMnIG9wdGlvbiBhbG9uZworZG5sIHdpdGggcGVyLXRhcmdldCBvYmplY3RzIGFuZCBzb3VyY2UgZmlsZXMgZXhpc3RpbmcgaW4KK2RubCBtdWx0aXBsZSBzdWJkaXJzIHVzZWQgZm9yIGRpZmZlcmVudCBidWlsZCB0YXJnZXRzLgorZG5sCitkbmwgTmV3IGJlaGF2aW9yIGZpcnN0IHJlbW92ZXMgZWFjaCBkZXBlbmRlbmN5IHRyYWNraW5nCitkbmwgZmlsZSBpbmRlcGVuZGVudGx5LCBhbmQgb25seSByZW1vdmVzIGVhY2ggZGVwZW5kZW5jeQorZG5sIHN1YmRpciB3aGVuIGl0IGZpbmRzIG91dCB0aGF0IGl0IG5vIGxvbmdlciBob2xkcyBhbnkKK2RubCBkZXBlbmRlbmN5IHRyYWNraW5nIGZpbGUuCitkbmwKK2RubCBXaGVuIGNvbmZpZ3VyZSBvcHRpb24gLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKK2RubCBpcyB1c2VkIG5vIGFtZW5kaW5nIHRha2VzIHBsYWNlIGdpdmVuIHRoYXQgdGhlcmUgYXJlCitkbmwgbm8gZGVwZW5kZW5jeSB0cmFja2luZyBmaWxlcy4KKworQUNfREVGVU4oW1hDX0FNRU5EX0RJU1RDTEVBTl0sCitbZG5sCitBQ19QUkVSRVEoWzIuNTBdKWRubAorZG5sCittNF9pZmRlZihbX0FDX09VVFBVVF9NQUlOX0xPT1BdLAorICBbbTRfcHJvdmlkZV9pZihbX0FDX09VVFBVVF9NQUlOX0xPT1BdLCBbXSwKKyAgICBbbTRfZmF0YWwoW2NhbGwgdG8gQUNfT1VUUFVUIG5lZWRlZCBiZWZvcmUgJDBdKV0pXSlkbmwKK2RubAorbTRfaWYoWyQjXSwgWzFdLCBbXSwgW200X2ZhdGFsKFskMDogd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50c10pXSlkbmwKK200X2lmKFskMV0sIFtdLCBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIGFyZ3VtZW50XSldKWRubAorZG5sCitBQ19SRVFVSVJFKFtYQ19DT05GSUdVUkVfUFJFQU1CTEVdKWRubAorZG5sCittNF9pZmRlZihbX0FNX1BST0dfQ0NfQ19PXSwKK1sKK19YQ19BTUVORF9ESVNUQ0xFQU5fQk9EWShbJDFdKQorXSlkbmwKK200X2RlZmluZShbJDBdLCBbXSlbXWRubAorXSkKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQveGMtY2MtY2hlY2subTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC94Yy1jYy1jaGVjay5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDU1NDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQveGMtY2MtY2hlY2subTQKQEAgLTAsMCArMSw5NiBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyB4Yy1jYy1jaGVjay5tNAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisjIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyMgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBzZXJpYWwgMQorCisKK2RubCBfWENfUFJPR19DQ19QUkVBTUJMRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorCitBQ19ERUZVTihbX1hDX1BST0dfQ0NfUFJFQU1CTEVdLCBbCisgIHhjX3Byb2dfY2NfcHJldl9JRlM9JElGUworICB4Y19wcm9nX2NjX3ByZXZfTElCUz0kTElCUworICB4Y19wcm9nX2NjX3ByZXZfQ0ZMQUdTPSRDRkxBR1MKKyAgeGNfcHJvZ19jY19wcmV2X0xERkxBR1M9JExERkxBR1MKKyAgeGNfcHJvZ19jY19wcmV2X0NQUEZMQUdTPSRDUFBGTEFHUworXSkKKworCitkbmwgX1hDX1BST0dfQ0NfUE9TVExVREUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KKworQUNfREVGVU4oW19YQ19QUk9HX0NDX1BPU1RMVURFXSwgWworICBJRlM9JHhjX3Byb2dfY2NfcHJldl9JRlMKKyAgTElCUz0keGNfcHJvZ19jY19wcmV2X0xJQlMKKyAgQ0ZMQUdTPSR4Y19wcm9nX2NjX3ByZXZfQ0ZMQUdTCisgIExERkxBR1M9JHhjX3Byb2dfY2NfcHJldl9MREZMQUdTCisgIENQUEZMQUdTPSR4Y19wcm9nX2NjX3ByZXZfQ1BQRkxBR1MKKyAgQUNfU1VCU1QoW0NDXSlkbmwKKyAgQUNfU1VCU1QoW0NQUF0pZG5sCisgIEFDX1NVQlNUKFtMSUJTXSlkbmwKKyAgQUNfU1VCU1QoW0NGTEFHU10pZG5sCisgIEFDX1NVQlNUKFtMREZMQUdTXSlkbmwKKyAgQUNfU1VCU1QoW0NQUEZMQUdTXSlkbmwKK10pCisKKworZG5sIF9YQ19QUk9HX0NDCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCisKK0FDX0RFRlVOKFtfWENfUFJPR19DQ10sIFsKKyAgQUNfUkVRVUlSRShbX1hDX1BST0dfQ0NfUFJFQU1CTEVdKWRubAorICBBQ19SRVFVSVJFKFtYQ19DSEVDS19VU0VSX0ZMQUdTXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisgIEFDX1JFUVVJUkUoW0FNX1BST0dfQ0NfQ19PXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DUFBdKWRubAorICBBQ19SRVFVSVJFKFtfWENfUFJPR19DQ19QT1NUTFVERV0pZG5sCitdKQorCisKK2RubCBYQ19DSEVDS19QUk9HX0NDCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFB1YmxpYyBtYWNyby4KK2RubAorZG5sIENoZWNrcyBmb3IgQyBjb21waWxlciBhbmQgQyBwcmVwcm9jZXNzb3IgcHJvZ3JhbXMsCitkbmwgd2hpbGUgZG9pbmcgc29tZSBwcmV2aW91cyBzYW5pdHkgdmFsaWRhdGlvbiBvbiB1c2VyCitkbmwgcHJvdmlkZWQgTElCUywgTERGTEFHUywgQ1BQRkxBR1MgYW5kIENGTEFHUyB2YWx1ZXMKK2RubCB0aGF0IG11c3Qgc3VjY2VlZCBpbiBvcmRlciB0byBjb250aW51ZSBleGVjdXRpb24uCitkbmwKK2RubCBUaGlzIHNldHMgdmFyaWFibGVzIENDIGFuZCBDUFAsIHdoaWxlIHByZXZlbnRpbmcKK2RubCBMSUJTLCBMREZMQUdTLCBDRkxBR1MsIENQUEZMQUdTIGFuZCBJRlMgZnJvbSBiZWluZworZG5sIHVuZXhwZWN0ZWRseSBjaGFuZ2VkIGJ5IHVuZGVybHlpbmcgbWFjcm9zLgorCitBQ19ERUZVTihbWENfQ0hFQ0tfUFJPR19DQ10sIFsKKyAgQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW19YQ19QUk9HX0NDX1BSRUFNQkxFXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfSU5TVEFMTF0pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtBQ19QUk9HX0NDXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW0FNX1BST0dfQ0NfQ19PXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfQ1BQXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfTElCVE9PTF0pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtBTV9JTklUX0FVVE9NQUtFXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sW19YQ19QUk9HX0NDX1BPU1RMVURFXSlkbmwKKyAgQUNfUkVRVUlSRShbX1hDX1BST0dfQ0NdKWRubAorXSkKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQveGMtbHQtaWZhY2UubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC94Yy1sdC1pZmFjZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjkwZDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQveGMtbHQtaWZhY2UubTQKQEAgLTAsMCArMSw0NjUgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgeGMtbHQtaWZhY2UubTQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIERhbmllbCBTdGVuYmVyZyA8ZGFuaWVsQGhheHguc2U+CisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorIyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisjIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgc2VyaWFsIDEKKworCitkbmwgX1hDX0xJQlRPT0xfUFJFQU1CTEUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KK2RubAorZG5sIENoZWNrcyBzb21lIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucyByZWxhdGVkIHdpdGgKK2RubCBsaWJ0b29sIGFuZCBjdXN0b21pemVzIGl0cyBkZWZhdWx0IGJlaGF2aW9yIGJlZm9yZQorZG5sIGxpYnRvb2wgY29kZSBpcyBhY3R1YWxseSB1c2VkIGluIHNjcmlwdC4KKworbTRfZGVmaW5lKFtfWENfTElCVE9PTF9QUkVBTUJMRV0sCitbZG5sCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjICBEZXRlcm1pbmUgbGlidG9vbCBkZWZhdWx0IGJlaGF2aW9yICAjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyMKKyMgRGVmYXVsdCBiZWhhdmlvciBpcyB0byBlbmFibGUgc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIG9uIHN5c3RlbXMKKyMgd2hlcmUgbGlidG9vbCBrbm93cyBob3cgdG8gYnVpbGQgYm90aCBsaWJyYXJ5IHZlcnNpb25zLCBhbmQgZG9lcyBub3QKKyMgcmVxdWlyZSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBydW5zIGZvciBlYWNoIGZsYXZvci4KKyMKKworeGNfbHRfd2FudF9lbmFibGVfc2hhcmVkPSd5ZXMnCit4Y19sdF93YW50X2VuYWJsZV9zdGF0aWM9J3llcycKKworIworIyBVc2VyIG1heSBoYXZlIGRpc2FibGVkIHNoYXJlZCBvciBzdGF0aWMgbGlicmFyaWVzLgorIworY2FzZSAieCRlbmFibGVfc2hhcmVkIiBpbiBAJTpAICgKKyAgeG5vKQorICAgIHhjX2x0X3dhbnRfZW5hYmxlX3NoYXJlZD0nbm8nCisgICAgOzsKK2VzYWMKK2Nhc2UgIngkZW5hYmxlX3N0YXRpYyIgaW4gQCU6QCAoCisgIHhubykKKyAgICB4Y19sdF93YW50X2VuYWJsZV9zdGF0aWM9J25vJworICAgIDs7Citlc2FjCitpZiB0ZXN0ICJ4JHhjX2x0X3dhbnRfZW5hYmxlX3NoYXJlZCIgPSAneG5vJyAmJgorICB0ZXN0ICJ4JHhjX2x0X3dhbnRfZW5hYmxlX3N0YXRpYyIgPSAneG5vJzsgdGhlbgorICBBQ19NU0dfRVJST1IoW2NhbiBub3QgZGlzYWJsZSBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgc2ltdWx0YW5lb3VzbHldKQorZmkKKworIworIyBEZWZhdWx0IGJlaGF2aW9yIG9uIHN5c3RlbXMgdGhhdCByZXF1aXJlIGluZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24KKyMgYW5kIGJ1aWxkIHJ1bnMgZm9yIHNoYXJlZCBhbmQgc3RhdGljIGlzIHRvIGVuYWJsZSBzaGFyZWQgbGlicmFyaWVzCisjIGFuZCBkaXNhYmxlIHN0YXRpYyBvbmVzLiBPbiB0aGVzZSBzeXN0ZW1zIG9wdGlvbiAnLS1kaXNhYmxlLXNoYXJlZCcKKyMgbXVzdCBiZSB1c2VkIGluIG9yZGVyIHRvIGJ1aWxkIGEgcHJvcGVyIHN0YXRpYyBsaWJyYXJ5LgorIworCitpZiB0ZXN0ICJ4JHhjX2x0X3dhbnRfZW5hYmxlX3NoYXJlZCIgPSAneHllcycgJiYKKyAgdGVzdCAieCR4Y19sdF93YW50X2VuYWJsZV9zdGF0aWMiID0gJ3h5ZXMnOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4gQCU6QCAoCisgICAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBvczIqIHwgYWl4KikKKyAgICAgIHhjX2x0X3dhbnRfZW5hYmxlX3N0YXRpYz0nbm8nCisgICAgICA7OworICBlc2FjCitmaQorCisjCisjIE1ha2UgbGlidG9vbCBhd2FyZSBvZiBjdXJyZW50IHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcnkgcHJlZmVyZW5jZXMKKyMgdGFraW5nIGluIGFjY291bnQgdGhhdCwgZGVwZW5kaW5nIG9uIGhvc3QgY2hhcmFjdGVyaXN0aWNzLCBsaWJ0b29sCisjIG1heSBtb2RpZnkgdGhlc2Ugb3B0aW9uIHByZWZlcmVuY2VzIGxhdGVyIGluIHRoaXMgY29uZmlndXJlIHNjcmlwdC4KKyMKKworZW5hYmxlX3NoYXJlZD0keGNfbHRfd2FudF9lbmFibGVfc2hhcmVkCitlbmFibGVfc3RhdGljPSR4Y19sdF93YW50X2VuYWJsZV9zdGF0aWMKKworIworIyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGJ1aWxkIFBJQyBvYmplY3RzIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZAorIyBub24tUElDIG9iamVjdHMgZm9yIHN0YXRpYyBsaWJyYXJpZXMuCisjCisKK3hjX2x0X3dhbnRfd2l0aF9waWM9J2RlZmF1bHQnCisKKyMKKyMgVXNlciBtYXkgaGF2ZSBzcGVjaWZpZWQgUElDIHByZWZlcmVuY2UuCisjCisKK2Nhc2UgIngkd2l0aF9waWMiIGluIEAlOkAgKCgKKyAgeG5vKQorICAgIHhjX2x0X3dhbnRfd2l0aF9waWM9J25vJworICAgIDs7CisgIHh5ZXMpCisgICAgeGNfbHRfd2FudF93aXRoX3BpYz0neWVzJworICAgIDs7Citlc2FjCisKKyMKKyMgRGVmYXVsdCBiZWhhdmlvciBvbiBzb21lIHN5c3RlbXMgd2hlcmUgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBvdXQKKyMgb2Ygbm9uLVBJQyBjb21waWxlZCBvYmplY3RzIHdpbGwgZmFpbCB3aXRoIGZvbGxvd2luZyBsaW5rZXIgZXJyb3IKKyMgInJlbG9jYXRpb24gUl9YODZfNjRfMzIgY2FuIG5vdCBiZSB1c2VkIHdoZW4gbWFraW5nIGEgc2hhcmVkIG9iamVjdCIKKyMgaXMgdG8gYnVpbGQgUElDIG9iamVjdHMgZXZlbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gVGhpcyBiZWhhdmlvciBtYXkKKyMgYmUgb3ZlcnJpZGVuIHVzaW5nICdjb25maWd1cmUgLS1kaXNhYmxlLXNoYXJlZCAtLXdpdGhvdXQtcGljJy4KKyMKKworaWYgdGVzdCAieCR4Y19sdF93YW50X3dpdGhfcGljIiA9ICd4ZGVmYXVsdCc7IHRoZW4KKyAgY2FzZSAkaG9zdF9jcHUgaW4gQCU6QCAoCisgICAgeDg2XzY0IHwgYW1kNjQgfCBpYTY0KQorICAgICAgY2FzZSAkaG9zdF9vcyBpbiBAJTpAICgKKyAgICAgICAgbGludXgqIHwgZnJlZWJzZCopCisgICAgICAgICAgeGNfbHRfd2FudF93aXRoX3BpYz0neWVzJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCitmaQorCisjCisjIE1ha2UgbGlidG9vbCBhd2FyZSBvZiBjdXJyZW50IFBJQyBwcmVmZXJlbmNlIHRha2luZyBpbiBhY2NvdW50IHRoYXQsCisjIGRlcGVuZGluZyBvbiBob3N0IGNoYXJhY3RlcmlzdGljcywgbGlidG9vbCBtYXkgbW9kaWZ5IFBJQyBkZWZhdWx0CisjIGJlaGF2aW9yIHRvIGZpdCBob3N0IHN5c3RlbSBpZGlvc3luY3Jhc2llcyBsYXRlciBpbiB0aGlzIHNjcmlwdC4KKyMKKword2l0aF9waWM9JHhjX2x0X3dhbnRfd2l0aF9waWMKK2RubAorbTRfZGVmaW5lKFskMF0sW10pZG5sCitdKQorCisKK2RubCBfWENfTElCVE9PTF9CT0RZCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBUaGlzIG1hY3JvIHBlcmZvcm1zIGVtYmVkZGluZyBvZiBsaWJ0b29sIGNvZGUgaW50bworZG5sIGNvbmZpZ3VyZSBzY3JpcHQsIHJlZ2FyZGxlc3Mgb2YgbGlidG9vbCB2ZXJzaW9uIGluCitkbmwgdXNlIHdoZW4gZ2VuZXJhdGluZyBjb25maWd1cmUgc2NyaXB0LgorCittNF9kZWZpbmUoW19YQ19MSUJUT09MX0JPRFldLAorW2RubAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjICBTdGFydCBvZiBsaWJ0b29sIGNvZGUgICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworbTRfaWZkZWYoW0xUX0lOSVRdLAorW2RubAorTFRfSU5JVChbd2luMzItZGxsXSkKK10sW2RubAorQUNfTElCVE9PTF9XSU4zMl9ETEwKK0FDX1BST0dfTElCVE9PTAorXSlkbmwKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgIEVuZCBvZiBsaWJ0b29sIGNvZGUgICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK2RubAorbTRfZGVmaW5lKFskMF0sIFtdKVtdZG5sCitdKQorCisKK2RubCBfWENfQ0hFQ0tfTFRfQlVJTERfTElCUkFSSUVTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBDaGVja3Mgd2V0aGVyIGxpYnRvb2wgc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzCitkbmwgYXJlIGZpbmFsbHkgYnVpbHQgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQsIGRlZmF1bHQKK2RubCBiZWhhdmlvciBhbmQga25vd2xlZGdlIHRoYXQgbGlidG9vbCBoYXMgYWJvdXQgaG9zdAorZG5sIGNoYXJhY3RlcmlzdGljcy4KK2RubCBSZXN1bHRzIHN0b3JlZCBpbiBmb2xsb3dpbmcgc2hlbGwgdmFyaWFibGVzOgorZG5sICAgeGNfbHRfYnVpbGRfc2hhcmVkCitkbmwgICB4Y19sdF9idWlsZF9zdGF0aWMKKworbTRfZGVmaW5lKFtfWENfQ0hFQ0tfTFRfQlVJTERfTElCUkFSSUVTXSwKK1tkbmwKKyMKKyMgVmVyaWZ5IGlmIGZpbmFsbHkgbGlidG9vbCBzaGFyZWQgbGlicmFyaWVzIHdpbGwgYmUgYnVpbHQKKyMKKworY2FzZSAieCRlbmFibGVfc2hhcmVkIiBpbiBAJTpAICgoCisgIHh5ZXMgfCB4bm8pCisgICAgeGNfbHRfYnVpbGRfc2hhcmVkPSRlbmFibGVfc2hhcmVkCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfRVJST1IoW3VuZXhwZWN0ZWQgbGlidG9vbCBlbmFibGVfc2hhcmVkIHZhbHVlOiAkZW5hYmxlX3NoYXJlZF0pCisgICAgOzsKK2VzYWMKKworIworIyBWZXJpZnkgaWYgZmluYWxseSBsaWJ0b29sIHN0YXRpYyBsaWJyYXJpZXMgd2lsbCBiZSBidWlsdAorIworCitjYXNlICJ4JGVuYWJsZV9zdGF0aWMiIGluIEAlOkAgKCgKKyAgeHllcyB8IHhubykKKyAgICB4Y19sdF9idWlsZF9zdGF0aWM9JGVuYWJsZV9zdGF0aWMKKyAgICA7OworICAqKQorICAgIEFDX01TR19FUlJPUihbdW5leHBlY3RlZCBsaWJ0b29sIGVuYWJsZV9zdGF0aWMgdmFsdWU6ICRlbmFibGVfc3RhdGljXSkKKyAgICA7OworZXNhYworZG5sCittNF9kZWZpbmUoWyQwXSxbXSlkbmwKK10pCisKKworZG5sIF9YQ19DSEVDS19MVF9TSExJQl9VU0VfVkVSU0lPTl9JTkZPCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBDaGVja3MgaWYgdGhlIC12ZXJzaW9uLWluZm8gbGlua2VyIGZsYWcgbXVzdCBiZQorZG5sIHByb3ZpZGVkIHdoZW4gYnVpbGRpbmcgbGlidG9vbCBzaGFyZWQgbGlicmFyaWVzLgorZG5sIFJlc3VsdCBzdG9yZWQgaW4geGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mby4KKworbTRfZGVmaW5lKFtfWENfQ0hFQ0tfTFRfU0hMSUJfVVNFX1ZFUlNJT05fSU5GT10sCitbZG5sCisjCisjIFZlcmlmeSBpZiBsaWJ0b29sIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIGxpbmtlZCB1c2luZyBmbGFnIC12ZXJzaW9uLWluZm8KKyMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCAtdmVyc2lvbi1pbmZvXSkKK3hjX2x0X3NobGliX3VzZV92ZXJzaW9uX2luZm89J3llcycKK2lmIHRlc3QgIngkdmVyc2lvbl90eXBlIiA9ICd4bm9uZSc7IHRoZW4KKyAgeGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mbz0nbm8nCitmaQorY2FzZSAkaG9zdF9vcyBpbiBAJTpAICgKKyAgYW1pZ2FvcyopCisgICAgeGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mbz0neWVzJworICAgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskeGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mb10pCitkbmwKK200X2RlZmluZShbJDBdLCBbXSlbXWRubAorXSkKKworCitkbmwgX1hDX0NIRUNLX0xUX1NITElCX1VTRV9OT19VTkRFRklORUQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KK2RubAorZG5sIENoZWNrcyBpZiB0aGUgLW5vLXVuZGVmaW5lZCBsaW5rZXIgZmxhZyBtdXN0IGJlCitkbmwgcHJvdmlkZWQgd2hlbiBidWlsZGluZyBsaWJ0b29sIHNoYXJlZCBsaWJyYXJpZXMuCitkbmwgUmVzdWx0IHN0b3JlZCBpbiB4Y19sdF9zaGxpYl91c2Vfbm9fdW5kZWZpbmVkLgorCittNF9kZWZpbmUoW19YQ19DSEVDS19MVF9TSExJQl9VU0VfTk9fVU5ERUZJTkVEXSwKK1tkbmwKKyMKKyMgVmVyaWZ5IGlmIGxpYnRvb2wgc2hhcmVkIGxpYnJhcmllcyBzaG91bGQgYmUgbGlua2VkIHVzaW5nIGZsYWcgLW5vLXVuZGVmaW5lZAorIworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIC1uby11bmRlZmluZWRdKQoreGNfbHRfc2hsaWJfdXNlX25vX3VuZGVmaW5lZD0nbm8nCitpZiB0ZXN0ICJ4JGFsbG93X3VuZGVmaW5lZCIgPSAneG5vJzsgdGhlbgorICB4Y19sdF9zaGxpYl91c2Vfbm9fdW5kZWZpbmVkPSd5ZXMnCitlbGlmIHRlc3QgIngkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gJ3h1bnN1cHBvcnRlZCc7IHRoZW4KKyAgeGNfbHRfc2hsaWJfdXNlX25vX3VuZGVmaW5lZD0neWVzJworZmkKK2Nhc2UgJGhvc3Rfb3MgaW4gQCU6QCAoCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IG9zMiogfCBhaXgqKQorICAgIHhjX2x0X3NobGliX3VzZV9ub191bmRlZmluZWQ9J3llcycKKyAgICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJHhjX2x0X3NobGliX3VzZV9ub191bmRlZmluZWRdKQorZG5sCittNF9kZWZpbmUoWyQwXSwgW10pW11kbmwKK10pCisKKworZG5sIF9YQ19DSEVDS19MVF9TSExJQl9VU0VfTUlNUFVSRV9URVhUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBDaGVja3MgaWYgdGhlIC1taW1wdXJlLXRleHQgbGlua2VyIGZsYWcgbXVzdCBiZQorZG5sIHByb3ZpZGVkIHdoZW4gYnVpbGRpbmcgbGlidG9vbCBzaGFyZWQgbGlicmFyaWVzLgorZG5sIFJlc3VsdCBzdG9yZWQgaW4geGNfbHRfc2hsaWJfdXNlX21pbXB1cmVfdGV4dC4KKworbTRfZGVmaW5lKFtfWENfQ0hFQ0tfTFRfU0hMSUJfVVNFX01JTVBVUkVfVEVYVF0sCitbZG5sCisjCisjIFZlcmlmeSBpZiBsaWJ0b29sIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIGxpbmtlZCB1c2luZyBmbGFnIC1taW1wdXJlLXRleHQKKyMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCAtbWltcHVyZS10ZXh0XSkKK3hjX2x0X3NobGliX3VzZV9taW1wdXJlX3RleHQ9J25vJworY2FzZSAkaG9zdF9vcyBpbiBAJTpAICgKKyAgc29sYXJpczIqKQorICAgIGlmIHRlc3QgIngkR0NDIiA9ICd4eWVzJzsgdGhlbgorICAgICAgeGNfbHRfc2hsaWJfdXNlX21pbXB1cmVfdGV4dD0neWVzJworICAgIGZpCisgICAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyR4Y19sdF9zaGxpYl91c2VfbWltcHVyZV90ZXh0XSkKK2RubAorbTRfZGVmaW5lKFskMF0sIFtdKVtdZG5sCitdKQorCisKK2RubCBfWENfQ0hFQ0tfTFRfQlVJTERfV0lUSF9QSUMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KK2RubAorZG5sIENoZWNrcyB3ZXRoZXIgbGlidG9vbCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMKK2RubCB3b3VsZCBiZSBidWlsdCB3aXRoIFBJQyBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCwKK2RubCBkZWZhdWx0IGJlaGF2aW9yIGFuZCBrbm93bGVkZ2UgdGhhdCBsaWJ0b29sIGhhcworZG5sIGFib3V0IGhvc3QgY2hhcmFjdGVyaXN0aWNzLgorZG5sIFJlc3VsdHMgc3RvcmVkIGluIGZvbGxvd2luZyBzaGVsbCB2YXJpYWJsZXM6CitkbmwgICB4Y19sdF9idWlsZF9zaGFyZWRfd2l0aF9waWMKK2RubCAgIHhjX2x0X2J1aWxkX3N0YXRpY193aXRoX3BpYworCittNF9kZWZpbmUoW19YQ19DSEVDS19MVF9CVUlMRF9XSVRIX1BJQ10sCitbZG5sCisjCisjIEZpbmQgb3V0IHdldGhlciBsaWJ0b29sIGxpYnJhcmllcyB3b3VsZCBiZSBidWlsdCB3aXQgUElDCisjCisKK2Nhc2UgIngkcGljX21vZGUiIGluIEAlOkAgKCgoKAorICB4ZGVmYXVsdCkKKyAgICB4Y19sdF9idWlsZF9zaGFyZWRfd2l0aF9waWM9J3llcycKKyAgICB4Y19sdF9idWlsZF9zdGF0aWNfd2l0aF9waWM9J25vJworICAgIDs7CisgIHh5ZXMpCisgICAgeGNfbHRfYnVpbGRfc2hhcmVkX3dpdGhfcGljPSd5ZXMnCisgICAgeGNfbHRfYnVpbGRfc3RhdGljX3dpdGhfcGljPSd5ZXMnCisgICAgOzsKKyAgeG5vKQorICAgIHhjX2x0X2J1aWxkX3NoYXJlZF93aXRoX3BpYz0nbm8nCisgICAgeGNfbHRfYnVpbGRfc3RhdGljX3dpdGhfcGljPSdubycKKyAgICA7OworICAqKQorICAgIHhjX2x0X2J1aWxkX3NoYXJlZF93aXRoX3BpYz0ndW5rbm93bicKKyAgICB4Y19sdF9idWlsZF9zdGF0aWNfd2l0aF9waWM9J3Vua25vd24nCisgICAgQUNfTVNHX1dBUk4oW3VuZXhwZWN0ZWQgbGlidG9vbCBwaWNfbW9kZSB2YWx1ZTogJHBpY19tb2RlXSkKKyAgICA7OworZXNhYworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCBQSUNdKQorQUNfTVNHX1JFU1VMVChbJHhjX2x0X2J1aWxkX3NoYXJlZF93aXRoX3BpY10pCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyB3aXRoIFBJQ10pCitBQ19NU0dfUkVTVUxUKFskeGNfbHRfYnVpbGRfc3RhdGljX3dpdGhfcGljXSkKK2RubAorbTRfZGVmaW5lKFskMF0sW10pZG5sCitdKQorCisKK2RubCBfWENfQ0hFQ0tfTFRfQlVJTERfU0lOR0xFX1ZFUlNJT04KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KK2RubAorZG5sIENoZWNrcyB3ZXRoZXIgYSBsaWJ0b29sIHNoYXJlZCBvciBzdGF0aWMgbGlicmFyeQorZG5sIGlzIGZpbmFsbHkgYnVpbHQgZXhjbHVzaXZlbHkgd2l0aG91dCB0aGUgb3RoZXIuCitkbmwgUmVzdWx0cyBzdG9yZWQgaW4gZm9sbG93aW5nIHNoZWxsIHZhcmlhYmxlczoKK2RubCAgIHhjX2x0X2J1aWxkX3NoYXJlZF9vbmx5CitkbmwgICB4Y19sdF9idWlsZF9zdGF0aWNfb25seQorCittNF9kZWZpbmUoW19YQ19DSEVDS19MVF9CVUlMRF9TSU5HTEVfVkVSU0lPTl0sCitbZG5sCisjCisjIFZlcmlmeSBpZiBsaWJ0b29sIHNoYXJlZCBsaWJyYXJpZXMgd2lsbCBiZSBidWlsdCB3aGlsZSBzdGF0aWMgbm90IGJ1aWx0CisjCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIG9ubHldKQoraWYgdGVzdCAiJHhjX2x0X2J1aWxkX3NoYXJlZCIgPSAneWVzJyAmJgorICB0ZXN0ICIkeGNfbHRfYnVpbGRfc3RhdGljIiA9ICdubyc7IHRoZW4KKyAgeGNfbHRfYnVpbGRfc2hhcmVkX29ubHk9J3llcycKK2Vsc2UKKyAgeGNfbHRfYnVpbGRfc2hhcmVkX29ubHk9J25vJworZmkKK0FDX01TR19SRVNVTFQoWyR4Y19sdF9idWlsZF9zaGFyZWRfb25seV0pCisKKyMKKyMgVmVyaWZ5IGlmIGxpYnRvb2wgc3RhdGljIGxpYnJhcmllcyB3aWxsIGJlIGJ1aWx0IHdoaWxlIHNoYXJlZCBub3QgYnVpbHQKKyMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgb25seV0pCitpZiB0ZXN0ICIkeGNfbHRfYnVpbGRfc3RhdGljIiA9ICd5ZXMnICYmCisgIHRlc3QgIiR4Y19sdF9idWlsZF9zaGFyZWQiID0gJ25vJzsgdGhlbgorICB4Y19sdF9idWlsZF9zdGF0aWNfb25seT0neWVzJworZWxzZQorICB4Y19sdF9idWlsZF9zdGF0aWNfb25seT0nbm8nCitmaQorQUNfTVNHX1JFU1VMVChbJHhjX2x0X2J1aWxkX3N0YXRpY19vbmx5XSkKK2RubAorbTRfZGVmaW5lKFskMF0sW10pZG5sCitdKQorCisKK2RubCBfWENfTElCVE9PTF9QT1NUTFVERQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorZG5sCitkbmwgUGVyZm9ybXMgc2V2ZXJhbCBjaGVja3MgcmVsYXRlZCB3aXRoIGxpYnRvb2wgdGhhdAorZG5sIGNhbiBub3QgYmUgZG9uZSB1bmxlc3MgbGlidG9vbCBjb2RlIGhhcyBhbHJlYWR5CitkbmwgYmVlbiBleGVjdXRlZC4gU2VlIGluZGl2aWR1YWwgY2hlY2sgZGVzY3JpcHRpb25zCitkbmwgZm9yIGZ1cnRoZXIgaW5mby4KKworbTRfZGVmaW5lKFtfWENfTElCVE9PTF9QT1NUTFVERV0sCitbZG5sCitfWENfQ0hFQ0tfTFRfQlVJTERfTElCUkFSSUVTCitfWENfQ0hFQ0tfTFRfU0hMSUJfVVNFX1ZFUlNJT05fSU5GTworX1hDX0NIRUNLX0xUX1NITElCX1VTRV9OT19VTkRFRklORUQKK19YQ19DSEVDS19MVF9TSExJQl9VU0VfTUlNUFVSRV9URVhUCitfWENfQ0hFQ0tfTFRfQlVJTERfV0lUSF9QSUMKK19YQ19DSEVDS19MVF9CVUlMRF9TSU5HTEVfVkVSU0lPTgorZG5sCittNF9kZWZpbmUoWyQwXSxbXSlkbmwKK10pCisKKworZG5sIFhDX0xJQlRPT0wKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHVibGljIG1hY3JvLgorZG5sCitkbmwgVGhpcyBtYWNybyBlbWJlZHMgbGlidG9vbCBtYWNoaW5lcnkgaW50byBjb25maWd1cmUKK2RubCBzY3JpcHQsIHJlZ2FyZGxlc3Mgb2YgbGlidG9vbCB2ZXJzaW9uLCBhbmQgcGVyZm9ybXMKK2RubCBzZXZlcmFsIGFkZGl0aW9uYWwgY2hlY2tzIHdob3NlIHJlc3VsdHMgY2FuIGJlIHVzZWQKK2RubCBsYXRlciBvbi4KK2RubAorZG5sIFVzYWdlIG9mIHRoaXMgbWFjcm8gZW5zdXJlcyB0aGF0IGdlbmVyYXRlZCBjb25maWd1cmUKK2RubCBzY3JpcHQgdXNlcyBlcXVpdmFsZW50IGxvZ2ljIGlycmVzcGVjdGl2ZSBvZiBhdXRvY29uZgorZG5sIG9yIGxpYnRvb2wgdmVyc2lvbiBiZWluZyB1c2VkIHRvIGdlbmVyYXRlIGNvbmZpZ3VyZQorZG5sIHNjcmlwdC4KK2RubAorZG5sIFJlc3VsdHMgc3RvcmVkIGluIGZvbGxvd2luZyBzaGVsbCB2YXJpYWJsZXM6CitkbmwgICB4Y19sdF9idWlsZF9zaGFyZWQKK2RubCAgIHhjX2x0X2J1aWxkX3N0YXRpYworZG5sICAgeGNfbHRfc2hsaWJfdXNlX3ZlcnNpb25faW5mbworZG5sICAgeGNfbHRfc2hsaWJfdXNlX25vX3VuZGVmaW5lZAorZG5sICAgeGNfbHRfc2hsaWJfdXNlX21pbXB1cmVfdGV4dAorZG5sICAgeGNfbHRfYnVpbGRfc2hhcmVkX3dpdGhfcGljCitkbmwgICB4Y19sdF9idWlsZF9zdGF0aWNfd2l0aF9waWMKK2RubCAgIHhjX2x0X2J1aWxkX3NoYXJlZF9vbmx5CitkbmwgICB4Y19sdF9idWlsZF9zdGF0aWNfb25seQorCitBQ19ERUZVTihbWENfTElCVE9PTF0sCitbZG5sCitBQ19QUkVSRVEoWzIuNTBdKWRubAorZG5sCitBQ19CRUZPUkUoWyQwXSxbTFRfSU5JVF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUFJPR19MSUJUT09MXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1dJTjMyX0RMTF0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW1hDX0NIRUNLX1BBVEhfU0VQQVJBVE9SXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorZG5sCitfWENfTElCVE9PTF9QUkVBTUJMRQorX1hDX0xJQlRPT0xfQk9EWQorX1hDX0xJQlRPT0xfUE9TVExVREUKK2RubAorbTRfaWZkZWYoW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKKyAgW200X3VuZGVmaW5lKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0pXSlkbmwKK200X2lmZGVmKFtBQ19QUk9HX0xJQlRPT0xdLAorICBbbTRfdW5kZWZpbmUoW0FDX1BST0dfTElCVE9PTF0pXSlkbmwKK200X2lmZGVmKFtMVF9JTklUXSwKKyAgW200X3VuZGVmaW5lKFtMVF9JTklUXSldKWRubAorZG5sCittNF9kZWZpbmUoWyQwXSxbXSlkbmwKK10pCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL200L3hjLXRyYW5zbGl0Lm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQveGMtdHJhbnNsaXQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxOGYxNgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L3hjLXRyYW5zbGl0Lm00CkBAIC0wLDAgKzEsMTY0IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHhjLXRyYW5zbGl0Lm00CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBEYW5pZWwgU3RlbmJlcmcgPGRhbmllbEBoYXh4LnNlPgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyMgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorIyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEZpbGUgdmVyc2lvbiBmb3IgJ2FjbG9jYWwnIHVzZS4gS2VlcCBpdCBhIHNpbmdsZSBudW1iZXIuCisjIHNlcmlhbCAyCisKKworZG5sIFhDX1NIX1RSX1NIIChleHByZXNzaW9uKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaGVsbCBleGVjdXRpb24gdGltZSB0cmFuc2xpdGVyYXRpb24gb2YgJ2V4cHJlc3Npb24nCitkbmwgYXJndW1lbnQsIHdoZXJlIGFsbCBub24tYWxmYW51bWVyaWMgY2hhcmFjdGVycyBhcmUKK2RubCBjb252ZXJ0ZWQgdG8gdGhlIHVuZGVyc2NvcmUgJ18nIGNoYXJhY3Rlci4KK2RubCBOb3JtYWwgc2hlbGwgZXhwYW5zaW9uIGFuZCBzdWJzdGl0dXRpb24gdGFrZXMgcGxhY2UKK2RubCBmb3IgZ2l2ZW4gJ2V4cHJlc3Npb24nIGF0IHNoZWxsIGV4ZWN1dGlvbiB0aW1lIGJlZm9yZQorZG5sIHRyYW5zbGl0ZXJhdGlvbiBpcyBhcHBsaWVkIHRvIGl0LgorCitBQ19ERUZVTihbWENfU0hfVFJfU0hdLAorW2BlY2hvICIkMSIgfCBzZWQgJ3MvW1teYS16QS1aMC05X11dL18vZydgXSkKKworCitkbmwgWENfU0hfVFJfU0hfRVggKGV4cHJlc3Npb24sIFtleHRyYV0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIExpa2UgWENfU0hfVFJfU0ggYnV0IHRyYW5zbGl0ZXJhdGluZyBjaGFyYWN0ZXJzCitkbmwgZ2l2ZW4gaW4gJ2V4dHJhJyBhcmd1bWVudCB0byBsb3dlcmNhc2UgJ3AnLiBGb3IKK2RubCBleGFtcGxlIFsqK10sIFsqXSwgYW5kIFsrXSBhcmUgdmFsaWQgJ2V4dHJhJyBhcmdzLgorCitBQ19ERUZVTihbWENfU0hfVFJfU0hfRVhdLAorW2lmZWxzZShbJDJdLCBbXSwKKyAgW1hDX1NIX1RSX1NIKFskMV0pXSwKKyAgW2BlY2hvICIkMSIgfCBzZWQgJ3MvW1skMl1dL3AvZycgfCBzZWQgJ3MvW1teYS16QS1aMC05X11dL18vZydgXSldKQorCisKK2RubCBYQ19NNF9UUl9TSCAoZXhwcmVzc2lvbikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgbTQgZXhlY3V0aW9uIHRpbWUgdHJhbnNsaXRlcmF0aW9uIG9mICdleHByZXNzaW9uJworZG5sIGFyZ3VtZW50LCB3aGVyZSBhbGwgbm9uLWFsZmFudW1lcmljIGNoYXJhY3RlcnMgYXJlCitkbmwgY29udmVydGVkIHRvIHRoZSB1bmRlcnNjb3JlICdfJyBjaGFyYWN0ZXIuCisKK0FDX0RFRlVOKFtYQ19NNF9UUl9TSF0sCitbcGF0c3Vic3QoWENfUVBBVFNVQlNUKFhDX1FVT1RFKCQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgW1teYS16QS1aMC05X11dLCBbX10pLAorICAgICAgICAgIFtcKF9cKC4qXClfXCldLCBbXDJdKV0pCisKKworZG5sIFhDX000X1RSX1NIX0VYIChleHByZXNzaW9uLCBbZXh0cmFdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBMaWtlIFhDX000X1RSX1NIIGJ1dCB0cmFuc2xpdGVyYXRpbmcgY2hhcmFjdGVycworZG5sIGdpdmVuIGluICdleHRyYScgYXJndW1lbnQgdG8gbG93ZXJjYXNlICdwJy4gRm9yCitkbmwgZXhhbXBsZSBbKitdLCBbKl0sIGFuZCBbK10gYXJlIHZhbGlkICdleHRyYScgYXJncy4KKworQUNfREVGVU4oW1hDX000X1RSX1NIX0VYXSwKK1tpZmVsc2UoWyQyXSwgW10sCisgIFtYQ19NNF9UUl9TSChbJDFdKV0sCisgIFtwYXRzdWJzdChYQ19RUEFUU1VCU1QoWENfUVBBVFNVQlNUKFhDX1FVT1RFKCQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1skMl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtbXmEtekEtWjAtOV9dXSwgW19dKSwKKyAgICAgICAgICAgIFtcKF9cKC4qXClfXCldLCBbXDJdKV0pXSkKKworCitkbmwgWENfU0hfVFJfQ1BQIChleHByZXNzaW9uKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaGVsbCBleGVjdXRpb24gdGltZSB0cmFuc2xpdGVyYXRpb24gb2YgJ2V4cHJlc3Npb24nCitkbmwgYXJndW1lbnQsIHdoZXJlIGFsbCBub24tYWxmYW51bWVyaWMgY2hhcmFjdGVycyBhcmUKK2RubCBjb252ZXJ0ZWQgdG8gdGhlIHVuZGVyc2NvcmUgJ18nIGNoYXJhY3RlciBhbmQgYWxudW0KK2RubCBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgorZG5sIE5vcm1hbCBzaGVsbCBleHBhbnNpb24gYW5kIHN1YnN0aXR1dGlvbiB0YWtlcyBwbGFjZQorZG5sIGZvciBnaXZlbiAnZXhwcmVzc2lvbicgYXQgc2hlbGwgZXhlY3V0aW9uIHRpbWUgYmVmb3JlCitkbmwgdHJhbnNsaXRlcmF0aW9uIGlzIGFwcGxpZWQgdG8gaXQuCisKK0FDX0RFRlVOKFtYQ19TSF9UUl9DUFBdLAorW2BlY2hvICIkMSIgfCBkbmwKK3NlZCAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nIHwgZG5sCitzZWQgJ3MvW1teQS1aMC05X11dL18vZydgXSkKKworCitkbmwgWENfU0hfVFJfQ1BQX0VYIChleHByZXNzaW9uLCBbZXh0cmFdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBMaWtlIFhDX1NIX1RSX0NQUCBidXQgdHJhbnNsaXRlcmF0aW5nIGNoYXJhY3RlcnMKK2RubCBnaXZlbiBpbiAnZXh0cmEnIGFyZ3VtZW50IHRvIHVwcGVyY2FzZSAnUCcuIEZvcgorZG5sIGV4YW1wbGUgWyorXSwgWypdLCBhbmQgWytdIGFyZSB2YWxpZCAnZXh0cmEnIGFyZ3MuCisKK0FDX0RFRlVOKFtYQ19TSF9UUl9DUFBfRVhdLAorW2lmZWxzZShbJDJdLCBbXSwKKyAgW1hDX1NIX1RSX0NQUChbJDFdKV0sCisgIFtgZWNobyAiJDEiIHwgZG5sCitzZWQgJ3MvW1skMl1dL1AvZycgfCBkbmwKK3NlZCAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nIHwgZG5sCitzZWQgJ3MvW1teQS1aMC05X11dL18vZydgXSldKQorCisKK2RubCBYQ19NNF9UUl9DUFAgKGV4cHJlc3Npb24pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIG00IGV4ZWN1dGlvbiB0aW1lIHRyYW5zbGl0ZXJhdGlvbiBvZiAnZXhwcmVzc2lvbicKK2RubCBhcmd1bWVudCwgd2hlcmUgYWxsIG5vbi1hbGZhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZQorZG5sIGNvbnZlcnRlZCB0byB0aGUgdW5kZXJzY29yZSAnXycgY2hhcmFjdGVyIGFuZCBhbG51bQorZG5sIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuCisKK0FDX0RFRlVOKFtYQ19NNF9UUl9DUFBdLAorW3BhdHN1YnN0KFhDX1FQQVRTVUJTVChYQ19RVFJBTlNMSVQoWENfUVVPVEUoJDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl0pLAorICAgICAgICAgICAgICAgICAgICAgICBbW15BLVowLTlfXV0sIFtfXSksCisgICAgICAgICAgW1woX1woLipcKV9cKV0sIFtcMl0pXSkKKworCitkbmwgWENfTTRfVFJfQ1BQX0VYIChleHByZXNzaW9uLCBbZXh0cmFdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBMaWtlIFhDX000X1RSX0NQUCBidXQgdHJhbnNsaXRlcmF0aW5nIGNoYXJhY3RlcnMKK2RubCBnaXZlbiBpbiAnZXh0cmEnIGFyZ3VtZW50IHRvIHVwcGVyY2FzZSAnUCcuIEZvcgorZG5sIGV4YW1wbGUgWyorXSwgWypdLCBhbmQgWytdIGFyZSB2YWxpZCAnZXh0cmEnIGFyZ3MuCisKK0FDX0RFRlVOKFtYQ19NNF9UUl9DUFBfRVhdLAorW2lmZWxzZShbJDJdLCBbXSwKKyAgW1hDX000X1RSX0NQUChbJDFdKV0sCisgIFtwYXRzdWJzdChYQ19RUEFUU1VCU1QoWENfUVRSQU5TTElUKFhDX1FQQVRTVUJTVChYQ19RVU9URSgkMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyQyXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW15BLVowLTlfXV0sIFtfXSksCisgICAgICAgICAgICBbXChfXCguKlwpX1wpXSwgW1wyXSldKV0pCisKKworZG5sIFhDX1FVT1RFIChleHByZXNzaW9uKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBFeHBhbmRzIHRvIHF1b3RlZCByZXN1bHQgb2YgJ2V4cHJlc3Npb24nIGV4cGFuc2lvbi4KKworQUNfREVGVU4oW1hDX1FVT1RFXSwKK1tbJEBdXSkKKworCitkbmwgWENfUVBBVFNVQlNUIChzdHJpbmcsIHJlZ2V4cFssIHJlcGxdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBFeHBhbmRzIHRvIHF1b3RlZCByZXN1bHQgb2YgJ3BhdHN1YnN0JyBleHBhbnNpb24uCisKK0FDX0RFRlVOKFtYQ19RUEFUU1VCU1RdLAorW1hDX1FVT1RFKHBhdHN1YnN0KFskMV0sIFskMl0sIFskM10pKV0pCisKKworZG5sIFhDX1FUUkFOU0xJVCAoc3RyaW5nLCBjaGFycywgcmVwbCkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRXhwYW5kcyB0byBxdW90ZWQgcmVzdWx0IG9mICd0cmFuc2xpdCcgZXhwYW5zaW9uLgorCitBQ19ERUZVTihbWENfUVRSQU5TTElUXSwKK1tYQ19RVU9URSh0cmFuc2xpdChbJDFdLCBbJDJdLCBbJDNdKSldKQorCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9tNC94Yy12YWwtZmxncy5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL200L3hjLXZhbC1mbGdzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDFlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC94Yy12YWwtZmxncy5tNApAQCAtMCwwICsxLDI0MyBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyB4Yy12YWwtZmxncy5tNAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisjIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyMgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBzZXJpYWwgMQorCisKK2RubCBfWENfQ0hFQ0tfVkFSX0xJQlMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KKworQUNfREVGVU4oW19YQ19DSEVDS19WQVJfTElCU10sIFsKKyAgeGNfYmFkX3Zhcl9saWJzPW5vCisgIGZvciB4Y193b3JkIGluICRMSUJTOyBkbworICAgIGNhc2UgIiR4Y193b3JkIiBpbgorICAgICAgLWwqIHwgLS1saWJyYXJ5PSopCisgICAgICAgIDoKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHhjX2JhZF92YXJfbGlicz15ZXMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgaWYgdGVzdCAkeGNfYmFkX3Zhcl9saWJzID0geWVzOyB0aGVuCisgICAgQUNfTVNHX05PVElDRShbdXNpbmcgTElCUzogJExJQlNdKQorICAgIEFDX01TR19OT1RJQ0UoW0xJQlMgZXJyb3I6IExJQlMgbWF5IG9ubHkgYmUgdXNlZCB0byBzcGVjaWZ5IGxpYnJhcmllcyAoLWxuYW1lKS5dKQorICBmaQorXSkKKworCitkbmwgX1hDX0NIRUNLX1ZBUl9MREZMQUdTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCisKK0FDX0RFRlVOKFtfWENfQ0hFQ0tfVkFSX0xERkxBR1NdLCBbCisgIHhjX2JhZF92YXJfbGRmbGFncz1ubworICBmb3IgeGNfd29yZCBpbiAkTERGTEFHUzsgZG8KKyAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgIC1EKikKKyAgICAgICAgeGNfYmFkX3Zhcl9sZGZsYWdzPXllcworICAgICAgICA7OworICAgICAgLVUqKQorICAgICAgICB4Y19iYWRfdmFyX2xkZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtSSopCisgICAgICAgIHhjX2JhZF92YXJfbGRmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1sKiB8IC0tbGlicmFyeT0qKQorICAgICAgICB4Y19iYWRfdmFyX2xkZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfbGRmbGFncyA9IHllczsgdGhlbgorICAgIEFDX01TR19OT1RJQ0UoW3VzaW5nIExERkxBR1M6ICRMREZMQUdTXSkKKyAgICB4Y19iYWRfdmFyX21zZz0iTERGTEFHUyBlcnJvcjogTERGTEFHUyBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgbGlua2VyIGZsYWdzLCBub3QiCisgICAgZm9yIHhjX3dvcmQgaW4gJExERkxBR1M7IGRvCisgICAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgICAgLUQqKQorICAgICAgICAgIEFDX01TR19OT1RJQ0UoWyR4Y19iYWRfdmFyX21zZyBtYWNybyBkZWZpbml0aW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmRdKQorICAgICAgICAgIDs7CisgICAgICAgIC1VKikKKyAgICAgICAgICBBQ19NU0dfTk9USUNFKFskeGNfYmFkX3Zhcl9tc2cgbWFjcm8gc3VwcHJlc3Npb25zLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZF0pCisgICAgICAgICAgOzsKKyAgICAgICAgLUkqKQorICAgICAgICAgIEFDX01TR19OT1RJQ0UoWyR4Y19iYWRfdmFyX21zZyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZF0pCisgICAgICAgICAgOzsKKyAgICAgICAgLWwqIHwgLS1saWJyYXJ5PSopCisgICAgICAgICAgQUNfTVNHX05PVElDRShbJHhjX2JhZF92YXJfbXNnIGxpYnJhcmllcy4gVXNlIExJQlMgZm9yOiAkeGNfd29yZF0pCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgIGZpCitdKQorCisKK2RubCBfWENfQ0hFQ0tfVkFSX0NQUEZMQUdTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCisKK0FDX0RFRlVOKFtfWENfQ0hFQ0tfVkFSX0NQUEZMQUdTXSwgWworICB4Y19iYWRfdmFyX2NwcGZsYWdzPW5vCisgIGZvciB4Y193b3JkIGluICRDUFBGTEFHUzsgZG8KKyAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgIC1ycGF0aCopCisgICAgICAgIHhjX2JhZF92YXJfY3BwZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtTCogfCAtLWxpYnJhcnktcGF0aD0qKQorICAgICAgICB4Y19iYWRfdmFyX2NwcGZsYWdzPXllcworICAgICAgICA7OworICAgICAgLWwqIHwgLS1saWJyYXJ5PSopCisgICAgICAgIHhjX2JhZF92YXJfY3BwZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfY3BwZmxhZ3MgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfTk9USUNFKFt1c2luZyBDUFBGTEFHUzogJENQUEZMQUdTXSkKKyAgICB4Y19iYWRfdmFyX21zZz0iQ1BQRkxBR1MgZXJyb3I6IENQUEZMQUdTIG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBDIHByZXByb2Nlc3NvciBmbGFncywgbm90IgorICAgIGZvciB4Y193b3JkIGluICRDUFBGTEFHUzsgZG8KKyAgICAgIGNhc2UgIiR4Y193b3JkIiBpbgorICAgICAgICAtcnBhdGgqKQorICAgICAgICAgIEFDX01TR19OT1RJQ0UoWyR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IHJ1bnRpbWUgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmRdKQorICAgICAgICAgIDs7CisgICAgICAgIC1MKiB8IC0tbGlicmFyeS1wYXRoPSopCisgICAgICAgICAgQUNfTVNHX05PVElDRShbJHhjX2JhZF92YXJfbXNnIGxpYnJhcnkgZGlyZWN0b3JpZXMuIFVzZSBMREZMQUdTIGZvcjogJHhjX3dvcmRdKQorICAgICAgICAgIDs7CisgICAgICAgIC1sKiB8IC0tbGlicmFyeT0qKQorICAgICAgICAgIEFDX01TR19OT1RJQ0UoWyR4Y19iYWRfdmFyX21zZyBsaWJyYXJpZXMuIFVzZSBMSUJTIGZvcjogJHhjX3dvcmRdKQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICBmaQorXSkKKworCitkbmwgX1hDX0NIRUNLX1ZBUl9DRkxBR1MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KKworQUNfREVGVU4oW19YQ19DSEVDS19WQVJfQ0ZMQUdTXSwgWworICB4Y19iYWRfdmFyX2NmbGFncz1ubworICBmb3IgeGNfd29yZCBpbiAkQ0ZMQUdTOyBkbworICAgIGNhc2UgIiR4Y193b3JkIiBpbgorICAgICAgLUQqKQorICAgICAgICB4Y19iYWRfdmFyX2NmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1VKikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtSSopCisgICAgICAgIHhjX2JhZF92YXJfY2ZsYWdzPXllcworICAgICAgICA7OworICAgICAgLXJwYXRoKikKKyAgICAgICAgeGNfYmFkX3Zhcl9jZmxhZ3M9eWVzCisgICAgICAgIDs7CisgICAgICAtTCogfCAtLWxpYnJhcnktcGF0aD0qKQorICAgICAgICB4Y19iYWRfdmFyX2NmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICAgIC1sKiB8IC0tbGlicmFyeT0qKQorICAgICAgICB4Y19iYWRfdmFyX2NmbGFncz15ZXMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgaWYgdGVzdCAkeGNfYmFkX3Zhcl9jZmxhZ3MgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfTk9USUNFKFt1c2luZyBDRkxBR1M6ICRDRkxBR1NdKQorICAgIHhjX2JhZF92YXJfbXNnPSJDRkxBR1MgZXJyb3I6IENGTEFHUyBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgQyBjb21waWxlciBmbGFncywgbm90IgorICAgIGZvciB4Y193b3JkIGluICRDRkxBR1M7IGRvCisgICAgICBjYXNlICIkeGNfd29yZCIgaW4KKyAgICAgICAgLUQqKQorICAgICAgICAgIEFDX01TR19OT1RJQ0UoWyR4Y19iYWRfdmFyX21zZyBtYWNybyBkZWZpbml0aW9ucy4gVXNlIENQUEZMQUdTIGZvcjogJHhjX3dvcmRdKQorICAgICAgICAgIDs7CisgICAgICAgIC1VKikKKyAgICAgICAgICBBQ19NU0dfTk9USUNFKFskeGNfYmFkX3Zhcl9tc2cgbWFjcm8gc3VwcHJlc3Npb25zLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZF0pCisgICAgICAgICAgOzsKKyAgICAgICAgLUkqKQorICAgICAgICAgIEFDX01TR19OT1RJQ0UoWyR4Y19iYWRfdmFyX21zZyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBVc2UgQ1BQRkxBR1MgZm9yOiAkeGNfd29yZF0pCisgICAgICAgICAgOzsKKyAgICAgICAgLXJwYXRoKikKKyAgICAgICAgICBBQ19NU0dfTk9USUNFKFskeGNfYmFkX3Zhcl9tc2cgbGlicmFyeSBydW50aW1lIGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkXSkKKyAgICAgICAgICA7OworICAgICAgICAtTCogfCAtLWxpYnJhcnktcGF0aD0qKQorICAgICAgICAgIEFDX01TR19OT1RJQ0UoWyR4Y19iYWRfdmFyX21zZyBsaWJyYXJ5IGRpcmVjdG9yaWVzLiBVc2UgTERGTEFHUyBmb3I6ICR4Y193b3JkXSkKKyAgICAgICAgICA7OworICAgICAgICAtbCogfCAtLWxpYnJhcnk9KikKKyAgICAgICAgICBBQ19NU0dfTk9USUNFKFskeGNfYmFkX3Zhcl9tc2cgbGlicmFyaWVzLiBVc2UgTElCUyBmb3I6ICR4Y193b3JkXSkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgZmkKK10pCisKKworZG5sIFhDX0NIRUNLX1VTRVJfRkxBR1MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHVibGljIG1hY3JvLgorZG5sCitkbmwgUGVyZm9ybXMgc29tZSBzYW5pdHkgY2hlY2tzIGZvciBMSUJTLCBMREZMQUdTLAorZG5sIENQUEZMQUdTIGFuZCBDRkxBR1MgdmFsdWVzIHRoYXQgdGhlIHVzZXIgbWlnaHQKK2RubCBoYXZlIHNldC4gV2hlbiBjaGVja3MgZmFpbHMsIHVzZXIgaXMgbm90aWNlZAorZG5sIGFib3V0IGVycm9ycyBkZXRlY3RlZCBpbiBhbGwgb2YgdGhlbSBhbmQgc2NyaXB0CitkbmwgZXhlY3V0aW9uIGlzIGhhbHRlZC4KK2RubAorZG5sIEludGVuZGVkIHRvIGJlIHVzZWQgZWFybHkgaW4gY29uZmlndXJlIHNjcmlwdC4KKworQUNfREVGVU4oW1hDX0NIRUNLX1VTRVJfRkxBR1NdLCBbCisgIEFDX1BSRVJFUShbMi41MF0pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtYQ19DSEVDS19QUk9HX0NDXSlkbmwKKyAgZG5sIGNoZWNrIG9yZGVyIGJlbG93IG1hdHRlcnMKKyAgX1hDX0NIRUNLX1ZBUl9MSUJTCisgIF9YQ19DSEVDS19WQVJfTERGTEFHUworICBfWENfQ0hFQ0tfVkFSX0NQUEZMQUdTCisgIF9YQ19DSEVDS19WQVJfQ0ZMQUdTCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfbGlicyA9IHllcyB8fAorICAgICB0ZXN0ICR4Y19iYWRfdmFyX2NmbGFncyA9IHllcyB8fAorICAgICB0ZXN0ICR4Y19iYWRfdmFyX2xkZmxhZ3MgPSB5ZXMgfHwKKyAgICAgdGVzdCAkeGNfYmFkX3Zhcl9jcHBmbGFncyA9IHllczsgdGhlbgorICAgICBBQ19NU0dfRVJST1IoW0NhbiBub3QgY29udGludWUuIEZpeCBlcnJvcnMgbWVudGlvbmVkIGltbWVkaWF0ZWx5IGFib3ZlIHRoaXMgbGluZS5dKQorICBmaQorXSkKKworCitkbmwgWENfQ0hFQ0tfQlVJTERfRkxBR1MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHVibGljIG1hY3JvLgorZG5sCitkbmwgUGVyZm9ybXMgc29tZSBzYW5pdHkgY2hlY2tzIGZvciBMSUJTLCBMREZMQUdTLAorZG5sIENQUEZMQUdTIGFuZCBDRkxBR1MgdmFsdWVzIHRoYXQgdGhlIGNvbmZpZ3VyZQorZG5sIHNjcmlwdCBtaWdodCBoYXZlIHNldC4gV2hlbiBjaGVja3MgZmFpbHMsIHVzZXIKK2RubCBpcyBub3RpY2VkIGFib3V0IGVycm9ycyBkZXRlY3RlZCBpbiBhbGwgb2YgdGhlbQorZG5sIGJ1dCBzY3JpcHQgY29udGludWVzIGV4ZWN1dGlvbi4KK2RubAorZG5sIEludGVuZGVkIHRvIGJlIHVzZWQgdmVyeSBsYXRlIGluIGNvbmZpZ3VyZSBzY3JpcHQuCisKK0FDX0RFRlVOKFtYQ19DSEVDS19CVUlMRF9GTEFHU10sIFsKKyAgQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyAgZG5sIGNoZWNrIG9yZGVyIGJlbG93IG1hdHRlcnMKKyAgX1hDX0NIRUNLX1ZBUl9MSUJTCisgIF9YQ19DSEVDS19WQVJfTERGTEFHUworICBfWENfQ0hFQ0tfVkFSX0NQUEZMQUdTCisgIF9YQ19DSEVDS19WQVJfQ0ZMQUdTCisgIGlmIHRlc3QgJHhjX2JhZF92YXJfbGlicyA9IHllcyB8fAorICAgICB0ZXN0ICR4Y19iYWRfdmFyX2NmbGFncyA9IHllcyB8fAorICAgICB0ZXN0ICR4Y19iYWRfdmFyX2xkZmxhZ3MgPSB5ZXMgfHwKKyAgICAgdGVzdCAkeGNfYmFkX3Zhcl9jcHBmbGFncyA9IHllczsgdGhlbgorICAgICBBQ19NU0dfV0FSTihbQ29udGludWluZyBldmVuIHdpdGggZXJyb3JzIG1lbnRpb25lZCBpbW1lZGlhdGVseSBhYm92ZSB0aGlzIGxpbmUuXSkKKyAgZmkKK10pCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL200L3p6NDAteGMtb3ZyLm00IGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQveno0MC14Yy1vdnIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzYjFjYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL200L3p6NDAteGMtb3ZyLm00CkBAIC0wLDAgKzEsNjY4IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHp6NDAteGMtb3ZyLm00CisjCisjIENvcHlyaWdodCAoYykgMjAxMyBEYW5pZWwgU3RlbmJlcmcgPGRhbmllbEBoYXh4LnNlPgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyMgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorIyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIHNlcmlhbCAxCisKKworZG5sIFRoZSBmdW5ueSBuYW1lIG9mIHRoaXMgZmlsZSBpcyBpbnRlbnRpb25hbCBpbiBvcmRlciB0byBtYWtlIGl0Citkbmwgc29ydCBhbHBoYWJldGljYWxseSBhZnRlciBhbnkgbGlidG9vbCwgYXV0b2NvbmYgb3IgYXV0b21ha2UKK2RubCBwcm92aWRlZCAubTQgbWFjcm8gZmlsZSB0aGF0IG1pZ2h0IGdldCBjb3BpZWQgaW50byB0aGlzIHNhbWUKK2RubCBzdWJkaXJlY3RvcnkuIFRoaXMgYWxsb3dzIHRoYXQgbWFjcm8gKHJlKWRlZmluaXRpb25zIGZyb20gdGhpcworZG5sIGZpbGUgbWF5IG92ZXJyaWRlIHRob3NlIHByb3ZpZGVkIGluIG90aGVyIGZpbGVzLgorCisKK2RubCBWZXJzaW9uIG1hY3JvcworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQdWJsaWMgbWFjcm9zLgorCittNF9kZWZpbmUoW1hDX0NPTkZJR1VSRV9QUkVBTUJMRV9WRVJfTUFKT1JdLFsxXSlkbmwKK200X2RlZmluZShbWENfQ09ORklHVVJFX1BSRUFNQkxFX1ZFUl9NSU5PUl0sWzBdKWRubAorCisKK2RubCBfWENfQ0ZHX1BSRV9QUkVBTUJMRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorCitBQ19ERUZVTihbX1hDX0NGR19QUkVfUFJFQU1CTEVdLAorWworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK0AlOkBAJTpAICBbWENfQ09ORklHVVJFX1BSRUFNQkxFXSB2ZXI6IFtdZG5sCitYQ19DT05GSUdVUkVfUFJFQU1CTEVfVkVSX01BSk9SLltdZG5sCitYQ19DT05GSUdVUkVfUFJFQU1CTEVfVkVSX01JTk9SICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworeGNfY29uZmlndXJlX3ByZWFtYmxlX3Zlcl9tYWpvcj0nWENfQ09ORklHVVJFX1BSRUFNQkxFX1ZFUl9NQUpPUicKK3hjX2NvbmZpZ3VyZV9wcmVhbWJsZV92ZXJfbWlub3I9J1hDX0NPTkZJR1VSRV9QUkVBTUJMRV9WRVJfTUlOT1InCisKKyMKKyMgU2V0IElGUyB0byBzcGFjZSwgdGFiIGFuZCBuZXdsaW5lLgorIworCit4Y19zcGFjZT0nICcKK3hjX3RhYj0nCScKK3hjX25ld2xpbmU9JworJworSUZTPSIkeGNfc3BhY2UkeGNfdGFiJHhjX25ld2xpbmUiCisKKyMKKyMgU2V0IGludGVybmF0aW9uYWxpemF0aW9uIGJlaGF2aW9yIHZhcmlhYmxlcy4KKyMKKworTEFORz0nQycKK0xDX0FMTD0nQycKK0xBTkdVQUdFPSdDJworZXhwb3J0IExBTkcKK2V4cG9ydCBMQ19BTEwKK2V4cG9ydCBMQU5HVUFHRQorCisjCisjIFNvbWUgdXNlZnVsIHZhcmlhYmxlcy4KKyMKKworeGNfbXNnX3dhcm49J2NvbmZpZ3VyZTogV0FSTklORzonCit4Y19tc2dfYWJydD0nQ2FuIG5vdCBjb250aW51ZS4nCit4Y19tc2dfZXJyPSdjb25maWd1cmU6IGVycm9yOicKK10pCisKKworZG5sIF9YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfRUNITworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorZG5sCitkbmwgRW1pdHMgc2hlbGwgY29kZSB0aGF0IHZlcmlmaWVzIHRoYXQgJ2VjaG8nIGNvbW1hbmQKK2RubCBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBhYm9ydHMgZXhlY3V0aW9uLgorCitBQ19ERUZVTihbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX0NNRF9FQ0hPXSwKK1tkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX1BSRUFNQkxFXSlkbmwKKyMKKyMgVmVyaWZ5IHRoYXQgJ2VjaG8nIGNvbW1hbmQgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgYWJvcnQuCisjCisKK3hjX3RzdF9zdHI9J3Vua25vd24nCisoYGVjaG8gIiR4Y190c3Rfc3RyIiA+L2Rldi9udWxsIDI+JjFgKSAmJiB4Y190c3Rfc3RyPSdzdWNjZXNzJworY2FzZSAieCR4Y190c3Rfc3RyIiBpbiBAJTpAICgoCisgIHhzdWNjZXNzKQorICAgIDoKKyAgICA7OworICAqKQorICAgICMgVHJ5IGJ1aWx0LWluIGVjaG8sIGFuZCBmYWlsLgorICAgIGVjaG8gIiR4Y19tc2dfZXJyICdlY2hvJyBjb21tYW5kIG5vdCBmb3VuZC4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworXSkKKworCitkbmwgX1hDX0NGR19QUkVfQkFTSUNfQ0hLX0NNRF9URVNUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBFbWl0cyBzaGVsbCBjb2RlIHRoYXQgdmVyaWZpZXMgdGhhdCAndGVzdCcgY29tbWFuZAorZG5sIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGFib3J0cyBleGVjdXRpb24uCisKK0FDX0RFRlVOKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfQ01EX1RFU1RdLAorW2RubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX0NNRF9FQ0hPXSlkbmwKKyMKKyMgVmVyaWZ5IHRoYXQgJ3Rlc3QnIGNvbW1hbmQgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgYWJvcnQuCisjCisKK3hjX3RzdF9zdHI9J3Vua25vd24nCisoYHRlc3QgLW4gIiR4Y190c3Rfc3RyIiA+L2Rldi9udWxsIDI+JjFgKSAmJiB4Y190c3Rfc3RyPSdzdWNjZXNzJworY2FzZSAieCR4Y190c3Rfc3RyIiBpbiBAJTpAICgoCisgIHhzdWNjZXNzKQorICAgIDoKKyAgICA7OworICAqKQorICAgIGVjaG8gIiR4Y19tc2dfZXJyICd0ZXN0JyBjb21tYW5kIG5vdCBmb3VuZC4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworXSkKKworCitkbmwgX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1ZBUl9QQVRICitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBFbWl0cyBzaGVsbCBjb2RlIHRoYXQgdmVyaWZpZXMgdGhhdCAnUEFUSCcgdmFyaWFibGUKK2RubCBpcyBzZXQsIG90aGVyd2lzZSBhYm9ydHMgZXhlY3V0aW9uLgorCitBQ19ERUZVTihbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1ZBUl9QQVRIXSwKK1tkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfVEVTVF0pZG5sCisjCisjIFZlcmlmeSB0aGF0ICdQQVRIJyB2YXJpYWJsZSBpcyBzZXQsIG90aGVyd2lzZSBhYm9ydC4KKyMKKworeGNfdHN0X3N0cj0ndW5rbm93bicKKyhgdGVzdCAtbiAiJFBBVEgiID4vZGV2L251bGwgMj4mMWApICYmIHhjX3RzdF9zdHI9J3N1Y2Nlc3MnCitjYXNlICJ4JHhjX3RzdF9zdHIiIGluIEAlOkAgKCgKKyAgeHN1Y2Nlc3MpCisgICAgOgorICAgIDs7CisgICopCisgICAgZWNobyAiJHhjX21zZ19lcnIgJ1BBVEgnIHZhcmlhYmxlIG5vdCBzZXQuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKK10pCisKKworZG5sIF9YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfRVhQUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorZG5sCitkbmwgRW1pdHMgc2hlbGwgY29kZSB0aGF0IHZlcmlmaWVzIHRoYXQgJ2V4cHInIGNvbW1hbmQKK2RubCBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBhYm9ydHMgZXhlY3V0aW9uLgorCitBQ19ERUZVTihbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX0NNRF9FWFBSXSwKK1tkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19WQVJfUEFUSF0pZG5sCisjCisjIFZlcmlmeSB0aGF0ICdleHByJyBjb21tYW5kIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGFib3J0LgorIworCit4Y190c3Rfc3RyPSd1bmtub3duJworeGNfdHN0X3N0cj1gZXhwciAiJHhjX3RzdF9zdHIiIDogJy4qJyAyPi9kZXYvbnVsbGAKK2Nhc2UgIngkeGNfdHN0X3N0ciIgaW4gQCU6QCAoKAorICB4NykKKyAgICA6CisgICAgOzsKKyAgKikKKyAgICBlY2hvICIkeGNfbXNnX2VyciAnZXhwcicgY29tbWFuZCBub3QgZm91bmQuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKK10pCisKKworZG5sIF9YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX1NFRAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorZG5sCitkbmwgRW1pdHMgc2hlbGwgY29kZSB0aGF0IHZlcmlmaWVzIHRoYXQgJ3NlZCcgdXRpbGl0eQorZG5sIGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydHMgZXhlY3V0aW9uLgorZG5sCitkbmwgVGhpcyAnc2VkJyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBhbGxvdyBjb25maWd1cmUKK2RubCBzY3JpcHQgYm9vdHN0cmFwcGluZyBpdHNlbGYuIE5vIGZhbmN5IHRlc3RpbmcgZm9yIGEKK2RubCBwcm9wZXIgJ3NlZCcgdGhpcyBlYXJseSwgdGhhdCBzaG91bGQgYmUgZG9uZSBsYXRlci4KKworQUNfREVGVU4oW19YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX1NFRF0sCitbZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVkFSX1BBVEhdKWRubAorIworIyBWZXJpZnkgdGhhdCAnc2VkJyB1dGlsaXR5IGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydC4KKyMKKworeGNfdHN0X3N0cj0ndW5rbm93bicKK3hjX3RzdF9zdHI9YGVjaG8gIiR4Y190c3Rfc3RyIiAyPi9kZXYvbnVsbCBcCisgIHwgc2VkIC1lICdzOnVua25vd246c3VjY2VzczonIDI+L2Rldi9udWxsYAorY2FzZSAieCR4Y190c3Rfc3RyIiBpbiBAJTpAICgoCisgIHhzdWNjZXNzKQorICAgIDoKKyAgICA7OworICAqKQorICAgIGVjaG8gIiR4Y19tc2dfZXJyICdzZWQnIHV0aWxpdHkgbm90IGZvdW5kIGluICdQQVRIJy4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworXSkKKworCitkbmwgX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfR1JFUAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorZG5sCitkbmwgRW1pdHMgc2hlbGwgY29kZSB0aGF0IHZlcmlmaWVzIHRoYXQgJ2dyZXAnIHV0aWxpdHkKK2RubCBpcyBmb3VuZCB3aXRoaW4gJ1BBVEgnLCBvdGhlcndpc2UgYWJvcnRzIGV4ZWN1dGlvbi4KK2RubAorZG5sIFRoaXMgJ2dyZXAnIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGFsbG93IGNvbmZpZ3VyZQorZG5sIHNjcmlwdCBib290c3RyYXBwaW5nIGl0c2VsZi4gTm8gZmFuY3kgdGVzdGluZyBmb3IgYQorZG5sIHByb3BlciAnZ3JlcCcgdGhpcyBlYXJseSwgdGhhdCBzaG91bGQgYmUgZG9uZSBsYXRlci4KKworQUNfREVGVU4oW19YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX0dSRVBdLAorW2RubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1ZBUl9QQVRIXSlkbmwKKyMKKyMgVmVyaWZ5IHRoYXQgJ2dyZXAnIHV0aWxpdHkgaXMgZm91bmQgd2l0aGluICdQQVRIJywgb3RoZXJ3aXNlIGFib3J0LgorIworCit4Y190c3Rfc3RyPSd1bmtub3duJworKGBlY2hvICIkeGNfdHN0X3N0ciIgMj4vZGV2L251bGwgXAorICB8IGdyZXAgJ3Vua25vd24nID4vZGV2L251bGwgMj4mMWApICYmIHhjX3RzdF9zdHI9J3N1Y2Nlc3MnCitjYXNlICJ4JHhjX3RzdF9zdHIiIGluIEAlOkAgKCgKKyAgeHN1Y2Nlc3MpCisgICAgOgorICAgIDs7CisgICopCisgICAgZWNobyAiJHhjX21zZ19lcnIgJ2dyZXAnIHV0aWxpdHkgbm90IGZvdW5kIGluICdQQVRIJy4gJHhjX21zZ19hYnJ0IiA+JjIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworXSkKKworCitkbmwgX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfVFIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KK2RubAorZG5sIEVtaXRzIHNoZWxsIGNvZGUgdGhhdCB2ZXJpZmllcyB0aGF0ICd0cicgdXRpbGl0eQorZG5sIGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydHMgZXhlY3V0aW9uLgorCitBQ19ERUZVTihbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfVFJdLAorW2RubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1ZBUl9QQVRIXSlkbmwKKyMKKyMgVmVyaWZ5IHRoYXQgJ3RyJyB1dGlsaXR5IGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydC4KKyMKKworeGNfdHN0X3N0cj0iJHt4Y190YWJ9OThzN3U2YzVjNGUzczJzMTAiCit4Y190c3Rfc3RyPWBlY2hvICIkeGNfdHN0X3N0ciIgMj4vZGV2L251bGwgXAorICB8IHRyIC1kICIwMTIzNDU2Nzg5JHhjX3RhYiIgMj4vZGV2L251bGxgCitjYXNlICJ4JHhjX3RzdF9zdHIiIGluIEAlOkAgKCgKKyAgeHN1Y2Nlc3MpCisgICAgOgorICAgIDs7CisgICopCisgICAgZWNobyAiJHhjX21zZ19lcnIgJ3RyJyB1dGlsaXR5IG5vdCBmb3VuZCBpbiAnUEFUSCcuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKK10pCisKKworZG5sIF9YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX1dDCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBFbWl0cyBzaGVsbCBjb2RlIHRoYXQgdmVyaWZpZXMgdGhhdCAnd2MnIHV0aWxpdHkKK2RubCBpcyBmb3VuZCB3aXRoaW4gJ1BBVEgnLCBvdGhlcndpc2UgYWJvcnRzIGV4ZWN1dGlvbi4KKworQUNfREVGVU4oW19YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX1dDXSwKK1tkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX1RSXSlkbmwKKyMKKyMgVmVyaWZ5IHRoYXQgJ3djJyB1dGlsaXR5IGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydC4KKyMKKworeGNfdHN0X3N0cj0ndW5rbm93biB1bmtub3duIHVua25vd24gdW5rbm93bicKK3hjX3RzdF9zdHI9YGVjaG8gIiR4Y190c3Rfc3RyIiAyPi9kZXYvbnVsbCBcCisgIHwgd2MgLXcgMj4vZGV2L251bGwgfCB0ciAtZCAiJHhjX3NwYWNlJHhjX3RhYiIgMj4vZGV2L251bGxgCitjYXNlICJ4JHhjX3RzdF9zdHIiIGluIEAlOkAgKCgKKyAgeDQpCisgICAgOgorICAgIDs7CisgICopCisgICAgZWNobyAiJHhjX21zZ19lcnIgJ3djJyB1dGlsaXR5IG5vdCBmb3VuZCBpbiAnUEFUSCcuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKK10pCisKKworZG5sIF9YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX0NBVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcml2YXRlIG1hY3JvLgorZG5sCitkbmwgRW1pdHMgc2hlbGwgY29kZSB0aGF0IHZlcmlmaWVzIHRoYXQgJ2NhdCcgdXRpbGl0eQorZG5sIGlzIGZvdW5kIHdpdGhpbiAnUEFUSCcsIG90aGVyd2lzZSBhYm9ydHMgZXhlY3V0aW9uLgorCitBQ19ERUZVTihbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfQ0FUXSwKK1tkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX1dDXSlkbmwKKyMKKyMgVmVyaWZ5IHRoYXQgJ2NhdCcgdXRpbGl0eSBpcyBmb3VuZCB3aXRoaW4gJ1BBVEgnLCBvdGhlcndpc2UgYWJvcnQuCisjCisKK3hjX3RzdF9zdHI9J3Vua25vd24nCit4Y190c3Rfc3RyPWBjYXQgPDxfRU9UIDI+L2Rldi9udWxsIFwKKyAgfCB3YyAtbCAyPi9kZXYvbnVsbCB8IHRyIC1kICIkeGNfc3BhY2UkeGNfdGFiIiAyPi9kZXYvbnVsbAordW5rbm93bgordW5rbm93bgordW5rbm93bgorX0VPVGAKK2Nhc2UgIngkeGNfdHN0X3N0ciIgaW4gQCU6QCAoKAorICB4MykKKyAgICA6CisgICAgOzsKKyAgKikKKyAgICBlY2hvICIkeGNfbXNnX2VyciAnY2F0JyB1dGlsaXR5IG5vdCBmb3VuZCBpbiAnUEFUSCcuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKK10pCisKKworZG5sIF9YQ19DRkdfUFJFX0NIRUNLX1BBVEhfU0VQQVJBVE9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFByaXZhdGUgbWFjcm8uCitkbmwKK2RubCBFbWl0cyBzaGVsbCBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHBhdGggc2VwYXJhdG9yCitkbmwgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluICdQQVRIX1NFUEFSQVRPUicsIHVubGVzcworZG5sIHRoZSB1c2VyIGhhcyBhbHJlYWR5IHNldCBpdCB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLgorZG5sCitkbmwgVGhpcyBwYXRoIHNlcGFyYXRvciBpcyB0aGUgc3ltYm9sIHVzZWQgdG8gc2VwYXJhdGUKK2RubCBvciBkaWZlcmVudGlhdGUgcGF0aHMgaW5zaWRlIHRoZSAnUEFUSCcgZW52aXJvbm1lbnQKK2RubCB2YXJpYWJsZS4KK2RubAorZG5sIE5vbi1lbXB0eSB1c2VyIHByb3ZpZGVkICdQQVRIX1NFUEFSQVRPUicgYWx3YXlzCitkbmwgb3ZlcnJpZGVzIHRoZSBhdXRvLWRldGVjdGVkIG9uZS4KKworQUNfREVGVU4oW19YQ19DRkdfUFJFX0NIRUNLX1BBVEhfU0VQQVJBVE9SXSwKK1tkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfRVhQUl0pZG5sCisjCisjIEF1dG8tZGV0ZWN0IGFuZCBzZXQgJ1BBVEhfU0VQQVJBVE9SJywgdW5sZXNzIGl0IGlzIGFscmVhZHkgbm9uLWVtcHR5IHNldC4KKyMKKworIyBEaXJlY3RvcnkgY291bnQgaW4gJ1BBVEgnIHdoZW4gdXNpbmcgYSBjb2xvbiBzZXBhcmF0b3IuCit4Y190c3RfZGlyc19jb2w9J3gnCit4Y190c3RfcHJldl9JRlM9JElGUzsgSUZTPSc6JworZm9yIHhjX3RzdF9kaXIgaW4gJFBBVEg7IGRvCisgIElGUz0keGNfdHN0X3ByZXZfSUZTCisgIHhjX3RzdF9kaXJzX2NvbD0ieCR4Y190c3RfZGlyc19jb2wiCitkb25lCitJRlM9JHhjX3RzdF9wcmV2X0lGUworeGNfdHN0X2RpcnNfY29sPWBleHByICIkeGNfdHN0X2RpcnNfY29sIiA6ICcuKidgCisKKyMgRGlyZWN0b3J5IGNvdW50IGluICdQQVRIJyB3aGVuIHVzaW5nIGEgc2VtaWNvbG9uIHNlcGFyYXRvci4KK3hjX3RzdF9kaXJzX3NlbT0neCcKK3hjX3RzdF9wcmV2X0lGUz0kSUZTOyBJRlM9JzsnCitmb3IgeGNfdHN0X2RpciBpbiAkUEFUSDsgZG8KKyAgSUZTPSR4Y190c3RfcHJldl9JRlMKKyAgeGNfdHN0X2RpcnNfc2VtPSJ4JHhjX3RzdF9kaXJzX3NlbSIKK2RvbmUKK0lGUz0keGNfdHN0X3ByZXZfSUZTCit4Y190c3RfZGlyc19zZW09YGV4cHIgIiR4Y190c3RfZGlyc19zZW0iIDogJy4qJ2AKKworaWYgdGVzdCAkeGNfdHN0X2RpcnNfc2VtIC1lcSAkeGNfdHN0X2RpcnNfY29sOyB0aGVuCisgICMgV2hlbiBib3RoIGNvdW50aW5nIG1ldGhvZHMgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgd2UgZG8gbm90IHdhbnQgdG8KKyAgIyBjaG9zZSBvbmUgb3ZlciB0aGUgb3RoZXIsIGFuZCBjb25zaWRlciBhdXRvLWRldGVjdGlvbiBub3QgcG9zc2libGUuCisgIGlmIHRlc3QgLXogIiRQQVRIX1NFUEFSQVRPUiI7IHRoZW4KKyAgICAjIFN0b3AgZGVhZCB1bnRpbCB1c2VyIHByb3ZpZGVzICdQQVRIX1NFUEFSQVRPUicgZGVmaW5pdGlvbi4KKyAgICBlY2hvICIkeGNfbXNnX2VyciAnUEFUSF9TRVBBUkFUT1InIHZhcmlhYmxlIG5vdCBzZXQuICR4Y19tc2dfYWJydCIgPiYyCisgICAgZXhpdCAxCisgIGZpCitlbHNlCisgICMgU2VwYXJhdG9yIHdpdGggdGhlIGdyZWF0ZXIgZGlyZWN0b3J5IGNvdW50IGlzIHRoZSBhdXRvLWRldGVjdGVkIG9uZS4KKyAgaWYgdGVzdCAkeGNfdHN0X2RpcnNfc2VtIC1ndCAkeGNfdHN0X2RpcnNfY29sOyB0aGVuCisgICAgeGNfdHN0X2F1dG9fc2VwYXJhdG9yPSc7JworICBlbHNlCisgICAgeGNfdHN0X2F1dG9fc2VwYXJhdG9yPSc6JworICBmaQorICBpZiB0ZXN0IC16ICIkUEFUSF9TRVBBUkFUT1IiOyB0aGVuCisgICAgIyBTaW1wbHkgdXNlIHRoZSBhdXRvLWRldGVjdGVkIG9uZSB3aGVuIG5vdCBhbHJlYWR5IHNldC4KKyAgICBQQVRIX1NFUEFSQVRPUj0keGNfdHN0X2F1dG9fc2VwYXJhdG9yCisgIGVsaWYgdGVzdCAieCRQQVRIX1NFUEFSQVRPUiIgIT0gIngkeGNfdHN0X2F1dG9fc2VwYXJhdG9yIjsgdGhlbgorICAgIGVjaG8gIiR4Y19tc2dfd2FybiAnUEFUSF9TRVBBUkFUT1InIGRvZXMgbm90IG1hdGNoIGF1dG8tZGV0ZWN0ZWQgb25lLiIgPiYyCisgIGZpCitmaQoreGNfUEFUSF9TRVBBUkFUT1I9JFBBVEhfU0VQQVJBVE9SCitBQ19TVUJTVChbUEFUSF9TRVBBUkFUT1JdKWRubAorXSkKKworCitkbmwgX1hDX0NGR19QUkVfUE9TVExVREUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJpdmF0ZSBtYWNyby4KKworQUNfREVGVU4oW19YQ19DRkdfUFJFX1BPU1RMVURFXSwKK1tkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX1BSRUFNQkxFXSlkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfRUNIT10pZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfQ01EX1RFU1RdKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1ZBUl9QQVRIXSlkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfRVhQUl0pZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVVRJTF9TRURdKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVVRJTF9UUl0pZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVVRJTF9XQ10pZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVVRJTF9DQVRdKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQ0hFQ0tfUEFUSF9TRVBBUkFUT1JdKWRubAorZG5sCit4Y19jb25maWd1cmVfcHJlYW1ibGVfcmVzdWx0PSd5ZXMnCitdKQorCisKK2RubCBYQ19DT05GSUdVUkVfUFJFQU1CTEUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUHVibGljIG1hY3JvLgorZG5sCitkbmwgVGhpcyBtYWNybyBlbWl0cyBzaGVsbCBjb2RlIHdoaWNoIGRvZXMgc29tZQorZG5sIHZlcnkgYmFzaWMgY2hlY2tzIHJlbGF0ZWQgd2l0aCB0aGUgYXZhaWxhYmlsaXR5Citkbmwgb2Ygc29tZSBjb21tYW5kcyBhbmQgdXRpbGl0aWVzIG5lZWRlZCB0byBhbGxvdworZG5sIGNvbmZpZ3VyZSBzY3JpcHQgYm9vdHN0cmFwcGluZyBpdHNlbGYgd2hlbiB1c2luZworZG5sIHRoZXNlIHRvIGZpZ3VyZSBvdXQgb3RoZXIgc2V0dGluZ3MuIEFsc28gZW1pdHMKK2RubCBjb2RlIHRoYXQgcGVyZm9ybXMgUEFUSF9TRVBBUkFUT1IgYXV0by1kZXRlY3Rpb24KK2RubCBhbmQgc2V0cyBpdHMgdmFsdWUgdW5sZXNzIGl0IGlzIGFscmVhZHkgc2V0IHdpdGgKK2RubCBhIG5vbi1lbXB0eSB2YWx1ZS4KK2RubAorZG5sIFRoZXNlIGJhc2ljIGNoZWNrcyBhcmUgaW50ZW5kZWQgdG8gYmUgcGxhY2VkIGFuZAorZG5sIGV4ZWN1dGVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGluIHRoZSByZXN1bHRpbmcKK2RubCBjb25maWd1cmUgc2NyaXB0LCBhbmQgYXMgc3VjaCB0aGVzZSBtdXN0IGJlIHB1cmUKK2RubCBhbmQgcG9ydGFibGUgc2hlbGwgY29kZS4KK2RubAorZG5sIFRoaXMgbWFjcm8gbWF5IGJlIHVzZWQgZGlyZWN0bHksIG9yIGluZGlyZWN0bHkKK2RubCB3aGVuIHVzaW5nIG90aGVyIG1hY3JvcyB0aGF0IEFDX1JFUVVJUkUgaXQgc3VjaAorZG5sIGFzIFhDX0NIRUNLX1BBVEhfU0VQQVJBVE9SLgorZG5sCitkbmwgQ3VycmVudGx5IHRoZSBtZWNoYW5pc20gdXNlZCB0byBlbnN1cmUgdGhhdCB0aGlzCitkbmwgbWFjcm8gZXhwYW5kcyBlYXJseSBlbm91Z2ggaW4gZ2VuZXJhdGVkIGNvbmZpZ3VyZQorZG5sIHNjcmlwdCBpcyBtYWtpbmcgaXQgb3ZlcnJpZGUgYXV0b2NvbmYgYW5kIGxpYnRvb2wKK2RubCBQQVRIX1NFUEFSQVRPUiBjaGVjay4KKworQUNfREVGVU4oW1hDX0NPTkZJR1VSRV9QUkVBTUJMRV0sCitbZG5sCitBQ19QUkVSRVEoWzIuNTBdKWRubAorZG5sCitBQ19CRUZPUkUoWyQwXSxbX1hDX0NGR19QUkVfUFJFQU1CTEVdKWRubAorQUNfQkVGT1JFKFskMF0sW19YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfRUNIT10pZG5sCitBQ19CRUZPUkUoWyQwXSxbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX0NNRF9URVNUXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVkFSX1BBVEhdKWRubAorQUNfQkVGT1JFKFskMF0sW19YQ19DRkdfUFJFX0JBU0lDX0NIS19DTURfRVhQUl0pZG5sCitBQ19CRUZPUkUoWyQwXSxbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfU0VEXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVVRJTF9HUkVQXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfVVRJTF9UUl0pZG5sCitBQ19CRUZPUkUoWyQwXSxbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfV0NdKWRubAorQUNfQkVGT1JFKFskMF0sW19YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX0NBVF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbX1hDX0NGR19QUkVfQ0hFQ0tfUEFUSF9TRVBBUkFUT1JdKWRubAorQUNfQkVGT1JFKFskMF0sW19YQ19DRkdfUFJFX1BPU1RMVURFXSlkbmwKK2RubAorQUNfQkVGT1JFKFskMF0sW0FDX0NIRUNLX1RPT0xdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX0NIRUNLX1BST0ddKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX0NIRUNLX1RPT0xTXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19DSEVDS19QUk9HU10pZG5sCitkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QQVRIX1RPT0xdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX1BBVEhfUFJPR10pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUEFUSF9QUk9HU10pZG5sCitkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX1NFRF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUFJPR19HUkVQXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX0xOX1NdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfTUtESVJfUF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUFJPR19JTlNUQUxMXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX0xJQlRPT0xdKWRubAorZG5sCitBQ19CRUZPUkUoWyQwXSxbTFRfSU5JVF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQU1fSU5JVF9BVVRPTUFLRV0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9XSU4zMl9ETExdKWRubAorZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9QUkVBTUJMRV0pZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfQ01EX0VDSE9dKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX0NNRF9URVNUXSlkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19WQVJfUEFUSF0pZG5sCitBQ19SRVFVSVJFKFtfWENfQ0ZHX1BSRV9CQVNJQ19DSEtfQ01EX0VYUFJdKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfU0VEXSlkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0JBU0lDX0NIS19VVElMX0dSRVBdKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfVFJdKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfV0NdKWRubAorQUNfUkVRVUlSRShbX1hDX0NGR19QUkVfQkFTSUNfQ0hLX1VUSUxfQ0FUXSlkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX0NIRUNLX1BBVEhfU0VQQVJBVE9SXSlkbmwKK0FDX1JFUVVJUkUoW19YQ19DRkdfUFJFX1BPU1RMVURFXSlkbmwKK2RubAorbTRfcGF0dGVybl9mb3JiaWQoW15fKlhDXSlkbmwKK200X2RlZmluZShbJDBdLFtdKWRubAorXSkKKworCitkbmwgT3ZlcnJpZGUgYXV0b2NvbmYgYW5kIGxpYnRvb2wgUEFUSF9TRVBBUkFUT1IgY2hlY2sKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTWFjcm9zIG92ZXJyaWRpbmcuCitkbmwKK2RubCBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdGhlIHNhbWUgY2hlY2sgaXMKK2RubCB1c2VkIGFjcm9zcyBkaWZmZXJlbnQgYXV0b2NvbmYgdmVyc2lvbnMgYW5kIHRvCitkbmwgYWxsb3cgZXhwYW5zaW9uIG9mIFhDX0NPTkZJR1VSRV9QUkVBTUJMRSBtYWNybworZG5sIGVhcmx5IGVub3VnaCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQuCisKK2RubAorZG5sIE92ZXJyaWRlIHdoZW4gdXNpbmcgYXV0b2NvbmYgMi41MyBhbmQgbmV3ZXIuCitkbmwKKworbTRfaWZkZWYoW19BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFXSwKK1tkbmwKK200X3VuZGVmaW5lKFtfQVNfUEFUSF9TRVBBUkFUT1JfUFJFUEFSRV0pZG5sCittNF9kZWZ1bihbX0FTX1BBVEhfU0VQQVJBVE9SX1BSRVBBUkVdLAorW2RubAorQUNfUkVRVUlSRShbWENfQ09ORklHVVJFX1BSRUFNQkxFXSlkbmwKK200X2RlZmluZShbJDBdLFtdKWRubAorXSlkbmwKK10pCisKK2RubAorZG5sIE92ZXJyaWRlIHdoZW4gdXNpbmcgYXV0b2NvbmYgMi41MCB0byAyLjUyCitkbmwKKworbTRfaWZkZWYoW19BQ19JTklUX1BSRVBBUkVfRlNfU0VQQVJBVE9SU10sCitbZG5sCittNF91bmRlZmluZShbX0FDX0lOSVRfUFJFUEFSRV9GU19TRVBBUkFUT1JTXSlkbmwKK200X2RlZnVuKFtfQUNfSU5JVF9QUkVQQVJFX0ZTX1NFUEFSQVRPUlNdLAorW2RubAorQUNfUkVRVUlSRShbWENfQ09ORklHVVJFX1BSRUFNQkxFXSlkbmwKK2FjX3BhdGhfc2VwYXJhdG9yPSRQQVRIX1NFUEFSQVRPUgorbTRfZGVmaW5lKFskMF0sW10pZG5sCitdKWRubAorXSkKKworZG5sCitkbmwgT3ZlcnJpZGUgd2hlbiB1c2luZyBsaWJ0b29sIDEuNC4yCitkbmwKKworbTRfaWZkZWYoW19MVF9BQ19MSUJUT09MX1NZU19QQVRIX1NFUEFSQVRPUl0sCitbZG5sCittNF91bmRlZmluZShbX0xUX0FDX0xJQlRPT0xfU1lTX1BBVEhfU0VQQVJBVE9SXSlkbmwKK200X2RlZnVuKFtfTFRfQUNfTElCVE9PTF9TWVNfUEFUSF9TRVBBUkFUT1JdLAorW2RubAorQUNfUkVRVUlSRShbWENfQ09ORklHVVJFX1BSRUFNQkxFXSlkbmwKK2x0X2N2X3N5c19wYXRoX3NlcGFyYXRvcj0kUEFUSF9TRVBBUkFUT1IKK200X2RlZmluZShbJDBdLFtdKWRubAorXSlkbmwKK10pCisKKworZG5sIFhDX0NIRUNLX1BBVEhfU0VQQVJBVE9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFB1YmxpYyBtYWNyby4KK2RubAorZG5sIFVzYWdlIG9mIHRoaXMgbWFjcm8gZW5zdXJlcyB0aGF0IGdlbmVyYXRlZCBjb25maWd1cmUKK2RubCBzY3JpcHQgdXNlcyB0aGUgc2FtZSBQQVRIX1NFUEFSQVRPUiBjaGVjayBpcnJlc3BlY3RpdmUKK2RubCBvZiBhdXRvY29uZiBvciBsaWJ0b29sIHZlcnNpb24gYmVpbmcgdXNlZCB0byBnZW5lcmF0ZQorZG5sIGNvbmZpZ3VyZSBzY3JpcHQuCitkbmwKK2RubCBFbWl0cyBzaGVsbCBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHBhdGggc2VwYXJhdG9yCitkbmwgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluICdQQVRIX1NFUEFSQVRPUicsIHVubGVzcworZG5sIHRoZSB1c2VyIGhhcyBhbHJlYWR5IHNldCBpdCB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLgorZG5sCitkbmwgVGhpcyBwYXRoIHNlcGFyYXRvciBpcyB0aGUgc3ltYm9sIHVzZWQgdG8gc2VwYXJhdGUKK2RubCBvciBkaWZlcmVudGlhdGUgcGF0aHMgaW5zaWRlIHRoZSAnUEFUSCcgZW52aXJvbm1lbnQKK2RubCB2YXJpYWJsZS4KK2RubAorZG5sIE5vbi1lbXB0eSB1c2VyIHByb3ZpZGVkICdQQVRIX1NFUEFSQVRPUicgYWx3YXlzCitkbmwgb3ZlcnJpZGVzIHRoZSBhdXRvLWRldGVjdGVkIG9uZS4KK2RubAorZG5sIFN0cmljdGx5IHNwZWFraW5nIHRoZSBjaGVjayBpcyBkb25lIGluIHR3byBzdGVwcy4gVGhlCitkbmwgZmlyc3QsIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCBjaGVjaywgdGFrZXMgcGxhY2UgaW4KK2RubCBYQ19DT05GSUdVUkVfUFJFQU1CTEUgbWFjcm8gYW5kIGhhcHBlbnMgdmVyeSBlYXJseSBpbgorZG5sIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0LiBUaGUgc2Vjb25kIG9uZSBzaG93cyBhbmQKK2RubCBsb2dzIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrIGludG8gY29uZmlnLmxvZyBhdCBhIGxhdGVyCitkbmwgY29uZmlndXJlIHN0YWdlLiBQbGFjZW1lbnQgb2YgdGhpcyBzZWNvbmQgc3RhZ2UgaW4KK2RubCBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aWxsIGJlIGRvbmUgd2hlcmUgZmlyc3QKK2RubCBkaXJlY3Qgb3IgaW5kaXJlY3QgdXNhZ2Ugb2YgdGhpcyBtYWNybyBoYXBwZW5zLgorCitBQ19ERUZVTihbWENfQ0hFQ0tfUEFUSF9TRVBBUkFUT1JdLAorW2RubAorQUNfUFJFUkVRKFsyLjUwXSlkbmwKK2RubAorQUNfQkVGT1JFKFskMF0sW0FDX0NIRUNLX1RPT0xdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX0NIRUNLX1BST0ddKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX0NIRUNLX1RPT0xTXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19DSEVDS19QUk9HU10pZG5sCitkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QQVRIX1RPT0xdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX1BBVEhfUFJPR10pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUEFUSF9QUk9HU10pZG5sCitkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX1NFRF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUFJPR19HUkVQXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX0xOX1NdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfTUtESVJfUF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUFJPR19JTlNUQUxMXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19QUk9HX0xJQlRPT0xdKWRubAorZG5sCitBQ19CRUZPUkUoWyQwXSxbTFRfSU5JVF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQU1fSU5JVF9BVVRPTUFLRV0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9XSU4zMl9ETExdKWRubAorZG5sCitBQ19SRVFVSVJFKFtYQ19DT05GSUdVUkVfUFJFQU1CTEVdKWRubAorZG5sCisjCisjIENoZWNrIHRoYXQgJ1hDX0NPTkZJR1VSRV9QUkVBTUJMRScgaGFzIGFscmVhZHkgcnVuLgorIworCitpZiB0ZXN0IC16ICIkeGNfY29uZmlndXJlX3ByZWFtYmxlX3Jlc3VsdCI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFt4Y19jb25maWd1cmVfcHJlYW1ibGVfcmVzdWx0IG5vdCBzZXQgKGludGVybmFsIHByb2JsZW0pXSkKK2ZpCisKKyMKKyMgQ2hlY2sgdGhhdCAnUEFUSF9TRVBBUkFUT1InIGhhcyBhbHJlYWR5IGJlZW4gc2V0LgorIworCitpZiB0ZXN0IC16ICIkeGNfUEFUSF9TRVBBUkFUT1IiOyB0aGVuCisgIEFDX01TR19FUlJPUihbeGNfUEFUSF9TRVBBUkFUT1Igbm90IHNldCAoaW50ZXJuYWwgcHJvYmxlbSldKQorZmkKK2lmIHRlc3QgLXogIiRQQVRIX1NFUEFSQVRPUiI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtQQVRIX1NFUEFSQVRPUiBub3Qgc2V0IChpbnRlcm5hbCBvciBjb25maWcuc2l0ZSBwcm9ibGVtKV0pCitmaQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgcGF0aCBzZXBhcmF0b3JdKQorQUNfTVNHX1JFU1VMVChbJFBBVEhfU0VQQVJBVE9SXSkKK2lmIHRlc3QgIngkUEFUSF9TRVBBUkFUT1IiICE9ICJ4JHhjX1BBVEhfU0VQQVJBVE9SIjsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpbml0aWFsIHBhdGggc2VwYXJhdG9yXSkKKyAgQUNfTVNHX1JFU1VMVChbJHhjX1BBVEhfU0VQQVJBVE9SXSkKKyAgQUNfTVNHX0VSUk9SKFtwYXRoIHNlcGFyYXRvciBtaXNtYXRjaCAoaW50ZXJuYWwgb3IgY29uZmlnLnNpdGUgcHJvYmxlbSldKQorZmkKK2RubAorbTRfcGF0dGVybl9mb3JiaWQoW15fKlhDXSlkbmwKK200X2RlZmluZShbJDBdLFtdKWRubAorXSkKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQveno1MC14Yy1vdnIubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC96ejUwLXhjLW92ci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTlhZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQveno1MC14Yy1vdnIubTQKQEAgLTAsMCArMSw2MCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyB6ejUwLXhjLW92ci5tNAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisjIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyMgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBzZXJpYWwgMQorCisKK2RubCBUaGUgZnVubnkgbmFtZSBvZiB0aGlzIGZpbGUgaXMgaW50ZW50aW9uYWwgaW4gb3JkZXIgdG8gbWFrZSBpdAorZG5sIHNvcnQgYWxwaGFiZXRpY2FsbHkgYWZ0ZXIgYW55IGxpYnRvb2wsIGF1dG9jb25mIG9yIGF1dG9tYWtlCitkbmwgcHJvdmlkZWQgLm00IG1hY3JvIGZpbGUgdGhhdCBtaWdodCBnZXQgY29waWVkIGludG8gdGhpcyBzYW1lCitkbmwgc3ViZGlyZWN0b3J5LiBUaGlzIGFsbG93cyB0aGF0IG1hY3JvIChyZSlkZWZpbml0aW9ucyBmcm9tIHRoaXMKK2RubCBmaWxlIG1heSBvdmVycmlkZSB0aG9zZSBwcm92aWRlZCBpbiBvdGhlciBmaWxlcy4KKworCitkbmwgT3ZlcnJpZGUgc29tZSBsYW5ndWFnZSByZWxhdGVkIG1hY3JvcworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBMaWJ0b29sIDEuNS5YIGZyb20gZG9pbmcKK2RubCB1bm5lY2VzYXJ5IEMrKywgRm9ydHJhbiBhbmQgSmF2YSB0ZXN0cyB3aGVuIG9ubHkKK2RubCB1c2luZyBDIGxhbmd1YWdlIGFuZCByZWR1Y2UgcmVzdWx0aW5nIGNvbmZpZ3VyZQorZG5sIHNjcmlwdCBieSBuZWFybHkgMzAwIEtiLgorCittNF9pZmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAorICBbbTRfdW5kZWZpbmUoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfZGVmaW5lKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sWzpdKQorCittNF9pZmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAorICBbbTRfdW5kZWZpbmUoW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfZGVmaW5lKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sWzpdKQorCittNF9pZmRlZihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLAorICBbbTRfdW5kZWZpbmUoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfZGVmaW5lKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sWzpdKQorCisKK2RubCBYQ19PVlJfWlo1MAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQbGFjaW5nIGEgY2FsbCB0byB0aGlzIG1hY3JvIGluIGNvbmZpZ3VyZS5hYyB3aWxsCitkbmwgbWFrZSBtYWNyb3MgaW4gdGhpcyBmaWxlIHZpc2libGUgdG8gb3RoZXIgbWFjcm9zCitkbmwgdXNlZCBmb3Igc2FtZSBjb25maWd1cmUgc2NyaXB0LCBvdmVycmlkaW5nIHRob3NlCitkbmwgcHJvdmlkZWQgZWxzZXdoZXJlLgorCitBQ19ERUZVTihbWENfT1ZSX1paNTBdLAorICBbQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfTElCVE9PTF0pXSkKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbTQveno2MC14Yy1vdnIubTQgYi9hcC9hcHAvYy1hcmVzL3NyYy9tNC96ejYwLXhjLW92ci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTlmMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvbTQveno2MC14Yy1vdnIubTQKQEAgLTAsMCArMSw2NCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyB6ejYwLXhjLW92ci5tNAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisjIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyMgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBzZXJpYWwgMQorCisKK2RubCBUaGUgZnVubnkgbmFtZSBvZiB0aGlzIGZpbGUgaXMgaW50ZW50aW9uYWwgaW4gb3JkZXIgdG8gbWFrZSBpdAorZG5sIHNvcnQgYWxwaGFiZXRpY2FsbHkgYWZ0ZXIgYW55IGxpYnRvb2wsIGF1dG9jb25mIG9yIGF1dG9tYWtlCitkbmwgcHJvdmlkZWQgLm00IG1hY3JvIGZpbGUgdGhhdCBtaWdodCBnZXQgY29waWVkIGludG8gdGhpcyBzYW1lCitkbmwgc3ViZGlyZWN0b3J5LiBUaGlzIGFsbG93cyB0aGF0IG1hY3JvIChyZSlkZWZpbml0aW9ucyBmcm9tIHRoaXMKK2RubCBmaWxlIG1heSBvdmVycmlkZSB0aG9zZSBwcm92aWRlZCBpbiBvdGhlciBmaWxlcy4KKworCitkbmwgT3ZlcnJpZGUgYW4gYXV0b2NvbmYgcHJvdmlkZWQgbWFjcm8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBtYWNybyBvdmVycmlkZXMgdGhlIG9uZSBwcm92aWRlZCBieSBhdXRvY29uZgorZG5sIDIuNTggb3IgbmV3ZXIsIGFuZCBwcm92aWRlcyBtYWNybyBkZWZpbml0aW9uIGZvcgorZG5sIGF1dG9jb25mIDIuNTcgb3Igb2xkZXIgd2hpY2ggbGFjayBpdC4gVGhpcyBhbGxvd3MKK2RubCB1c2luZyBsaWJ0b29sIDIuMiBvciBuZXdlciwgd2hpY2ggcmVxdWlyZXMgdGhhdAorZG5sIHRoaXMgbWFjcm8gaXMgdXNlZCBpbiBjb25maWd1cmUuYWMsIHdpdGggYXV0b2NvbmYKK2RubCAyLjU3IG9yIG9sZGVyLgorCittNF9pZmRlZihbQUNfQ09ORklHX01BQ1JPX0RJUl0sCitbZG5sCittNF91bmRlZmluZShbQUNfQ09ORklHX01BQ1JPX0RJUl0pZG5sCitdKQorbTRfZGVmaW5lKFtBQ19DT05GSUdfTUFDUk9fRElSXSxbXSkKKworCitkbmwgWENfT1ZSX1paNjAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgUGxhY2luZyBhIGNhbGwgdG8gdGhpcyBtYWNybyBpbiBjb25maWd1cmUuYWMgd2lsbAorZG5sIG1ha2UgbWFjcm9zIGluIHRoaXMgZmlsZSB2aXNpYmxlIHRvIG90aGVyIG1hY3JvcworZG5sIHVzZWQgZm9yIHNhbWUgY29uZmlndXJlIHNjcmlwdCwgb3ZlcnJpZGluZyB0aG9zZQorZG5sIHByb3ZpZGVkIGVsc2V3aGVyZS4KKworQUNfREVGVU4oW1hDX09WUl9aWjYwXSwKK1tkbmwKK0FDX0JFRk9SRShbJDBdLFtMVF9JTklUXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBTV9JTklUX0FVVE9NQUtFXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1dJTjMyX0RMTF0pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfUFJPR19MSUJUT09MXSlkbmwKK2RubAorQUNfQkVGT1JFKFskMF0sW0FDX0NPTkZJR19NQUNST19ESVJdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX0NPTkZJR19NQUNST19ESVJTXSlkbmwKK10pCisKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL21ha2V0Z3ogYi9hcC9hcHAvYy1hcmVzL3NyYy9tYWtldGd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYmI3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9tYWtldGd6CkBAIC0wLDAgKzEsNzcgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworJHZlcnNpb24gPSAkQVJHVlswXTsKKworaWYoJHZlcnNpb24gZXEgIiIpIHsKKyAgICBwcmludCAiRW50ZXIgdmVyc2lvbiBudW1iZXIhXG4iOworICAgIGV4aXQ7Cit9CisKK2lmKCEtZiAiYXJlcy5oIikgeworICAgIHByaW50ICJydW4gdGhpcyBzY3JpcHQgaW4gdGhlIGFyZXMgc291cmNlIHJvb3QgZGlyXG4iOworICAgIGV4aXQ7Cit9CisKK215ICgkbWFqb3IsICRtaW5vciwgJHBhdGNoKT1zcGxpdCgvXC4vLCAkdmVyc2lvbik7CisKKyRtYWpvciArPSAwOworJG1pbm9yICs9IDA7CiskcGF0Y2ggKz0gMDsKKworb3BlbihWRVIsICI8YXJlc192ZXJzaW9uLmgiKSB8fAorICAgIGRpZSAiY2FuJ3Qgb3BlbiBhcmVzX3ZlcnNpb24uaCI7CitvcGVuKE5FV1YsICI+YXJlc192ZXJzaW9uLmguZGlzdCIpOword2hpbGUoPFZFUj4pIHsKKyAgICAkXyA9fiBzL15cI2RlZmluZSBBUkVTX1ZFUlNJT05fTUFKT1IgLiovXCNkZWZpbmUgQVJFU19WRVJTSU9OX01BSk9SICRtYWpvci87CisgICAgJF8gPX4gcy9eXCNkZWZpbmUgQVJFU19WRVJTSU9OX01JTk9SIC4qL1wjZGVmaW5lIEFSRVNfVkVSU0lPTl9NSU5PUiAkbWlub3IvOworICAgICRfID1+IHMvXlwjZGVmaW5lIEFSRVNfVkVSU0lPTl9QQVRDSCAuKi9cI2RlZmluZSBBUkVTX1ZFUlNJT05fUEFUQ0ggJHBhdGNoLzsKKyAgICAkXyA9fiBzL15cI2RlZmluZSBBUkVTX1ZFUlNJT05fU1RSIC4qL1wjZGVmaW5lIEFSRVNfVkVSU0lPTl9TVFIgXCIkdmVyc2lvblwiLzsKKworICAgIHByaW50IE5FV1YgJF87Cit9CitjbG9zZShWRVIpOworY2xvc2UoTkVXVik7CitwcmludCAiYXJlc192ZXJzaW9uLmguZGlzdCBjcmVhdGVkXG4iOworCitpZighLWYgImNvbmZpZ3VyZSIpIHsKKyAgICBwcmludCAicnVubmluZyBidWlsZGNvbmZcbiI7CisgICAgYC4vYnVpbGRjb25mYDsKK30KK3ByaW50ICJhZGRpbmcgJHZlcnNpb24gaW4gdGhlIGNvbmZpZ3VyZS5hYyBmaWxlXG4iOworYHNlZCAtZSAncy9BQ19JTklULiovQUNfSU5JVChbYy1hcmVzXSwgWyR2ZXJzaW9uXSwvJyA8IGNvbmZpZ3VyZS5hYyA+IGNvbmZpZ3VyZS5hYy5kaXN0YDsKKworIyBub3cgbWFrZSBhIG5ldyBjb25maWd1cmUgc2NyaXB0IHdpdGggdGhpcworcHJpbnQgIm1ha2VzIGEgbmV3IGNvbmZpZ3VyZSBzY3JpcHRcbiI7CitgYXV0b2NvbmYgY29uZmlndXJlLmFjLmRpc3QgPmNvbmZpZ3VyZWA7CisKKyMgbm93IHJ1biB0aGlzIG5ldyBjb25maWd1cmUgdG8gZ2V0IGEgZmluZSBtYWtlZmlsZQorcHJpbnQgInJ1bm5pbmcgY29uZmlndXJlXG4iOworYC4vY29uZmlndXJlYDsKKworIyBnZW5lcmF0ZSBIVE1MIHZlcnNpb25zIG9mIG1hbiBwYWdlcworIyBEZWFjdGl2YXRlZCBmb3Igbm93LiBJdCBzZWVtcyB0aGF0IG1hbiBwYWdlcyBuZWVkIHNvbWUgYWRqdXN0bWVudHMKKyMgcmVsYXRpdmUgdG8gcGFyYWdyYXBoIGFuZC9vciBsaW5lIGJyZWFrcyBmb3IgcHJvcGVyIGh0bWwgZm9ybWF0dGluZy4KKyMgRVhUUkFfRElTVCB3aWxsIG5lZWQgJChIVE1MUEFHRVMpIHdoZW4gdGhpcyBpcyBmdWxseSBhY3RpdmF0ZWQuCisjIHByaW50ICJydW5uaW5nIG1ha2UgaHRtbFxuIjsKKyMgYG1ha2UgLXMgaHRtbGA7CisKKyMgZ2VuZXJhdGUgUERGIHZlcnNpb25zIG9mIG1hbiBwYWdlcworcHJpbnQgInJ1bm5pbmcgbWFrZSBwZGZcbiI7CitgbWFrZSAtcyBwZGZgOworCitwcmludCAicHJvZHVjZSBDSEFOR0VTXG4iOworYGdpdCBsb2cgLS1wcmV0dHk9ZnVsbGVyIC0tbm8tY29sb3IgLS1kYXRlPXNob3J0IC0tZGVjb3JhdGU9ZnVsbCAtMTAwMCB8IC4vZ2l0MmNoYW5nZXMucGwgPiBDSEFOR0VTLmRpc3RgOworCisjIG5vdyBtYWtlIHRoZSBhY3R1YWwgdGFyYmFsbAorcHJpbnQgInJ1bm5pbmcgbWFrZSBkaXN0XG4iOworYG1ha2UgZGlzdCBWRVJTSU9OPSR2ZXJzaW9uYDsKKworIyByZW1vdmUgdGVtcG9yYXkgc291cmNlZCBtYW4gcGFnZXMKK2BtYWtlIC1zIGNsZWFuLXNvdXJjZWQtbWFucGFnZXNgOworCitwcmludCAicmVtb3ZpbmcgdGVtcG9yYXJ5IGNvbmZpZ3VyZS5hYyBmaWxlXG4iOworYHJtIGNvbmZpZ3VyZS5hYy5kaXN0YDsKK3ByaW50ICJyZW1vdmluZyB0ZW1wb3JhcnkgYXJlc192ZXJzaW9uLmggZmlsZVxuIjsKK2BybSBhcmVzX3ZlcnNpb24uaC5kaXN0YDsKKworcHJpbnQgIk5PVEU6IG5vdyB0YWcgdGhpcyByZWxlYXNlIVxuIjsKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL21pc3NpbmcgYi9hcC9hcHAvYy1hcmVzL3NyYy9taXNzaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmJiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9taXNzaW5nCkBAIC0wLDAgKzEsMjE1IEBACisjISAvYmluL3NoCisjIENvbW1vbiB3cmFwcGVyIGZvciBhIGZldyBwb3RlbnRpYWxseSBtaXNzaW5nIEdOVSBwcm9ncmFtcy4KKworc2NyaXB0dmVyc2lvbj0yMDEzLTEwLTI4LjEzOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworY2FzZSAkMSBpbgorCisgIC0taXMtbGlnaHR3ZWlnaHQpCisgICAgIyBVc2VkIGJ5IG91ciBhdXRvY29uZiBtYWNyb3MgdG8gY2hlY2sgd2hldGhlciB0aGUgYXZhaWxhYmxlIG1pc3NpbmcKKyAgICAjIHNjcmlwdCBpcyBtb2Rlcm4gZW5vdWdoLgorICAgIGV4aXQgMAorICAgIDs7CisKKyAgLS1ydW4pCisgICAgIyBCYWNrLWNvbXBhdCB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdXNlZCBieSBvbGRlciBhdXRvbWFrZS4KKyAgICBzaGlmdAorICAgIDs7CisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitSdW4gJ1BST0dSQU0gW0FSR1VNRU5UXS4uLicsIHJldHVybmluZyBhIHByb3BlciBhZHZpY2Ugd2hlbiB0aGlzIGZhaWxzIGR1ZQordG8gUFJPR1JBTSBiZWluZyBtaXNzaW5nIG9yIHRvbyBvbGQuCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworU3VwcG9ydGVkIFBST0dSQU0gdmFsdWVzOgorICBhY2xvY2FsICAgYXV0b2NvbmYgIGF1dG9oZWFkZXIgICBhdXRvbTR0ZSAgYXV0b21ha2UgIG1ha2VpbmZvCisgIGJpc29uICAgICB5YWNjICAgICAgZmxleCAgICAgICAgIGxleCAgICAgICBoZWxwMm1hbgorCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgJ2dudS0nLCAnZ251JywgYW5kCisnZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KKworU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCisgICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtKikKKyAgICBlY2hvIDE+JjIgIiQwOiB1bmtub3duICckMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIGV4aXQgMQorICAgIDs7CisKK2VzYWMKKworIyBSdW4gdGhlIGdpdmVuIHByb2dyYW0sIHJlbWVtYmVyIGl0cyBleGl0IHN0YXR1cy4KKyIkQCI7IHN0PSQ/CisKKyMgSWYgaXQgc3VjY2VlZGVkLCB3ZSBhcmUgZG9uZS4KK3Rlc3QgJHN0IC1lcSAwICYmIGV4aXQgMAorCisjIEFsc28gZXhpdCBub3cgaWYgd2UgaXQgZmFpbGVkIChvciB3YXNuJ3QgZm91bmQpLCBhbmQgJy0tdmVyc2lvbicgd2FzCisjIHBhc3NlZDsgc3VjaCBhbiBvcHRpb24gaXMgcGFzc2VkIG1vc3QgbGlrZWx5IHRvIGRldGVjdCB3aGV0aGVyIHRoZQorIyBwcm9ncmFtIGlzIHByZXNlbnQgYW5kIHdvcmtzLgorY2FzZSAkMiBpbiAtLXZlcnNpb258LS1oZWxwKSBleGl0ICRzdDs7IGVzYWMKKworIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucyB3aGVuIHRoZSB1c2VyCisjIHRyaWVzIHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEKKyMgbWluaW11bSB2ZXJzaW9uLgoraWYgdGVzdCAkc3QgLWVxIDYzOyB0aGVuCisgIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKK2VsaWYgdGVzdCAkc3QgLWVxIDEyNzsgdGhlbgorICAjIFByb2dyYW0gd2FzIG1pc3NpbmcuCisgIG1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKK2Vsc2UKKyAgIyBQcm9ncmFtIHdhcyBmb3VuZCBhbmQgZXhlY3V0ZWQsIGJ1dCBmYWlsZWQuICBHaXZlIHVwLgorICBleGl0ICRzdAorZmkKKworcGVybF9VUkw9aHR0cDovL3d3dy5wZXJsLm9yZy8KK2ZsZXhfVVJMPWh0dHA6Ly9mbGV4LnNvdXJjZWZvcmdlLm5ldC8KK2dudV9zb2Z0d2FyZV9VUkw9aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlCisKK3Byb2dyYW1fZGV0YWlscyAoKQoreworICBjYXNlICQxIGluCisgICAgYWNsb2NhbHxhdXRvbWFrZSkKKyAgICAgIGVjaG8gIlRoZSAnJDEnIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgR05VIEF1dG9tYWtlIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9tYWtlPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIEF1dG9jb25mLCBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvY29uZj4iCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgICBhdXRvY29uZnxhdXRvbTR0ZXxhdXRvaGVhZGVyKQorICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b2NvbmYgcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmYvPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIG00IGFuZCBQZXJsIGluIG9yZGVyIHRvIHJ1bjoiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgZXNhYworfQorCitnaXZlX2FkdmljZSAoKQoreworICAjIE5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgorICBub3JtYWxpemVkX3Byb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCisgICAgcy9eZ251LS8vOyB0CisgICAgcy9eZ251Ly87IHQKKyAgICBzL15nLy87IHQnYAorCisgIHByaW50ZiAnJXNcbicgIickMScgaXMgJG1zZy4iCisKKyAgY29uZmlndXJlX2RlcHM9Iidjb25maWd1cmUuYWMnIG9yIG00IGZpbGVzIGluY2x1ZGVkIGJ5ICdjb25maWd1cmUuYWMnIgorICBjYXNlICRub3JtYWxpemVkX3Byb2dyYW0gaW4KKyAgICBhdXRvY29uZiopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2NvbmZpZ3VyZS5hYycsIgorICAgICAgZWNobyAib3IgbTQgZmlsZXMgaW5jbHVkZWQgYnkgaXQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvY29uZicKKyAgICAgIDs7CisgICAgYXV0b2hlYWRlciopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjY29uZmlnLmgnIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b2hlYWRlcicKKyAgICAgIDs7CisgICAgYXV0b21ha2UqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdNYWtlZmlsZS5hbScgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbWFrZScKKyAgICAgIDs7CisgICAgYWNsb2NhbCopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjaW5jbHVkZS5tNCcgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhY2xvY2FsJworICAgICAgOzsKKyAgIGF1dG9tNHRlKikKKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgbWFpbnRhaW5lciBmaWxlcyB0aGF0IHJlcXVpcmUiCisgICAgICBlY2hvICJ0aGUgJ2F1dG9tNHRlJyBwcm9ncmFtIHRvIGJlIHJlYnVpbHQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbTR0ZScKKyAgICAgIDs7CisgICAgYmlzb24qfHlhY2MqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy55JyBmaWxlLiIKKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgQmlzb24gcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYmlzb24vPiIKKyAgICAgIDs7CisgICAgbGV4KnxmbGV4KikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcubCcgZmlsZS4iCisgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRmbGV4X1VSTD4iCisgICAgICA7OworICAgIGhlbHAybWFuKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kiIFwKKyAgICAgICAgICAgIm9mIGEgbWFuIHBhZ2UuIgorICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEdOVSBIZWxwMm1hbiBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9oZWxwMm1hbi8+IgorICAgIDs7CisgICAgbWFrZWluZm8qKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy50ZXhpJyBmaWxlLCBvciIKKyAgICAgIGVjaG8gImFueSBvdGhlciBmaWxlIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4iCisgICAgICBlY2hvICJZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBUZXhpbmZvIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML3RleGluZm8vPiIKKyAgICAgIGVjaG8gIlRoZSBzcHVyaW91cyBtYWtlaW5mbyBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIgorICAgICAgZWNobyAidXNpbmcgYSBidWdneSAnbWFrZScgKEFJWCwgRFUsIElSSVgpLCBpbiB3aGljaCBjYXNlIHlvdSBtaWdodCIKKyAgICAgIGVjaG8gIndhbnQgdG8gaW5zdGFsbCBHTlUgbWFrZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbWFrZS8+IgorICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUgcHJvcGVyIgorICAgICAgZWNobyAidG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSAnUkVBRE1FJyBmaWxlLCBpdCIKKyAgICAgIGVjaG8gIm9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmciCisgICAgICBlY2hvICJ0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4iCisgICAgICBlY2hvICJjYXNlIHNvbWUgb3RoZXIgcGFja2FnZSBjb250YWlucyB0aGlzIG1pc3NpbmcgJyQxJyBwcm9ncmFtLiIKKyAgICAgIDs7CisgIGVzYWMKK30KKworZ2l2ZV9hZHZpY2UgIiQxIiB8IHNlZCAtZSAnMXMvXi9XQVJOSU5HOiAvJyBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICcyLCRzL14vICAgICAgICAgLycgPiYyCisKKyMgUHJvcGFnYXRlIHRoZSBjb3JyZWN0IGV4aXQgc3RhdHVzIChleHBlY3RlZCB0byBiZSAxMjcgZm9yIGEgcHJvZ3JhbQorIyBub3QgZm91bmQsIDYzIGZvciBhIHByb2dyYW0gdGhhdCBmYWlsZWQgZHVlIHRvIHZlcnNpb24gbWlzbWF0Y2gpLgorZXhpdCAkc3QKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvbWtpbnN0YWxsZGlycyBiL2FwL2FwcC9jLWFyZXMvc3JjL21raW5zdGFsbGRpcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkNTM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL21raW5zdGFsbGRpcnMKQEAgLTAsMCArMSwxNjIgQEAKKyMhIC9iaW4vc2gKKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBPcmlnaW5hbCBhdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKyMgQ3JlYXRlZDogMTk5My0wNS0xNgorIyBQdWJsaWMgZG9tYWluLgorIworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCitlcnJzdGF0dXM9MAorZGlybW9kZT0KKwordXNhZ2U9IlwKK1VzYWdlOiBta2luc3RhbGxkaXJzIFstaF0gWy0taGVscF0gWy0tdmVyc2lvbl0gWy1tIE1PREVdIERJUiAuLi4KKworQ3JlYXRlIGVhY2ggZGlyZWN0b3J5IERJUiAod2l0aCBtb2RlIE1PREUsIGlmIHNwZWNpZmllZCksIGluY2x1ZGluZyBhbGwKK2xlYWRpbmcgZmlsZSBuYW1lIGNvbXBvbmVudHMuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorCisjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cword2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorICAgICAgZWNobyAiJHVzYWdlIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworICAgICAgc2hpZnQKKyAgICAgIHRlc3QgJCMgLWVxIDAgJiYgeyBlY2hvICIkdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorICAgICAgZGlybW9kZT0kMQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgLS12ZXJzaW9uKQorICAgICAgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgIHNoaWZ0CisgICAgICBicmVhaworICAgICAgOzsKKyAgICAtKikgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmtub3duIG9wdGlvbgorICAgICAgZWNobyAiJHVzYWdlIiAxPiYyCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlyc3Qgbm9uLW9wdCBhcmcKKyAgICAgIGJyZWFrCisgICAgICA7OworICBlc2FjCitkb25lCisKK2ZvciBmaWxlCitkbworICBpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKyAgICBzaGlmdAorICBlbHNlCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKKworY2FzZSAkIyBpbgorICAwKSBleGl0IDAgOzsKK2VzYWMKKworIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisjIG1rZGlyIC1wIGEvYyBhdCB0aGUgc2FtZSB0aW1lLCBib3RoIHdpbGwgZGV0ZWN0IHRoYXQgYSBpcyBtaXNzaW5nLAorIyBvbmUgd2lsbCBjcmVhdGUgYSwgdGhlbiB0aGUgb3RoZXIgd2lsbCB0cnkgdG8gY3JlYXRlIGEgYW5kIGRpZSB3aXRoCisjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisjIGZyb20gYSBwYXJhbGxlbCBtYWtlLiAgV2UgdXNlIC0tdmVyc2lvbiBpbiB0aGUgcHJvYmUgdG8gcmVzdHJpY3QKKyMgb3Vyc2VsdmVzIHRvIEdOVSBta2Rpciwgd2hpY2ggaXMgdGhyZWFkLXNhZmUuCitjYXNlICRkaXJtb2RlIGluCisgICcnKQorICAgIGlmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtcCAtLSAiJEAiCisgICAgZWxzZQorICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSAnbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKyAgICAgICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcworICAgICAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgJy4nIGFscmVhZHkKKyAgICAgICMgZXhpc3RzLgorICAgICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgICAgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgICBmaQorICAgIDs7CisgICopCisgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1tICRkaXJtb2RlIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKyAgICBlbHNlCisgICAgICAjIENsZWFuIHVwIGFmdGVyIE5leHRTdGVwIGFuZCBPcGVuU3RlcCBta2Rpci4KKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisgICAgICBkbworICAgICAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCisgICAgICBkb25lCisgICAgZmkKKyAgICA7OworZXNhYworCitmb3IgZmlsZQorZG8KKyAgY2FzZSAkZmlsZSBpbgorICAgIC8qKSBwYXRoY29tcD0vIDs7CisgICAgKikgIHBhdGhjb21wPSA7OworICBlc2FjCisgIG9JRlM9JElGUworICBJRlM9LworICBzZXQgZm5vcmQgJGZpbGUKKyAgc2hpZnQKKyAgSUZTPSRvSUZTCisKKyAgZm9yIGQKKyAgZG8KKyAgICB0ZXN0ICJ4JGQiID0geCAmJiBjb250aW51ZQorCisgICAgcGF0aGNvbXA9JHBhdGhjb21wJGQKKyAgICBjYXNlICRwYXRoY29tcCBpbgorICAgICAgLSopIHBhdGhjb21wPS4vJHBhdGhjb21wIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiCisKKyAgICAgIG1rZGlyICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisJZXJyc3RhdHVzPSRsYXN0ZXJyCisgICAgICBlbHNlCisJaWYgdGVzdCAhIC16ICIkZGlybW9kZSI7IHRoZW4KKwkgIGVjaG8gImNobW9kICRkaXJtb2RlICRwYXRoY29tcCIKKwkgIGxhc3RlcnI9CisJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworCSAgaWYgdGVzdCAhIC16ICIkbGFzdGVyciI7IHRoZW4KKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisJICBmaQorCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICBwYXRoY29tcD0kcGF0aGNvbXAvCisgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9uYW1lc2VyLmggYi9hcC9hcHAvYy1hcmVzL3NyYy9uYW1lc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzMDJmZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL25hbWVzZXIuaApAQCAtMCwwICsxLDIxMSBAQAorCisjaWZuZGVmIEFSRVNfTkFNRVNFUl9ICisjZGVmaW5lIEFSRVNfTkFNRVNFUl9ICisKKy8qIGhlYWRlciBmaWxlIHByb3ZpZGVkIGJ5IGxpcmVuQHZpdmlzaW1vLmNvbSAqLworCisjaWZuZGVmIEhBVkVfQVJQQV9OQU1FU0VSX0gKKworI2RlZmluZSBOU19QQUNLRVRTWiAgICAgNTEyICAgLyogbWF4aW11bSBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBOU19NQVhETkFNRSAgICAgMjU2ICAgLyogbWF4aW11bSBkb21haW4gbmFtZSAqLworI2RlZmluZSBOU19NQVhDRE5BTUUgICAgMjU1ICAgLyogbWF4aW11bSBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICovCisjZGVmaW5lIE5TX01BWExBQkVMICAgICA2MworI2RlZmluZSBOU19IRklYRURTWiAgICAgMTIgICAgLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIGhlYWRlciAqLworI2RlZmluZSBOU19RRklYRURTWiAgICAgNCAgICAgLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIHF1ZXJ5ICovCisjZGVmaW5lIE5TX1JSRklYRURTWiAgICAxMCAgICAvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gciByZWNvcmQgKi8KKyNkZWZpbmUgTlNfSU5UMTZTWiAgICAgIDIKKyNkZWZpbmUgTlNfSU5BRERSU1ogICAgIDQKKyNkZWZpbmUgTlNfSU42QUREUlNaICAgIDE2CisjZGVmaW5lIE5TX0NNUFJTRkxHUyAgICAweGMwICAvKiBGbGFnIGJpdHMgaW5kaWNhdGluZyBuYW1lIGNvbXByZXNzaW9uLiAqLworI2RlZmluZSBOU19ERUZBVUxUUE9SVCAgNTMgICAgLyogRm9yIGJvdGggVENQIGFuZCBVRFAuICovCisKK3R5cGVkZWYgZW51bSBfX25zX2NsYXNzIHsKKyAgICBuc19jX2ludmFsaWQgPSAwLCAgICAgICAvKiBDb29raWUuICovCisgICAgbnNfY19pbiA9IDEsICAgICAgICAgICAgLyogSW50ZXJuZXQuICovCisgICAgbnNfY18yID0gMiwgICAgICAgICAgICAgLyogdW5hbGxvY2F0ZWQvdW5zdXBwb3J0ZWQuICovCisgICAgbnNfY19jaGFvcyA9IDMsICAgICAgICAgLyogTUlUIENoYW9zLW5ldC4gKi8KKyAgICBuc19jX2hzID0gNCwgICAgICAgICAgICAvKiBNSVQgSGVzaW9kLiAqLworICAgIC8qIFF1ZXJ5IGNsYXNzIHZhbHVlcyB3aGljaCBkbyBub3QgYXBwZWFyIGluIHJlc291cmNlIHJlY29yZHMgKi8KKyAgICBuc19jX25vbmUgPSAyNTQsICAgICAgICAvKiBmb3IgcHJlcmVxLiBzZWN0aW9ucyBpbiB1cGRhdGUgcmVxdWVzdHMgKi8KKyAgICBuc19jX2FueSA9IDI1NSwgICAgICAgICAvKiBXaWxkY2FyZCBtYXRjaC4gKi8KKyAgICBuc19jX21heCA9IDY1NTM2Cit9IG5zX2NsYXNzOworCit0eXBlZGVmIGVudW0gX19uc190eXBlIHsKKyAgICBuc190X2ludmFsaWQgPSAwLCAgICAgICAvKiBDb29raWUuICovCisgICAgbnNfdF9hID0gMSwgICAgICAgICAgICAgLyogSG9zdCBhZGRyZXNzLiAqLworICAgIG5zX3RfbnMgPSAyLCAgICAgICAgICAgIC8qIEF1dGhvcml0YXRpdmUgc2VydmVyLiAqLworICAgIG5zX3RfbWQgPSAzLCAgICAgICAgICAgIC8qIE1haWwgZGVzdGluYXRpb24uICovCisgICAgbnNfdF9tZiA9IDQsICAgICAgICAgICAgLyogTWFpbCBmb3J3YXJkZXIuICovCisgICAgbnNfdF9jbmFtZSA9IDUsICAgICAgICAgLyogQ2Fub25pY2FsIG5hbWUuICovCisgICAgbnNfdF9zb2EgPSA2LCAgICAgICAgICAgLyogU3RhcnQgb2YgYXV0aG9yaXR5IHpvbmUuICovCisgICAgbnNfdF9tYiA9IDcsICAgICAgICAgICAgLyogTWFpbGJveCBkb21haW4gbmFtZS4gKi8KKyAgICBuc190X21nID0gOCwgICAgICAgICAgICAvKiBNYWlsIGdyb3VwIG1lbWJlci4gKi8KKyAgICBuc190X21yID0gOSwgICAgICAgICAgICAvKiBNYWlsIHJlbmFtZSBuYW1lLiAqLworICAgIG5zX3RfbnVsbCA9IDEwLCAgICAgICAgIC8qIE51bGwgcmVzb3VyY2UgcmVjb3JkLiAqLworICAgIG5zX3Rfd2tzID0gMTEsICAgICAgICAgIC8qIFdlbGwga25vd24gc2VydmljZS4gKi8KKyAgICBuc190X3B0ciA9IDEyLCAgICAgICAgICAvKiBEb21haW4gbmFtZSBwb2ludGVyLiAqLworICAgIG5zX3RfaGluZm8gPSAxMywgICAgICAgIC8qIEhvc3QgaW5mb3JtYXRpb24uICovCisgICAgbnNfdF9taW5mbyA9IDE0LCAgICAgICAgLyogTWFpbGJveCBpbmZvcm1hdGlvbi4gKi8KKyAgICBuc190X214ID0gMTUsICAgICAgICAgICAvKiBNYWlsIHJvdXRpbmcgaW5mb3JtYXRpb24uICovCisgICAgbnNfdF90eHQgPSAxNiwgICAgICAgICAgLyogVGV4dCBzdHJpbmdzLiAqLworICAgIG5zX3RfcnAgPSAxNywgICAgICAgICAgIC8qIFJlc3BvbnNpYmxlIHBlcnNvbi4gKi8KKyAgICBuc190X2Fmc2RiID0gMTgsICAgICAgICAvKiBBRlMgY2VsbCBkYXRhYmFzZS4gKi8KKyAgICBuc190X3gyNSA9IDE5LCAgICAgICAgICAvKiBYXzI1IGNhbGxpbmcgYWRkcmVzcy4gKi8KKyAgICBuc190X2lzZG4gPSAyMCwgICAgICAgICAvKiBJU0ROIGNhbGxpbmcgYWRkcmVzcy4gKi8KKyAgICBuc190X3J0ID0gMjEsICAgICAgICAgICAvKiBSb3V0ZXIuICovCisgICAgbnNfdF9uc2FwID0gMjIsICAgICAgICAgLyogTlNBUCBhZGRyZXNzLiAqLworICAgIG5zX3RfbnNhcF9wdHIgPSAyMywgICAgIC8qIFJldmVyc2UgTlNBUCBsb29rdXAgKGRlcHJlY2F0ZWQpLiAqLworICAgIG5zX3Rfc2lnID0gMjQsICAgICAgICAgIC8qIFNlY3VyaXR5IHNpZ25hdHVyZS4gKi8KKyAgICBuc190X2tleSA9IDI1LCAgICAgICAgICAvKiBTZWN1cml0eSBrZXkuICovCisgICAgbnNfdF9weCA9IDI2LCAgICAgICAgICAgLyogWC40MDAgbWFpbCBtYXBwaW5nLiAqLworICAgIG5zX3RfZ3BvcyA9IDI3LCAgICAgICAgIC8qIEdlb2dyYXBoaWNhbCBwb3NpdGlvbiAod2l0aGRyYXduKS4gKi8KKyAgICBuc190X2FhYWEgPSAyOCwgICAgICAgICAvKiBJcDYgQWRkcmVzcy4gKi8KKyAgICBuc190X2xvYyA9IDI5LCAgICAgICAgICAvKiBMb2NhdGlvbiBJbmZvcm1hdGlvbi4gKi8KKyAgICBuc190X254dCA9IDMwLCAgICAgICAgICAvKiBOZXh0IGRvbWFpbiAoc2VjdXJpdHkpLiAqLworICAgIG5zX3RfZWlkID0gMzEsICAgICAgICAgIC8qIEVuZHBvaW50IGlkZW50aWZpZXIuICovCisgICAgbnNfdF9uaW1sb2MgPSAzMiwgICAgICAgLyogTmltcm9kIExvY2F0b3IuICovCisgICAgbnNfdF9zcnYgPSAzMywgICAgICAgICAgLyogU2VydmVyIFNlbGVjdGlvbi4gKi8KKyAgICBuc190X2F0bWEgPSAzNCwgICAgICAgICAvKiBBVE0gQWRkcmVzcyAqLworICAgIG5zX3RfbmFwdHIgPSAzNSwgICAgICAgIC8qIE5hbWluZyBBdXRob3JpdHkgUG9pblRlUiAqLworICAgIG5zX3Rfa3ggPSAzNiwgICAgICAgICAgIC8qIEtleSBFeGNoYW5nZSAqLworICAgIG5zX3RfY2VydCA9IDM3LCAgICAgICAgIC8qIENlcnRpZmljYXRpb24gcmVjb3JkICovCisgICAgbnNfdF9hNiA9IDM4LCAgICAgICAgICAgLyogSVB2NiBhZGRyZXNzIChkZXByZWNhdGVzIEFBQUEpICovCisgICAgbnNfdF9kbmFtZSA9IDM5LCAgICAgICAgLyogTm9uLXRlcm1pbmFsIEROQU1FIChmb3IgSVB2NikgKi8KKyAgICBuc190X3NpbmsgPSA0MCwgICAgICAgICAvKiBLaXRjaGVuIHNpbmsgKGV4cGVyaW1lbnRhdGwpICovCisgICAgbnNfdF9vcHQgPSA0MSwgICAgICAgICAgLyogRUROUzAgb3B0aW9uIChtZXRhLVJSKSAqLworICAgIG5zX3RfYXBsID0gNDIsICAgICAgICAgIC8qIEFkZHJlc3MgcHJlZml4IGxpc3QgKFJGQzMxMjMpICovCisgICAgbnNfdF9kcyA9IDQzLCAgICAgICAgICAgLyogRGVsZWdhdGlvbiBTaWduZXIgKFJGQzQwMzQpICovCisgICAgbnNfdF9zc2hmcCA9IDQ0LCAgICAgICAgLyogU1NIIEtleSBGaW5nZXJwcmludCAoUkZDNDI1NSkgKi8KKyAgICBuc190X3Jyc2lnID0gNDYsICAgICAgICAvKiBSZXNvdXJjZSBSZWNvcmQgU2lnbmF0dXJlIChSRkM0MDM0KSAqLworICAgIG5zX3RfbnNlYyA9IDQ3LCAgICAgICAgIC8qIE5leHQgU2VjdXJlIChSRkM0MDM0KSAqLworICAgIG5zX3RfZG5za2V5ID0gNDgsICAgICAgIC8qIEROUyBQdWJsaWMgS2V5IChSRkM0MDM0KSAqLworICAgIG5zX3RfdGtleSA9IDI0OSwgICAgICAgIC8qIFRyYW5zYWN0aW9uIGtleSAqLworICAgIG5zX3RfdHNpZyA9IDI1MCwgICAgICAgIC8qIFRyYW5zYWN0aW9uIHNpZ25hdHVyZS4gKi8KKyAgICBuc190X2l4ZnIgPSAyNTEsICAgICAgICAvKiBJbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyLiAqLworICAgIG5zX3RfYXhmciA9IDI1MiwgICAgICAgIC8qIFRyYW5zZmVyIHpvbmUgb2YgYXV0aG9yaXR5LiAqLworICAgIG5zX3RfbWFpbGIgPSAyNTMsICAgICAgIC8qIFRyYW5zZmVyIG1haWxib3ggcmVjb3Jkcy4gKi8KKyAgICBuc190X21haWxhID0gMjU0LCAgICAgICAvKiBUcmFuc2ZlciBtYWlsIGFnZW50IHJlY29yZHMuICovCisgICAgbnNfdF9hbnkgPSAyNTUsICAgICAgICAgLyogV2lsZGNhcmQgbWF0Y2guICovCisgICAgbnNfdF96eGZyID0gMjU2LCAgICAgICAgLyogQklORC1zcGVjaWZpYywgbm9uc3RhbmRhcmQuICovCisgICAgbnNfdF9tYXggPSA2NTUzNgorfSBuc190eXBlOworCit0eXBlZGVmIGVudW0gX19uc19vcGNvZGUgeworICAgIG5zX29fcXVlcnkgPSAwLCAgICAgICAgIC8qIFN0YW5kYXJkIHF1ZXJ5LiAqLworICAgIG5zX29faXF1ZXJ5ID0gMSwgICAgICAgIC8qIEludmVyc2UgcXVlcnkgKGRlcHJlY2F0ZWQvdW5zdXBwb3J0ZWQpLiAqLworICAgIG5zX29fc3RhdHVzID0gMiwgICAgICAgIC8qIE5hbWUgc2VydmVyIHN0YXR1cyBxdWVyeSAodW5zdXBwb3J0ZWQpLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGNvZGUgMyBpcyB1bmRlZmluZWQvcmVzZXJ2ZWQuICovCisgICAgbnNfb19ub3RpZnkgPSA0LCAgICAgICAgLyogWm9uZSBjaGFuZ2Ugbm90aWZpY2F0aW9uLiAqLworICAgIG5zX29fdXBkYXRlID0gNSwgICAgICAgIC8qIFpvbmUgdXBkYXRlIG1lc3NhZ2UuICovCisgICAgbnNfb19tYXggPSA2Cit9IG5zX29wY29kZTsKKwordHlwZWRlZiBlbnVtIF9fbnNfcmNvZGUgeworICAgIG5zX3Jfbm9lcnJvciA9IDAsICAgICAgIC8qIE5vIGVycm9yIG9jY3VycmVkLiAqLworICAgIG5zX3JfZm9ybWVyciA9IDEsICAgICAgIC8qIEZvcm1hdCBlcnJvci4gKi8KKyAgICBuc19yX3NlcnZmYWlsID0gMiwgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZS4gKi8KKyAgICBuc19yX254ZG9tYWluID0gMywgICAgICAvKiBOYW1lIGVycm9yLiAqLworICAgIG5zX3Jfbm90aW1wbCA9IDQsICAgICAgIC8qIFVuaW1wbGVtZW50ZWQuICovCisgICAgbnNfcl9yZWZ1c2VkID0gNSwgICAgICAgLyogT3BlcmF0aW9uIHJlZnVzZWQuICovCisgICAgLyogdGhlc2UgYXJlIGZvciBCSU5EX1VQREFURSAqLworICAgIG5zX3JfeXhkb21haW4gPSA2LCAgICAgIC8qIE5hbWUgZXhpc3RzICovCisgICAgbnNfcl95eHJyc2V0ID0gNywgICAgICAgLyogUlJzZXQgZXhpc3RzICovCisgICAgbnNfcl9ueHJyc2V0ID0gOCwgICAgICAgLyogUlJzZXQgZG9lcyBub3QgZXhpc3QgKi8KKyAgICBuc19yX25vdGF1dGggPSA5LCAgICAgICAvKiBOb3QgYXV0aG9yaXRhdGl2ZSBmb3Igem9uZSAqLworICAgIG5zX3Jfbm90em9uZSA9IDEwLCAgICAgIC8qIFpvbmUgb2YgcmVjb3JkIGRpZmZlcmVudCBmcm9tIHpvbmUgc2VjdGlvbiAqLworICAgIG5zX3JfbWF4ID0gMTEsCisgICAgLyogVGhlIGZvbGxvd2luZyBhcmUgVFNJRyBleHRlbmRlZCBlcnJvcnMgKi8KKyAgICBuc19yX2JhZHNpZyA9IDE2LAorICAgIG5zX3JfYmFka2V5ID0gMTcsCisgICAgbnNfcl9iYWR0aW1lID0gMTgKK30gbnNfcmNvZGU7CisKKyNlbmRpZiAvKiBIQVZFX0FSUEFfTkFNRVNFUl9IICovCisKKyNpZm5kZWYgSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0gKKworI2RlZmluZSBQQUNLRVRTWiAgICAgICAgIE5TX1BBQ0tFVFNaCisjZGVmaW5lIE1BWEROQU1FICAgICAgICAgTlNfTUFYRE5BTUUKKyNkZWZpbmUgTUFYQ0ROQU1FICAgICAgICBOU19NQVhDRE5BTUUKKyNkZWZpbmUgTUFYTEFCRUwgICAgICAgICBOU19NQVhMQUJFTAorI2RlZmluZSBIRklYRURTWiAgICAgICAgIE5TX0hGSVhFRFNaCisjZGVmaW5lIFFGSVhFRFNaICAgICAgICAgTlNfUUZJWEVEU1oKKyNkZWZpbmUgUlJGSVhFRFNaICAgICAgICBOU19SUkZJWEVEU1oKKyNkZWZpbmUgSU5ESVJfTUFTSyAgICAgICBOU19DTVBSU0ZMR1MKKyNkZWZpbmUgTkFNRVNFUlZFUl9QT1JUICBOU19ERUZBVUxUUE9SVAorCisjZGVmaW5lIFFVRVJZICAgICAgICAgICBuc19vX3F1ZXJ5CisKKyNkZWZpbmUgU0VSVkZBSUwgICAgICAgIG5zX3Jfc2VydmZhaWwKKyNkZWZpbmUgTk9USU1QICAgICAgICAgIG5zX3Jfbm90aW1wbAorI2RlZmluZSBSRUZVU0VEICAgICAgICAgbnNfcl9yZWZ1c2VkCisjdW5kZWYgTk9FUlJPUiAvKiBpdCBzZWVtcyB0aGlzIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB3aW5lcnJvci5oICovCisjZGVmaW5lIE5PRVJST1IgICAgICAgICBuc19yX25vZXJyb3IKKyNkZWZpbmUgRk9STUVSUiAgICAgICAgIG5zX3JfZm9ybWVycgorI2RlZmluZSBOWERPTUFJTiAgICAgICAgbnNfcl9ueGRvbWFpbgorCisjZGVmaW5lIENfSU4gICAgICAgICAgICBuc19jX2luCisjZGVmaW5lIENfQ0hBT1MgICAgICAgICBuc19jX2NoYW9zCisjZGVmaW5lIENfSFMgICAgICAgICAgICBuc19jX2hzCisjZGVmaW5lIENfTk9ORSAgICAgICAgICBuc19jX25vbmUKKyNkZWZpbmUgQ19BTlkgICAgICAgICAgIG5zX2NfYW55CisKKyNkZWZpbmUgVF9BICAgICAgICAgICAgIG5zX3RfYQorI2RlZmluZSBUX05TICAgICAgICAgICAgbnNfdF9ucworI2RlZmluZSBUX01EICAgICAgICAgICAgbnNfdF9tZAorI2RlZmluZSBUX01GICAgICAgICAgICAgbnNfdF9tZgorI2RlZmluZSBUX0NOQU1FICAgICAgICAgbnNfdF9jbmFtZQorI2RlZmluZSBUX1NPQSAgICAgICAgICAgbnNfdF9zb2EKKyNkZWZpbmUgVF9NQiAgICAgICAgICAgIG5zX3RfbWIKKyNkZWZpbmUgVF9NRyAgICAgICAgICAgIG5zX3RfbWcKKyNkZWZpbmUgVF9NUiAgICAgICAgICAgIG5zX3RfbXIKKyNkZWZpbmUgVF9OVUxMICAgICAgICAgIG5zX3RfbnVsbAorI2RlZmluZSBUX1dLUyAgICAgICAgICAgbnNfdF93a3MKKyNkZWZpbmUgVF9QVFIgICAgICAgICAgIG5zX3RfcHRyCisjZGVmaW5lIFRfSElORk8gICAgICAgICBuc190X2hpbmZvCisjZGVmaW5lIFRfTUlORk8gICAgICAgICBuc190X21pbmZvCisjZGVmaW5lIFRfTVggICAgICAgICAgICBuc190X214CisjZGVmaW5lIFRfVFhUICAgICAgICAgICBuc190X3R4dAorI2RlZmluZSBUX1JQICAgICAgICAgICAgbnNfdF9ycAorI2RlZmluZSBUX0FGU0RCICAgICAgICAgbnNfdF9hZnNkYgorI2RlZmluZSBUX1gyNSAgICAgICAgICAgbnNfdF94MjUKKyNkZWZpbmUgVF9JU0ROICAgICAgICAgIG5zX3RfaXNkbgorI2RlZmluZSBUX1JUICAgICAgICAgICAgbnNfdF9ydAorI2RlZmluZSBUX05TQVAgICAgICAgICAgbnNfdF9uc2FwCisjZGVmaW5lIFRfTlNBUF9QVFIgICAgICBuc190X25zYXBfcHRyCisjZGVmaW5lIFRfU0lHICAgICAgICAgICBuc190X3NpZworI2RlZmluZSBUX0tFWSAgICAgICAgICAgbnNfdF9rZXkKKyNkZWZpbmUgVF9QWCAgICAgICAgICAgIG5zX3RfcHgKKyNkZWZpbmUgVF9HUE9TICAgICAgICAgIG5zX3RfZ3BvcworI2RlZmluZSBUX0FBQUEgICAgICAgICAgbnNfdF9hYWFhCisjZGVmaW5lIFRfTE9DICAgICAgICAgICBuc190X2xvYworI2RlZmluZSBUX05YVCAgICAgICAgICAgbnNfdF9ueHQKKyNkZWZpbmUgVF9FSUQgICAgICAgICAgIG5zX3RfZWlkCisjZGVmaW5lIFRfTklNTE9DICAgICAgICBuc190X25pbWxvYworI2RlZmluZSBUX1NSViAgICAgICAgICAgbnNfdF9zcnYKKyNkZWZpbmUgVF9BVE1BICAgICAgICAgIG5zX3RfYXRtYQorI2RlZmluZSBUX05BUFRSICAgICAgICAgbnNfdF9uYXB0cgorI2RlZmluZSBUX0tYICAgICAgICAgICAgbnNfdF9reAorI2RlZmluZSBUX0NFUlQgICAgICAgICAgbnNfdF9jZXJ0CisjZGVmaW5lIFRfQTYgICAgICAgICAgICBuc190X2E2CisjZGVmaW5lIFRfRE5BTUUgICAgICAgICBuc190X2RuYW1lCisjZGVmaW5lIFRfU0lOSyAgICAgICAgICBuc190X3NpbmsKKyNkZWZpbmUgVF9PUFQgICAgICAgICAgIG5zX3Rfb3B0CisjZGVmaW5lIFRfQVBMICAgICAgICAgICBuc190X2FwbAorI2RlZmluZSBUX0RTICAgICAgICAgICAgbnNfdF9kcworI2RlZmluZSBUX1NTSEZQICAgICAgICAgbnNfdF9zc2hmcAorI2RlZmluZSBUX1JSU0lHICAgICAgICAgbnNfdF9ycnNpZworI2RlZmluZSBUX05TRUMgICAgICAgICAgbnNfdF9uc2VjCisjZGVmaW5lIFRfRE5TS0VZICAgICAgICBuc190X2Ruc2tleQorI2RlZmluZSBUX1RLRVkgICAgICAgICAgbnNfdF90a2V5CisjZGVmaW5lIFRfVFNJRyAgICAgICAgICBuc190X3RzaWcKKyNkZWZpbmUgVF9JWEZSICAgICAgICAgIG5zX3RfaXhmcgorI2RlZmluZSBUX0FYRlIgICAgICAgICAgbnNfdF9heGZyCisjZGVmaW5lIFRfTUFJTEIgICAgICAgICBuc190X21haWxiCisjZGVmaW5lIFRfTUFJTEEgICAgICAgICBuc190X21haWxhCisjZGVmaW5lIFRfQU5ZICAgICAgICAgICBuc190X2FueQorCisjZW5kaWYgLyogSEFWRV9BUlBBX05BTUVTRVJfQ09NUEFUX0ggKi8KKworI2VuZGlmIC8qIEFSRVNfTkFNRVNFUl9IICovCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9zZXR1cF9vbmNlLmggYi9hcC9hcHAvYy1hcmVzL3NyYy9zZXR1cF9vbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3NldHVwX29uY2UuaApAQCAtMCwwICsxLDU1NCBAQAorI2lmbmRlZiBfX1NFVFVQX09OQ0VfSAorI2RlZmluZSBfX1NFVFVQX09OQ0VfSAorCisKKy8qIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMTMgYnkgRGFuaWVsIFN0ZW5iZXJnIGV0IGFsCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCisgKiB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIENvbnRlbnQgb2YgaGVhZGVyIGZpbGVzIGxpYi9zZXR1cF9vbmNlLmggYW5kIGFyZXMvc2V0dXBfb25jZS5oICAqCisgKiAgbXVzdCBiZSBrZXB0IGluIHN5bmMuIE1vZGlmeSB0aGUgb3RoZXIgb25lIGlmIHlvdSBjaGFuZ2UgdGhpcy4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qCisgKiBJbmNsdXNpb24gb2YgY29tbW9uIGhlYWRlciBmaWxlcy4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBORUVEX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKworI2lmZGVmIE5FRURfTUVNT1JZX0gKKyNpbmNsdWRlIDxtZW1vcnkuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TVERCT09MX0gpICYmIGRlZmluZWQoSEFWRV9CT09MX1QpCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmZGVmIF9faHB1eAorIyAgaWYgIWRlZmluZWQoX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCkgfHwgZGVmaW5lZChfS0VSTkVMKQorIyAgICBpZmRlZiBfQVBQMzJfNjRCSVRfT0ZGX1QKKyMgICAgICBkZWZpbmUgT0xEX0FQUDMyXzY0QklUX09GRl9UIF9BUFAzMl82NEJJVF9PRkZfVAorIyAgICAgIHVuZGVmIF9BUFAzMl82NEJJVF9PRkZfVAorIyAgICBlbHNlCisjICAgICAgdW5kZWYgT0xEX0FQUDMyXzY0QklUX09GRl9UCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjaWZkZWYgX19ocHV4CisjICBpZiAhZGVmaW5lZChfWE9QRU5fU09VUkNFX0VYVEVOREVEKSB8fCBkZWZpbmVkKF9LRVJORUwpCisjICAgIGlmZGVmIE9MRF9BUFAzMl82NEJJVF9PRkZfVAorIyAgICAgIGRlZmluZSBfQVBQMzJfNjRCSVRfT0ZGX1QgT0xEX0FQUDMyXzY0QklUX09GRl9UCisjICAgICAgdW5kZWYgT0xEX0FQUDMyXzY0QklUX09GRl9UCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKworLyoKKyAqIERlZmluaXRpb24gb2YgdGltZXZhbCBzdHJ1Y3QgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgaXQuCisgKi8KKworI2lmbmRlZiBIQVZFX1NUUlVDVF9USU1FVkFMCitzdHJ1Y3QgdGltZXZhbCB7CisgbG9uZyB0dl9zZWM7CisgbG9uZyB0dl91c2VjOworfTsKKyNlbmRpZgorCisKKy8qCisgKiBJZiB3ZSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZGVmaW5lLCBtYWtlIHN1cmUgd2UgdXNlCisgKiBpdCBhcyB0aGUgZm91cnRoIGFyZ3VtZW50IG9mIGZ1bmN0aW9uIHNlbmQoKQorICovCisKKyNpZmRlZiBIQVZFX01TR19OT1NJR05BTAorI2RlZmluZSBTRU5EXzRUSF9BUkcgTVNHX05PU0lHTkFMCisjZWxzZQorI2RlZmluZSBTRU5EXzRUSF9BUkcgMAorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX19taW5peCkKKy8qIE1pbml4IGRvZXNuJ3Qgc3VwcG9ydCByZWN2IG9uIFRDUCBzb2NrZXRzICovCisjZGVmaW5lIHNyZWFkKHgseSx6KSAoc3NpemVfdClyZWFkKChSRUNWX1RZUEVfQVJHMSkoeCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJFQ1ZfVFlQRV9BUkcyKSh5KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVDVl9UWVBFX0FSRzMpKHopKQorCisjZWxpZiBkZWZpbmVkKEhBVkVfUkVDVikKKy8qCisgKiBUaGUgZGVmaW5pdGlvbnMgZm9yIHRoZSByZXR1cm4gdHlwZSBhbmQgYXJndW1lbnRzIHR5cGVzCisgKiBvZiBmdW5jdGlvbnMgcmVjdigpIGFuZCBzZW5kKCkgYmVsb25nIGFuZCBjb21lIGZyb20gdGhlCisgKiBjb25maWd1cmF0aW9uIGZpbGUuIERvIG5vdCBkZWZpbmUgdGhlbSBpbiBhbnkgb3RoZXIgcGxhY2UuCisgKgorICogSEFWRV9SRUNWIGlzIGRlZmluZWQgaWYgeW91IGhhdmUgYSBmdW5jdGlvbiBuYW1lZCByZWN2KCkKKyAqIHdoaWNoIGlzIHVzZWQgdG8gcmVhZCBpbmNvbWluZyBkYXRhIGZyb20gc29ja2V0cy4gSWYgeW91cgorICogZnVuY3Rpb24gaGFzIGFub3RoZXIgbmFtZSB0aGVuIGRvbid0IGRlZmluZSBIQVZFX1JFQ1YuCisgKgorICogSWYgSEFWRV9SRUNWIGlzIGRlZmluZWQgdGhlbiBSRUNWX1RZUEVfQVJHMSwgUkVDVl9UWVBFX0FSRzIsCisgKiBSRUNWX1RZUEVfQVJHMywgUkVDVl9UWVBFX0FSRzQgYW5kIFJFQ1ZfVFlQRV9SRVRWIG11c3QgYWxzbworICogYmUgZGVmaW5lZC4KKyAqCisgKiBIQVZFX1NFTkQgaXMgZGVmaW5lZCBpZiB5b3UgaGF2ZSBhIGZ1bmN0aW9uIG5hbWVkIHNlbmQoKQorICogd2hpY2ggaXMgdXNlZCB0byB3cml0ZSBvdXRnb2luZyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldC4KKyAqIElmIHlvdXJzIGhhcyBhbm90aGVyIG5hbWUgdGhlbiBkb24ndCBkZWZpbmUgSEFWRV9TRU5ELgorICoKKyAqIElmIEhBVkVfU0VORCBpcyBkZWZpbmVkIHRoZW4gU0VORF9UWVBFX0FSRzEsIFNFTkRfUVVBTF9BUkcyLAorICogU0VORF9UWVBFX0FSRzIsIFNFTkRfVFlQRV9BUkczLCBTRU5EX1RZUEVfQVJHNCBhbmQKKyAqIFNFTkRfVFlQRV9SRVRWIG11c3QgYWxzbyBiZSBkZWZpbmVkLgorICovCisKKyNpZiAhZGVmaW5lZChSRUNWX1RZUEVfQVJHMSkgfHwgXAorICAgICFkZWZpbmVkKFJFQ1ZfVFlQRV9BUkcyKSB8fCBcCisgICAgIWRlZmluZWQoUkVDVl9UWVBFX0FSRzMpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWX1RZUEVfQVJHNCkgfHwgXAorICAgICFkZWZpbmVkKFJFQ1ZfVFlQRV9SRVRWKQorICAvKiAqLworICBFcnJvciBNaXNzaW5nX2RlZmluaXRpb25fb2ZfcmV0dXJuX2FuZF9hcmd1bWVudHNfdHlwZXNfb2ZfcmVjdgorICAvKiAqLworI2Vsc2UKKyNkZWZpbmUgc3JlYWQoeCx5LHopIChzc2l6ZV90KXJlY3YoKFJFQ1ZfVFlQRV9BUkcxKSh4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVDVl9UWVBFX0FSRzIpKHkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUNWX1RZUEVfQVJHMykoeiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJFQ1ZfVFlQRV9BUkc0KSgwKSkKKyNlbmRpZgorI2Vsc2UgLyogSEFWRV9SRUNWICovCisjaWZuZGVmIHNyZWFkCisgIC8qICovCisgIEVycm9yIE1pc3NpbmdfZGVmaW5pdGlvbl9vZl9tYWNyb19zcmVhZAorICAvKiAqLworI2VuZGlmCisjZW5kaWYgLyogSEFWRV9SRUNWICovCisKKworI2lmIGRlZmluZWQoX19taW5peCkKKy8qIE1pbml4IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kIG9uIFRDUCBzb2NrZXRzICovCisjZGVmaW5lIHN3cml0ZSh4LHkseikgKHNzaXplX3Qpd3JpdGUoKFNFTkRfVFlQRV9BUkcxKSh4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFTkRfVFlQRV9BUkcyKSh5KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFTkRfVFlQRV9BUkczKSh6KSkKKworI2VsaWYgZGVmaW5lZChIQVZFX1NFTkQpCisjaWYgIWRlZmluZWQoU0VORF9UWVBFX0FSRzEpIHx8IFwKKyAgICAhZGVmaW5lZChTRU5EX1FVQUxfQVJHMikgfHwgXAorICAgICFkZWZpbmVkKFNFTkRfVFlQRV9BUkcyKSB8fCBcCisgICAgIWRlZmluZWQoU0VORF9UWVBFX0FSRzMpIHx8IFwKKyAgICAhZGVmaW5lZChTRU5EX1RZUEVfQVJHNCkgfHwgXAorICAgICFkZWZpbmVkKFNFTkRfVFlQRV9SRVRWKQorICAvKiAqLworICBFcnJvciBNaXNzaW5nX2RlZmluaXRpb25fb2ZfcmV0dXJuX2FuZF9hcmd1bWVudHNfdHlwZXNfb2Zfc2VuZAorICAvKiAqLworI2Vsc2UKKyNkZWZpbmUgc3dyaXRlKHgseSx6KSAoc3NpemVfdClzZW5kKChTRU5EX1RZUEVfQVJHMSkoeCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRU5EX1RZUEVfQVJHMikoeSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRU5EX1RZUEVfQVJHMykoeiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRU5EX1RZUEVfQVJHNCkoU0VORF80VEhfQVJHKSkKKyNlbmRpZgorI2Vsc2UgLyogSEFWRV9TRU5EICovCisjaWZuZGVmIHN3cml0ZQorICAvKiAqLworICBFcnJvciBNaXNzaW5nX2RlZmluaXRpb25fb2ZfbWFjcm9fc3dyaXRlCisgIC8qICovCisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1NFTkQgKi8KKworCisjaWYgMAorI2lmIGRlZmluZWQoSEFWRV9SRUNWRlJPTSkKKy8qCisgKiBDdXJyZW50bHkgcmVjdmZyb20gaXMgb25seSB1c2VkIG9uIHVkcCBzb2NrZXRzLgorICovCisjaWYgIWRlZmluZWQoUkVDVkZST01fVFlQRV9BUkcxKSB8fCBcCisgICAgIWRlZmluZWQoUkVDVkZST01fVFlQRV9BUkcyKSB8fCBcCisgICAgIWRlZmluZWQoUkVDVkZST01fVFlQRV9BUkczKSB8fCBcCisgICAgIWRlZmluZWQoUkVDVkZST01fVFlQRV9BUkc0KSB8fCBcCisgICAgIWRlZmluZWQoUkVDVkZST01fVFlQRV9BUkc1KSB8fCBcCisgICAgIWRlZmluZWQoUkVDVkZST01fVFlQRV9BUkc2KSB8fCBcCisgICAgIWRlZmluZWQoUkVDVkZST01fVFlQRV9SRVRWKQorICAvKiAqLworICBFcnJvciBNaXNzaW5nX2RlZmluaXRpb25fb2ZfcmV0dXJuX2FuZF9hcmd1bWVudHNfdHlwZXNfb2ZfcmVjdmZyb20KKyAgLyogKi8KKyNlbHNlCisjZGVmaW5lIHNyZWFkZnJvbShzLGIsYmwsZixmbCkgKHNzaXplX3QpcmVjdmZyb20oKFJFQ1ZGUk9NX1RZUEVfQVJHMSkgIChzKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVDVkZST01fVFlQRV9BUkcyICopKGIpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUNWRlJPTV9UWVBFX0FSRzMpICAoYmwpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJFQ1ZGUk9NX1RZUEVfQVJHNCkgICgwKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVDVkZST01fVFlQRV9BUkc1ICopKGYpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUNWRlJPTV9UWVBFX0FSRzYgKikoZmwpKQorI2VuZGlmCisjZWxzZSAvKiBIQVZFX1JFQ1ZGUk9NICovCisjaWZuZGVmIHNyZWFkZnJvbQorICAvKiAqLworICBFcnJvciBNaXNzaW5nX2RlZmluaXRpb25fb2ZfbWFjcm9fc3JlYWRmcm9tCisgIC8qICovCisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1JFQ1ZGUk9NICovCisKKworI2lmZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHNl9JU19WT0lECisjICBkZWZpbmUgUkVDVkZST01fQVJHNl9UIGludAorI2Vsc2UKKyMgIGRlZmluZSBSRUNWRlJPTV9BUkc2X1QgUkVDVkZST01fVFlQRV9BUkc2CisjZW5kaWYKKyNlbmRpZiAvKiBpZiAwICovCisKKworLyoKKyAqIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5pdGlvbiB1c2VkIHRvIGNsb3NlIGEgc29ja2V0LgorICovCisKKyNpZiBkZWZpbmVkKEhBVkVfQ0xPU0VTT0NLRVQpCisjICBkZWZpbmUgc2Nsb3NlKHgpICBjbG9zZXNvY2tldCgoeCkpCisjZWxpZiBkZWZpbmVkKEhBVkVfQ0xPU0VTT0NLRVRfQ0FNRUwpCisjICBkZWZpbmUgc2Nsb3NlKHgpICBDbG9zZVNvY2tldCgoeCkpCisjZWxpZiBkZWZpbmVkKEhBVkVfQ0xPU0VfUykKKyMgIGRlZmluZSBzY2xvc2UoeCkgIGNsb3NlX3MoKHgpKQorI2Vsc2UKKyMgIGRlZmluZSBzY2xvc2UoeCkgIGNsb3NlKCh4KSkKKyNlbmRpZgorCisKKy8qCisgKiBVcHBlcmNhc2UgbWFjcm8gdmVyc2lvbnMgb2YgQU5TSS9JU08gaXMqKCkgZnVuY3Rpb25zL21hY3JvcyB3aGljaAorICogYXZvaWQgbmVnYXRpdmUgbnVtYmVyIGlucHV0cyB3aXRoIGFyZ3VtZW50IGJ5dGUgY29kZXMgPiAxMjcuCisgKi8KKworI2RlZmluZSBJU1NQQUNFKHgpICAoaXNzcGFjZSgoaW50KSAgKCh1bnNpZ25lZCBjaGFyKXgpKSkKKyNkZWZpbmUgSVNESUdJVCh4KSAgKGlzZGlnaXQoKGludCkgICgodW5zaWduZWQgY2hhcil4KSkpCisjZGVmaW5lIElTQUxOVU0oeCkgIChpc2FsbnVtKChpbnQpICAoKHVuc2lnbmVkIGNoYXIpeCkpKQorI2RlZmluZSBJU1hESUdJVCh4KSAoaXN4ZGlnaXQoKGludCkgKCh1bnNpZ25lZCBjaGFyKXgpKSkKKyNkZWZpbmUgSVNHUkFQSCh4KSAgKGlzZ3JhcGgoKGludCkgICgodW5zaWduZWQgY2hhcil4KSkpCisjZGVmaW5lIElTQUxQSEEoeCkgIChpc2FscGhhKChpbnQpICAoKHVuc2lnbmVkIGNoYXIpeCkpKQorI2RlZmluZSBJU1BSSU5UKHgpICAoaXNwcmludCgoaW50KSAgKCh1bnNpZ25lZCBjaGFyKXgpKSkKKyNkZWZpbmUgSVNVUFBFUih4KSAgKGlzdXBwZXIoKGludCkgICgodW5zaWduZWQgY2hhcil4KSkpCisjZGVmaW5lIElTTE9XRVIoeCkgIChpc2xvd2VyKChpbnQpICAoKHVuc2lnbmVkIGNoYXIpeCkpKQorI2RlZmluZSBJU0FTQ0lJKHgpICAoaXNhc2NpaSgoaW50KSAgKCh1bnNpZ25lZCBjaGFyKXgpKSkKKworI2RlZmluZSBJU0JMQU5LKHgpICAoaW50KSgoKCh1bnNpZ25lZCBjaGFyKXgpID09ICcgJykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXgpID09ICdcdCcpKQorCisjZGVmaW5lIFRPTE9XRVIoeCkgICh0b2xvd2VyKChpbnQpICAoKHVuc2lnbmVkIGNoYXIpeCkpKQorCisKKy8qCisgKiAnYm9vbCcgc3R1ZmYgY29tcGF0aWJsZSB3aXRoIEhQLVVYIGhlYWRlcnMuCisgKi8KKworI2lmIGRlZmluZWQoX19ocHV4KSAmJiAhZGVmaW5lZChIQVZFX0JPT0xfVCkKKyAgIHR5cGVkZWYgaW50IGJvb2w7CisjICBkZWZpbmUgZmFsc2UgMAorIyAgZGVmaW5lIHRydWUgMQorIyAgZGVmaW5lIEhBVkVfQk9PTF9UCisjZW5kaWYKKworCisvKgorICogJ2Jvb2wnIGV4aXN0cyBvbiBwbGF0Zm9ybXMgd2l0aCA8c3RkYm9vbC5oPiwgaS5lLiBDOTkgcGxhdGZvcm1zLgorICogT24gbm9uLUM5OSBwbGF0Zm9ybXMgdGhlcmUncyBubyBib29sLCBzbyBkZWZpbmUgYW4gZW51bSBmb3IgdGhhdC4KKyAqIE9uIEM5OSBwbGF0Zm9ybXMgJ2ZhbHNlJyBhbmQgJ3RydWUnIGFsc28gZXhpc3QuIEVudW0gdXNlcyBhCisgKiBnbG9iYWwgbmFtZXNwYWNlIHRob3VnaCwgc28gdXNlIGJvb2xfZmFsc2UgYW5kIGJvb2xfdHJ1ZS4KKyAqLworCisjaWZuZGVmIEhBVkVfQk9PTF9UCisgIHR5cGVkZWYgZW51bSB7CisgICAgICBib29sX2ZhbHNlID0gMCwKKyAgICAgIGJvb2xfdHJ1ZSAgPSAxCisgIH0gYm9vbDsKKworLyoKKyAqIFVzZSBhIGRlZmluZSB0byBsZXQgJ3RydWUnIGFuZCAnZmFsc2UnIHVzZSB0aG9zZSBlbnVtcy4gIFRoZXJlCisgKiBhcmUgY3VycmVudGx5IG5vIHVzZSBvZiB0cnVlIGFuZCBmYWxzZSBpbiBsaWJjdXJsIHByb3BlciwgYnV0CisgKiB0aGVyZSBhcmUgc29tZSBpbiB0aGUgZXhhbXBsZXMuIFRoaXMgd2lsbCBjYXRlciBmb3IgYW55IGxhdGVyCisgKiBjb2RlIGhhcHBlbmluZyB0byB1c2UgdHJ1ZSBhbmQgZmFsc2UuCisgKi8KKyMgIGRlZmluZSBmYWxzZSBib29sX2ZhbHNlCisjICBkZWZpbmUgdHJ1ZSAgYm9vbF90cnVlCisjICBkZWZpbmUgSEFWRV9CT09MX1QKKyNlbmRpZgorCisKKy8qCisgKiBSZWRlZmluZSBUUlVFIGFuZCBGQUxTRSB0b28sIHRvIGNhdGNoIGN1cnJlbnQgdXNlLiBXaXRoIHRoaXMKKyAqIGNoYW5nZSwgJ2Jvb2wgZm91bmQgPSAxJyB3aWxsIGdpdmUgYSB3YXJuaW5nIG9uIE1JUFNQcm8sIGJ1dAorICogJ2Jvb2wgZm91bmQgPSBUUlVFJyB3aWxsIG5vdC4gQ2hhbmdlIHRlc3RlZCBvbiBJUklYL01JUFNQcm8sCisgKiBBSVggNS4xL1hsYywgVHJ1NjQgNS4xL2NjLCB3L21ha2UgdGVzdCB0b28uCisgKi8KKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgdHJ1ZQorI2VuZGlmCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFIGZhbHNlCisjZW5kaWYKKworCisvKgorICogTWFjcm8gV0hJTEVfRkFMU0UgbWF5IGJlIHVzZWQgdG8gYnVpbGQgc2luZ2xlLWl0ZXJhdGlvbiBkby13aGlsZSBsb29wcywKKyAqIGF2b2lkaW5nIGNvbXBpbGVyIHdhcm5pbmdzLiBNb3N0bHkgaW50ZW5kZWQgZm9yIG90aGVyIG1hY3JvIGRlZmluaXRpb25zLgorICovCisKKyNkZWZpbmUgV0hJTEVfRkFMU0UgIHdoaWxlKDApCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX1BPQ0NfXykKKyMgIHVuZGVmIFdISUxFX0ZBTFNFCisjICBpZiAoX01TQ19WRVIgPCAxNTAwKQorIyAgICBkZWZpbmUgV0hJTEVfRkFMU0UgIHdoaWxlKDEsIDApCisjICBlbHNlCisjICAgIGRlZmluZSBXSElMRV9GQUxTRSBcCitfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSBcCitfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDEyNykpIFwKK3doaWxlKDApIFwKK19fcHJhZ21hKHdhcm5pbmcocG9wKSkKKyMgIGVuZGlmCisjZW5kaWYKKworCisvKgorICogVHlwZWRlZiB0byAnaW50JyBpZiBzaWdfYXRvbWljX3QgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlLgorICovCisKKyNpZm5kZWYgSEFWRV9TSUdfQVRPTUlDX1QKK3R5cGVkZWYgaW50IHNpZ19hdG9taWNfdDsKKyNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QKKyNlbmRpZgorCisKKy8qCisgKiBDb252ZW5pZW5jZSBTSUdfQVRPTUlDX1QgZGVmaW5pdGlvbgorICovCisKKyNpZmRlZiBIQVZFX1NJR19BVE9NSUNfVF9WT0xBVElMRQorI2RlZmluZSBTSUdfQVRPTUlDX1Qgc3RhdGljIHNpZ19hdG9taWNfdAorI2Vsc2UKKyNkZWZpbmUgU0lHX0FUT01JQ19UIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QKKyNlbmRpZgorCisKKy8qCisgKiBEZWZhdWx0IHJldHVybiB0eXBlIGZvciBzaWduYWwgaGFuZGxlcnMuCisgKi8KKworI2lmbmRlZiBSRVRTSUdUWVBFCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorI2VuZGlmCisKKworLyoKKyAqIE1hY3JvIHVzZWQgdG8gaW5jbHVkZSBjb2RlIG9ubHkgaW4gZGVidWcgYnVpbGRzLgorICovCisKKyNpZmRlZiBERUJVR0JVSUxECisjZGVmaW5lIERFQlVHRih4KSB4CisjZWxzZQorI2RlZmluZSBERUJVR0YoeCkgZG8geyB9IFdISUxFX0ZBTFNFCisjZW5kaWYKKworCisvKgorICogTWFjcm8gdXNlZCB0byBpbmNsdWRlIGFzc2VydGlvbiBjb2RlIG9ubHkgaW4gZGVidWcgYnVpbGRzLgorICovCisKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmIGRlZmluZWQoSEFWRV9BU1NFUlRfSCkKKyNkZWZpbmUgREVCVUdBU1NFUlQoeCkgYXNzZXJ0KHgpCisjZWxzZQorI2RlZmluZSBERUJVR0FTU0VSVCh4KSBkbyB7IH0gV0hJTEVfRkFMU0UKKyNlbmRpZgorCisKKy8qCisgKiBNYWNybyBTT0NLRVJSTk8gLyBTRVRfU09DS0VSUk5PKCkgcmV0dXJucyAvIHNldHMgdGhlICpzb2NrZXQtcmVsYXRlZCogZXJybm8KKyAqIChvciBlcXVpdmFsZW50KSBvbiB0aGlzIHBsYXRmb3JtIHRvIGhpZGUgcGxhdGZvcm0gZGV0YWlscyB0byBjb2RlIHVzaW5nIGl0LgorICovCisKKyNpZmRlZiBVU0VfV0lOU09DSworI2RlZmluZSBTT0NLRVJSTk8gICAgICAgICAoKGludClXU0FHZXRMYXN0RXJyb3IoKSkKKyNkZWZpbmUgU0VUX1NPQ0tFUlJOTyh4KSAgKFdTQVNldExhc3RFcnJvcigoaW50KSh4KSkpCisjZWxzZQorI2RlZmluZSBTT0NLRVJSTk8gICAgICAgICAoZXJybm8pCisjZGVmaW5lIFNFVF9TT0NLRVJSTk8oeCkgIChlcnJubyA9ICh4KSkKKyNlbmRpZgorCisKKy8qCisgKiBNYWNybyBFUlJOTyAvIFNFVF9FUlJOTygpIHJldHVybnMgLyBzZXRzIHRoZSBOT1QgKnNvY2tldC1yZWxhdGVkKiBlcnJubworICogKG9yIGVxdWl2YWxlbnQpIG9uIHRoaXMgcGxhdGZvcm0gdG8gaGlkZSBwbGF0Zm9ybSBkZXRhaWxzIHRvIGNvZGUgdXNpbmcgaXQuCisgKi8KKworI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKFdBVFQzMikKKyNkZWZpbmUgRVJSTk8gICAgICAgICAoKGludClHZXRMYXN0RXJyb3IoKSkKKyNkZWZpbmUgU0VUX0VSUk5PKHgpICAoU2V0TGFzdEVycm9yKChEV09SRCkoeCkpKQorI2Vsc2UKKyNkZWZpbmUgRVJSTk8gICAgICAgICAoZXJybm8pCisjZGVmaW5lIFNFVF9FUlJOTyh4KSAgKGVycm5vID0gKHgpKQorI2VuZGlmCisKKworLyoKKyAqIFBvcnRhYmxlIGVycm9yIG51bWJlciBzeW1ib2xpYyBuYW1lcyBkZWZpbmVkIHRvIFdpbnNvY2sgZXJyb3IgY29kZXMuCisgKi8KKworI2lmZGVmIFVTRV9XSU5TT0NLCisjdW5kZWYgIEVCQURGICAgICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVCQURGICAgICAgICAgICAgV1NBRUJBREYKKyN1bmRlZiAgRUlOVFIgICAgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUlOVFIgICAgICAgICAgICBXU0FFSU5UUgorI3VuZGVmICBFSU5WQUwgICAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFSU5WQUwgICAgICAgICAgIFdTQUVJTlZBTAorI3VuZGVmICBFV09VTERCTE9DSyAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFV09VTERCTE9DSyAgICAgIFdTQUVXT1VMREJMT0NLCisjdW5kZWYgIEVJTlBST0dSRVNTICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVJTlBST0dSRVNTICAgICAgV1NBRUlOUFJPR1JFU1MKKyN1bmRlZiAgRUFMUkVBRFkgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUFMUkVBRFkgICAgICAgICBXU0FFQUxSRUFEWQorI3VuZGVmICBFTk9UU09DSyAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFTk9UU09DSyAgICAgICAgIFdTQUVOT1RTT0NLCisjdW5kZWYgIEVERVNUQUREUlJFUSAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVERVNUQUREUlJFUSAgICAgV1NBRURFU1RBRERSUkVRCisjdW5kZWYgIEVNU0dTSVpFICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVNU0dTSVpFICAgICAgICAgV1NBRU1TR1NJWkUKKyN1bmRlZiAgRVBST1RPVFlQRSAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRVBST1RPVFlQRSAgICAgICBXU0FFUFJPVE9UWVBFCisjdW5kZWYgIEVOT1BST1RPT1BUICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVOT1BST1RPT1BUICAgICAgV1NBRU5PUFJPVE9PUFQKKyN1bmRlZiAgRVBST1RPTk9TVVBQT1JUICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRVBST1RPTk9TVVBQT1JUICBXU0FFUFJPVE9OT1NVUFBPUlQKKyNkZWZpbmUgRVNPQ0tUTk9TVVBQT1JUICBXU0FFU09DS1ROT1NVUFBPUlQKKyN1bmRlZiAgRU9QTk9UU1VQUCAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRU9QTk9UU1VQUCAgICAgICBXU0FFT1BOT1RTVVBQCisjZGVmaW5lIEVQRk5PU1VQUE9SVCAgICAgV1NBRVBGTk9TVVBQT1JUCisjdW5kZWYgIEVBRk5PU1VQUE9SVCAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVBRk5PU1VQUE9SVCAgICAgV1NBRUFGTk9TVVBQT1JUCisjdW5kZWYgIEVBRERSSU5VU0UgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVBRERSSU5VU0UgICAgICAgV1NBRUFERFJJTlVTRQorI3VuZGVmICBFQUREUk5PVEFWQUlMICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFQUREUk5PVEFWQUlMICAgIFdTQUVBRERSTk9UQVZBSUwKKyN1bmRlZiAgRU5FVERPV04gICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRU5FVERPV04gICAgICAgICBXU0FFTkVURE9XTgorI3VuZGVmICBFTkVUVU5SRUFDSCAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFTkVUVU5SRUFDSCAgICAgIFdTQUVORVRVTlJFQUNICisjdW5kZWYgIEVORVRSRVNFVCAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVORVRSRVNFVCAgICAgICAgV1NBRU5FVFJFU0VUCisjdW5kZWYgIEVDT05OQUJPUlRFRCAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVDT05OQUJPUlRFRCAgICAgV1NBRUNPTk5BQk9SVEVECisjdW5kZWYgIEVDT05OUkVTRVQgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVDT05OUkVTRVQgICAgICAgV1NBRUNPTk5SRVNFVAorI3VuZGVmICBFTk9CVUZTICAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFTk9CVUZTICAgICAgICAgIFdTQUVOT0JVRlMKKyN1bmRlZiAgRUlTQ09OTiAgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUlTQ09OTiAgICAgICAgICBXU0FFSVNDT05OCisjdW5kZWYgIEVOT1RDT05OICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVOT1RDT05OICAgICAgICAgV1NBRU5PVENPTk4KKyNkZWZpbmUgRVNIVVRET1dOICAgICAgICBXU0FFU0hVVERPV04KKyNkZWZpbmUgRVRPT01BTllSRUZTICAgICBXU0FFVE9PTUFOWVJFRlMKKyN1bmRlZiAgRVRJTUVET1VUICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRVRJTUVET1VUICAgICAgICBXU0FFVElNRURPVVQKKyN1bmRlZiAgRUNPTk5SRUZVU0VEICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUNPTk5SRUZVU0VEICAgICBXU0FFQ09OTlJFRlVTRUQKKyN1bmRlZiAgRUxPT1AgICAgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUxPT1AgICAgICAgICAgICBXU0FFTE9PUAorI2lmbmRlZiBFTkFNRVRPT0xPTkcgICAgIC8qIHBvc3NpYmxlIHByZXZpb3VzIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFTkFNRVRPT0xPTkcgICAgIFdTQUVOQU1FVE9PTE9ORworI2VuZGlmCisjZGVmaW5lIEVIT1NURE9XTiAgICAgICAgV1NBRUhPU1RET1dOCisjdW5kZWYgIEVIT1NUVU5SRUFDSCAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAgV1NBRUhPU1RVTlJFQUNICisjaWZuZGVmIEVOT1RFTVBUWSAgICAgICAgLyogcG9zc2libGUgcHJldmlvdXMgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVOT1RFTVBUWSAgICAgICAgV1NBRU5PVEVNUFRZCisjZW5kaWYKKyNkZWZpbmUgRVBST0NMSU0gICAgICAgICBXU0FFUFJPQ0xJTQorI2RlZmluZSBFVVNFUlMgICAgICAgICAgIFdTQUVVU0VSUworI2RlZmluZSBFRFFVT1QgICAgICAgICAgIFdTQUVEUVVPVAorI2RlZmluZSBFU1RBTEUgICAgICAgICAgIFdTQUVTVEFMRQorI2RlZmluZSBFUkVNT1RFICAgICAgICAgIFdTQUVSRU1PVEUKKyNlbmRpZgorCisKKy8qCisgKiAgQWN0dWFsbHkgdXNlIF9fMzJfZ2V0cHd1aWQoKSBvbiA2NC1iaXQgVk1TIGJ1aWxkcyBmb3IgZ2V0cHd1aWQoKQorICovCisKKyNpZiBkZWZpbmVkKF9fVk1TKSAmJiBcCisgICAgZGVmaW5lZChfX0lOSVRJQUxfUE9JTlRFUl9TSVpFKSAmJiAoX19JTklUSUFMX1BPSU5URVJfU0laRSA9PSA2NCkKKyNkZWZpbmUgZ2V0cHd1aWQgX18zMl9nZXRwd3VpZAorI2VuZGlmCisKKworLyoKKyAqIE1hY3JvIGFyZ3ZfaXRlbV90IGhpZGVzIHBsYXRmb3JtIGRldGFpbHMgdG8gY29kZSB1c2luZyBpdC4KKyAqLworCisjaWZkZWYgX19WTVMKKyNkZWZpbmUgYXJndl9pdGVtX3QgIF9fY2hhcl9wdHIzMgorI2Vsc2UKKyNkZWZpbmUgYXJndl9pdGVtX3QgIGNoYXIgKgorI2VuZGlmCisKKworLyoKKyAqIFdlIHVzZSB0aGlzIFpFUk9fTlVMTCB0byBhdm9pZCBwaWNreSBjb21waWxlciB3YXJuaW5ncywKKyAqIHdoZW4gYXNzaWduaW5nIGEgTlVMTCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gcG9pbnRlciB2YXIuCisgKi8KKworI2RlZmluZSBaRVJPX05VTEwgMAorCisKKyNlbmRpZiAvKiBfX1NFVFVQX09OQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvc3RhbXAtaDEgYi9hcC9hcHAvYy1hcmVzL3NyYy9zdGFtcC1oMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjgwYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvc3RhbXAtaDEKQEAgLTAsMCArMSBAQAordGltZXN0YW1wIGZvciBhcmVzX2NvbmZpZy5oCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy9zdGFtcC1oMiBiL2FwL2FwcC9jLWFyZXMvc3JjL3N0YW1wLWgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNDIwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy9zdGFtcC1oMgpAQCAtMCwwICsxIEBACit0aW1lc3RhbXAgZm9yIGFyZXNfYnVpbGQuaApkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC1kcml2ZXIgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0LWRyaXZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTU3NWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC1kcml2ZXIKQEAgLTAsMCArMSwxNDggQEAKKyMhIC9iaW4vc2gKKyMgdGVzdC1kcml2ZXIgLSBiYXNpYyB0ZXN0c3VpdGUgZHJpdmVyIHNjcmlwdC4KKworc2NyaXB0dmVyc2lvbj0yMDEzLTA3LTEzLjIyOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworIyBNYWtlIHVuY29uZGl0aW9uYWwgZXhwYW5zaW9uIG9mIHVuZGVmaW5lZCB2YXJpYWJsZXMgYW4gZXJyb3IuICBUaGlzCisjIGhlbHBzIGEgbG90IGluIHByZXZlbnRpbmcgdHlwby1yZWxhdGVkIGJ1Z3MuCitzZXQgLXUKKwordXNhZ2VfZXJyb3IgKCkKK3sKKyAgZWNobyAiJDA6ICQqIiA+JjIKKyAgcHJpbnRfdXNhZ2UgPiYyCisgIGV4aXQgMgorfQorCitwcmludF91c2FnZSAoKQoreworICBjYXQgPDxFTkQKK1VzYWdlOgorICB0ZXN0LWRyaXZlciAtLXRlc3QtbmFtZT1OQU1FIC0tbG9nLWZpbGU9UEFUSCAtLXRycy1maWxlPVBBVEgKKyAgICAgICAgICAgICAgWy0tZXhwZWN0LWZhaWx1cmU9e3llc3xub31dIFstLWNvbG9yLXRlc3RzPXt5ZXN8bm99XQorICAgICAgICAgICAgICBbLS1lbmFibGUtaGFyZC1lcnJvcnM9e3llc3xub31dIFstLV0KKyAgICAgICAgICAgICAgVEVTVC1TQ1JJUFQgW1RFU1QtU0NSSVBULUFSR1VNRU5UU10KK1RoZSAnLS10ZXN0LW5hbWUnLCAnLS1sb2ctZmlsZScgYW5kICctLXRycy1maWxlJyBvcHRpb25zIGFyZSBtYW5kYXRvcnkuCitFTkQKK30KKwordGVzdF9uYW1lPSAjIFVzZWQgZm9yIHJlcG9ydGluZy4KK2xvZ19maWxlPSAgIyBXaGVyZSB0byBzYXZlIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3Qgc2NyaXB0LgordHJzX2ZpbGU9ICAjIFdoZXJlIHRvIHNhdmUgdGhlIG1ldGFkYXRhIG9mIHRoZSB0ZXN0IHJ1bi4KK2V4cGVjdF9mYWlsdXJlPW5vCitjb2xvcl90ZXN0cz1ubworZW5hYmxlX2hhcmRfZXJyb3JzPXllcword2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAtLWhlbHApIHByaW50X3VzYWdlOyBleGl0ICQ/OzsKKyAgLS12ZXJzaW9uKSBlY2hvICJ0ZXN0LWRyaXZlciAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OworICAtLXRlc3QtbmFtZSkgdGVzdF9uYW1lPSQyOyBzaGlmdDs7CisgIC0tbG9nLWZpbGUpIGxvZ19maWxlPSQyOyBzaGlmdDs7CisgIC0tdHJzLWZpbGUpIHRyc19maWxlPSQyOyBzaGlmdDs7CisgIC0tY29sb3ItdGVzdHMpIGNvbG9yX3Rlc3RzPSQyOyBzaGlmdDs7CisgIC0tZXhwZWN0LWZhaWx1cmUpIGV4cGVjdF9mYWlsdXJlPSQyOyBzaGlmdDs7CisgIC0tZW5hYmxlLWhhcmQtZXJyb3JzKSBlbmFibGVfaGFyZF9lcnJvcnM9JDI7IHNoaWZ0OzsKKyAgLS0pIHNoaWZ0OyBicmVhazs7CisgIC0qKSB1c2FnZV9lcnJvciAiaW52YWxpZCBvcHRpb246ICckMSciOzsKKyAgICopIGJyZWFrOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCittaXNzaW5nX29wdHM9Cit0ZXN0IHgiJHRlc3RfbmFtZSIgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLXRlc3QtbmFtZSIKK3Rlc3QgeCIkbG9nX2ZpbGUiICA9IHggJiYgbWlzc2luZ19vcHRzPSIkbWlzc2luZ19vcHRzIC0tbG9nLWZpbGUiCit0ZXN0IHgiJHRyc19maWxlIiAgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLXRycy1maWxlIgoraWYgdGVzdCB4IiRtaXNzaW5nX29wdHMiICE9IHg7IHRoZW4KKyAgdXNhZ2VfZXJyb3IgInRoZSBmb2xsb3dpbmcgbWFuZGF0b3J5IG9wdGlvbnMgYXJlIG1pc3Npbmc6JG1pc3Npbmdfb3B0cyIKK2ZpCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgdXNhZ2VfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQiCitmaQorCitpZiB0ZXN0ICRjb2xvcl90ZXN0cyA9IHllczsgdGhlbgorICAjIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggJ2xpYi9hbS9jaGVjay5hbTokKGFtX190dHlfY29sb3JzKScuCisgIHJlZD0nG1swOzMxbScgIyBSZWQuCisgIGdybj0nG1swOzMybScgIyBHcmVlbi4KKyAgbGduPScbWzE7MzJtJyAjIExpZ2h0IGdyZWVuLgorICBibHU9JxtbMTszNG0nICMgQmx1ZS4KKyAgbWduPScbWzA7MzVtJyAjIE1hZ2VudGEuCisgIHN0ZD0nG1ttJyAgICAgIyBObyBjb2xvci4KK2Vsc2UKKyAgcmVkPSBncm49IGxnbj0gYmx1PSBtZ249IHN0ZD0KK2ZpCisKK2RvX2V4aXQ9J3JtIC1mICRsb2dfZmlsZSAkdHJzX2ZpbGU7IChleGl0ICRzdCk7IGV4aXQgJHN0JwordHJhcCAic3Q9MTI5OyAkZG9fZXhpdCIgMQordHJhcCAic3Q9MTMwOyAkZG9fZXhpdCIgMgordHJhcCAic3Q9MTQxOyAkZG9fZXhpdCIgMTMKK3RyYXAgInN0PTE0MzsgJGRvX2V4aXQiIDE1CisKKyMgVGVzdCBzY3JpcHQgaXMgcnVuIGhlcmUuCisiJEAiID4kbG9nX2ZpbGUgMj4mMQorZXN0YXR1cz0kPworCitpZiB0ZXN0ICRlbmFibGVfaGFyZF9lcnJvcnMgPSBubyAmJiB0ZXN0ICRlc3RhdHVzIC1lcSA5OTsgdGhlbgorICB0d2Vha2VkX2VzdGF0dXM9MQorZWxzZQorICB0d2Vha2VkX2VzdGF0dXM9JGVzdGF0dXMKK2ZpCisKK2Nhc2UgJHR3ZWFrZWRfZXN0YXR1czokZXhwZWN0X2ZhaWx1cmUgaW4KKyAgMDp5ZXMpIGNvbD0kcmVkIHJlcz1YUEFTUyByZWNoZWNrPXllcyBnY29weT15ZXM7OworICAwOiopICAgY29sPSRncm4gcmVzPVBBU1MgIHJlY2hlY2s9bm8gIGdjb3B5PW5vOzsKKyAgNzc6KikgIGNvbD0kYmx1IHJlcz1TS0lQICByZWNoZWNrPW5vICBnY29weT15ZXM7OworICA5OToqKSAgY29sPSRtZ24gcmVzPUVSUk9SIHJlY2hlY2s9eWVzIGdjb3B5PXllczs7CisgICo6eWVzKSBjb2w9JGxnbiByZXM9WEZBSUwgcmVjaGVjaz1ubyAgZ2NvcHk9eWVzOzsKKyAgKjoqKSAgIGNvbD0kcmVkIHJlcz1GQUlMICByZWNoZWNrPXllcyBnY29weT15ZXM7OworZXNhYworCisjIFJlcG9ydCB0aGUgdGVzdCBvdXRjb21lIGFuZCBleGl0IHN0YXR1cyBpbiB0aGUgbG9ncywgc28gdGhhdCBvbmUgY2FuCisjIGtub3cgd2hldGhlciB0aGUgdGVzdCBwYXNzZWQgb3IgZmFpbGVkIHNpbXBseSBieSBsb29raW5nIGF0IHRoZSAnLmxvZycKKyMgZmlsZSwgd2l0aG91dCB0aGUgbmVlZCBvZiBhbHNvIHBlYWtpbmcgaW50byB0aGUgY29ycmVzcG9uZGluZyAnLnRycycKKyMgZmlsZSAoYXV0b21ha2UgYnVnIzExODE0KS4KK2VjaG8gIiRyZXMgJHRlc3RfbmFtZSAoZXhpdCBzdGF0dXM6ICRlc3RhdHVzKSIgPj4kbG9nX2ZpbGUKKworIyBSZXBvcnQgb3V0Y29tZSB0byBjb25zb2xlLgorZWNobyAiJHtjb2x9JHtyZXN9JHtzdGR9OiAkdGVzdF9uYW1lIgorCisjIFJlZ2lzdGVyIHRoZSB0ZXN0IHJlc3VsdCwgYW5kIG90aGVyIHJlbGV2YW50IG1ldGFkYXRhLgorZWNobyAiOnRlc3QtcmVzdWx0OiAkcmVzIiA+ICR0cnNfZmlsZQorZWNobyAiOmdsb2JhbC10ZXN0LXJlc3VsdDogJHJlcyIgPj4gJHRyc19maWxlCitlY2hvICI6cmVjaGVjazogJHJlY2hlY2siID4+ICR0cnNfZmlsZQorZWNobyAiOmNvcHktaW4tZ2xvYmFsLWxvZzogJGdjb3B5IiA+PiAkdHJzX2ZpbGUKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvTWFrZWZpbGUuYW0gYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzcxYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzkgQEAKKyMgV2hlcmUgdG8gZmluZCB0aGUgYy1hcmVzIHNvdXJjZSBjb2RlOyBuZWVkZWQgYmVjYXVzZSB0aGUgdGVzdHMgdXNlIGxpYnJhcnktaW50ZXJuYWwgaGVhZGVycworQVJFU19TUkNfRElSID0gLi4KKyMgV2hlcmUgdG8gZmluZCB0aGUgYnVpbHQgYy1hcmVzIHN0YXRpYyBsaWJyYXJ5CitBUkVTX0JMRF9ESVIgPSAuLgorQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KK0FDTE9DQUxfQU1GTEFHUyA9IC1JIC4uL200CitHTU9DS19ESVIgPSBnbW9jay0xLjcuMAorR1RFU1RfRElSID0gJChHTU9DS19ESVIpL2d0ZXN0CisjIE5vdGUgdXNlIG9mIC1pc3lzdGVtIHRvIGZvcmNlIHVzZSBvZiBsb2NhbCBnTW9jay9nVGVzdCBldmVuIGlmIHRoZXJlJ3MgYW4gaW5zdGFsbGVkIHZlcnNpb24uCitDUFBGTEFHUyArPSAtSSQoQVJFU19TUkNfRElSKSAtaXN5c3RlbSAkKEdURVNUX0RJUikvaW5jbHVkZSAtaXN5c3RlbSAkKEdNT0NLX0RJUikvaW5jbHVkZQorQ1hYRkxBR1MgKz0gLVdhbGwgJChQVEhSRUFEX0NGTEFHUykKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIFRFU1RTT1VSQ0VTLCBURVNUSEVBREVSUyBhbmQgRlVaWlNPVVJDRVMgZGVmaW5lcworaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworVEVTVFMgPSBhcmVzdGVzdCBmdXp6Y2hlY2suc2gKKworbm9pbnN0X1BST0dSQU1TID0gYXJlc3Rlc3QgYXJlc2Z1enogZG5zZHVtcAorYXJlc3Rlc3RfU09VUkNFUyA9ICQoVEVTVFNPVVJDRVMpICQoVEVTVEhFQURFUlMpCithcmVzdGVzdF9MREFERCA9IGxpYmdtb2NrLmxhIGxpYmd0ZXN0LmxhICQoQVJFU19CTERfRElSKS9saWJjYXJlcy5sYSAkKFBUSFJFQURfTElCUykKKworIyBOb3QgaW50ZXJlc3RlZCBpbiBjb3ZlcmFnZSBvZiB0ZXN0IGNvZGUsIGJ1dCBsaW5raW5nIHRoZSB0ZXN0IGJpbmFyeSBuZWVkcyB0aGUgY292ZXJhZ2Ugb3B0aW9uCitAQ09ERV9DT1ZFUkFHRV9SVUxFU0AKK2FyZXN0ZXN0X0xERkxBR1MgPSAkKENPREVfQ09WRVJBR0VfTERGTEFHUykKKworbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ21vY2subGEgbGliZ3Rlc3QubGEKKworbGliZ21vY2tfbGFfU09VUkNFUyA9ICQoR01PQ0tfRElSKS9zcmMvZ21vY2stYWxsLmNjCitsaWJnbW9ja19sYV9DUFBGTEFHUyA9IC1pc3lzdGVtICQoR1RFU1RfRElSKS9pbmNsdWRlIC1JJChHVEVTVF9ESVIpIC1pc3lzdGVtICQoR01PQ0tfRElSKS9pbmNsdWRlIC1JJChHTU9DS19ESVIpCitsaWJndGVzdF9sYV9TT1VSQ0VTID0gJChHVEVTVF9ESVIpL3NyYy9ndGVzdC1hbGwuY2MKK2xpYmd0ZXN0X2xhX0NQUEZMQUdTID0gLWlzeXN0ZW0gJChHVEVTVF9ESVIpL2luY2x1ZGUgLUkkKEdURVNUX0RJUikgLWlzeXN0ZW0gJChHTU9DS19ESVIpL2luY2x1ZGUgLUkkKEdNT0NLX0RJUikKKworYXJlc2Z1enpfU09VUkNFUyA9ICQoRlVaWlNPVVJDRVMpCithcmVzZnV6el9MREFERCA9ICQoQVJFU19CTERfRElSKS9saWJjYXJlcy5sYQorCitkbnNkdW1wX1NPVVJDRVMgPSAkKERVTVBTT1VSQ0VTKQorZG5zZHVtcF9MREFERCA9ICQoQVJFU19CTERfRElSKS9saWJjYXJlcy5sYQorCit0ZXN0OiBjaGVjawpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9NYWtlZmlsZS5pbiBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1OGYwYwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMzc0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCitWUEFUSCA9IEBzcmNkaXJACithbV9faXNfZ251X21ha2UgPSB7IFwKKyAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCisgICAgZmFsc2U7IFwKKyAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKKyAgICB0cnVlOyBcCisgIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKKyAgICB0cnVlOyBcCisgIGVsc2UgXAorICAgIGZhbHNlOyBcCisgIGZpOyBcCit9CithbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisgICAgICA/KSA7OyBcCisgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorICAgICAgICAgZXhpdCAxOzsgXAorICBlc2FjOyBcCisgIGhhc19vcHQ9bm87IFwKKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorICBlbHNlIFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgYnM9XFw7IFwKKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCisgICAgZXNhYzsgXAorICBmaTsgXAorICBza2lwX25leHQ9bm87IFwKKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorICB7IFwKKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorICB9OyBcCisgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICBlc2FjOyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorICAgIGVzYWM7IFwKKyAgZG9uZTsgXAorICB0ZXN0ICQkaGFzX29wdCA9IHllcworYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitURVNUUyA9IGFyZXN0ZXN0JChFWEVFWFQpIGZ1enpjaGVjay5zaAorbm9pbnN0X1BST0dSQU1TID0gYXJlc3Rlc3QkKEVYRUVYVCkgYXJlc2Z1enokKEVYRUVYVCkgZG5zZHVtcCQoRVhFRVhUKQorc3ViZGlyID0gLgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvLi4vbTQvYXhfY2hlY2tfdXNlcl9uYW1lc3BhY2UubTQgXAorCSQodG9wX3NyY2RpcikvLi4vbTQvYXhfY2hlY2tfdXRzX25hbWVzcGFjZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS8uLi9tNC9heF9jb2RlX2NvdmVyYWdlLm00IFwKKwkkKHRvcF9zcmNkaXIpLy4uL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS8uLi9tNC9heF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpLy4uL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvLi4vbTQvbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpLy4uL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvLi4vbTQvbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpLy4uL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29uZmlndXJlIFwKKwkkKGFtX19jb25maWd1cmVfZGVwcykgJChhbV9fRElTVF9DT01NT04pCithbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpLy4uL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSBjb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorbGliZ21vY2tfbGFfTElCQUREID0KK2FtX2xpYmdtb2NrX2xhX09CSkVDVFMgPSBsaWJnbW9ja19sYS1nbW9jay1hbGwubG8KK2xpYmdtb2NrX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdtb2NrX2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithbV9fdl9sdF8xID0gCitsaWJndGVzdF9sYV9MSUJBREQgPQorYW1fbGliZ3Rlc3RfbGFfT0JKRUNUUyA9IGxpYmd0ZXN0X2xhLWd0ZXN0LWFsbC5sbworbGliZ3Rlc3RfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3Rlc3RfbGFfT0JKRUNUUykKK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCithbV9fb2JqZWN0c18xID0gYXJlcy10ZXN0LWZ1enouJChPQkpFWFQpIGFyZXMtZnV6ei4kKE9CSkVYVCkKK2FtX2FyZXNmdXp6X09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpCithcmVzZnV6el9PQkpFQ1RTID0gJChhbV9hcmVzZnV6el9PQkpFQ1RTKQorYXJlc2Z1enpfREVQRU5ERU5DSUVTID0gJChBUkVTX0JMRF9ESVIpL2xpYmNhcmVzLmxhCithbV9fb2JqZWN0c18yID0gYXJlcy10ZXN0LW1haW4uJChPQkpFWFQpIGFyZXMtdGVzdC1pbml0LiQoT0JKRVhUKSBcCisJYXJlcy10ZXN0LiQoT0JKRVhUKSBhcmVzLXRlc3QtbnMuJChPQkpFWFQpIFwKKwlhcmVzLXRlc3QtcGFyc2UuJChPQkpFWFQpIGFyZXMtdGVzdC1wYXJzZS1hLiQoT0JKRVhUKSBcCisJYXJlcy10ZXN0LXBhcnNlLWFhYWEuJChPQkpFWFQpIGFyZXMtdGVzdC1wYXJzZS1teC4kKE9CSkVYVCkgXAorCWFyZXMtdGVzdC1wYXJzZS1uYXB0ci4kKE9CSkVYVCkgYXJlcy10ZXN0LXBhcnNlLW5zLiQoT0JKRVhUKSBcCisJYXJlcy10ZXN0LXBhcnNlLXB0ci4kKE9CSkVYVCkgYXJlcy10ZXN0LXBhcnNlLXNvYS4kKE9CSkVYVCkgXAorCWFyZXMtdGVzdC1wYXJzZS1zcnYuJChPQkpFWFQpIGFyZXMtdGVzdC1wYXJzZS10eHQuJChPQkpFWFQpIFwKKwlhcmVzLXRlc3QtbWlzYy4kKE9CSkVYVCkgYXJlcy10ZXN0LWxpdmUuJChPQkpFWFQpIFwKKwlhcmVzLXRlc3QtbW9jay4kKE9CSkVYVCkgYXJlcy10ZXN0LWludGVybmFsLiQoT0JKRVhUKSBcCisJZG5zLXByb3RvLiQoT0JKRVhUKSBkbnMtcHJvdG8tdGVzdC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzMgPQorYW1fYXJlc3Rlc3RfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKQorYXJlc3Rlc3RfT0JKRUNUUyA9ICQoYW1fYXJlc3Rlc3RfT0JKRUNUUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CithcmVzdGVzdF9ERVBFTkRFTkNJRVMgPSBsaWJnbW9jay5sYSBsaWJndGVzdC5sYSBcCisJJChBUkVTX0JMRF9ESVIpL2xpYmNhcmVzLmxhICQoYW1fX0RFUEVOREVOQ0lFU18xKQorYXJlc3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDWFhMRCkgJChBTV9DWFhGTEFHUykgXAorCSQoQ1hYRkxBR1MpICQoYXJlc3Rlc3RfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX29iamVjdHNfNCA9IGRucy1wcm90by4kKE9CSkVYVCkgZG5zLWR1bXAuJChPQkpFWFQpCithbV9kbnNkdW1wX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzQpCitkbnNkdW1wX09CSkVDVFMgPSAkKGFtX2Ruc2R1bXBfT0JKRUNUUykKK2Ruc2R1bXBfREVQRU5ERU5DSUVTID0gJChBUkVTX0JMRF9ESVIpL2xpYmNhcmVzLmxhCitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNACitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS8uLi9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKK2FtX192X0NDXzEgPSAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOworYW1fX3ZfQ0NMRF8xID0gCitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitBTV9WX0NYWCA9ICQoYW1fX3ZfQ1hYX0BBTV9WQCkKK2FtX192X0NYWF8gPSAkKGFtX192X0NYWF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NYWF8wID0gQGVjaG8gIiAgQ1hYICAgICAiICRAOworYW1fX3ZfQ1hYXzEgPSAKK0NYWExEID0gJChDWFgpCitDWFhMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSBcCisJJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NYWExEID0gJChhbV9fdl9DWFhMRF9AQU1fVkApCithbV9fdl9DWFhMRF8gPSAkKGFtX192X0NYWExEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ1hYTERfMCA9IEBlY2hvICIgIENYWExEICAgIiAkQDsKK2FtX192X0NYWExEXzEgPSAKK1NPVVJDRVMgPSAkKGxpYmdtb2NrX2xhX1NPVVJDRVMpICQobGliZ3Rlc3RfbGFfU09VUkNFUykgXAorCSQoYXJlc2Z1enpfU09VUkNFUykgJChhcmVzdGVzdF9TT1VSQ0VTKSAkKGRuc2R1bXBfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGliZ21vY2tfbGFfU09VUkNFUykgJChsaWJndGVzdF9sYV9TT1VSQ0VTKSBcCisJJChhcmVzZnV6el9TT1VSQ0VTKSAkKGFyZXN0ZXN0X1NPVVJDRVMpICQoZG5zZHVtcF9TT1VSQ0VTKQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSBcCisJJChMSVNQKWNvbmZpZy5oLmluCisjIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKyMgKm5vdCogcHJlc2VydmVkLgorYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCisgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKyAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCisnCisjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisjIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCithbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworQ1NDT1BFID0gY3Njb3BlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9IGNzY29wZSBjaGVjayByZWNoZWNrCithbV9fdHR5X2NvbG9yc19kdW1teSA9IFwKKyAgbWduPSByZWQ9IGdybj0gbGduPSBibHU9IGJyZz0gc3RkPTsgXAorICBhbV9fY29sb3JfdGVzdHM9bm8KK2FtX190dHlfY29sb3JzID0geyBcCisgICQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpOyBcCisgIGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYbm87IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz1ubzsgXAorICBlbGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYYWx3YXlzOyB0aGVuIFwKKyAgICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCisgIGVsaWYgdGVzdCAiWCQkVEVSTSIgIT0gWGR1bWIgJiYgeyB0ZXN0IC10IDE7IH0gMj4vZGV2L251bGw7IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKKyAgZmk7IFwKKyAgaWYgdGVzdCAkJGFtX19jb2xvcl90ZXN0cyA9IHllczsgdGhlbiBcCisgICAgcmVkPScbWzA7MzFtJzsgXAorICAgIGdybj0nG1swOzMybSc7IFwKKyAgICBsZ249JxtbMTszMm0nOyBcCisgICAgYmx1PScbWzE7MzRtJzsgXAorICAgIG1nbj0nG1swOzM1bSc7IFwKKyAgICBicmc9JxtbMW0nOyBcCisgICAgc3RkPScbW20nOyBcCisgIGZpOyBcCit9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19yZWNoZWNrX3J4ID0gXlsgCV0qOnJlY2hlY2s6WyAJXSoKK2FtX19nbG9iYWxfdGVzdF9yZXN1bHRfcnggPSBeWyAJXSo6Z2xvYmFsLXRlc3QtcmVzdWx0OlsgCV0qCithbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4ID0gXlsgCV0qOmNvcHktaW4tZ2xvYmFsLWxvZzpbIAldKgorIyBBIGNvbW1hbmQgdGhhdCwgZ2l2ZW4gYSBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3QgbmFtZXMgb24gdGhlCisjIHN0YW5kYXJkIGlucHV0LCBwcmludCB0aGUgbmFtZSBvZiB0aGUgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcmUtcnVuCisjIHVwb24gIm1ha2UgcmVjaGVjayIuCithbV9fbGlzdF9yZWNoZWNrX3Rlc3RzID0gJChBV0spICd7IFwKKyAgcmVjaGVjayA9IDE7IFwKKyAgd2hpbGUgKChyYyA9IChnZXRsaW5lIGxpbmUgPCAoJCQwICIudHJzIikpKSAhPSAwKSBcCisgICAgeyBcCisgICAgICBpZiAocmMgPCAwKSBcCisgICAgICAgIHsgXAorICAgICAgICAgIGlmICgoZ2V0bGluZSBsaW5lMiA8ICgkJDAgIi5sb2ciKSkgPCAwKSBcCisJICAgIHJlY2hlY2sgPSAwOyBcCisgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfSBcCisgICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW25OXVtPb10vKSBcCisgICAgICAgIHsgXAorICAgICAgICAgIHJlY2hlY2sgPSAwOyBcCisgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfSBcCisgICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW3lZXVtlRV1bc1NdLykgXAorICAgICAgICB7IFwKKyAgICAgICAgICBicmVhazsgXAorICAgICAgICB9IFwKKyAgICB9OyBcCisgIGlmIChyZWNoZWNrKSBcCisgICAgcHJpbnQgJCQwOyBcCisgIGNsb3NlICgkJDAgIi50cnMiKTsgXAorICBjbG9zZSAoJCQwICIubG9nIik7IFwKK30nCisjIEEgY29tbWFuZCB0aGF0LCBnaXZlbiBhIG5ld2xpbmUtc2VwYXJhdGVkIGxpc3Qgb2YgdGVzdCBuYW1lcyBvbiB0aGUKKyMgc3RhbmRhcmQgaW5wdXQsIGNyZWF0ZSB0aGUgZ2xvYmFsIGxvZyBmcm9tIHRoZWlyIC50cnMgYW5kIC5sb2cgZmlsZXMuCithbV9fY3JlYXRlX2dsb2JhbF9sb2cgPSAkKEFXSykgJyBcCitmdW5jdGlvbiBmYXRhbChtc2cpIFwKK3sgXAorICBwcmludCAiZmF0YWw6IG1ha2luZyAkQDogIiBtc2cgfCAiY2F0ID4mMiI7IFwKKyAgZXhpdCAxOyBcCit9IFwKK2Z1bmN0aW9uIHJzdF9zZWN0aW9uKGhlYWRlcikgXAoreyBcCisgIHByaW50IGhlYWRlcjsgXAorICBsZW4gPSBsZW5ndGgoaGVhZGVyKTsgXAorICBmb3IgKGkgPSAxOyBpIDw9IGxlbjsgaSA9IGkgKyAxKSBcCisgICAgcHJpbnRmICI9IjsgXAorICBwcmludGYgIlxuXG4iOyBcCit9IFwKK3sgXAorICBjb3B5X2luX2dsb2JhbF9sb2cgPSAxOyBcCisgIGdsb2JhbF90ZXN0X3Jlc3VsdCA9ICJSVU4iOyBcCisgIHdoaWxlICgocmMgPSAoZ2V0bGluZSBsaW5lIDwgKCQkMCAiLnRycyIpKSkgIT0gMCkgXAorICAgIHsgXAorICAgICAgaWYgKHJjIDwgMCkgXAorICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi50cnMiKTsgXAorICAgICAgaWYgKGxpbmUgfiAvJChhbV9fZ2xvYmFsX3Rlc3RfcmVzdWx0X3J4KS8pIFwKKyAgICAgICAgeyBcCisgICAgICAgICAgc3ViKCIkKGFtX19nbG9iYWxfdGVzdF9yZXN1bHRfcngpIiwgIiIsIGxpbmUpOyBcCisgICAgICAgICAgc3ViKCJbIAldKiQkIiwgIiIsIGxpbmUpOyBcCisgICAgICAgICAgZ2xvYmFsX3Rlc3RfcmVzdWx0ID0gbGluZTsgXAorICAgICAgICB9IFwKKyAgICAgIGVsc2UgaWYgKGxpbmUgfiAvJChhbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4KVtuTl1bb09dLykgXAorICAgICAgICBjb3B5X2luX2dsb2JhbF9sb2cgPSAwOyBcCisgICAgfTsgXAorICBpZiAoY29weV9pbl9nbG9iYWxfbG9nKSBcCisgICAgeyBcCisgICAgICByc3Rfc2VjdGlvbihnbG9iYWxfdGVzdF9yZXN1bHQgIjogIiAkJDApOyBcCisgICAgICB3aGlsZSAoKHJjID0gKGdldGxpbmUgbGluZSA8ICgkJDAgIi5sb2ciKSkpICE9IDApIFwKKyAgICAgIHsgXAorICAgICAgICBpZiAocmMgPCAwKSBcCisgICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi5sb2ciKTsgXAorICAgICAgICBwcmludCBsaW5lOyBcCisgICAgICB9OyBcCisgICAgICBwcmludGYgIlxuIjsgXAorICAgIH07IFwKKyAgY2xvc2UgKCQkMCAiLnRycyIpOyBcCisgIGNsb3NlICgkJDAgIi5sb2ciKTsgXAorfScKKyMgUmVzdHJ1Y3R1cmVkIFRleHQgdGl0bGUuCithbV9fcnN0X3RpdGxlID0geyBzZWQgJ3MvLiovICAgJiAgIC87aDtzLy4vPS9nO3A7eDtzLyAqJCQvLztwO2cnICYmIGVjaG87IH0KKyMgU29sYXJpcyAxMCAnbWFrZScsIGFuZCBzZXZlcmFsIG90aGVyIHRyYWRpdGlvbmFsICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMsCisjIHBhc3MgIi1lIiB0byAkKFNIRUxMKSwgYW5kIFBPU0lYIDIwMDggZXZlbiByZXF1aXJlcyB0aGlzLiAgV29yayBhcm91bmQgaXQKKyMgYnkgZGlzYWJsaW5nIC1lICh1c2luZyB0aGUgWFNJIGV4dGVuc2lvbiAic2V0ICtlIikgaWYgaXQncyBzZXQuCithbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYworIyBEZWZhdWx0IGZsYWdzIHBhc3NlZCB0byB0ZXN0IGRyaXZlcnMuCithbV9fY29tbW9uX2RyaXZlcl9mbGFncyA9IFwKKyAgLS1jb2xvci10ZXN0cyAiJCRhbV9fY29sb3JfdGVzdHMiIFwKKyAgLS1lbmFibGUtaGFyZC1lcnJvcnMgIiQkYW1fX2VuYWJsZV9oYXJkX2Vycm9ycyIgXAorICAtLWV4cGVjdC1mYWlsdXJlICIkJGFtX19leHBlY3RfZmFpbHVyZSIKKyMgVG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBjb21tYW5kIHJ1bm5pbmcgdGhlIHRlc3QuICBDcmVhdGVzIHRoZQorIyBkaXJlY3RvcnkgZm9yIHRoZSBsb2cgaWYgbmVlZGVkLiAgU3RvcmVzIGluICRkaXIgdGhlIGRpcmVjdG9yeQorIyBjb250YWluaW5nICRmLCBpbiAkdHN0IHRoZSB0ZXN0LCBpbiAkbG9nIHRoZSBsb2cuICBFeGVjdXRlcyB0aGUKKyMgZGV2ZWxvcGVyLSBkZWZpbmVkIHRlc3Qgc2V0dXAgQU1fVEVTVFNfRU5WSVJPTk1FTlQgKGlmIGFueSksIGFuZAorIyBwYXNzZXMgVEVTVFNfRU5WSVJPTk1FTlQuICBTZXQgdXAgb3B0aW9ucyBmb3IgdGhlIHdyYXBwZXIgdGhhdAorIyB3aWxsIHJ1biB0aGUgdGVzdCBzY3JpcHRzIChvciB0aGVpciBhc3NvY2lhdGVkIExPR19DT01QSUxFUiwgaWYKKyMgdGh5IGhhdmUgb25lKS4KK2FtX19jaGVja19wcmUgPSBcCiskKGFtX19zaF9lX3NldHVwKTsJCQkJCVwKKyQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKQkJCVwKKyQoYW1fX3R0eV9jb2xvcnMpOwkJCQkJXAorc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsJCQlcCitjYXNlICIkQCIgaW4JCQkJCQlcCisgICovKikgYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDs7CVwKKyAgICAqKSBhbV9fb2Rpcj0uOzsgCQkJCQlcCitlc2FjOwkJCQkJCQlcCit0ZXN0ICJ4JCRhbV9fb2RpciIgPSB4Ii4iIHx8IHRlc3QgLWQgIiQkYW1fX29kaXIiIAlcCisgIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OwkJXAoraWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsJCQlcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsJCQkJXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsJCQkJXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgCQkJCVwKK2lmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuCQlcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IAkJCQlcCitlbHNlCQkJCQkJCVwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IAkJCQlcCitmaTsgCQkJCQkJCVwKK2Nhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluCQkJCVwKKyAgKltcIFwJXSQkZltcIFwJXSogfCAqW1wgXAldJCRkaXIkJGZbXCBcCV0qKSBcCisgICAgYW1fX2V4cGVjdF9mYWlsdXJlPXllczs7CQkJCVwKKyAgKikJCQkJCQkJXAorICAgIGFtX19leHBlY3RfZmFpbHVyZT1ubzs7CQkJCVwKK2VzYWM7IAkJCQkJCQlcCiskKEFNX1RFU1RTX0VOVklST05NRU5UKSAkKFRFU1RTX0VOVklST05NRU5UKQorIyBBIHNoZWxsIGNvbW1hbmQgdG8gZ2V0IHRoZSBuYW1lcyBvZiB0aGUgdGVzdHMgc2NyaXB0cyB3aXRoIGFueSByZWdpc3RlcmVkCisjIGV4dGVuc2lvbiByZW1vdmVkIChpLmUuLCBlcXVpdmFsZW50bHksIHRoZSBuYW1lcyBvZiB0aGUgdGVzdCBsb2dzLCB3aXRoCisjIHRoZSAnLmxvZycgZXh0ZW5zaW9uIHJlbW92ZWQpLiAgVGhlIHJlc3VsdCBpcyBzYXZlZCBpbiB0aGUgc2hlbGwgdmFyaWFibGUKKyMgJyRiYXNlcycuICBUaGlzIGhvbm9ycyBydW50aW1lIG92ZXJyaWRpbmcgb2YgVEVTVFMgYW5kIFRFU1RfTE9HUy4gIFNhZGx5LAorIyB3ZSBjYW5ub3QgdXNlIHNvbWV0aGluZyBzaW1wbGVyLCBpbnZvbHZpbmcgZS5nLiwgIiQoVEVTVF9MT0dTOi5sb2c9KSIsCisjIHNpbmNlIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbSB3aXRoIFZQQVRIIHJld3JpdGVzIGZvciBzdWZmaXgtbGVzcyB0ZXN0cy4KKyMgU2VlIGFsc28gJ3Rlc3QtaGFybmVzcy12cGF0aC1yZXdyaXRlLnNoJyBhbmQgJ3Rlc3QtdHJzLWJhc2ljLnNoJy4KK2FtX19zZXRfVEVTVFNfYmFzZXMgPSBcCisgIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCisgIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICBiYXNlcz1gZWNobyAkJGJhc2VzYAorUkVDSEVDS19MT0dTID0gJChURVNUX0xPR1MpCitURVNUX1NVSVRFX0xPRyA9IHRlc3Qtc3VpdGUubG9nCitURVNUX0VYVEVOU0lPTlMgPSBARVhFRVhUQCAudGVzdAorTE9HX0RSSVZFUiA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvLi4vdGVzdC1kcml2ZXIKK0xPR19DT01QSUxFID0gJChMT0dfQ09NUElMRVIpICQoQU1fTE9HX0ZMQUdTKSAkKExPR19GTEFHUykKK2FtX19zZXRfYiA9IFwKKyAgY2FzZSAnJEAnIGluIFwKKyAgICAqLyopIFwKKyAgICAgIGNhc2UgJyQqJyBpbiBcCisgICAgICAgICovKikgYj0nJConOzsgXAorICAgICAgICAgICopIGI9YGVjaG8gJyRAJyB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICAgICAgIGVzYWM7OyBcCisgICAgKikgXAorICAgICAgYj0nJConOzsgXAorICBlc2FjCithbV9fdGVzdF9sb2dzMSA9ICQoVEVTVFM6PS5sb2cpCithbV9fdGVzdF9sb2dzMiA9ICQoYW1fX3Rlc3RfbG9nczE6QEVYRUVYVEAubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi50ZXN0LmxvZz0ubG9nKQorVEVTVF9MT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS8uLi90ZXN0LWRyaXZlcgorVEVTVF9MT0dfQ09NUElMRSA9ICQoVEVTVF9MT0dfQ09NUElMRVIpICQoQU1fVEVTVF9MT0dfRkxBR1MpIFwKKwkkKFRFU1RfTE9HX0ZMQUdTKQorYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5pbmMgXAorCSQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9zcmNkaXIpLy4uL2NvbXBpbGUgXAorCSQodG9wX3NyY2RpcikvLi4vY29uZmlnLmd1ZXNzICQodG9wX3NyY2RpcikvLi4vY29uZmlnLnN1YiBcCisJJCh0b3Bfc3JjZGlyKS8uLi9kZXBjb21wICQodG9wX3NyY2RpcikvLi4vaW5zdGFsbC1zaCBcCisJJCh0b3Bfc3JjZGlyKS8uLi9sdG1haW4uc2ggJCh0b3Bfc3JjZGlyKS8uLi9taXNzaW5nIFwKKwkkKHRvcF9zcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJCh0b3Bfc3JjZGlyKS8uLi90ZXN0LWRyaXZlcgorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2Rpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKK3RvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQorYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAorICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpIjsgdGhlbiBcCisgICAgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCisgICAgICAmJiBybSAtcmYgIiQoZGlzdGRpcikiIFwKKyAgICAgIHx8IHsgc2xlZXAgNSAmJiBybSAtcmYgIiQoZGlzdGRpcikiOyB9OyBcCisgIGVsc2UgOjsgZmkKK2FtX19wb3N0X3JlbW92ZV9kaXN0ZGlyID0gJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCitESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3oKK0daSVBfRU5WID0gLS1iZXN0CitESVNUX1RBUkdFVFMgPSBkaXN0LWd6aXAKK2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2FtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSBcCisgIHwgc2VkICdzfF5cLi98JChwcmVmaXgpL3wnIHwgZ3JlcCAtdiAnJChpbmZvZGlyKS9kaXIkJCcKK2Rpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ09ERV9DT1ZFUkFHRV9DRkxBR1MgPSBAQ09ERV9DT1ZFUkFHRV9DRkxBR1NACitDT0RFX0NPVkVSQUdFX0VOQUJMRUQgPSBAQ09ERV9DT1ZFUkFHRV9FTkFCTEVEQAorQ09ERV9DT1ZFUkFHRV9MREZMQUdTID0gQENPREVfQ09WRVJBR0VfTERGTEFHU0AKK0NQUCA9IEBDUFBACisjIE5vdGUgdXNlIG9mIC1pc3lzdGVtIHRvIGZvcmNlIHVzZSBvZiBsb2NhbCBnTW9jay9nVGVzdCBldmVuIGlmIHRoZXJlJ3MgYW4gaW5zdGFsbGVkIHZlcnNpb24uCitDUFBGTEFHUyA9IEBDUFBGTEFHU0AgLUkkKEFSRVNfU1JDX0RJUikgLWlzeXN0ZW0gJChHVEVTVF9ESVIpL2luY2x1ZGUgXAorCS1pc3lzdGVtICQoR01PQ0tfRElSKS9pbmNsdWRlCitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQCAtV2FsbCAkKFBUSFJFQURfQ0ZMQUdTKQorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0NPViA9IEBHQ09WQAorR0VOSFRNTCA9IEBHRU5IVE1MQAorR1JFUCA9IEBHUkVQQAorSEFWRV9DWFgxMSA9IEBIQVZFX0NYWDExQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMQ09WID0gQExDT1ZACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJQlRPT0xfREVQUyA9IEBMSUJUT09MX0RFUFNACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNS0RJUl9QID0gQE1LRElSX1BACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3J1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgV2hlcmUgdG8gZmluZCB0aGUgYy1hcmVzIHNvdXJjZSBjb2RlOyBuZWVkZWQgYmVjYXVzZSB0aGUgdGVzdHMgdXNlIGxpYnJhcnktaW50ZXJuYWwgaGVhZGVycworQVJFU19TUkNfRElSID0gLi4KKyMgV2hlcmUgdG8gZmluZCB0aGUgYnVpbHQgYy1hcmVzIHN0YXRpYyBsaWJyYXJ5CitBUkVTX0JMRF9ESVIgPSAuLgorQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KK0FDTE9DQUxfQU1GTEFHUyA9IC1JIC4uL200CitHTU9DS19ESVIgPSBnbW9jay0xLjcuMAorR1RFU1RfRElSID0gJChHTU9DS19ESVIpL2d0ZXN0CitURVNUU09VUkNFUyA9IGFyZXMtdGVzdC1tYWluLmNjCVwKKyAgYXJlcy10ZXN0LWluaXQuY2MJCQlcCisgIGFyZXMtdGVzdC5jYwkJCQlcCisgIGFyZXMtdGVzdC1ucy5jYwkJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLmNjCQkJXAorICBhcmVzLXRlc3QtcGFyc2UtYS5jYwkJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLWFhYWEuY2MJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLW14LmNjCQlcCisgIGFyZXMtdGVzdC1wYXJzZS1uYXB0ci5jYwkJXAorICBhcmVzLXRlc3QtcGFyc2UtbnMuY2MJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLXB0ci5jYwkJXAorICBhcmVzLXRlc3QtcGFyc2Utc29hLmNjCQlcCisgIGFyZXMtdGVzdC1wYXJzZS1zcnYuY2MJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLXR4dC5jYwkJXAorICBhcmVzLXRlc3QtbWlzYy5jYwkJCVwKKyAgYXJlcy10ZXN0LWxpdmUuY2MJCQlcCisgIGFyZXMtdGVzdC1tb2NrLmNjCQkJXAorICBhcmVzLXRlc3QtaW50ZXJuYWwuY2MJCVwKKyAgZG5zLXByb3RvLmNjCQkJCVwKKyAgZG5zLXByb3RvLXRlc3QuY2MKKworVEVTVEhFQURFUlMgPSBhcmVzLXRlc3QuaAkJXAorICBkbnMtcHJvdG8uaAorCitGVVpaU09VUkNFUyA9IGFyZXMtdGVzdC1mdXp6LmMJCVwKKyAgYXJlcy1mdXp6LmMKKworRFVNUFNPVVJDRVMgPSBkbnMtcHJvdG8uY2MJCVwKKyAgZG5zLWR1bXAuY2MKKworYXJlc3Rlc3RfU09VUkNFUyA9ICQoVEVTVFNPVVJDRVMpICQoVEVTVEhFQURFUlMpCithcmVzdGVzdF9MREFERCA9IGxpYmdtb2NrLmxhIGxpYmd0ZXN0LmxhICQoQVJFU19CTERfRElSKS9saWJjYXJlcy5sYSAkKFBUSFJFQURfTElCUykKK2FyZXN0ZXN0X0xERkxBR1MgPSAkKENPREVfQ09WRVJBR0VfTERGTEFHUykKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYmdtb2NrLmxhIGxpYmd0ZXN0LmxhCitsaWJnbW9ja19sYV9TT1VSQ0VTID0gJChHTU9DS19ESVIpL3NyYy9nbW9jay1hbGwuY2MKK2xpYmdtb2NrX2xhX0NQUEZMQUdTID0gLWlzeXN0ZW0gJChHVEVTVF9ESVIpL2luY2x1ZGUgLUkkKEdURVNUX0RJUikgLWlzeXN0ZW0gJChHTU9DS19ESVIpL2luY2x1ZGUgLUkkKEdNT0NLX0RJUikKK2xpYmd0ZXN0X2xhX1NPVVJDRVMgPSAkKEdURVNUX0RJUikvc3JjL2d0ZXN0LWFsbC5jYworbGliZ3Rlc3RfbGFfQ1BQRkxBR1MgPSAtaXN5c3RlbSAkKEdURVNUX0RJUikvaW5jbHVkZSAtSSQoR1RFU1RfRElSKSAtaXN5c3RlbSAkKEdNT0NLX0RJUikvaW5jbHVkZSAtSSQoR01PQ0tfRElSKQorYXJlc2Z1enpfU09VUkNFUyA9ICQoRlVaWlNPVVJDRVMpCithcmVzZnV6el9MREFERCA9ICQoQVJFU19CTERfRElSKS9saWJjYXJlcy5sYQorZG5zZHVtcF9TT1VSQ0VTID0gJChEVU1QU09VUkNFUykKK2Ruc2R1bXBfTERBREQgPSAkKEFSRVNfQkxEX0RJUikvbGliY2FyZXMubGEKK2FsbDogY29uZmlnLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAuY2MgLmxvIC5sb2cgLm8gLm9iaiAudGVzdCAudGVzdCQoRVhFRVhUKSAudHJzCithbS0tcmVmcmVzaDogTWFrZWZpbGUKKwlAOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbmMgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24nOyBcCisJICAgICAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBlY2hvICcgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzJzsgXAorCSAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXM7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbmMgJChhbV9fZW1wdHkpOgorCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjb25maWcuaDogc3RhbXAtaDEKKwlAdGVzdCAtZiAkQCB8fCBybSAtZiBzdGFtcC1oMQorCUB0ZXN0IC1mICRAIHx8ICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHN0YW1wLWgxCisKK3N0YW1wLWgxOiAkKHNyY2RpcikvY29uZmlnLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAcm0gLWYgc3RhbXAtaDEKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCiskKHNyY2RpcikvY29uZmlnLmguaW46ICAkKGFtX19jb25maWd1cmVfZGVwcykgCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisJcm0gLWYgc3RhbXAtaDEKKwl0b3VjaCAkQAorCitkaXN0Y2xlYW4taGRyOgorCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgXAorCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCisJICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAorCSAgICAgIHNvcnQgLXVgOyBcCisJdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKKwkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKKwkgIHJtIC1mICQke2xvY3N9OyBcCisJfQorCitsaWJnbW9jay5sYTogJChsaWJnbW9ja19sYV9PQkpFQ1RTKSAkKGxpYmdtb2NrX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnbW9ja19sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DWFhMRCkkKENYWExJTkspICAkKGxpYmdtb2NrX2xhX09CSkVDVFMpICQobGliZ21vY2tfbGFfTElCQUREKSAkKExJQlMpCisKK2xpYmd0ZXN0LmxhOiAkKGxpYmd0ZXN0X2xhX09CSkVDVFMpICQobGliZ3Rlc3RfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmd0ZXN0X2xhX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX0NYWExEKSQoQ1hYTElOSykgICQobGliZ3Rlc3RfbGFfT0JKRUNUUykgJChsaWJndGVzdF9sYV9MSUJBREQpICQoTElCUykKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorCithcmVzZnV6eiQoRVhFRVhUKTogJChhcmVzZnV6el9PQkpFQ1RTKSAkKGFyZXNmdXp6X0RFUEVOREVOQ0lFUykgJChFWFRSQV9hcmVzZnV6el9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhcmVzZnV6eiQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChhcmVzZnV6el9PQkpFQ1RTKSAkKGFyZXNmdXp6X0xEQUREKSAkKExJQlMpCisKK2FyZXN0ZXN0JChFWEVFWFQpOiAkKGFyZXN0ZXN0X09CSkVDVFMpICQoYXJlc3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2FyZXN0ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGFyZXN0ZXN0JChFWEVFWFQpCisJJChBTV9WX0NYWExEKSQoYXJlc3Rlc3RfTElOSykgJChhcmVzdGVzdF9PQkpFQ1RTKSAkKGFyZXN0ZXN0X0xEQUREKSAkKExJQlMpCisKK2Ruc2R1bXAkKEVYRUVYVCk6ICQoZG5zZHVtcF9PQkpFQ1RTKSAkKGRuc2R1bXBfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2Ruc2R1bXBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZG5zZHVtcCQoRVhFRVhUKQorCSQoQU1fVl9DWFhMRCkkKENYWExJTkspICQoZG5zZHVtcF9PQkpFQ1RTKSAkKGRuc2R1bXBfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FyZXMtZnV6ei5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LWZ1enouUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FyZXMtdGVzdC1pbml0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hcmVzLXRlc3QtaW50ZXJuYWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FyZXMtdGVzdC1saXZlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hcmVzLXRlc3QtbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LW1pc2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FyZXMtdGVzdC1tb2NrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hcmVzLXRlc3QtbnMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FyZXMtdGVzdC1wYXJzZS1hLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hcmVzLXRlc3QtcGFyc2UtYWFhYS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LXBhcnNlLW14LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hcmVzLXRlc3QtcGFyc2UtbmFwdHIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FyZXMtdGVzdC1wYXJzZS1ucy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LXBhcnNlLXB0ci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LXBhcnNlLXNvYS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LXBhcnNlLXNydi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LXBhcnNlLXR4dC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJlcy10ZXN0LXBhcnNlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hcmVzLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Rucy1kdW1wLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kbnMtcHJvdG8tdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZG5zLXByb3RvLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnbW9ja19sYS1nbW9jay1hbGwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJndGVzdF9sYS1ndGVzdC1hbGwuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jYy5vOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorCisuY2Mub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNjLmxvOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChMVENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJnbW9ja19sYS1nbW9jay1hbGwubG86ICQoR01PQ0tfRElSKS9zcmMvZ21vY2stYWxsLmNjCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmdtb2NrX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgbGliZ21vY2tfbGEtZ21vY2stYWxsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnbW9ja19sYS1nbW9jay1hbGwuVHBvIC1jIC1vIGxpYmdtb2NrX2xhLWdtb2NrLWFsbC5sbyBgdGVzdCAtZiAnJChHTU9DS19ESVIpL3NyYy9nbW9jay1hbGwuY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQoR01PQ0tfRElSKS9zcmMvZ21vY2stYWxsLmNjCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ21vY2tfbGEtZ21vY2stYWxsLlRwbyAkKERFUERJUikvbGliZ21vY2tfbGEtZ21vY2stYWxsLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJChHTU9DS19ESVIpL3NyYy9nbW9jay1hbGwuY2MnIG9iamVjdD0nbGliZ21vY2tfbGEtZ21vY2stYWxsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliZ21vY2tfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIGxpYmdtb2NrX2xhLWdtb2NrLWFsbC5sbyBgdGVzdCAtZiAnJChHTU9DS19ESVIpL3NyYy9nbW9jay1hbGwuY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQoR01PQ0tfRElSKS9zcmMvZ21vY2stYWxsLmNjCisKK2xpYmd0ZXN0X2xhLWd0ZXN0LWFsbC5sbzogJChHVEVTVF9ESVIpL3NyYy9ndGVzdC1hbGwuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliZ3Rlc3RfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBsaWJndGVzdF9sYS1ndGVzdC1hbGwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmd0ZXN0X2xhLWd0ZXN0LWFsbC5UcG8gLWMgLW8gbGliZ3Rlc3RfbGEtZ3Rlc3QtYWxsLmxvIGB0ZXN0IC1mICckKEdURVNUX0RJUikvc3JjL2d0ZXN0LWFsbC5jYycgfHwgZWNobyAnJChzcmNkaXIpLydgJChHVEVTVF9ESVIpL3NyYy9ndGVzdC1hbGwuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJndGVzdF9sYS1ndGVzdC1hbGwuVHBvICQoREVQRElSKS9saWJndGVzdF9sYS1ndGVzdC1hbGwuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckKEdURVNUX0RJUikvc3JjL2d0ZXN0LWFsbC5jYycgb2JqZWN0PSdsaWJndGVzdF9sYS1ndGVzdC1hbGwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJndGVzdF9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gbGliZ3Rlc3RfbGEtZ3Rlc3QtYWxsLmxvIGB0ZXN0IC1mICckKEdURVNUX0RJUikvc3JjL2d0ZXN0LWFsbC5jYycgfHwgZWNobyAnJChzcmNkaXIpLydgJChHVEVTVF9ESVIpL3NyYy9ndGVzdC1hbGwuY2MKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wgY29uZmlnLmx0CisKK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiB0YWdzLWFtCitUQUdTOiB0YWdzCisKK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBjdGFncy1hbQorCitDVEFHUzogY3RhZ3MKK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKK2NzY29wZTogY3Njb3BlLmZpbGVzCisJdGVzdCAhIC1zIGNzY29wZS5maWxlcyBcCisJICB8fCAkKENTQ09QRSkgLWIgLXEgJChBTV9DU0NPUEVGTEFHUykgJChDU0NPUEVGTEFHUykgLWkgY3Njb3BlLmZpbGVzICQoQ1NDT1BFX0FSR1MpCitjbGVhbi1jc2NvcGU6CisJLXJtIC1mIGNzY29wZS5maWxlcworY3Njb3BlLmZpbGVzOiBjbGVhbi1jc2NvcGUgY3Njb3BlbGlzdAorY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQorCitjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisJbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKwljYXNlICIkKHNyY2RpcikiIGluIFwKKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKwkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCisJZXNhYzsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCisJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisJICBlbHNlIFwKKwkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisJLXJtIC1mIGNzY29wZS5vdXQgY3Njb3BlLmluLm91dCBjc2NvcGUucG8ub3V0IGNzY29wZS5maWxlcworCisjIFJlY292ZXIgZnJvbSBkZWxldGVkICcudHJzJyBmaWxlOyB0aGlzIHNob3VsZCBlbnN1cmUgdGhhdAorIyAicm0gLWYgZm9vLmxvZzsgbWFrZSBmb28udHJzIiByZS1ydW4gJ2Zvby50ZXN0JywgYW5kIHJlLWNyZWF0ZQorIyBib3RoICdmb28ubG9nJyBhbmQgJ2Zvby50cnMnLiAgQnJlYWsgdGhlIHJlY2lwZSBpbiB0d28gc3Vic2hlbGxzCisjIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggIm1ha2UgLW4iLgorLmxvZy50cnM6CisJcm0gLWYgJDwgJEAKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkPAorCisjIExlYWRpbmcgJ2FtLS1mbm9yZCcgaXMgdGhlcmUgdG8gZW5zdXJlIHRoZSBsaXN0IG9mIHRhcmdldHMgZG9lcyBub3QKKyMgZXhwYW5kIHRvIGVtcHR5LCBhcyBjb3VsZCBoYXBwZW4gZS5nLiB3aXRoIG1ha2UgY2hlY2sgVEVTVFM9JycuCithbS0tZm5vcmQgJChURVNUX0xPR1MpICQoVEVTVF9MT0dTOi5sb2c9LnRycyk6ICQoYW1fX2ZvcmNlX3JlY2hlY2spCithbS0tZm9yY2UtcmVjaGVjazoKKwlAOgorCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlhbV9fZl9vayAoKSB7IHRlc3QgLWYgIiQkMSIgJiYgdGVzdCAtciAiJCQxIjsgfTsgXAorCXJlZG9fYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIFwKKwkgICAgICAgICAgICAgIGFtX19mX29rICQkaS50cnMgJiYgYW1fX2Zfb2sgJCRpLmxvZyB8fCBlY2hvICQkaTsgXAorCSAgICAgICAgICAgIGRvbmVgOyBcCisJaWYgdGVzdCAtbiAiJCRyZWRvX2Jhc2VzIjsgdGhlbiBcCisJICByZWRvX2xvZ3M9YGZvciBpIGluICQkcmVkb19iYXNlczsgZG8gZWNobyAkJGkubG9nOyBkb25lYDsgXAorCSAgcmVkb19yZXN1bHRzPWBmb3IgaSBpbiAkJHJlZG9fYmFzZXM7IGRvIGVjaG8gJCRpLnRyczsgZG9uZWA7IFwKKwkgIGlmICQoYW1fX21ha2VfZHJ5cnVuKTsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcm0gLWYgJCRyZWRvX2xvZ3MgJiYgcm0gLWYgJCRyZWRvX3Jlc3VsdHMgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWZpOyBcCisJaWYgdGVzdCAtbiAiJCRhbV9fcmVtYWtpbmdfbG9ncyI7IHRoZW4gXAorCSAgZWNobyAiZmF0YWw6IG1ha2luZyAkKFRFU1RfU1VJVEVfTE9HKTogcG9zc2libGUgaW5maW5pdGUiIFwKKwkgICAgICAgInJlY3Vyc2lvbiBkZXRlY3RlZCIgPiYyOyBcCisJZWxpZiB0ZXN0IC1uICIkJHJlZG9fbG9ncyI7IHRoZW4gXAorCSAgYW1fX3JlbWFraW5nX2xvZ3M9eWVzICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkcmVkb19sb2dzOyBcCisJZmk7IFwKKwlpZiAkKGFtX19tYWtlX2RyeXJ1bik7IHRoZW4gOjsgZWxzZSBcCisJICBzdD0wOyAgXAorCSAgZXJybXNnPSJmYXRhbDogbWFraW5nICQoVEVTVF9TVUlURV9MT0cpOiBmYWlsZWQgdG8gY3JlYXRlIjsgXAorCSAgZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBcCisJICAgIHRlc3QgLWYgJCRpLnRycyAmJiB0ZXN0IC1yICQkaS50cnMgXAorCSAgICAgIHx8IHsgZWNobyAiJCRlcnJtc2cgJCRpLnRycyIgPiYyOyBzdD0xOyB9OyBcCisJICAgIHRlc3QgLWYgJCRpLmxvZyAmJiB0ZXN0IC1yICQkaS5sb2cgXAorCSAgICAgIHx8IHsgZWNobyAiJCRlcnJtc2cgJCRpLmxvZyIgPiYyOyBzdD0xOyB9OyBcCisJICBkb25lOyBcCisJICB0ZXN0ICQkc3QgLWVxIDAgfHwgZXhpdCAxOyBcCisJZmkKKwlAJChhbV9fc2hfZV9zZXR1cCk7ICQoYW1fX3R0eV9jb2xvcnMpOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJd3M9J1sgCV0nOyBcCisJcmVzdWx0cz1gZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGIudHJzOyBkb25lYDsgXAorCXRlc3QgLW4gIiQkcmVzdWx0cyIgfHwgcmVzdWx0cz0vZGV2L251bGw7IFwKKwlhbGw9YCAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiIgICAgICAgICAgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXBhc3M9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypQQVNTIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZmFpbD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkZBSUwiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlza2lwPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqU0tJUCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhmYWlsPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYRkFJTCIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeHBhc3M9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhQQVNTIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwllcnJvcj1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRVJST1IiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWlmIHRlc3QgYGV4cHIgJCRmYWlsICsgJCR4cGFzcyArICQkZXJyb3JgIC1lcSAwOyB0aGVuIFwKKwkgIHN1Y2Nlc3M9dHJ1ZTsgXAorCWVsc2UgXAorCSAgc3VjY2Vzcz1mYWxzZTsgXAorCWZpOyBcCisJYnI9Jz09PT09PT09PT09PT09PT09PT0nOyBicj0kJGJyJCRiciQkYnIkJGJyOyBcCisJcmVzdWx0X2NvdW50ICgpIFwKKwl7IFwKKwkgICAgaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbWF5YmUtY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT15ZXM7IFwKKwkgICAgZWxpZiB0ZXN0IHgiJCQxIiA9IHgiLS1uby1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPW5vOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gIiRAOiBpbnZhbGlkICdyZXN1bHRfY291bnQnIHVzYWdlIiA+JjI7IGV4aXQgNDsgXAorCSAgICBmaTsgXAorCSAgICBzaGlmdDsgXAorCSAgICBkZXNjPSQkMSBjb3VudD0kJDI7IFwKKwkgICAgaWYgdGVzdCAkJG1heWJlX2NvbG9yaXplID0geWVzICYmIHRlc3QgJCRjb3VudCAtZ3QgMDsgdGhlbiBcCisJICAgICAgY29sb3Jfc3RhcnQ9JCQzIGNvbG9yX2VuZD0kJHN0ZDsgXAorCSAgICBlbHNlIFwKKwkgICAgICBjb2xvcl9zdGFydD0gY29sb3JfZW5kPTsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2xvcl9zdGFydH0jICQkZGVzYyAkJGNvdW50JCR7Y29sb3JfZW5kfSI7IFwKKwl9OyBcCisJY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgKCkgXAorCXsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiVE9UQUw6IiAkJGFsbCAgICIkJGJyZyI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlBBU1M6ICIgJCRwYXNzICAiJCRncm4iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJTS0lQOiAiICQkc2tpcCAgIiQkYmx1IjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWEZBSUw6IiAkJHhmYWlsICIkJGxnbiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkZBSUw6ICIgJCRmYWlsICAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYUEFTUzoiICQkeHBhc3MgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRVJST1I6IiAkJGVycm9yICIkJG1nbiI7IFwKKwl9OyBcCisJewkJCQkJCQkJXAorCSAgZWNobyAiJChQQUNLQUdFX1NUUklORyk6ICQoc3ViZGlyKS8kKFRFU1RfU1VJVEVfTE9HKSIgfAlcCisJICAgICQoYW1fX3JzdF90aXRsZSk7CQkJCQkJXAorCSAgY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1uby1jb2xvcjsJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGVjaG8gIi4uIGNvbnRlbnRzOjogOmRlcHRoOiAyIjsJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiOyBkb25lCQkJCVwKKwkgICAgfCAkKGFtX19jcmVhdGVfZ2xvYmFsX2xvZyk7CQkJCQlcCisJfSA+JChURVNUX1NVSVRFX0xPRykudG1wIHx8IGV4aXQgMTsJCQkJXAorCW12ICQoVEVTVF9TVUlURV9MT0cpLnRtcCAkKFRFU1RfU1VJVEVfTE9HKTsJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuCQkJCQkJXAorCSAgY29sPSIkJGdybiI7CQkJCQkJCVwKKwkgZWxzZQkJCQkJCQkJXAorCSAgY29sPSIkJHJlZCI7CQkJCQkJCVwKKwkgIHRlc3QgeCIkJFZFUkJPU0UiID0geCB8fCBjYXQgJChURVNUX1NVSVRFX0xPRyk7CQlcCisJZmk7CQkJCQkJCQlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJZWNobyAiJCR7Y29sfVRlc3RzdWl0ZSBzdW1tYXJ5IGZvciAkKFBBQ0tBR0VfU1RSSU5HKSQke3N0ZH0iOwlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1tYXliZS1jb2xvcjsJCQkJXAorCWVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuIDo7IGVsc2UJCQkJCVwKKwkgIGVjaG8gIiQke2NvbH1TZWUgJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpJCR7c3RkfSI7CQlcCisJICBpZiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4JCQlcCisJICAgIGVjaG8gIiQke2NvbH1QbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpJCR7c3RkfSI7CVwKKwkgIGZpOwkJCQkJCQkJXAorCSAgZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJXAorCWZpOwkJCQkJCQkJXAorCSQkc3VjY2VzcyB8fCBleGl0IDEKKworY2hlY2stVEVTVFM6CisJQGxpc3Q9JyQoUkVDSEVDS19MT0dTKSc7ICAgICAgICAgICB0ZXN0IC16ICIkJGxpc3QiIHx8IHJtIC1mICQkbGlzdAorCUBsaXN0PSckKFJFQ0hFQ0tfTE9HUzoubG9nPS50cnMpJzsgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3QKKwlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCisJQHNldCArZTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWxvZ19saXN0PWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCisJdHJzX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLnRyczsgZG9uZWA7IFwKKwlsb2dfbGlzdD1gZWNobyAkJGxvZ19saXN0YDsgdHJzX2xpc3Q9YGVjaG8gJCR0cnNfbGlzdGA7IFwKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBURVNUX0xPR1M9IiQkbG9nX2xpc3QiOyBcCisJZXhpdCAkJD87CityZWNoZWNrOiBhbGwgCisJQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCUBzZXQgK2U7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwliYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgXAorCSAgICAgICAgIHwgJChhbV9fbGlzdF9yZWNoZWNrX3Rlc3RzKWAgfHwgZXhpdCAxOyBcCisJbG9nX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLmxvZzsgZG9uZWA7IFwKKwlsb2dfbGlzdD1gZWNobyAkJGxvZ19saXN0YDsgXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFwKKwkgICAgICAgIGFtX19mb3JjZV9yZWNoZWNrPWFtLS1mb3JjZS1yZWNoZWNrIFwKKwkgICAgICAgIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCI7IFwKKwlleGl0ICQkPworYXJlc3Rlc3QubG9nOiBhcmVzdGVzdCQoRVhFRVhUKQorCUBwPSdhcmVzdGVzdCQoRVhFRVhUKSc7IFwKKwliPSdhcmVzdGVzdCc7IFwKKwkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCisJIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQorZnV6emNoZWNrLnNoLmxvZzogZnV6emNoZWNrLnNoCisJQHA9J2Z1enpjaGVjay5zaCc7IFwKKwliPSdmdXp6Y2hlY2suc2gnOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAorCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKKy50ZXN0LmxvZzoKKwlAcD0nJDwnOyBcCisJJChhbV9fc2V0X2IpOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKFRFU1RfTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAkKFRFU1RfTE9HX0RSSVZFUl9GTEFHUykgLS0gJChURVNUX0xPR19DT01QSUxFKSBcCisJIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQorQGFtX19FWEVFWFRfVFJVRUAudGVzdCQoRVhFRVhUKS5sb2c6CitAYW1fX0VYRUVYVF9UUlVFQAlAcD0nJDwnOyBcCitAYW1fX0VYRUVYVF9UUlVFQAkkKGFtX19zZXRfYik7IFwKK0BhbV9fRVhFRVhUX1RSVUVACSQoYW1fX2NoZWNrX3ByZSkgJChURVNUX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKK0BhbV9fRVhFRVhUX1RSVUVACS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorQGFtX19FWEVFWFRfVFJVRUAJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9URVNUX0xPR19EUklWRVJfRkxBR1MpICQoVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKFRFU1RfTE9HX0NPTVBJTEUpIFwKK0BhbV9fRVhFRVhUX1RSVUVACSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKKworZGlzdGRpcjogJChESVNURklMRVMpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCisJfHwgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NTUgXAorCQktZXhlYyBjaG1vZCB1K3J3eCxnbytyeCB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDAwIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCitkaXN0LWd6aXA6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtYnppcDI6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgQlpJUDI9JCR7QlpJUDItLTl9IGJ6aXAyIC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWx6aXA6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHppcCAtYyAkJHtMWklQX09QVC0tOX0gPiQoZGlzdGRpcikudGFyLmx6CisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKworZGlzdC14ejogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBYWl9PUFQ9JCR7WFpfT1BULS1lfSB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXRhclo6IGRpc3RkaXIKKwlAZWNobyBXQVJOSU5HOiAiU3VwcG9ydCBmb3IgZGlzdHJpYnV0aW9uIGFyY2hpdmVzIGNvbXByZXNzZWQgd2l0aCIgXAorCQkgICAgICAgImxlZ2FjeSBwcm9ncmFtICdjb21wcmVzcycgaXMgZGVwcmVjYXRlZC4iID4mMgorCUBlY2hvIFdBUk5JTkc6ICJJdCB3aWxsIGJlIHJlbW92ZWQgYWx0b2dldGhlciBpbiBBdXRvbWFrZSAyLjAiID4mMgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBjb21wcmVzcyAtYyA+JChkaXN0ZGlyKS50YXIuWgorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3Qtc2hhcjogZGlzdGRpcgorCUBlY2hvIFdBUk5JTkc6ICJTdXBwb3J0IGZvciBzaGFyIGRpc3RyaWJ1dGlvbiBhcmNoaXZlcyBpcyIgXAorCSAgICAgICAgICAgICAgICJkZXByZWNhdGVkLiIgPiYyCisJQGVjaG8gV0FSTklORzogIkl0IHdpbGwgYmUgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIEF1dG9tYWtlIDIuMCIgPiYyCisJc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXppcDogZGlzdGRpcgorCS1ybSAtZiAkKGRpc3RkaXIpLnppcAorCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QgZGlzdC1hbGw6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChESVNUX1RBUkdFVFMpIGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyPSdAOicKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCisjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisjIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCisjIHRhcmZpbGUuCitkaXN0Y2hlY2s6IGRpc3QKKwljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCisJKi50YXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmJ6MiopIFwKKwkgIGJ6aXAyIC1kYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIubHoqKSBcCisJICBsemlwIC1kYyAkKGRpc3RkaXIpLnRhci5seiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5aKikgXAorCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAorCSouc2hhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAorCSouemlwKikgXAorCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCisJZXNhYworCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpCisJY2htb2QgdSt3ICQoZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpL19idWlsZCAkKGRpc3RkaXIpL19idWlsZC9zdWIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKwkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAorCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQvc3ViIFwKKwkgICYmIC4uLy4uL2NvbmZpZ3VyZSBcCisJICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICAgLS1zcmNkaXI9Li4vLi4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAorCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgJiYgKHsgXAorCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCisJICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKKwkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKKwkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKKwkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrIFwKKwkgICYmIGNkICIkJGFtX19jd2QiIFwKKwkgIHx8IGV4aXQgMQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisJQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKKwkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKwkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKKwkgIGVjaG8gJ0VSUk9SOiB0cnlpbmcgdG8gcnVuICRAIHdpdGggYW4gZW1wdHknIFwKKwkgICAgICAgJyQkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKKwkgIGV4aXQgMTsgXAorCX07IFwKKwkkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAorCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorCSAgZXhpdCAxOyBcCisJfTsgXAorCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKFBST0dSQU1TKSBjb25maWcuaAoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChURVNUX0xPR1MpIiB8fCBybSAtZiAkKFRFU1RfTE9HUykKKwktdGVzdCAteiAiJChURVNUX0xPR1M6LmxvZz0udHJzKSIgfHwgcm0gLWYgJChURVNUX0xPR1M6LmxvZz0udHJzKQorCS10ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCWNsZWFuLW5vaW5zdFBST0dSQU1TIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBhbGwgY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLVRFU1RTIFwKKwljaGVjay1hbSBjbGVhbiBjbGVhbi1jc2NvcGUgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwljbGVhbi1ub2luc3RMVExJQlJBUklFUyBjbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGUgXAorCWNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdCBkaXN0LWFsbCBkaXN0LWJ6aXAyIFwKKwlkaXN0LWd6aXAgZGlzdC1semlwIGRpc3Qtc2hhciBkaXN0LXRhclogZGlzdC14eiBkaXN0LXppcCBcCisJZGlzdGNoZWNrIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBcCisJZGlzdGRpciBkaXN0dW5pbnN0YWxsY2hlY2sgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBcCisJaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCisJaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKKwlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHJlY2hlY2sgdGFncyB0YWdzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKy5QUkVDSU9VUzogTWFrZWZpbGUKKworCisjIE5vdCBpbnRlcmVzdGVkIGluIGNvdmVyYWdlIG9mIHRlc3QgY29kZSwgYnV0IGxpbmtpbmcgdGhlIHRlc3QgYmluYXJ5IG5lZWRzIHRoZSBjb3ZlcmFnZSBvcHRpb24KK0BDT0RFX0NPVkVSQUdFX1JVTEVTQAorCit0ZXN0OiBjaGVjaworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L01ha2VmaWxlLmluYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvTWFrZWZpbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTk4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L01ha2VmaWxlLmluYwpAQCAtMCwwICsxLDI5IEBACitURVNUU09VUkNFUyA9IGFyZXMtdGVzdC1tYWluLmNjCVwKKyAgYXJlcy10ZXN0LWluaXQuY2MJCQlcCisgIGFyZXMtdGVzdC5jYwkJCQlcCisgIGFyZXMtdGVzdC1ucy5jYwkJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLmNjCQkJXAorICBhcmVzLXRlc3QtcGFyc2UtYS5jYwkJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLWFhYWEuY2MJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLW14LmNjCQlcCisgIGFyZXMtdGVzdC1wYXJzZS1uYXB0ci5jYwkJXAorICBhcmVzLXRlc3QtcGFyc2UtbnMuY2MJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLXB0ci5jYwkJXAorICBhcmVzLXRlc3QtcGFyc2Utc29hLmNjCQlcCisgIGFyZXMtdGVzdC1wYXJzZS1zcnYuY2MJCVwKKyAgYXJlcy10ZXN0LXBhcnNlLXR4dC5jYwkJXAorICBhcmVzLXRlc3QtbWlzYy5jYwkJCVwKKyAgYXJlcy10ZXN0LWxpdmUuY2MJCQlcCisgIGFyZXMtdGVzdC1tb2NrLmNjCQkJXAorICBhcmVzLXRlc3QtaW50ZXJuYWwuY2MJCVwKKyAgZG5zLXByb3RvLmNjCQkJCVwKKyAgZG5zLXByb3RvLXRlc3QuY2MKKworVEVTVEhFQURFUlMgPSBhcmVzLXRlc3QuaAkJXAorICBkbnMtcHJvdG8uaAorCitGVVpaU09VUkNFUyA9IGFyZXMtdGVzdC1mdXp6LmMJCVwKKyAgYXJlcy1mdXp6LmMKKworRFVNUFNPVVJDRVMgPSBkbnMtcHJvdG8uY2MJCVwKKyAgZG5zLWR1bXAuY2MKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYWNsb2NhbC5tNCBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2Y3MmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMTE2MiBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTUgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK200X2lmbmRlZihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbbTRfZGVmdW4oW19BTV9DT05GSUdfTUFDUk9fRElSU10sIFtdKW00X2RlZnVuKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFtfQU1fQ09ORklHX01BQ1JPX0RJUlMoJEApXSldKQorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42OV0sLAorW200X3dhcm5pbmcoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY5LgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSAnYXV0b3JlY29uZicuXSldKQorCisjIENvcHlyaWdodCAoQykgMjAwMi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgorIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KKyMgKFRoaXMgcHJpdmF0ZSBtYWNybyBzaG91bGQgbm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoaXMgZmlsZS4pCitBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCitbYW1fX2FwaV92ZXJzaW9uPScxLjE1JworZG5sIFNvbWUgdXNlcnMgZmluZCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBtaXN0YWtlIGl0IGZvciBhIHdheSB0bworZG5sIHJlcXVpcmUgc29tZSBtaW5pbXVtIHZlcnNpb24uICBQb2ludCB0aGVtIHRvIHRoZSByaWdodCBtYWNyby4KK200X2lmKFskMV0sIFsxLjE1XSwgW10sCisgICAgICBbQUNfRkFUQUwoW0RvIG5vdCBjYWxsICQwLCB1c2UgQU1fSU5JVF9BVVRPTUFLRShbJDFdKS5dKV0pZG5sCitdKQorCisjIF9BTV9BVVRPQ09ORl9WRVJTSU9OKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGFjbG9jYWwgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZmluZCB0aGUgQXV0b2NvbmYgdmVyc2lvbi4KKyMgVGhpcyBpcyBhIHByaXZhdGUgbWFjcm8gdG9vLiAgVXNpbmcgbTRfZGVmaW5lIHNpbXBsaWZpZXMKKyMgdGhlIGxvZ2ljIGluIGFjbG9jYWwsIHdoaWNoIGNhbiBzaW1wbHkgaWdub3JlIHRoaXMgZGVmaW5pdGlvbi4KK200X2RlZmluZShbX0FNX0FVVE9DT05GX1ZFUlNJT05dLCBbXSkKKworIyBBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIHRoZXkgY2FuIGJlIHRyYWNlZC4KKyMgVGhpcyBmdW5jdGlvbiBpcyBBQ19SRVFVSVJFZCBieSBBTV9JTklUX0FVVE9NQUtFLgorQUNfREVGVU4oW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dLAorW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTVdKWRubAorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorX0FNX0FVVE9DT05GX1ZFUlNJT04obTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pKV0pCisKKyMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKKyMgJGFjX2F1eF9kaXIgdG8gJyRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKyMgJyRzcmNkaXInLCAnJHNyY2Rpci8uLicsIG9yICckc3JjZGlyLy4uLy4uJy4KKyMKKyMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQorIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCisjIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCisjIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQorIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgorIworIyAkYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKKyMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKKyMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgorIworIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgorIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQorIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgJy4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKyMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyMKKyMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCisjIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgorIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAorIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKKyMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKKyMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KKyMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgorIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCisjCisjIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgorIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCisjIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KKworQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKK1tBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKKyMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCithbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKK10pCisKKyMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KK0FDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCitbQUNfUFJFUkVRKFsyLjUyXSlkbmwKKyBtNF9pZihbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCisgICAgICAgWyQxXSwgW0ZBTFNFXSwgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldKWRubAorQUNfU1VCU1QoWyQxX1RSVUVdKWRubAorQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFskMV9UUlVFXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFskMV9GQUxTRV0pZG5sCittNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKK2lmICQyOyB0aGVuCisgICQxX1RSVUU9CisgICQxX0ZBTFNFPScjJworZWxzZQorICAkMV9UUlVFPScjJworICAkMV9GQUxTRT0KK2ZpCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorW2lmIHRlc3QgLXogIiR7JDFfVFJVRX0iICYmIHRlc3QgLXogIiR7JDFfRkFMU0V9IjsgdGhlbgorICBBQ19NU0dfRVJST1IoW1tjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCitmaV0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisKKyMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgJ0FDX1BST0dfQ0MnIGJlCisjIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LAorIyB3aWxsIHRoaW5rIGl0IHNlZXMgYSAqdXNlKiwgYW5kIHRoZXJlZm9yZSB3aWxsIHRyaWdnZXIgYWxsIGl0J3MKKyMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZworIyBDQyBldGMuIGluIHRoZSBNYWtlZmlsZSwgd2lsbCBhc2sgZm9yIGFuIEFDX1BST0dfQ0MgdXNlLi4uCisKKworIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgorIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiT0JKQyIsICJPQkpDWFgiLCAiVVBDIiwgb3IgIkdKQyIuCisjIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCisjCisjIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcworIyBtb2RpZmllZCB0byBpbnZva2UgX0FNX0RFUEVOREVOQ0lFUyhDQyk7IHdlIHdvdWxkIGhhdmUgYSBjaXJjdWxhcgorIyBkZXBlbmRlbmN5LCBhbmQgZ2l2ZW4gdGhhdCB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gcnVuIHRoaXMgbWFjcm8sCisjIGp1c3QgcmVseSBvbiBBQ19QUk9HX0NDLgorQUNfREVGVU4oW19BTV9ERVBFTkRFTkNJRVNdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9ERVBESVJdKWRubAorQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAorQUNfUkVRVUlSRShbQU1fTUFLRV9JTkNMVURFXSlkbmwKK0FDX1JFUVVJUkUoW0FNX0RFUF9UUkFDS10pZG5sCisKK200X2lmKFskMV0sIFtDQ10sICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgWyQxXSwgW0NYWF0sICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICBbJDFdLCBbT0JKQ10sIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICBbJDFdLCBbT0JKQ1hYXSwgW2RlcGNjPSIkT0JKQ1hYIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgWyQxXSwgW1VQQ10sICBbZGVwY2M9IiRVUEMiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICBbJDFdLCBbR0NKXSwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICAgICAgICAgICAgICAgIFtkZXBjYz0iJCQxIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSkKKworQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKKyAgICAgICAgICAgICAgIFthbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0sCitbaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEIi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiBbJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnXSA8IC4vZGVwY29tcGAKKyAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBtNF9jYXNlKFskMV0sIFtDQ10sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSwKKyAgICBbQ1hYXSwKKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWNdKQorCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgIjogPiBzdWIvY29uZnRzdCRpLmgiIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KKyAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggJy1jJyBhbmQgJy1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycy4KKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorXSkKK0FDX1NVQlNUKFskMURFUE1PREVdLCBbZGVwbW9kZT0kYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdKQorQU1fQ09ORElUSU9OQUwoW2FtX19mYXN0ZGVwJDFdLCBbCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzXSkKK10pCisKKworIyBBTV9TRVRfREVQRElSCisjIC0tLS0tLS0tLS0tLS0KKyMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCisjIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUy4KK0FDX0RFRlVOKFtBTV9TRVRfREVQRElSXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAorQUNfU1VCU1QoW0RFUERJUl0sIFsiJHthbV9fbGVhZGluZ19kb3R9ZGVwcyJdKWRubAorXSkKKworCisjIEFNX0RFUF9UUkFDSworIyAtLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBTV9ERVBfVFJBQ0tdLAorW0FDX0FSR19FTkFCTEUoW2RlcGVuZGVuY3ktdHJhY2tpbmddLCBbZG5sCitBU19IRUxQX1NUUklORygKKyAgWy0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmddLAorICBbZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCitBU19IRUxQX1NUUklORygKKyAgWy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nXSwKKyAgW3NwZWVkcyB1cCBvbmUtdGltZSBidWlsZF0pXSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKKyAgYW1fX25vZGVwPSdfbm8nCitmaQorQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCitBQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNREVQQkFDS1NMQVNIXSlkbmwKK0FDX1NVQlNUKFthbV9fbm9kZXBdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW2FtX19ub2RlcF0pZG5sCitdKQorCisjIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworCisjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW3sKKyAgIyBPbGRlciBBdXRvY29uZiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisgIGNhc2UgJENPTkZJR19GSUxFUyBpbgorICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKyAgZXNhYworICBzaGlmdAorICBmb3IgbWYKKyAgZG8KKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgJ01ha2VmaWxlLmluJywgYnV0CisgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgJ21ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAorICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQorICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICAgIGRvbmUKKyAgZG9uZQorfQorXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworCisKKyMgQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBzaG91bGQgb25seSBiZSBpbnZva2VkIG9uY2UgLS0gdXNlIHZpYSBBQ19SRVFVSVJFLgorIworIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCisjIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoICcuUCcgZmlsZSB0aGF0IHdlIHdpbGwKKyMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KK0FDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCisgICAgIFt0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorICAgICBbQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIl0pCitdKQorCisjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKKyMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KKworZG5sIFJlZGVmaW5lIEFDX1BST0dfQ0MgdG8gYXV0b21hdGljYWxseSBpbnZva2UgX0FNX1BST0dfQ0NfQ19PLgorbTRfZGVmaW5lKFtBQ19QUk9HX0NDXSwKK200X2RlZm4oW0FDX1BST0dfQ0NdKQorW19BTV9QUk9HX0NDX0NfTworXSkKKworIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQorIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCisjIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKKyMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCisjIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCisjIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgorIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAorIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCisjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCitBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCitbQUNfUFJFUkVRKFsyLjY1XSlkbmwKK2RubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CitkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KK200X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAoraWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgorICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAorICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgIEFDX1NVQlNUKFthbV9faXNyY10sIFsnIC1JJChzcmNkaXIpJ10pX0FNX1NVQlNUX05PVE1BS0UoW2FtX19pc3JjXSlkbmwKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuICJtYWtlIGRpc3RjbGVhbiIgdGhlcmUgZmlyc3RdKQorICBmaQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKK0FDX1NVQlNUKFtDWUdQQVRIX1ddKQorCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCitkbmwgRGlzdGluZ3Vpc2ggYmV0d2VlbiBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBjYWxscy4KK200X2lmdmFsKFskMl0sCitbQUNfRElBR05PU0UoW29ic29sZXRlXSwKKyAgICAgICAgICAgICBbJDA6IHR3by0gYW5kIHRocmVlLWFyZ3VtZW50cyBmb3JtcyBhcmUgZGVwcmVjYXRlZC5dKQorbTRfaWZ2YWwoWyQzXSwgW19BTV9TRVRfT1BUSU9OKFtuby1kZWZpbmVdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJDFdKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLAorW19BTV9TRVRfT1BUSU9OUyhbJDFdKWRubAorZG5sIERpYWdub3NlIG9sZC1zdHlsZSBBQ19JTklUIHdpdGggbmV3LXN0eWxlIEFNX0FVVE9NQUtFX0lOSVQuCittNF9pZigKKyAgbTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sIFtva10pOm00X2lmZGVmKFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbb2tdKSwKKyAgW29rOm9rXSwsCisgIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAorCitfQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKK1tBQ19ERUZJTkVfVU5RVU9URUQoW1BBQ0tBR0VdLCBbIiRQQUNLQUdFIl0sIFtOYW1lIG9mIHBhY2thZ2VdKQorIEFDX0RFRklORV9VTlFVT1RFRChbVkVSU0lPTl0sIFsiJFZFUlNJT04iXSwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KK0FDX1JFUVVJUkUoW0FNX1NBTklUWV9DSEVDS10pZG5sCitBQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pZG5sCitBTV9NSVNTSU5HX1BST0coW0FDTE9DQUxdLCBbYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn1dKQorQU1fTUlTU0lOR19QUk9HKFtBVVRPQ09ORl0sIFthdXRvY29uZl0pCitBTV9NSVNTSU5HX1BST0coW0FVVE9NQUtFXSwgW2F1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufV0pCitBTV9NSVNTSU5HX1BST0coW0FVVE9IRUFERVJdLCBbYXV0b2hlYWRlcl0pCitBTV9NSVNTSU5HX1BST0coW01BS0VJTkZPXSwgW21ha2VpbmZvXSkKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKKyMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54CisjIGRpZXMgb3V0IGZvciBnb29kLiAgRm9yIG1vcmUgYmFja2dyb3VuZCwgc2VlOgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMDEuaHRtbD4KKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+CitBQ19TVUJTVChbbWtkaXJfcF0sIFsnJChNS0RJUl9QKSddKQorIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0IChhbmQgcG9zc2libHkgdGhlIFRBUCBkcml2ZXIpLiAgVGhlCisjIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24gc29tZSBwbGF0Zm9ybXMuCitBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitfQU1fSUZfT1BUSU9OKFt0YXItdXN0YXJdLCBbX0FNX1BST0dfVEFSKFt1c3Rhcl0pXSwKKwkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKK19BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ0NdKV0sCisJCSAgW200X2RlZmluZShbQUNfUFJPR19DQ10sCisJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKFtDQ10pXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ1hYXSldLAorCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwKKwkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtDWFhdKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtPQkpDXSldLAorCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ10sCisJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNYWF0sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSwKKwkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX09CSkNYWF0sCisJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldKV0pZG5sCitdKQorQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSlkbmwKK2RubCBUaGUgdGVzdHN1aXRlIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQorZG5sICdhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcworZG5sIG1hY3JvIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KK0FDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCitbbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCisgIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAorCisjIFBPU0lYIHdpbGwgc2F5IGluIGEgZnV0dXJlIHZlcnNpb24gdGhhdCBydW5uaW5nICJybSAtZiIgd2l0aCBubyBhcmd1bWVudAorIyBpcyBPSzsgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBtYWtlIHRoYXQgYXNzdW1wdGlvbiBpbiBvdXIgTWFrZWZpbGUKKyMgcmVjaXBlcy4gIFNvIHVzZSBhbiBhZ2dyZXNzaXZlIHByb2JlIHRvIGNoZWNrIHRoYXQgdGhlIHVzYWdlIHdlIHdhbnQgaXMKKyMgYWN0dWFsbHkgc3VwcG9ydGVkICJpbiB0aGUgd2lsZCIgdG8gYW4gYWNjZXB0YWJsZSBkZWdyZWUuCisjIFNlZSBhdXRvbWFrZSBidWcjMTA4MjguCisjIFRvIG1ha2UgYW55IGlzc3VlIG1vcmUgdmlzaWJsZSwgY2F1c2UgdGhlIHJ1bm5pbmcgY29uZmlndXJlIHRvIGJlIGFib3J0ZWQKKyMgYnkgZGVmYXVsdCBpZiB0aGUgJ3JtJyBwcm9ncmFtIGluIHVzZSBkb2Vzbid0IG1hdGNoIG91ciBleHBlY3RhdGlvbnM7IHRoZQorIyB1c2VyIGNhbiBzdGlsbCBvdmVycmlkZSB0aGlzIHRob3VnaC4KK2lmIHJtIC1mICYmIHJtIC1mciAmJiBybSAtcmY7IHRoZW4gOiBPSzsgZWxzZQorICBjYXQgPiYyIDw8J0VORCcKK09vcHMhCisKK1lvdXIgJ3JtJyBwcm9ncmFtIHNlZW1zIHVuYWJsZSB0byBydW4gd2l0aG91dCBmaWxlIG9wZXJhbmRzIHNwZWNpZmllZAorb24gdGhlIGNvbW1hbmQgbGluZSwgZXZlbiB3aGVuIHRoZSAnLWYnIG9wdGlvbiBpcyBwcmVzZW50LiAgVGhpcyBpcyBjb250cmFyeQordG8gdGhlIGJlaGF2aW91ciBvZiBtb3N0IHJtIHByb2dyYW1zIG91dCB0aGVyZSwgYW5kIG5vdCBjb25mb3JtaW5nIHdpdGgKK3RoZSB1cGNvbWluZyBQT1NJWCBzdGFuZGFyZDogPGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTU0Mj4KKworUGxlYXNlIHRlbGwgYnVnLWF1dG9tYWtlQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgdmFsdWUKK29mIHlvdXIgJFBBVEggYW5kIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gIFRoaXMKK2NhbiBoZWxwIHVzIGltcHJvdmUgZnV0dXJlIGF1dG9tYWtlIHZlcnNpb25zLgorCitFTkQKKyAgaWYgdGVzdCB4IiRBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSIgPSB4InllcyI7IHRoZW4KKyAgICBlY2hvICdDb25maWd1cmF0aW9uIHdpbGwgcHJvY2VlZCBhbnl3YXksIHNpbmNlIHlvdSBoYXZlIHNldCB0aGUnID4mMgorICAgIGVjaG8gJ0FDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIHZhcmlhYmxlIHRvICJ5ZXMiJyA+JjIKKyAgICBlY2hvID4mMgorICBlbHNlCisgICAgY2F0ID4mMiA8PCdFTkQnCitBYm9ydGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB0byBlbnN1cmUgeW91IHRha2Ugbm90aWNlIG9mIHRoZSBpc3N1ZS4KKworWW91IGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBHTlUgY29yZXV0aWxzIHRvIGdldCBhbiAncm0nIGltcGxlbWVudGF0aW9uCit0aGF0IGJlaGF2ZXMgcHJvcGVybHk6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLz4uCisKK0lmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgdXNpbmcgeW91ciBwcm9ibGVtYXRpYworJ3JtJyBhbnl3YXksIGV4cG9ydCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0KK3RvICJ5ZXMiLCBhbmQgcmUtcnVuIGNvbmZpZ3VyZS4KKworRU5ECisgICAgQUNfTVNHX0VSUk9SKFtZb3VyICdybScgcHJvZ3JhbSBpcyBiYWQsIHNvcnJ5Ll0pCisgIGZpCitmaQorZG5sIFRoZSB0cmFpbGluZyBuZXdsaW5lIGluIHRoaXMgbWFjcm8ncyBkZWZpbml0aW9uIGlzIGRlbGliZXJhdGUsIGZvcgorZG5sIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHRvIGFsbG93IHRyYWlsaW5nICdkbmwnLXN0eWxlIGNvbW1lbnRzCitkbmwgYWZ0ZXIgdGhlIEFNX0lOSVRfQVVUT01BS0UgaW52b2NhdGlvbi4gU2VlIGF1dG9tYWtlIGJ1ZyMxNjg0MS4KK10pCisKK2RubCBIb29rIGludG8gJ19BQ19DT01QSUxFUl9FWEVFWFQnIGVhcmx5IHRvIGxlYXJuIGl0cyBleHBhbnNpb24uICBEbyBub3QKK2RubCBhZGQgdGhlIGNvbmRpdGlvbmFsIHJpZ2h0IGhlcmUsIGFzIF9BQ19DT01QSUxFUl9FWEVFWFQgbWF5IGJlIGZ1cnRoZXIKK2RubCBtYW5nbGVkIGJ5IEF1dG9jb25mIGFuZCBydW4gaW4gYSBzaGVsbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQuCittNF9kZWZpbmUoW19BQ19DT01QSUxFUl9FWEVFWFRdLAorbTRfZGVmbihbX0FDX0NPTVBJTEVSX0VYRUVYVF0pW200X3Byb3ZpZGUoW19BTV9DT01QSUxFUl9FWEVFWFRdKV0pCisKKyMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KKyMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCisjIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKworIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQorIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCisjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KK0FDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKK1sjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fYXJnPSQxCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NICisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGluc3RhbGxfc2guCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NoK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQorQUNfU1VCU1QoW2luc3RhbGxfc2hdKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcworIyB3aXRoIGEgbGVhZGluZyBkb3QuICBGb3IgaW5zdGFuY2UgTVMtRE9TIGRvZXNuJ3QuCitBQ19ERUZVTihbQU1fU0VUX0xFQURJTkdfRE9UXSwKK1tybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorQUNfU1VCU1QoW2FtX19sZWFkaW5nX2RvdF0pXSkKKworIyBDaGVjayB0byBzZWUgaG93ICdtYWtlJyB0cmVhdHMgaW5jbHVkZXMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX01BS0VfSU5DTFVERSgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCitBQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKK1thbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK0FDX01TR19DSEVDS0lORyhbZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZV0pCithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tICdtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKK2ZpCitBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQorQUNfU1VCU1QoW2FtX19xdW90ZV0pCitBQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCitybSAtZiBjb25maW5jIGNvbmZtZgorXSkKKworIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ny0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworIyBBTV9NSVNTSU5HX0hBU19SVU4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBNSVNTSU5HIGlmIG5vdCBkZWZpbmVkIHNvIGZhciBhbmQgdGVzdCBpZiBpdCBpcyBtb2Rlcm4gZW5vdWdoLgorIyBJZiBpdCBpcywgc2V0IGFtX21pc3NpbmdfcnVuIHRvIHVzZSBpdCwgb3RoZXJ3aXNlLCB0byBub3RoaW5nLgorQUNfREVGVU4oW0FNX01JU1NJTkdfSEFTX1JVTl0sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbbWlzc2luZ10pZG5sCitpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisgICopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisgIGVzYWMKK2ZpCisjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKK2lmIGV2YWwgIiRNSVNTSU5HIC0taXMtbGlnaHR3ZWlnaHQiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAiCitlbHNlCisgIGFtX21pc3NpbmdfcnVuPQorICBBQ19NU0dfV0FSTihbJ21pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmddKQorZmkKK10pCisKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIF9BTV9NQU5HTEVfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FNX01BTkdMRV9PUFRJT05dLAorW1tfQU1fT1BUSU9OX11tNF9icGF0c3Vic3QoJDEsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKyMgX0FNX1NFVF9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBOQU1FLiAgUHJlc2VudGx5IHRoYXQgb25seSBtZWFucyBkZWZpbmluZyBhIGZsYWcgZm9yIHRoaXMgb3B0aW9uLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFsxXSldKQorCisjIF9BTV9TRVRfT1BUSU9OUyhPUFRJT05TKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OUyBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIEF1dG9tYWtlIG9wdGlvbnMuCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05TXSwKK1ttNF9mb3JlYWNoX3coW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCisKKyMgX0FNX0lGX09QVElPTihPUFRJT04sIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorQUNfREVGVU4oW19BTV9JRl9PUFRJT05dLAorW200X2lmc2V0KF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCBbJDJdLCBbJDNdKV0pCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBfQU1fUFJPR19DQ19DX08KKyMgLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgQUNfUFJPR19DQ19DX08sIGJ1dCBjaGFuZ2VkIGZvciBhdXRvbWFrZS4gIFdlIHJld3JpdGUgQUNfUFJPR19DQworIyB0byBhdXRvbWF0aWNhbGx5IGNhbGwgdGhpcy4KK0FDX0RFRlVOKFtfQU1fUFJPR19DQ19DX09dLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2NvbXBpbGVdKWRubAorQUNfTEFOR19QVVNIKFtDXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKAorICBbd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyXSwKKyAgW2FtX2N2X3Byb2dfY2NfY19vXSwKKyAgW0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTShbXSldKQorICAjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KKyAgIyBGb2xsb3dpbmcgQUNfUFJPR19DQ19DX08sIHdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZQorICAjIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywKKyAgIyB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCisgIGFtX2N2X3Byb2dfY2NfY19vPXllcworICBmb3IgYW1faSBpbiAxIDI7IGRvCisgICAgaWYgQU1fUlVOX0xPRyhbJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHRdKSBcCisgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0OyB0aGVuCisgICAgICA6IE9LCisgICAgZWxzZQorICAgICAgYW1fY3ZfcHJvZ19jY19jX289bm8KKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBybSAtZiBjb3JlIGNvbmZ0ZXN0KgorICB1bnNldCBhbV9pXSkKK2lmIHRlc3QgIiRhbV9jdl9wcm9nX2NjX2NfbyIgIT0geWVzOyB0aGVuCisgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgorICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAorICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKK2ZpCitBQ19MQU5HX1BPUChbQ10pXSkKKworIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK0FDX0RFRlVOX09OQ0UoW0FNX1BST0dfQ0NfQ19PXSwgW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9SVU5fTE9HKENPTU1BTkQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIENPTU1BTkQsIHNhdmUgdGhlIGV4aXQgc3RhdHVzIGluIGFjX3N0YXR1cywgYW5kIGxvZyBpdC4KKyMgKFRoaXMgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIEF1dG9jb25mJ3MgX0FDX1JVTl9MT0cgbWFjcm8uKQorQUNfREVGVU4oW0FNX1JVTl9MT0ddLAorW3sgZWNobyAiJGFzX21lOiRMSU5FTk86ICQxIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAoJDEpID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9XSkKKworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fU0FOSVRZX0NIRUNLCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiAnJHNyY2RpciddKTs7Citlc2FjCisKKyMgRG8gJ3NldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIGFtX2hhc19zbGVwdD1ubworICAgZm9yIGFtX3RyeSBpbiAxIDI7IGRvCisgICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQorICAgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCisJIyAtTCBkaWRuJ3Qgd29yay4KKwlzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAorICAgICBmaQorICAgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisJJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKwkjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisJIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKwlBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KKyAgYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCisgICAgIGZpCisgICAgIGlmIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZSB8fCB0ZXN0ICRhbV90cnkgLWVxIDI7IHRoZW4KKyAgICAgICBicmVhaworICAgICBmaQorICAgICAjIEp1c3QgaW4gY2FzZS4KKyAgICAgc2xlZXAgMQorICAgICBhbV9oYXNfc2xlcHQ9eWVzCisgICBkb25lCisgICB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUKKyAgICkKK3RoZW4KKyAgICMgT2suCisgICA6CitlbHNlCisgICBBQ19NU0dfRVJST1IoW25ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2tdKQorZmkKK0FDX01TR19SRVNVTFQoW3llc10pCisjIElmIHdlIGRpZG4ndCBzbGVlcCwgd2Ugc3RpbGwgbmVlZCB0byBlbnN1cmUgdGltZSBzdGFtcHMgb2YgY29uZmlnLnN0YXR1cyBhbmQKKyMgZ2VuZXJhdGVkIGZpbGVzIGFyZSBzdHJpY3RseSBuZXdlci4KK2FtX3NsZWVwX3BpZD0KK2lmIGdyZXAgJ3NsZXB0OiBubycgY29uZnRlc3QuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgKCBzbGVlcCAxICkgJgorICBhbV9zbGVlcF9waWQ9JCEKK2ZpCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorICBbQUNfTVNHX0NIRUNLSU5HKFt0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmVdKQorICAgaWYgdGVzdCAtbiAiJGFtX3NsZWVwX3BpZCI7IHRoZW4KKyAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgorICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKKyAgIGZpCisgICBBQ19NU0dfUkVTVUxUKFtkb25lXSldKQorcm0gLWYgY29uZnRlc3QuZmlsZQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1NJTEVOVF9SVUxFUyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKKyMgKCJ5ZXMiIGJlaW5nIGxlc3MgdmVyYm9zZSwgIm5vIiBvciBlbXB0eSBiZWluZyB2ZXJib3NlKS4KK0FDX0RFRlVOKFtBTV9TSUxFTlRfUlVMRVNdLAorW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sIFtkbmwKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1lbmFibGUtc2lsZW50LXJ1bGVzXSwKKyAgW2xlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpXSkKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1kaXNhYmxlLXNpbGVudC1ydWxlc10sCisgIFt2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIildKWRubAorXSkKK2Nhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gQCU6QCAoKCgKKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT1tNF9pZihbJDFdLCBbeWVzXSwgWzBdLCBbMV0pOzsKK2VzYWMKK2RubAorZG5sIEEgZmV3ICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4sIE5vblN0b3AgT1MgYW5kIE5leHRTdGVwKQorZG5sIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCB2YXJpYWJsZSBleHBhbnNpb25zLgorZG5sIFNlZSBhdXRvbWFrZSBidWcjOTkyOCBhbmQgYnVnIzEwMjM3LgorYW1fbWFrZT0ke01BS0UtbWFrZX0KK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXNdLAorICAgW2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzXSwKKyAgIFtpZiBBU19FQ0hPKFtbJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0J11dKSB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmldKQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgZG5sIFVzaW5nICckVicgaW5zdGVhZCBvZiAnJChWKScgYnJlYWtzIElSSVggbWFrZS4KKyAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FDX1NVQlNUKFtBTV9WXSlkbmwKK0FNX1NVQlNUX05PVE1BS0UoW0FNX1ZdKWRubAorQUNfU1VCU1QoW0FNX0RFRkFVTFRfVl0pZG5sCitBTV9TVUJTVF9OT1RNQUtFKFtBTV9ERUZBVUxUX1ZdKWRubAorQUNfU1VCU1QoW0FNX0RFRkFVTFRfVkVSQk9TSVRZXSlkbmwKK0FNX0JBQ0tTTEFTSD0nXCcKK0FDX1NVQlNUKFtBTV9CQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNX0JBQ0tTTEFTSF0pZG5sCitdKQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgJ2luc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKKyMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCisjIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgorIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCisjIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiAibWFrZSBpbnN0YWxsLXN0cmlwIiwgYW5kIGluaXRpYWxpemUKKyMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAorW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyAnc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuICJtYWtlIGluc3RhbGwtc3RyaXAiLiAgSG93ZXZlciAnc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgJ1NUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitkbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSAnbWF5YmUnLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQorZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCitBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQorCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgX0FNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmV2ZW50IEF1dG9tYWtlIGZyb20gb3V0cHV0dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCisjIFRoaXMgbWFjcm8gaXMgdHJhY2VkIGJ5IEF1dG9tYWtlLgorQUNfREVGVU4oW19BTV9TVUJTVF9OT1RNQUtFXSkKKworIyBBTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQdWJsaWMgc2lzdGVyIG9mIF9BTV9TVUJTVF9OT1RNQUtFLgorQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKKworIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgX0FNX1BST0dfVEFSKEZPUk1BVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwgaW4gZm9ybWF0IEZPUk1BVC4KKyMgRk9STUFUIHNob3VsZCBiZSBvbmUgb2YgJ3Y3JywgJ3VzdGFyJywgb3IgJ3BheCcuCisjCisjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX190YXIpIHRoYXQgaXMgYSBjb21tYW5kCisjIHdyaXRpbmcgdG8gc3Rkb3V0IGEgRk9STUFULXRhcmJhbGwgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5CisjICR0YXJkaXIuCisjICAgICB0YXJkaXI9ZGlyZWN0b3J5ICYmICQoYW1fX3RhcikgPiByZXN1bHQudGFyCisjCisjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKKyMgYSB0YXJiYWxsIHJlYWQgZnJvbSBzdGRpbi4KKyMgICAgICQoYW1fX3VudGFyKSA8IHJlc3VsdC50YXIKKyMKK0FDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAorWyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCisjIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KK0FDX1NVQlNUKFtBTVRBUl0sIFsnJCR7VEFSLXRhcn0nXSkKKworIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKKworbTRfaWYoWyQxXSwgW3Y3XSwKKyAgW2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nXSwKKworICBbbTRfY2FzZShbJDFdLAorICAgIFt1c3Rhcl0sCisgICAgIFsjIFRoZSBQT1NJWCAxOTg4ICd1c3RhcicgZm9ybWF0IGlzIGRlZmluZWQgd2l0aCBmaXhlZC1zaXplIGZpZWxkcy4KKyAgICAgICMgVGhlcmUgaXMgbm90YWJseSBhIDIxIGJpdHMgbGltaXQgZm9yIHRoZSBVSUQgYW5kIHRoZSBHSUQuICBJbiBmYWN0LAorICAgICAgIyB0aGUgJ3BheCcgdXRpbGl0eSBjYW4gaGFuZyBvbiBiaWdnZXIgVUlEL0dJRCAoc2VlIGF1dG9tYWtlIGJ1ZyM4MzQzCisgICAgICAjIGFuZCBidWcjMTM1ODgpLgorICAgICAgYW1fbWF4X3VpZD0yMDk3MTUxICMgMl4yMSAtIDEKKyAgICAgIGFtX21heF9naWQ9JGFtX21heF91aWQKKyAgICAgICMgVGhlICRVSUQgYW5kICRHSUQgdmFyaWFibGVzIGFyZSBub3QgcG9ydGFibGUsIHNvIHdlIG5lZWQgdG8gcmVzb3J0CisgICAgICAjIHRvIHRoZSBQT1NJWC1tYW5kYXRlZCBpZCgxKSB1dGlsaXR5LiAgRXJyb3JzIGluIHRoZSAnaWQnIGNhbGxzCisgICAgICAjIGJlbG93IGFyZSBkZWZpbml0ZWx5IHVuZXhwZWN0ZWQsIHNvIGFsbG93IHRoZSB1c2VycyB0byBzZWUgdGhlbQorICAgICAgIyAodGhhdCBpcywgYXZvaWQgc3RkZXJyIHJlZGlyZWN0aW9uKS4KKyAgICAgIGFtX3VpZD1gaWQgLXUgfHwgZWNobyB1bmtub3duYAorICAgICAgYW1fZ2lkPWBpZCAtZyB8fCBlY2hvIHVua25vd25gCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgVUlEICckYW1fdWlkJyBpcyBzdXBwb3J0ZWQgYnkgdXN0YXIgZm9ybWF0XSkKKyAgICAgIGlmIHRlc3QgJGFtX3VpZCAtbGUgJGFtX21heF91aWQ7IHRoZW4KKyAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICBlbHNlCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgICBfYW1fdG9vbHM9bm9uZQorICAgICAgZmkKKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBHSUQgJyRhbV9naWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXRdKQorICAgICAgaWYgdGVzdCAkYW1fZ2lkIC1sZSAkYW1fbWF4X2dpZDsgdGhlbgorICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBfYW1fdG9vbHM9bm9uZQorICAgICAgZmldLAorCisgIFtwYXhdLAorICAgIFtdLAorCisgIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQorCisgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKKworICAjIEdvIGFoZWFkIGV2ZW4gaWYgd2UgaGF2ZSB0aGUgdmFsdWUgYWxyZWFkeSBjYWNoZWQuICBXZSBkbyBzbyBiZWNhdXNlIHdlCisgICMgbmVlZCB0byBzZXQgdGhlIHZhbHVlcyBmb3IgdGhlICdhbV9fdGFyJyBhbmQgJ2FtX191bnRhcicgdmFyaWFibGVzLgorICBfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQorCisgIGZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzOyBkbworICAgIGNhc2UgJF9hbV90b29sIGluCisgICAgZ251dGFyKQorICAgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOyBkbworICAgICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhaworICAgICAgZG9uZQorICAgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCisgICAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKKyAgICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCisgICAgICA7OworICAgIHBsYWludGFyKQorICAgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKKyAgICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCisgICAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCisgICAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSd0YXIgeGYgLScKKyAgICAgIDs7CisgICAgcGF4KQorICAgICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCisgICAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKKyAgICAgIGFtX191bnRhcj0ncGF4IC1yJworICAgICAgOzsKKyAgICBjcGlvKQorICAgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKKyAgICAgIDs7CisgICAgbm9uZSkKKyAgICAgIGFtX190YXI9ZmFsc2UKKyAgICAgIGFtX190YXJfPWZhbHNlCisgICAgICBhbV9fdW50YXI9ZmFsc2UKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKKyAgICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICAgIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhaworCisgICAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzLgorICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgICBta2RpciBjb25mdGVzdC5kaXIKKyAgICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCisgICAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKKyAgICBybSAtcmYgY29uZnRlc3QuZGlyCisgICAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKyAgICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCisgICAgICBBTV9SVU5fTE9HKFtjYXQgY29uZnRlc3QuZGlyL2ZpbGVdKQorICAgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBybSAtcmYgY29uZnRlc3QuZGlyCisKKyAgQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorICBBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCisKK0FDX1NVQlNUKFthbV9fdGFyXSkKK0FDX1NVQlNUKFthbV9fdW50YXJdKQorXSkgIyBfQU1fUFJPR19UQVIKKworbTRfaW5jbHVkZShbLi4vbTQvYXhfY2hlY2tfdXNlcl9uYW1lc3BhY2UubTRdKQorbTRfaW5jbHVkZShbLi4vbTQvYXhfY2hlY2tfdXRzX25hbWVzcGFjZS5tNF0pCittNF9pbmNsdWRlKFsuLi9tNC9heF9jb2RlX2NvdmVyYWdlLm00XSkKK200X2luY2x1ZGUoWy4uL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNF0pCittNF9pbmNsdWRlKFsuLi9tNC9heF9wdGhyZWFkLm00XSkKK200X2luY2x1ZGUoWy4uL200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbLi4vbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoWy4uL200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbLi4vbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoWy4uL200L2x0fm9ic29sZXRlLm00XSkKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy1mdXp6LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtZnV6ei5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNzYxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtZnV6ei5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBHZW5lcmFsIGRyaXZlciB0byBhbGxvdyBjb21tYW5kLWxpbmUgZnV6emVyIChpLmUuIGFmbCkgdG8KKyAqIGV4ZXJjaXNlIHRoZSBsaWJGdXp6ZXIgZW50cnlwb2ludC4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIGtNYXhBZmxJbnB1dFNpemUgKDEgPDwgMjApCitzdGF0aWMgdW5zaWduZWQgY2hhciBhZmxfYnVmZmVyW2tNYXhBZmxJbnB1dFNpemVdOworCisjaWZkZWYgX19BRkxfTE9PUAorLyogSWYgd2UgYXJlIGJ1aWx0IHdpdGggYWZsLWNsYW5nLWZhc3QsIHVzZSBwZXJzaXN0ZW50IG1vZGUgKi8KKyNkZWZpbmUgS0VFUF9GVVpaSU5HKGNvdW50KSAgX19BRkxfTE9PUCgxMDAwKQorI2Vsc2UKKy8qIElmIHdlIGFyZSBidWlsdCB3aXRoIGFmbC1jbGFuZywgZXhlY3V0ZSBlYWNoIGlucHV0IG9uY2UgKi8KKyNkZWZpbmUgS0VFUF9GVVpaSU5HKGNvdW50KSAoKGNvdW50KSA8IDEpCisjZW5kaWYKKworLyogSW4gYXJlcy10ZXN0LWZ1enouYzogKi8KK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK3N0YXRpYyB2b2lkIFByb2Nlc3NGaWxlKGludCBmZCkgeworICBzc2l6ZV90IGNvdW50ID0gcmVhZChmZCwgYWZsX2J1ZmZlciwga01heEFmbElucHV0U2l6ZSk7CisgIC8qCisgICAqIE1ha2UgYSBjb3B5IG9mIHRoZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgcGFydCBvZiBhIGxhcmdlcgorICAgKiBidWZmZXIgKHdoZXJlIGJ1ZmZlciBvdmVyZmxvd3Mgd291bGQgZ28gdW5ub3RpY2VkKS4KKyAgICovCisgIHVuc2lnbmVkIGNoYXIgKmNvcGllZF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoY291bnQpOworICBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvcGllZF9kYXRhLCBjb3VudCk7CisgIGZyZWUoY29waWVkX2RhdGEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIGlmIChhcmdjID09IDEpIHsKKyAgICBpbnQgY291bnQgPSAwOworICAgIHdoaWxlIChLRUVQX0ZVWlpJTkcoY291bnQpKSB7CisgICAgICBQcm9jZXNzRmlsZShmaWxlbm8oc3RkaW4pKTsKKyAgICAgIGNvdW50Kys7CisgICAgfQorICB9IGVsc2UgeworICAgIGludCBpaTsKKyAgICBmb3IgKGlpID0gMTsgaWkgPCBhcmdjOyArK2lpKSB7CisgICAgICBpbnQgZmQgPSBvcGVuKGFyZ3ZbaWldLCBPX1JET05MWSk7CisgICAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gJyVzJ1xuIiwgYXJndltpaV0pOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIFByb2Nlc3NGaWxlKGZkKTsKKyAgICAgIGNsb3NlKGZkKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1mdXp6LmMgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1mdXp6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4ZTc2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LWZ1enouYwpAQCAtMCwwICsxLDQ2IEBACisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlICJhcmVzLmgiCisKKy8vIEVudHJ5cG9pbnQgZm9yIENsYW5nJ3MgbGliZnV6emVyCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpIHsKKyAgLy8gRmVlZCB0aGUgZGF0YSBpbnRvIGVhY2ggb2YgdGhlIGFyZXNfcGFyc2VfKl9yZXBseSBmdW5jdGlvbnMuCisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzVdOworICBpbnQgY291bnQgPSA1OworICBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YSwgc2l6ZSwgJmhvc3QsIGluZm8sICZjb3VudCk7CisgIGlmIChob3N0KSBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKKworICBob3N0ID0gTlVMTDsKKyAgc3RydWN0IGFyZXNfYWRkcjZ0dGwgaW5mbzZbNV07CisgIGNvdW50ID0gNTsKKyAgYXJlc19wYXJzZV9hYWFhX3JlcGx5KGRhdGEsIHNpemUsICZob3N0LCBpbmZvNiwgJmNvdW50KTsKKyAgaWYgKGhvc3QpIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworCisgIGhvc3QgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyIGFkZHJ2NFs0XSA9IHsweDEwLCAweDIwLCAweDMwLCAweDQwfTsKKyAgYXJlc19wYXJzZV9wdHJfcmVwbHkoZGF0YSwgc2l6ZSwgYWRkcnY0LCBzaXplb2YoYWRkcnY0KSwgQUZfSU5FVCwgJmhvc3QpOworICBpZiAoaG9zdCkgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7CisKKyAgaG9zdCA9IE5VTEw7CisgIGFyZXNfcGFyc2VfbnNfcmVwbHkoZGF0YSwgc2l6ZSwgJmhvc3QpOworICBpZiAoaG9zdCkgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7CisKKyAgc3RydWN0IGFyZXNfc3J2X3JlcGx5KiBzcnYgPSBOVUxMOworICBhcmVzX3BhcnNlX3Nydl9yZXBseShkYXRhLCBzaXplLCAmc3J2KTsKKyAgaWYgKHNydikgYXJlc19mcmVlX2RhdGEoc3J2KTsKKworICBzdHJ1Y3QgYXJlc19teF9yZXBseSogbXggPSBOVUxMOworICBhcmVzX3BhcnNlX214X3JlcGx5KGRhdGEsIHNpemUsICZteCk7CisgIGlmIChteCkgYXJlc19mcmVlX2RhdGEobXgpOworCisgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSogdHh0ID0gTlVMTDsKKyAgYXJlc19wYXJzZV90eHRfcmVwbHkoZGF0YSwgc2l6ZSwgJnR4dCk7CisgIGlmICh0eHQpIGFyZXNfZnJlZV9kYXRhKHR4dCk7CisKKyAgc3RydWN0IGFyZXNfc29hX3JlcGx5KiBzb2EgPSBOVUxMOworICBhcmVzX3BhcnNlX3NvYV9yZXBseShkYXRhLCBzaXplLCAmc29hKTsKKyAgaWYgKHNvYSkgYXJlc19mcmVlX2RhdGEoc29hKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1pbml0LmNjIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtaW5pdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjU3MGFjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtaW5pdC5jYwpAQCAtMCwwICsxLDU5NSBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorCisvLyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIGlzIG9ubHkgbmVlZGVkIGZvciB3aW5kb3dzIGJ1aWxkcworI2lmZGVmIFdJTjMyCisjZGVmaW5lIEVYUEVDVEVEX05PTklOSVQgQVJFU19FTk9USU5JVElBTElaRUQKKyNlbHNlCisjZGVmaW5lIEVYUEVDVEVEX05PTklOSVQgQVJFU19TVUNDRVNTCisjZW5kaWYKKworbmFtZXNwYWNlIGFyZXMgeworbmFtZXNwYWNlIHRlc3QgeworCitURVNUKExpYnJhcnlJbml0LCBCYXNpYykgeworICBFWFBFQ1RfRVEoRVhQRUNURURfTk9OSU5JVCwgYXJlc19saWJyYXJ5X2luaXRpYWxpemVkKCkpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2xpYnJhcnlfaW5pdChBUkVTX0xJQl9JTklUX0FMTCkpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQoKSk7CisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCk7CisgIEVYUEVDVF9FUShFWFBFQ1RFRF9OT05JTklULCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQoKSk7Cit9CisKK1RFU1QoTGlicmFyeUluaXQsIFVuZXhwZWN0ZWRDbGVhbnVwKSB7CisgIEVYUEVDVF9FUShFWFBFQ1RFRF9OT05JTklULCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQoKSk7CisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCk7CisgIEVYUEVDVF9FUShFWFBFQ1RFRF9OT05JTklULCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQoKSk7Cit9CisKK1RFU1QoTGlicmFyeUluaXQsIERJU0FCTEVEX0ludmFsaWRQYXJhbSkgeworICAvLyBUT0RPOiBwb2xpY2UgZmxhZ3MgYXJndW1lbnQgdG8gYXJlc19saWJyYXJ5X2luaXQoKQorICBFWFBFQ1RfRVEoQVJFU19FQkFEUVVFUlksIGFyZXNfbGlicmFyeV9pbml0KEFSRVNfTElCX0lOSVRfQUxMIDw8IDIpKTsKKyAgRVhQRUNUX0VRKEVYUEVDVEVEX05PTklOSVQsIGFyZXNfbGlicmFyeV9pbml0aWFsaXplZCgpKTsKKyAgYXJlc19saWJyYXJ5X2NsZWFudXAoKTsKK30KKworVEVTVChMaWJyYXJ5SW5pdCwgTmVzdGVkKSB7CisgIEVYUEVDVF9FUShFWFBFQ1RFRF9OT05JTklULCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQoKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfbGlicmFyeV9pbml0KEFSRVNfTElCX0lOSVRfQUxMKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfbGlicmFyeV9pbml0aWFsaXplZCgpKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19saWJyYXJ5X2luaXQoQVJFU19MSUJfSU5JVF9BTEwpKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19saWJyYXJ5X2luaXRpYWxpemVkKCkpOworICBhcmVzX2xpYnJhcnlfY2xlYW51cCgpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQoKSk7CisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCk7CisgIEVYUEVDVF9FUShFWFBFQ1RFRF9OT05JTklULCBhcmVzX2xpYnJhcnlfaW5pdGlhbGl6ZWQoKSk7Cit9CisKK1RFU1QoTGlicmFyeUluaXQsIEJhc2ljQ2hhbm5lbEluaXQpIHsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19saWJyYXJ5X2luaXQoQVJFU19MSUJfSU5JVF9BTEwpKTsKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2luaXQoJmNoYW5uZWwpKTsKKyAgRVhQRUNUX05FKG51bGxwdHIsIGNoYW5uZWwpOworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgT3B0aW9uc0NoYW5uZWxJbml0KSB7CisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0cyA9IHswfTsKKyAgaW50IG9wdG1hc2sgPSAwOworICBvcHRzLmZsYWdzID0gQVJFU19GTEFHX1VTRVZDIHwgQVJFU19GTEFHX1BSSU1BUlk7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfRkxBR1M7CisgIG9wdHMudGltZW91dCA9IDIwMDA7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfVElNRU9VVE1TOworICBvcHRzLnRyaWVzID0gMjsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9UUklFUzsKKyAgb3B0cy5uZG90cyA9IDQ7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfTkRPVFM7CisgIG9wdHMudWRwX3BvcnQgPSA1NDsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9VRFBfUE9SVDsKKyAgb3B0cy50Y3BfcG9ydCA9IDU0OworICBvcHRtYXNrIHw9IEFSRVNfT1BUX1RDUF9QT1JUOworICBvcHRzLnNvY2tldF9zZW5kX2J1ZmZlcl9zaXplID0gNTE0OworICBvcHRtYXNrIHw9IEFSRVNfT1BUX1NPQ0tfU05EQlVGOworICBvcHRzLnNvY2tldF9yZWNlaXZlX2J1ZmZlcl9zaXplID0gNTE0OworICBvcHRtYXNrIHw9IEFSRVNfT1BUX1NPQ0tfUkNWQlVGOworICBvcHRzLmVkbnNwc3ogPSAxMjgwOworICBvcHRtYXNrIHw9IEFSRVNfT1BUX0VETlNQU1o7CisgIG9wdHMubnNlcnZlcnMgPSAyOworICBvcHRzLnNlcnZlcnMgPSAoc3RydWN0IGluX2FkZHIgKiltYWxsb2Mob3B0cy5uc2VydmVycyAqIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworICBvcHRzLnNlcnZlcnNbMF0uc19hZGRyID0gaHRvbmwoMHgwMTAyMDMwNCk7CisgIG9wdHMuc2VydmVyc1sxXS5zX2FkZHIgPSBodG9ubCgweDAyMDMwNDA1KTsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9TRVJWRVJTOworICBvcHRzLm5kb21haW5zID0gMjsKKyAgb3B0cy5kb21haW5zID0gKGNoYXIgKiopbWFsbG9jKG9wdHMubmRvbWFpbnMgKiBzaXplb2YoY2hhciAqKSk7CisgIG9wdHMuZG9tYWluc1swXSA9IHN0cmR1cCgiZXhhbXBsZS5jb20iKTsKKyAgb3B0cy5kb21haW5zWzFdID0gc3RyZHVwKCJleGFtcGxlMi5jb20iKTsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9ET01BSU5TOworICBvcHRzLmxvb2t1cHMgPSBzdHJkdXAoImIiKTsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9MT09LVVBTOworICBvcHRtYXNrIHw9IEFSRVNfT1BUX1JPVEFURTsKKworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdF9vcHRpb25zKCZjaGFubmVsLCAmb3B0cywgb3B0bWFzaykpOworICBFWFBFQ1RfTkUobnVsbHB0ciwgY2hhbm5lbCk7CisKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwyID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19kdXAoJmNoYW5uZWwyLCBjaGFubmVsKSk7CisKKyAgc3RydWN0IGFyZXNfb3B0aW9ucyBvcHRzMiA9IHswfTsKKyAgaW50IG9wdG1hc2syID0gMDsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19zYXZlX29wdGlvbnMoY2hhbm5lbDIsICZvcHRzMiwgJm9wdG1hc2syKSk7CisKKyAgLy8gTm90ZSB0aGF0IG5vdCBhbGwgb3B0cy1zZXR0YWJsZSBmaWVsZHMgYXJlIHNhdmVkIChlLmcuCisgIC8vIGVkbnNwc3osIHNvY2tldF97c2VuZCxyZWNlaXZlfV9idWZmZXJfc2l6ZSkuCisgIEVYUEVDVF9FUShvcHRzLmZsYWdzLCBvcHRzMi5mbGFncyk7CisgIEVYUEVDVF9FUShvcHRzLnRpbWVvdXQsIG9wdHMyLnRpbWVvdXQpOworICBFWFBFQ1RfRVEob3B0cy50cmllcywgb3B0czIudHJpZXMpOworICBFWFBFQ1RfRVEob3B0cy5uZG90cywgb3B0czIubmRvdHMpOworICBFWFBFQ1RfRVEob3B0cy51ZHBfcG9ydCwgb3B0czIudWRwX3BvcnQpOworICBFWFBFQ1RfRVEob3B0cy50Y3BfcG9ydCwgb3B0czIudGNwX3BvcnQpOworICBFWFBFQ1RfRVEoMSwgb3B0czIubnNlcnZlcnMpOyAgLy8gVHJ1bmNhdGVkIGJ5IEFSRVNfRkxBR19QUklNQVJZCisgIEVYUEVDVF9FUShvcHRzLnNlcnZlcnNbMF0uc19hZGRyLCBvcHRzMi5zZXJ2ZXJzWzBdLnNfYWRkcik7CisgIEVYUEVDVF9FUShvcHRzLm5kb21haW5zLCBvcHRzMi5uZG9tYWlucyk7CisgIEVYUEVDVF9FUShzdGQ6OnN0cmluZyhvcHRzLmRvbWFpbnNbMF0pLCBzdGQ6OnN0cmluZyhvcHRzMi5kb21haW5zWzBdKSk7CisgIEVYUEVDVF9FUShzdGQ6OnN0cmluZyhvcHRzLmRvbWFpbnNbMV0pLCBzdGQ6OnN0cmluZyhvcHRzMi5kb21haW5zWzFdKSk7CisgIEVYUEVDVF9FUShzdGQ6OnN0cmluZyhvcHRzLmxvb2t1cHMpLCBzdGQ6OnN0cmluZyhvcHRzMi5sb29rdXBzKSk7CisKKyAgYXJlc19kZXN0cm95X29wdGlvbnMoJm9wdHMpOworICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0czIpOworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgIGFyZXNfZGVzdHJveShjaGFubmVsMik7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgQ2hhbm5lbEFsbG9jRmFpbCkgeworICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKKyAgZm9yIChpbnQgaWkgPSAxOyBpaSA8PSAyNTsgaWkrKykgeworICAgIENsZWFyRmFpbHMoKTsKKyAgICBTZXRBbGxvY0ZhaWwoaWkpOworICAgIGNoYW5uZWwgPSBudWxscHRyOworICAgIGludCByYyA9IGFyZXNfaW5pdCgmY2hhbm5lbCk7CisgICAgLy8gVGhlIG51bWJlciBvZiBhbGxvY2F0aW9ucyBkZXBlbmRzIG9uIGxvY2FsIGVudmlyb25tZW50LCBzbyBkb24ndCBleHBlY3QgRU5PTUVNLgorICAgIGlmIChyYyA9PSBBUkVTX0VOT01FTSkgeworICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIGNoYW5uZWwpOworICAgIH0gZWxzZSB7CisgICAgICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgICAgfQorICB9Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgT3B0aW9uc0NoYW5uZWxBbGxvY0ZhaWwpIHsKKyAgc3RydWN0IGFyZXNfb3B0aW9ucyBvcHRzID0gezB9OworICBpbnQgb3B0bWFzayA9IDA7CisgIG9wdHMuZmxhZ3MgPSBBUkVTX0ZMQUdfVVNFVkM7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfRkxBR1M7CisgIG9wdHMudGltZW91dCA9IDI7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfVElNRU9VVDsKKyAgb3B0cy50cmllcyA9IDI7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfVFJJRVM7CisgIG9wdHMubmRvdHMgPSA0OworICBvcHRtYXNrIHw9IEFSRVNfT1BUX05ET1RTOworICBvcHRzLnVkcF9wb3J0ID0gNTQ7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfVURQX1BPUlQ7CisgIG9wdHMudGNwX3BvcnQgPSA1NDsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9UQ1BfUE9SVDsKKyAgb3B0cy5zb2NrZXRfc2VuZF9idWZmZXJfc2l6ZSA9IDUxNDsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9TT0NLX1NOREJVRjsKKyAgb3B0cy5zb2NrZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZSA9IDUxNDsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9TT0NLX1JDVkJVRjsKKyAgb3B0cy5lZG5zcHN6ID0gMTI4MDsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9FRE5TUFNaOworICBvcHRzLm5zZXJ2ZXJzID0gMjsKKyAgb3B0cy5zZXJ2ZXJzID0gKHN0cnVjdCBpbl9hZGRyICopbWFsbG9jKG9wdHMubnNlcnZlcnMgKiBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyAgb3B0cy5zZXJ2ZXJzWzBdLnNfYWRkciA9IGh0b25sKDB4MDEwMjAzMDQpOworICBvcHRzLnNlcnZlcnNbMV0uc19hZGRyID0gaHRvbmwoMHgwMjAzMDQwNSk7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfU0VSVkVSUzsKKyAgb3B0cy5uZG9tYWlucyA9IDI7CisgIG9wdHMuZG9tYWlucyA9IChjaGFyICoqKW1hbGxvYyhvcHRzLm5kb21haW5zICogc2l6ZW9mKGNoYXIgKikpOworICBvcHRzLmRvbWFpbnNbMF0gPSBzdHJkdXAoImV4YW1wbGUuY29tIik7CisgIG9wdHMuZG9tYWluc1sxXSA9IHN0cmR1cCgiZXhhbXBsZTIuY29tIik7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfRE9NQUlOUzsKKyAgb3B0cy5sb29rdXBzID0gc3RyZHVwKCJiIik7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfTE9PS1VQUzsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9ST1RBVEU7CisKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwgPSBudWxscHRyOworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDg7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBpbnQgcmMgPSBhcmVzX2luaXRfb3B0aW9ucygmY2hhbm5lbCwgJm9wdHMsIG9wdG1hc2spOworICAgIGlmIChyYyA9PSBBUkVTX0VOT01FTSkgeworICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIGNoYW5uZWwpOworICAgIH0gZWxzZSB7CisgICAgICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByYyk7CisgICAgICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgICAgICBjaGFubmVsID0gbnVsbHB0cjsKKyAgICB9CisgIH0KKyAgQ2xlYXJGYWlscygpOworCisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdF9vcHRpb25zKCZjaGFubmVsLCAmb3B0cywgb3B0bWFzaykpOworICBFWFBFQ1RfTkUobnVsbHB0ciwgY2hhbm5lbCk7CisKKyAgLy8gQWRkIHNvbWUgc2VydmVycyBhbmQgYSBzb3J0bGlzdCBmb3IgZmxhdm91ci4KKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywKKyAgICAgICAgICAgIGFyZXNfc2V0X3NlcnZlcnNfY3N2KGNoYW5uZWwsICIxLjIuMy40LDAxMDI6MDMwNDowNTA2OjA3MDg6MDkxMDoxMTEyOjEzMTQ6MTUxNiwyLjMuNC41IikpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3NldF9zb3J0bGlzdChjaGFubmVsLCAiMS4yLjMuNCAyLjMuNC41IikpOworCisgIGFyZXNfY2hhbm5lbCBjaGFubmVsMiA9IG51bGxwdHI7CisgIGZvciAoaW50IGlpID0gMTsgaWkgPD0gMTg7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfZHVwKCZjaGFubmVsMiwgY2hhbm5lbCkpIDw8IGlpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBjaGFubmVsMikgPDwgaWk7CisgIH0KKworICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdHMyOworICBpbnQgb3B0bWFzazIgPSAwOworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDY7IGlpKyspIHsKKyAgICBtZW1zZXQoJm9wdHMyLCAwLCBzaXplb2Yob3B0czIpKTsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfc2F2ZV9vcHRpb25zKGNoYW5uZWwsICZvcHRzMiwgJm9wdG1hc2syKSkgPDwgaWk7CisgICAgLy8gTWF5IHN0aWxsIGhhdmUgYWxsb2NhdGlvbnMgZXZlbiBhZnRlciBBUkVTX0VOT01FTSByZXR1cm4gY29kZS4KKyAgICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0czIpOworICB9CisgIGFyZXNfZGVzdHJveV9vcHRpb25zKCZvcHRzKTsKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIEZhaWxDaGFubmVsSW5pdCkgeworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLAorICAgICAgICAgICAgYXJlc19saWJyYXJ5X2luaXRfbWVtKEFSRVNfTElCX0lOSVRfQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMaWJyYXJ5VGVzdDo6YW1hbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTGlicmFyeVRlc3Q6OmFmcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMaWJyYXJ5VGVzdDo6YXJlYWxsb2MpKTsKKyAgU2V0QWxsb2NGYWlsKDEpOworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX0VOT01FTSwgYXJlc19pbml0KCZjaGFubmVsKSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBjaGFubmVsKTsKKyAgYXJlc19saWJyYXJ5X2NsZWFudXAoKTsKK30KKworI2lmbmRlZiBXSU4zMgorVEVTVF9GKExpYnJhcnlUZXN0LCBFbnZJbml0KSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsID0gbnVsbHB0cjsKKyAgRW52VmFsdWUgdjEoIkxPQ0FMRE9NQUlOIiwgInRoaXMuaXMubG9jYWwiKTsKKyAgRW52VmFsdWUgdjIoIlJFU19PUFRJT05TIiwgIm9wdGlvbnMgZGVidWcgbmRvdHM6MyByZXRyeTozIHJvdGF0ZSByZXRyYW5zOjIiKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19pbml0KCZjaGFubmVsKSk7CisgIGFyZXNfZGVzdHJveShjaGFubmVsKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBFbnZJbml0QWxsb2NGYWlsKSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsOworICBFbnZWYWx1ZSB2MSgiTE9DQUxET01BSU4iLCAidGhpcy5pcy5sb2NhbCIpOworICBFbnZWYWx1ZSB2MigiUkVTX09QVElPTlMiLCAib3B0aW9ucyBkZWJ1ZyBuZG90czozIHJldHJ5OjMgcm90YXRlIHJldHJhbnM6MiIpOworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDEwOyBpaSsrKSB7CisgICAgQ2xlYXJGYWlscygpOworICAgIFNldEFsbG9jRmFpbChpaSk7CisgICAgY2hhbm5lbCA9IG51bGxwdHI7CisgICAgaW50IHJjID0gYXJlc19pbml0KCZjaGFubmVsKTsKKyAgICBpZiAocmMgPT0gQVJFU19TVUNDRVNTKSB7CisgICAgICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgICAgfSBlbHNlIHsKKyAgICAgIEVYUEVDVF9FUShBUkVTX0VOT01FTSwgcmMpOworICAgIH0KKyAgfQorfQorI2VuZGlmCisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIFNldEFkZHJlc3NlcykgeworICBhcmVzX3NldF9sb2NhbF9pcDQoY2hhbm5lbF8sIDB4MDEwMjAzMDQpOworICBieXRlIGFkZHI2WzE2XSA9IHsweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAorICAgICAgICAgICAgICAgICAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwfTsKKyAgYXJlc19zZXRfbG9jYWxfaXA2KGNoYW5uZWxfLCBhZGRyNik7CisgIGFyZXNfc2V0X2xvY2FsX2RldihjaGFubmVsXywgImR1bW15Iik7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIFNldFNvcnRsaXN0RmFpbHVyZXMpIHsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19zZXRfc29ydGxpc3QobnVsbHB0ciwgIjEuMi4zLjQiKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAieHl6enkgOyBsd2siKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAieHl6enkgOyAweDEyMyIpKTsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgU2V0U29ydGxpc3RWYXJpYW50cykgeworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3NldF9zb3J0bGlzdChjaGFubmVsXywgIjEuMi4zLjQiKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAiMS4yLjMuNCA7IDIuMy40LjUiKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAiMTI5LjEuMS4xIikpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3NldF9zb3J0bGlzdChjaGFubmVsXywgIjE5Mi4xLjEuMSIpKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19zZXRfc29ydGxpc3QoY2hhbm5lbF8sICIyMjQuMS4xLjEiKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAiMjI1LjEuMS4xIikpOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBTZXRTb3J0bGlzdEFsbG9jRmFpbCkgeworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDM7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAiMTIuMTMuMC4wLzE2IDEyMzQ6OjU2NzgvNDAgMS4yLjMuNCIpKSA8PCBpaTsKKyAgfQorfQorCisjaWZkZWYgVVNFX1dJTlNPQ0sKK1RFU1QoSW5pdCwgTm9MaWJyYXJ5SW5pdCkgeworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX0VOT1RJTklUSUFMSVpFRCwgYXJlc19pbml0KCZjaGFubmVsKSk7Cit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ09OVEFJTkVSCisvLyBUaGVzZSB0ZXN0cyByZWx5IG9uIHRoZSBhYmlsaXR5IG9mIG5vbi1yb290IHVzZXJzIHRvIGNyZWF0ZSBhIGNocm9vdAorLy8gdXNpbmcgTGludXggbmFtZXNwYWNlcy4KKworCisvLyBUaGUgbGlicmFyeSB1c2VzIGEgdmFyaWV0eSBvZiBpbmZvcm1hdGlvbiBzb3VyY2VzIHRvIGluaXRpYWxpemUgYSBjaGFubmVsLAorLy8gaW4gcGFydGljdWxhciB0byBkZXRlcm1pbmU6CisvLyAgLSBzZWFyY2g6IHRoZSBzZWFyY2ggZG9tYWlucyB0byB1c2UKKy8vICAtIHNlcnZlcnM6IHRoZSBuYW1lIHNlcnZlcnMgdG8gdXNlCisvLyAgLSBsb29rdXA6IHdoZXRoZXIgdG8gY2hlY2sgZmlsZXMgb3IgRE5TIG9yIGJvdGggKGUuZy4gImZiIikKKy8vICAtIG9wdGlvbnM6IHZhcmlvdXMgcmVzb2x2ZXIgb3B0aW9ucworLy8gIC0gc29ydGxpc3Q6IHRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGZvciBJUCBhZGRyZXNzZXMKKy8vCisvLyBUaGUgZmlyc3Qgc291cmNlIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0IGlzIHVzZWQ6CisvLyAgLSBpbml0X2J5X29wdGlvbnMoKTogZXhwbGljaXRseSBzcGVjaWZpZWQgdmFsdWVzIGluIHN0cnVjdCBhcmVzX29wdGlvbnMKKy8vICAtIGluaXRfYnlfZW52aXJvbm1lbnQoKTogdmFsdWVzIGZyb20gdGhlIGVudmlyb25tZW50OgorLy8gICAgIC0gTE9DQUxET01BSU4gLT4gc2VhcmNoIChzaW5nbGUgdmFsdWUpCisvLyAgICAgLSBSRVNfT1BUSU9OUyAtPiBvcHRpb25zCisvLyAgLSBpbml0X2J5X3Jlc29sdl9jb25mKCk6IHZhbHVlcyBmcm9tIHZhcmlvdXMgY29uZmlnIGZpbGVzOgorLy8gICAgIC0gL2V0Yy9yZXNvbHYuY29uZiAtPiBzZWFyY2gsIGxvb2t1cCwgc2VydmVycywgc29ydGxpc3QsIG9wdGlvbnMKKy8vICAgICAtIC9ldGMvbnNzd2l0Y2guY29uZiAtPiBsb29rdXAKKy8vICAgICAtIC9ldGMvaG9zdC5jb25mIC0+IGxvb2t1cAorLy8gICAgIC0gL2V0Yy9zdmMuY29uZiAtPiBsb29rdXAKKy8vICAtIGluaXRfYnlfZGVmYXVsdHMoKTogZmFsbGJhY2sgdmFsdWVzOgorLy8gICAgIC0gZ2V0aG9zdG5hbWUoMykgLT4gZG9tYWluCisvLyAgICAgLSAiZmIiIC0+IGxvb2t1cAorCitOYW1lQ29udGVudExpc3QgZmlsZWxpc3QgPSB7CisgIHsiL2V0Yy9yZXNvbHYuY29uZiIsICJuYW1lc2VydmVyIDEuMi4zLjRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgInNvcnRsaXN0IDEuMi4zLjQvMTYgMi4zLjQuNVxuIgorICAgICAgICAgICAgICAgICAgICAgICAic2VhcmNoIGZpcnN0LmNvbSBzZWNvbmQuY29tXG4ifSwKKyAgeyIvZXRjL2hvc3RzIiwgIjMuNC41LjYgYWhvc3RuYW1lLmNvbVxuIn0sCisgIHsiL2V0Yy9uc3N3aXRjaC5jb25mIiwgImhvc3RzOiBmaWxlc1xuIn19OworQ09OVEFJTkVEX1RFU1RfRihMaWJyYXJ5VGVzdCwgQ29udGFpbmVyQ2hhbm5lbEluaXQsCisgICAgICAgICAgICAgICAgICJteWhvc3RuYW1lIiwgIm15ZG9tYWlubmFtZS5vcmciLCBmaWxlbGlzdCkgeworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdCgmY2hhbm5lbCkpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWN0dWFsID0gR2V0TmFtZVNlcnZlcnMoY2hhbm5lbCk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBlY3RlZCA9IHsiMS4yLjMuNCJ9OworICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCk7CisKKyAgc3RydWN0IGFyZXNfb3B0aW9ucyBvcHRzOworICBpbnQgb3B0bWFzayA9IDA7CisgIGFyZXNfc2F2ZV9vcHRpb25zKGNoYW5uZWwsICZvcHRzLCAmb3B0bWFzayk7CisgIEVYUEVDVF9FUSgyLCBvcHRzLm5kb21haW5zKTsKKyAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCJmaXJzdC5jb20iKSwgc3RkOjpzdHJpbmcob3B0cy5kb21haW5zWzBdKSk7CisgIEVYUEVDVF9FUShzdGQ6OnN0cmluZygic2Vjb25kLmNvbSIpLCBzdGQ6OnN0cmluZyhvcHRzLmRvbWFpbnNbMV0pKTsKKyAgYXJlc19kZXN0cm95X29wdGlvbnMoJm9wdHMpOworCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbCwgImFob3N0bmFtZS5jb20iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzV29yayhjaGFubmVsLCBOb0V4dHJhRkRzLCBudWxscHRyKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgRVhQRUNUX0VRKCJ7J2Fob3N0bmFtZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzMuNC41LjZdfSIsIHNzLnN0cigpKTsKKworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgIHJldHVybiBIYXNGYWlsdXJlKCk7Cit9CisKK0NPTlRBSU5FRF9URVNUX0YoTGlicmFyeVRlc3QsIENvbnRhaW5lclNvcnRsaXN0T3B0aW9uSW5pdCwKKyAgICAgICAgICAgICAgICAgIm15aG9zdG5hbWUiLCAibXlkb21haW5uYW1lLm9yZyIsIGZpbGVsaXN0KSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfb3B0aW9ucyBvcHRzID0gezB9OworICBpbnQgb3B0bWFzayA9IDA7CisgIG9wdG1hc2sgfD0gQVJFU19PUFRfU09SVExJU1Q7CisgIG9wdHMubnNvcnQgPSAwOworICAvLyBFeHBsaWNpdGx5IHNwZWNpZnlpbmcgYW4gZW1wdHkgc29ydGxpc3QgaW4gdGhlIG9wdGlvbnMgc2hvdWxkIG92ZXJyaWRlIHRoZQorICAvLyBlbnZpcm9ubWVudC4KKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19pbml0X29wdGlvbnMoJmNoYW5uZWwsICZvcHRzLCBvcHRtYXNrKSk7CisgIGFyZXNfc2F2ZV9vcHRpb25zKGNoYW5uZWwsICZvcHRzLCAmb3B0bWFzayk7CisgIEVYUEVDVF9FUSgwLCBvcHRzLm5zb3J0KTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIG9wdHMuc29ydGxpc3QpOworICBFWFBFQ1RfRVEoQVJFU19PUFRfU09SVExJU1QsIChvcHRtYXNrICYgQVJFU19PUFRfU09SVExJU1QpKTsKKyAgYXJlc19kZXN0cm95X29wdGlvbnMoJm9wdHMpOworCisgIGFyZXNfZGVzdHJveShjaGFubmVsKTsKKyAgcmV0dXJuIEhhc0ZhaWx1cmUoKTsKK30KKworTmFtZUNvbnRlbnRMaXN0IGZ1bGxyZXNvbHYgPSB7CisgIHsiL2V0Yy9yZXNvbHYuY29uZiIsICIgbmFtZXNlcnZlciAgIDEuMi4zLjQgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJzZWFyY2ggICBmaXJzdC5jb20gc2Vjb25kLmNvbVxuIgorICAgICAgICAgICAgICAgICAgICAgICAibG9va3VwIGJpbmRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbnMgZGVidWcgbmRvdHM6NVxuIgorICAgICAgICAgICAgICAgICAgICAgICAic29ydGxpc3QgMS4yLjMuNC8xNiAyLjMuNC41XG4ifX07CitDT05UQUlORURfVEVTVF9GKExpYnJhcnlUZXN0LCBDb250YWluZXJGdWxsUmVzb2x2SW5pdCwKKyAgICAgICAgICAgICAgICAgIm15aG9zdG5hbWUiLCAibXlkb21haW5uYW1lLm9yZyIsIGZ1bGxyZXNvbHYpIHsKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2luaXQoJmNoYW5uZWwpKTsKKworICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdHM7CisgIGludCBvcHRtYXNrID0gMDsKKyAgYXJlc19zYXZlX29wdGlvbnMoY2hhbm5lbCwgJm9wdHMsICZvcHRtYXNrKTsKKyAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCJiIiksIHN0ZDo6c3RyaW5nKG9wdHMubG9va3VwcykpOworICBFWFBFQ1RfRVEoNSwgb3B0cy5uZG90cyk7CisgIGFyZXNfZGVzdHJveV9vcHRpb25zKCZvcHRzKTsKKworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgIHJldHVybiBIYXNGYWlsdXJlKCk7Cit9CisKK05hbWVDb250ZW50TGlzdCBob3N0Y29uZiA9IHsKKyAgeyIvZXRjL3Jlc29sdi5jb25mIiwgIm5hbWVzZXJ2ZXIgMS4yLjMuNFxuIgorICAgICAgICAgICAgICAgICAgICAgICAic29ydGxpc3QxLjIuMy40XG4iICAvLyBtYWxmb3JtZWQgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAic2VhcmNoIGZpcnN0LmNvbSBzZWNvbmQuY29tXG4ifSwKKyAgeyIvZXRjL2hvc3QuY29uZiIsICJvcmRlciBiaW5kIGhvc3RzXG4ifX07CitDT05UQUlORURfVEVTVF9GKExpYnJhcnlUZXN0LCBDb250YWluZXJIb3N0Q29uZkluaXQsCisgICAgICAgICAgICAgICAgICJteWhvc3RuYW1lIiwgIm15ZG9tYWlubmFtZS5vcmciLCBob3N0Y29uZikgeworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdCgmY2hhbm5lbCkpOworCisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0czsKKyAgaW50IG9wdG1hc2sgPSAwOworICBhcmVzX3NhdmVfb3B0aW9ucyhjaGFubmVsLCAmb3B0cywgJm9wdG1hc2spOworICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcoImJmIiksIHN0ZDo6c3RyaW5nKG9wdHMubG9va3VwcykpOworICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0cyk7CisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworICByZXR1cm4gSGFzRmFpbHVyZSgpOworfQorCitOYW1lQ29udGVudExpc3Qgc3ZjY29uZiA9IHsKKyAgeyIvZXRjL3Jlc29sdi5jb25mIiwgIm5hbWVzZXJ2ZXIgMS4yLjMuNFxuIgorICAgICAgICAgICAgICAgICAgICAgICAic2VhcmNoIGZpcnN0LmNvbSBzZWNvbmQuY29tXG4ifSwKKyAgeyIvZXRjL3N2Yy5jb25mIiwgImhvc3RzPSBiaW5kXG4ifX07CitDT05UQUlORURfVEVTVF9GKExpYnJhcnlUZXN0LCBDb250YWluZXJTdmNDb25mSW5pdCwKKyAgICAgICAgICAgICAgICAgIm15aG9zdG5hbWUiLCAibXlkb21haW5uYW1lLm9yZyIsIHN2Y2NvbmYpIHsKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2luaXQoJmNoYW5uZWwpKTsKKworICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdHM7CisgIGludCBvcHRtYXNrID0gMDsKKyAgYXJlc19zYXZlX29wdGlvbnMoY2hhbm5lbCwgJm9wdHMsICZvcHRtYXNrKTsKKyAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCJiIiksIHN0ZDo6c3RyaW5nKG9wdHMubG9va3VwcykpOworICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0cyk7CisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworICByZXR1cm4gSGFzRmFpbHVyZSgpOworfQorCisvLyBGYWlsdXJlcyB3aGVuIGV4cGVjdGVkIGNvbmZpZyBmaWxlbmFtZXMgYXJlIGluYWNjZXNzaWJsZS4KK2NsYXNzIE1ha2VVbnJlYWRhYmxlIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IE1ha2VVbnJlYWRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkKKyAgICA6IGZpbGVuYW1lXyhmaWxlbmFtZSkgeworICAgIGNobW9kKGZpbGVuYW1lXy5jX3N0cigpLCAwMDAwKTsKKyAgfQorICB+TWFrZVVucmVhZGFibGUoKSB7IGNobW9kKGZpbGVuYW1lXy5jX3N0cigpLCAwNjQ0KTsgfQorIHByaXZhdGU6CisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lXzsKK307CisKK0NPTlRBSU5FRF9URVNUX0YoTGlicmFyeVRlc3QsIENvbnRhaW5lclJlc29sdkNvbmZOb3RSZWFkYWJsZSwKKyAgICAgICAgICAgICAgICAgIm15aG9zdG5hbWUiLCAibXlkb21haW5uYW1lLm9yZyIsIGZpbGVsaXN0KSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsID0gbnVsbHB0cjsKKyAgTWFrZVVucmVhZGFibGUgaGlkZSgiL2V0Yy9yZXNvbHYuY29uZiIpOworICAvLyBVbmF2YWlsYWJsZSAvZXRjL3Jlc29sdi5jb25mIGZhbGxzIGJhY2sgdG8gZGVmYXVsdHMKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19pbml0KCZjaGFubmVsKSk7CisgIHJldHVybiBIYXNGYWlsdXJlKCk7Cit9CitDT05UQUlORURfVEVTVF9GKExpYnJhcnlUZXN0LCBDb250YWluZXJOc3N3aXRjaENvbmZOb3RSZWFkYWJsZSwKKyAgICAgICAgICAgICAgICAgIm15aG9zdG5hbWUiLCAibXlkb21haW5uYW1lLm9yZyIsIGZpbGVsaXN0KSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsID0gbnVsbHB0cjsKKyAgLy8gVW5hdmFpbGFibGUgL2V0Yy9uc3N3aXRjaC5jb25mIGZhbGxzIGJhY2sgdG8gZGVmYXVsdHMuCisgIE1ha2VVbnJlYWRhYmxlIGhpZGUoIi9ldGMvbnNzd2l0Y2guY29uZiIpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2luaXQoJmNoYW5uZWwpKTsKKworICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdHM7CisgIGludCBvcHRtYXNrID0gMDsKKyAgYXJlc19zYXZlX29wdGlvbnMoY2hhbm5lbCwgJm9wdHMsICZvcHRtYXNrKTsKKyAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCJmYiIpLCBzdGQ6OnN0cmluZyhvcHRzLmxvb2t1cHMpKTsKKyAgYXJlc19kZXN0cm95X29wdGlvbnMoJm9wdHMpOworCisgIGFyZXNfZGVzdHJveShjaGFubmVsKTsKKyAgcmV0dXJuIEhhc0ZhaWx1cmUoKTsKK30KK0NPTlRBSU5FRF9URVNUX0YoTGlicmFyeVRlc3QsIENvbnRhaW5lckhvc3RDb25mTm90UmVhZGFibGUsCisgICAgICAgICAgICAgICAgICJteWhvc3RuYW1lIiwgIm15ZG9tYWlubmFtZS5vcmciLCBob3N0Y29uZikgeworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IG51bGxwdHI7CisgIC8vIFVuYXZhaWxhYmxlIC9ldGMvaG9zdC5jb25mIGZhbGxzIGJhY2sgdG8gZGVmYXVsdHMuCisgIE1ha2VVbnJlYWRhYmxlIGhpZGUoIi9ldGMvaG9zdC5jb25mIik7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdCgmY2hhbm5lbCkpOworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgIHJldHVybiBIYXNGYWlsdXJlKCk7Cit9CitDT05UQUlORURfVEVTVF9GKExpYnJhcnlUZXN0LCBDb250YWluZXJTdmNDb25mTm90UmVhZGFibGUsCisgICAgICAgICAgICAgICAgICJteWhvc3RuYW1lIiwgIm15ZG9tYWlubmFtZS5vcmciLCBzdmNjb25mKSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsID0gbnVsbHB0cjsKKyAgLy8gVW5hdmFpbGFibGUgL2V0Yy9zdmMuY29uZiBmYWxscyBiYWNrIHRvIGRlZmF1bHRzLgorICBNYWtlVW5yZWFkYWJsZSBoaWRlKCIvZXRjL3N2Yy5jb25mIik7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdCgmY2hhbm5lbCkpOworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbCk7CisgIHJldHVybiBIYXNGYWlsdXJlKCk7Cit9CisKK05hbWVDb250ZW50TGlzdCByb3RhdGVlbnYgPSB7CisgIHsiL2V0Yy9yZXNvbHYuY29uZiIsICJuYW1lc2VydmVyIDEuMi4zLjRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgInNlYXJjaCBmaXJzdC5jb20gc2Vjb25kLmNvbVxuIgorICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9ucyByb3RhdGVcbiJ9fTsKK0NPTlRBSU5FRF9URVNUX0YoTGlicmFyeVRlc3QsIENvbnRhaW5lclJvdGF0ZUluaXQsCisgICAgICAgICAgICAgICAgICJteWhvc3RuYW1lIiwgIm15ZG9tYWlubmFtZS5vcmciLCByb3RhdGVlbnYpIHsKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2luaXQoJmNoYW5uZWwpKTsKKworICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdHM7CisgIGludCBvcHRtYXNrID0gMDsKKyAgYXJlc19zYXZlX29wdGlvbnMoY2hhbm5lbCwgJm9wdHMsICZvcHRtYXNrKTsKKyAgRVhQRUNUX0VRKEFSRVNfT1BUX1JPVEFURSwgKG9wdG1hc2sgJiBBUkVTX09QVF9ST1RBVEUpKTsKKyAgYXJlc19kZXN0cm95X29wdGlvbnMoJm9wdHMpOworCisgIGFyZXNfZGVzdHJveShjaGFubmVsKTsKKyAgcmV0dXJuIEhhc0ZhaWx1cmUoKTsKK30KKworQ09OVEFJTkVEX1RFU1RfRihMaWJyYXJ5VGVzdCwgQ29udGFpbmVyUm90YXRlT3ZlcnJpZGUsCisgICAgICAgICAgICAgICAgICJteWhvc3RuYW1lIiwgIm15ZG9tYWlubmFtZS5vcmciLCByb3RhdGVlbnYpIHsKKyAgYXJlc19jaGFubmVsIGNoYW5uZWwgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdHMgPSB7MH07CisgIGludCBvcHRtYXNrID0gQVJFU19PUFRfTk9ST1RBVEU7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdF9vcHRpb25zKCZjaGFubmVsLCAmb3B0cywgb3B0bWFzaykpOworCisgIG9wdG1hc2sgPSAwOworICBhcmVzX3NhdmVfb3B0aW9ucyhjaGFubmVsLCAmb3B0cywgJm9wdG1hc2spOworICBFWFBFQ1RfRVEoQVJFU19PUFRfTk9ST1RBVEUsIChvcHRtYXNrICYgQVJFU19PUFRfTk9ST1RBVEUpKTsKKyAgYXJlc19kZXN0cm95X29wdGlvbnMoJm9wdHMpOworCisgIGFyZXNfZGVzdHJveShjaGFubmVsKTsKKyAgcmV0dXJuIEhhc0ZhaWx1cmUoKTsKK30KKworTmFtZUNvbnRlbnRMaXN0IG11bHRpcmVzb2x2ID0geworICB7Ii9ldGMvcmVzb2x2LmNvbmYiLCAiIG5hbWVzZXJ2ZXIgMTo6MiA7ICA7O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiIGRvbWFpbiBmaXJzdC5jb21cbiJ9LAorICB7Ii9ldGMvbnNzd2l0Y2guY29uZiIsICJob3N0czogZmlsZXNcbiJ9fTsKK0NPTlRBSU5FRF9URVNUX0YoTGlicmFyeVRlc3QsIENvbnRhaW5lck11bHRpUmVzb2x2SW5pdCwKKyAgICAgICAgICAgICAgICAgIm15aG9zdG5hbWUiLCAibXlkb21haW5uYW1lLm9yZyIsIG11bHRpcmVzb2x2KSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19pbml0KCZjaGFubmVsKSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhY3R1YWwgPSBHZXROYW1lU2VydmVycyhjaGFubmVsKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGVjdGVkID0geyIwMDAxOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDIifTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpOworCisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0czsKKyAgaW50IG9wdG1hc2sgPSAwOworICBhcmVzX3NhdmVfb3B0aW9ucyhjaGFubmVsLCAmb3B0cywgJm9wdG1hc2spOworICBFWFBFQ1RfRVEoMSwgb3B0cy5uZG9tYWlucyk7CisgIEVYUEVDVF9FUShzdGQ6OnN0cmluZygiZmlyc3QuY29tIiksIHN0ZDo6c3RyaW5nKG9wdHMuZG9tYWluc1swXSkpOworICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0cyk7CisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworICByZXR1cm4gSGFzRmFpbHVyZSgpOworfQorCitOYW1lQ29udGVudExpc3Qgc3lzdGVtZHJlc29sdiA9IHsKKyAgeyIvZXRjL3Jlc29sdi5jb25mIiwgIm5hbWVzZXJ2ZXIgMS4yLjMuNFxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIGZpcnN0LmNvbVxuIn0sCisgIHsiL2V0Yy9uc3N3aXRjaC5jb25mIiwgImhvc3RzOiBqdW5rIHJlc29sdmUgZmlsZXNcbiJ9fTsKK0NPTlRBSU5FRF9URVNUX0YoTGlicmFyeVRlc3QsIENvbnRhaW5lclN5c3RlbWRSZXNvbHZJbml0LAorICAgICAgICAgICAgICAgICAibXlob3N0bmFtZSIsICJteWRvbWFpbm5hbWUub3JnIiwgc3lzdGVtZHJlc29sdikgeworICBhcmVzX2NoYW5uZWwgY2hhbm5lbCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdCgmY2hhbm5lbCkpOworCisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0czsKKyAgaW50IG9wdG1hc2sgPSAwOworICBhcmVzX3NhdmVfb3B0aW9ucyhjaGFubmVsLCAmb3B0cywgJm9wdG1hc2spOworICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcoImJmIiksIHN0ZDo6c3RyaW5nKG9wdHMubG9va3VwcykpOworICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0cyk7CisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworICByZXR1cm4gSGFzRmFpbHVyZSgpOworfQorCitOYW1lQ29udGVudExpc3QgZW1wdHkgPSB7fTsgIC8vIG5vIGZpbGVzCitDT05UQUlORURfVEVTVF9GKExpYnJhcnlUZXN0LCBDb250YWluZXJFbXB0eUluaXQsCisgICAgICAgICAgICAgICAgICJob3N0LmRvbWFpbi5vcmciLCAiZG9tYWluLm9yZyIsIGVtcHR5KSB7CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19pbml0KCZjaGFubmVsKSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhY3R1YWwgPSBHZXROYW1lU2VydmVycyhjaGFubmVsKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGVjdGVkID0geyIxMjcuMC4wLjEifTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpOworCisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0czsKKyAgaW50IG9wdG1hc2sgPSAwOworICBhcmVzX3NhdmVfb3B0aW9ucyhjaGFubmVsLCAmb3B0cywgJm9wdG1hc2spOworICBFWFBFQ1RfRVEoMSwgb3B0cy5uZG9tYWlucyk7CisgIEVYUEVDVF9FUShzdGQ6OnN0cmluZygiZG9tYWluLm9yZyIpLCBzdGQ6OnN0cmluZyhvcHRzLmRvbWFpbnNbMF0pKTsKKyAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCJmYiIpLCBzdGQ6OnN0cmluZyhvcHRzLmxvb2t1cHMpKTsKKyAgYXJlc19kZXN0cm95X29wdGlvbnMoJm9wdHMpOworCisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWwpOworICByZXR1cm4gSGFzRmFpbHVyZSgpOworfQorCisjZW5kaWYKKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1pbnRlcm5hbC5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LWludGVybmFsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTU2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1pbnRlcm5hbC5jYwpAQCAtMCwwICsxLDM4NyBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworZXh0ZXJuICJDIiB7CisvLyBSZW1vdmUgY29tbWFuZC1saW5lIGRlZmluZXMgb2YgcGFja2FnZSB2YXJpYWJsZXMgZm9yIHRoZSB0ZXN0IHByb2plY3QuLi4KKyN1bmRlZiBQQUNLQUdFX05BTUUKKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisvLyAuLi4gc28gd2UgY2FuIGluY2x1ZGUgdGhlIGxpYnJhcnkncyBjb25maWcgd2l0aG91dCBzeW1ib2wgcmVkZWZpbml0aW9ucy4KKyNpbmNsdWRlICJhcmVzX3NldHVwLmgiCisjaW5jbHVkZSAiYXJlc19ub3dhcm4uaCIKKyNpbmNsdWRlICJhcmVzX2luZXRfbmV0X3B0b24uaCIKKyNpbmNsdWRlICJhcmVzX2RhdGEuaCIKKyNpbmNsdWRlICJhcmVzX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJiaXRuY21wLmgiCisKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKK30KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworI2lmbmRlZiBDQVJFU19TWU1CT0xfSElESU5HCit2b2lkIENoZWNrUHRvTjQoaW50IHNpemUsIHVuc2lnbmVkIGludCB2YWx1ZSwgY29uc3QgY2hhciAqaW5wdXQpIHsKKyAgc3RydWN0IGluX2FkZHIgYTQ7CisgIGE0LnNfYWRkciA9IDA7CisgIHVpbnQzMl90IGV4cGVjdGVkID0gaHRvbmwodmFsdWUpOworICBFWFBFQ1RfRVEoc2l6ZSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsIGlucHV0LCAmYTQsIHNpemVvZihhNCkpKQorICAgIDw8ICIgZm9yIGlucHV0ICIgPDwgaW5wdXQ7CisgIEVYUEVDVF9FUShleHBlY3RlZCwgYTQuc19hZGRyKSA8PCAiIGZvciBpbnB1dCAiIDw8IGlucHV0OworfQorI2VuZGlmCisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgSW5ldFB0b04pIHsKKyAgc3RydWN0IGluX2FkZHIgYTQ7CisgIHN0cnVjdCBpbjZfYWRkciBhNjsKKworI2lmbmRlZiBDQVJFU19TWU1CT0xfSElESU5HCisgIHVpbnQzMl90IGV4cGVjdGVkOworCisgIENoZWNrUHRvTjQoNCAqIDgsIDB4MDEwMjAzMDQsICIxLjIuMy40Iik7CisgIENoZWNrUHRvTjQoNCAqIDgsIDB4ODEwMTAxMDEsICIxMjkuMS4xLjEiKTsKKyAgQ2hlY2tQdG9ONCg0ICogOCwgMHhDMDAxMDEwMSwgIjE5Mi4xLjEuMSIpOworICBDaGVja1B0b040KDQgKiA4LCAweEUwMDEwMTAxLCAiMjI0LjEuMS4xIik7CisgIENoZWNrUHRvTjQoNCAqIDgsIDB4RTEwMTAxMDEsICIyMjUuMS4xLjEiKTsKKyAgQ2hlY2tQdG9ONCg0LCAweEUwMDAwMDAwLCAiMjI0Iik7CisgIENoZWNrUHRvTjQoNCAqIDgsIDB4RkQwMDAwMDAsICIyNTMiKTsKKyAgQ2hlY2tQdG9ONCg0ICogOCwgMHhGMDAxMDEwMSwgIjI0MC4xLjEuMSIpOworICBDaGVja1B0b040KDQgKiA4LCAweDAyMDMwNDA1LCAiMDIuMy40LjUiKTsKKyAgQ2hlY2tQdG9ONCgzICogOCwgMHgwMTAyMDMwNCwgIjEuMi4zLjQvMjQiKTsKKyAgQ2hlY2tQdG9ONCgzICogOCwgMHgwMTAyMDMwMCwgIjEuMi4zLzI0Iik7CisgIENoZWNrUHRvTjQoMiAqIDgsIDB4YTAwMDAwMDAsICIweGEiKTsKKyAgQ2hlY2tQdG9ONCgwLCAweDAyMDMwNDA1LCAiMi4zLjQuNS8wMDAiKTsKKyAgQ2hlY2tQdG9ONCgxICogOCwgMHgwMTAyMDAwMCwgIjEuMi84Iik7CisgIENoZWNrUHRvTjQoMiAqIDgsIDB4MDEwMjAwMDAsICIweDAxMDIvMTYiKTsKKyAgQ2hlY2tQdG9ONCg0ICogOCwgMHgwMjAzMDQwNSwgIjAyLjMuNC41Iik7CisKKyAgRVhQRUNUX0VRKDE2ICogOCwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiOjoiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKDE2ICogOCwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiOjoxIiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIEVYUEVDVF9FUSgxNiAqIDgsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6NTY3ODo6IiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIEVYUEVDVF9FUSgxNiAqIDgsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZiIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoMTYgKiA4LCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICIxMjozNDo6ZmZmZjoxLjIuMy40IiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIEVYUEVDVF9FUSgyMywgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiMTI6MzQ6OmZmZmY6MS4yLjMuNC8yMyIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoMyAqIDgsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZi8yNCIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoMCwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiMTI6MzQ6OmZmLzAiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKDE2ICogOCwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiMTI6MzQ6OmZmZmY6MC4yIiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIEVYUEVDVF9FUSgxNiAqIDgsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNCIsICZhNiwgc2l6ZW9mKGE2KSkpOworCisgIC8vIFZhcmlvdXMgbWFsZm9ybWVkIHZlcnNpb25zCisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIiAiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjB4IiwgJmE0LCBzaXplb2YoYTQpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIweCAiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIngwIiwgJmE0LCBzaXplb2YoYTQpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIweFhZWlpZIiwgJmE0LCBzaXplb2YoYTQpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICJ4eXp6eSIsICZhNCwgc2l6ZW9mKGE0KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUK0FGX0lORVQ2LCAiMS4yLjMuNCIsICZhNCwgc2l6ZW9mKGE0KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMjU3LjIuMy40IiwgJmE0LCBzaXplb2YoYTQpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIwMDIuMy40LngiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjAwLjMuNC54IiwgJmE0LCBzaXplb2YoYTQpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIyLjMuNC54IiwgJmE0LCBzaXplb2YoYTQpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIyLjMuNC41LjYiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjIuMy40LjUuNi8xMiIsICZhNCwgc2l6ZW9mKGE0KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMi4zLjQ6NSIsICZhNCwgc2l6ZW9mKGE0KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMi4zLjQuNS8xMjAiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjIuMy40LjUvMXgiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjIuMy40LjUveCIsICZhNCwgc2l6ZW9mKGE0KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZi8yNDAiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICIxMjozNDo6ZmYvMDIiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICIxMjozNDo6ZmYvMnkiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICIxMjozNDo6ZmYveSIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZi8iLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICIiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICI6eCIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjoiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICI6IDoxMjM0IiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiOjoxMjM0NSIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6OjIzNDU6MzQ1Njo6MDAxMSIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICIxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6OiIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MS4yLjMuNCIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICI6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OiIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDo1Njc4IiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIC8vIFRPRE8oZHJ5c2RhbGUpOiBjaGVjayB3aGV0aGVyIHRoZSBuZXh0IHR3byB0ZXN0cyBzaG91bGQgZ2l2ZSAtMS4KKyAgRVhQRUNUX0VRKDAsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDo1Njc4OjU2NzgiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKDAsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDoxMjM0OjEyMzQ6MTIzNDo1Njc4OjU2Nzg6NTY3OCIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZmZmOjI1Ny4yLjMuNCIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZmZmOjAwMi4yLjMuNCIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZmZmOjEuMi4zLjQuNS42IiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiMTI6MzQ6OmZmZmY6MS4yLjMuNC41IiwgJmE2LCBzaXplb2YoYTYpKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiMTI6MzQ6OmZmZmY6MS4yLjMueiIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZmZmOjEuMi4zMDAxLjQiLCAmYTYsIHNpemVvZihhNikpKTsKKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVDYsICIxMjozNDo6ZmZmZjoxLjIuMy4uNCIsICZhNiwgc2l6ZW9mKGE2KSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZmZmOjEuMi4zLiIsICZhNiwgc2l6ZW9mKGE2KSkpOworCisgIC8vIEhleCBjb25zdGFudHMgYXJlIGFsbG93ZWQuCisgIEVYUEVDVF9FUSg0ICogOCwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIweDAxMDIwMzA0IiwgJmE0LCBzaXplb2YoYTQpKSk7CisgIGV4cGVjdGVkID0gaHRvbmwoMHgwMTAyMDMwNCk7CisgIEVYUEVDVF9FUShleHBlY3RlZCwgYTQuc19hZGRyKTsKKyAgRVhQRUNUX0VRKDQgKiA4LCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjB4MGEwYjBjMGQiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgZXhwZWN0ZWQgPSBodG9ubCgweDBhMGIwYzBkKTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkLCBhNC5zX2FkZHIpOworICBFWFBFQ1RfRVEoNCAqIDgsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMHgwQTBCMEMwRCIsICZhNCwgc2l6ZW9mKGE0KSkpOworICBleHBlY3RlZCA9IGh0b25sKDB4MGEwYjBjMGQpOworICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGE0LnNfYWRkcik7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIweDB4eXoiLCAmYTQsIHNpemVvZihhNCkpKTsKKyAgRVhQRUNUX0VRKDQgKiA4LCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjB4MTEyMjMzNCIsICZhNCwgc2l6ZW9mKGE0KSkpOworICBleHBlY3RlZCA9IGh0b25sKDB4MTEyMjMzNDApOworICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGE0LnNfYWRkcik7ICAvLyBodWg/CisKKyAgLy8gTm8gcm9vbSwgbm8gcm9vbS4KKyAgRVhQRUNUX0VRKC0xLCBhcmVzX2luZXRfbmV0X3B0b24oQUZfSU5FVCwgIjEuMi4zLjQiLCAmYTQsIHNpemVvZihhNCkgLSAxKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQ2LCAiMTI6MzQ6OmZmIiwgJmE2LCBzaXplb2YoYTYpIC0gMSkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMHgwMTAyMDMwNCIsICZhNCwgMikpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMHgwMTAyMDMwNCIsICZhNCwgMCkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMHgwYTBiMGMwZCIsICZhNCwgMCkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9uZXRfcHRvbihBRl9JTkVULCAiMHgweHl6IiwgJmE0LCAwKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIweDExMjIzMzQiLCAmYTQsIHNpemVvZihhNCkgLSAxKSk7CisgIEVYUEVDVF9FUSgtMSwgYXJlc19pbmV0X25ldF9wdG9uKEFGX0lORVQsICIyNTMiLCAmYTQsIHNpemVvZihhNCkgLSAxKSk7CisjZW5kaWYKKworICBFWFBFQ1RfRVEoMSwgYXJlc19pbmV0X3B0b24oQUZfSU5FVCwgIjEuMi4zLjQiLCAmYTQpKTsKKyAgRVhQRUNUX0VRKDEsIGFyZXNfaW5ldF9wdG9uKEFGX0lORVQ2LCAiMTI6MzQ6OmZmIiwgJmE2KSk7CisgIEVYUEVDVF9FUSgxLCBhcmVzX2luZXRfcHRvbihBRl9JTkVUNiwgIjEyOjM0OjpmZmZmOjEuMi4zLjQiLCAmYTYpKTsKKyAgRVhQRUNUX0VRKDAsIGFyZXNfaW5ldF9wdG9uKEFGX0lORVQsICJ4eXp6eSIsICZhNCkpOworICBFWFBFQ1RfRVEoLTEsIGFyZXNfaW5ldF9wdG9uKEFGX0lORVQrQUZfSU5FVDYsICIxLjIuMy40IiwgJmE0KSk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgRnJlZUNvcnJ1cHREYXRhKSB7CisgIC8vIGFyZXNfZnJlZV9kYXRhKHApIGV4cGVjdHMgdGhhdCB0aGVyZSBpcyBhIHR5cGUgZmllbGQgYW5kIGEgbWFya2VyCisgIC8vIGZpZWxkIGluIHRoZSBtZW1vcnkgYmVmb3JlIHAuICBGZWVkIGl0IGluY29ycmVjdCB2ZXJzaW9ucyBvZiBlYWNoLgorICBzdHJ1Y3QgYXJlc19kYXRhICpkYXRhID0gKHN0cnVjdCBhcmVzX2RhdGEgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcmVzX2RhdGEpKTsKKyAgdm9pZCogcCA9ICYoZGF0YS0+ZGF0YSk7CisKKyAgLy8gSW52YWxpZCB0eXBlCisgIGRhdGEtPnR5cGUgPSAoYXJlc19kYXRhdHlwZSk5OTsKKyAgZGF0YS0+bWFyayA9IEFSRVNfREFUQVRZUEVfTUFSSzsKKyAgYXJlc19mcmVlX2RhdGEocCk7CisKKyAgLy8gSW52YWxpZCBtYXJrZXIKKyAgZGF0YS0+dHlwZSA9IChhcmVzX2RhdGF0eXBlKUFSRVNfREFUQVRZUEVfTVhfUkVQTFk7CisgIGRhdGEtPm1hcmsgPSBBUkVTX0RBVEFUWVBFX01BUksgKyAxOworICBhcmVzX2ZyZWVfZGF0YShwKTsKKworICAvLyBOdWxsIHBvaW50ZXIKKyAgYXJlc19mcmVlX2RhdGEobnVsbHB0cik7CisKKyAgZnJlZShkYXRhKTsKK30KKworI2lmbmRlZiBDQVJFU19TWU1CT0xfSElESU5HCitURVNUKExpYnJhcnlJbml0LCBTdHJkdXBGYWlsdXJlcykgeworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2xpYnJhcnlfaW5pdChBUkVTX0xJQl9JTklUX0FMTCkpOworICBjaGFyKiBjb3B5ID0gYXJlc19zdHJkdXAoInN0cmluZyIpOworICBFWFBFQ1RfTkUobnVsbHB0ciwgY29weSk7CisgIGZyZWUoY29weSk7CisgIGFyZXNfbGlicmFyeV9jbGVhbnVwKCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgU3RyZHVwRmFpbHVyZXMpIHsKKyAgU2V0QWxsb2NGYWlsKDEpOworICBjaGFyKiBjb3B5ID0gYXJlc19zdHJkdXAoInN0cmluZyIpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgY29weSk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgTWFsbG9jRGF0YUZhaWwpIHsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGFyZXNfbWFsbG9jX2RhdGEoKGFyZXNfZGF0YXR5cGUpOTkpKTsKKyAgU2V0QWxsb2NTaXplRmFpbChzaXplb2Yoc3RydWN0IGFyZXNfZGF0YSkpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgYXJlc19tYWxsb2NfZGF0YShBUkVTX0RBVEFUWVBFX01YX1JFUExZKSk7Cit9CisKK1RFU1QoTWlzYywgQml0bmNtcCkgeworICBieXRlIGFbNF0gPSB7MHg4MCwgMHgwMSwgMHgwMiwgMHgwM307CisgIGJ5dGUgYls0XSA9IHsweDgwLCAweDAxLCAweDAyLCAweDA0fTsKKyAgYnl0ZSBjWzRdID0gezB4MDEsIDB4RkYsIDB4ODAsIDB4MDJ9OworICBFWFBFQ1RfR1QoMCwgYXJlc19fYml0bmNtcChhLCBiLCBzaXplb2YoYSkqOCkpOworICBFWFBFQ1RfTFQoMCwgYXJlc19fYml0bmNtcChiLCBhLCBzaXplb2YoYSkqOCkpOworICBFWFBFQ1RfRVEoMCwgYXJlc19fYml0bmNtcChhLCBhLCBzaXplb2YoYSkqOCkpOworCisgIGZvciAoaW50IGlpID0gMTsgaWkgPCAoMyo4KzUpOyBpaSsrKSB7CisgICAgRVhQRUNUX0VRKDAsIGFyZXNfX2JpdG5jbXAoYSwgYiwgaWkpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYXJlc19fYml0bmNtcChiLCBhLCBpaSkpOworICAgIEVYUEVDVF9MVCgwLCBhcmVzX19iaXRuY21wKGEsIGMsIGlpKSk7CisgICAgRVhQRUNUX0dUKDAsIGFyZXNfX2JpdG5jbXAoYywgYSwgaWkpKTsKKyAgfQorCisgIC8vIExhc3QgYnl0ZSBkaWZmZXJzIGF0IDV0aCBiaXQKKyAgRVhQRUNUX0VRKDAsIGFyZXNfX2JpdG5jbXAoYSwgYiwgMyo4ICsgMykpOworICBFWFBFQ1RfRVEoMCwgYXJlc19fYml0bmNtcChhLCBiLCAzKjggKyA0KSk7CisgIEVYUEVDVF9FUSgwLCBhcmVzX19iaXRuY21wKGEsIGIsIDMqOCArIDUpKTsKKyAgRVhQRUNUX0dUKDAsIGFyZXNfX2JpdG5jbXAoYSwgYiwgMyo4ICsgNikpOworICBFWFBFQ1RfR1QoMCwgYXJlc19fYml0bmNtcChhLCBiLCAzKjggKyA3KSk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgQ2FzdHMpIHsKKyAgc3NpemVfdCBzc3ogPSAxMDA7CisgIHVuc2lnbmVkIGludCB1ID0gMTAwOworICBpbnQgaSA9IDEwMDsKKyAgbG9uZyBsID0gMTAwOworCisgIHVuc2lnbmVkIGludCBydSA9IGFyZXN4X3N6dG91aShzc3opOworICBFWFBFQ1RfRVEodSwgcnUpOworICBpbnQgcmkgPSBhcmVzeF9zenRvc2koc3N6KTsKKyAgRVhQRUNUX0VRKGksIHJpKTsKKworICByaSA9IGFyZXN4X3NsdG9zaShsKTsKKyAgRVhQRUNUX0VRKGwsIChsb25nKXJpKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBSZWFkTGluZSkgeworICBUZW1wRmlsZSB0ZW1wKCJhYmNkZVxuMDEyMzQ1Njc4OVxuWFlaXG4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTBcblxuIik7CisgIEZJTEUgKmZwID0gZm9wZW4odGVtcC5maWxlbmFtZSgpLCAiciIpOworICBzaXplX3QgYnVmc2l6ZSA9IDQ7CisgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKGJ1ZnNpemUpOworCisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfX3JlYWRfbGluZShmcCwgJmJ1ZiwgJmJ1ZnNpemUpKTsKKyAgRVhQRUNUX0VRKCJhYmNkZSIsIHN0ZDo6c3RyaW5nKGJ1ZikpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX19yZWFkX2xpbmUoZnAsICZidWYsICZidWZzaXplKSk7CisgIEVYUEVDVF9FUSgiMDEyMzQ1Njc4OSIsIHN0ZDo6c3RyaW5nKGJ1ZikpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX19yZWFkX2xpbmUoZnAsICZidWYsICZidWZzaXplKSk7CisgIEVYUEVDVF9FUSgiWFlaIiwgc3RkOjpzdHJpbmcoYnVmKSk7CisgIFNldEFsbG9jRmFpbCgxKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBhcmVzX19yZWFkX2xpbmUoZnAsICZidWYsICZidWZzaXplKSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBidWYpOworCisgIGZjbG9zZShmcCk7CisgIGZyZWUoYnVmKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBSZWFkTGluZU5vQnVmKSB7CisgIFRlbXBGaWxlIHRlbXAoImFiY2RlXG4wMTIzNDU2Nzg5XG5YWVpcbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOworICBGSUxFICpmcCA9IGZvcGVuKHRlbXAuZmlsZW5hbWUoKSwgInIiKTsKKyAgc2l6ZV90IGJ1ZnNpemUgPSAwOworICBjaGFyICpidWYgPSBudWxscHRyOworCisgIFNldEFsbG9jRmFpbCgxKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBhcmVzX19yZWFkX2xpbmUoZnAsICZidWYsICZidWZzaXplKSk7CisKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19fcmVhZF9saW5lKGZwLCAmYnVmLCAmYnVmc2l6ZSkpOworICBFWFBFQ1RfRVEoImFiY2RlIiwgc3RkOjpzdHJpbmcoYnVmKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfX3JlYWRfbGluZShmcCwgJmJ1ZiwgJmJ1ZnNpemUpKTsKKyAgRVhQRUNUX0VRKCIwMTIzNDU2Nzg5Iiwgc3RkOjpzdHJpbmcoYnVmKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfX3JlYWRfbGluZShmcCwgJmJ1ZiwgJmJ1ZnNpemUpKTsKKyAgRVhQRUNUX0VRKCJYWVoiLCBzdGQ6OnN0cmluZyhidWYpKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19fcmVhZF9saW5lKGZwLCAmYnVmLCAmYnVmc2l6ZSkpOworICBFWFBFQ1RfRVEoIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsIHN0ZDo6c3RyaW5nKGJ1ZikpOworCisgIGZjbG9zZShmcCk7CisgIGZyZWUoYnVmKTsKK30KKworVEVTVChNaXNjLCBHZXRIb3N0ZW50KSB7CisgIFRlbXBGaWxlIGhvc3RzZmlsZSgiMS4yLjMuNCBleGFtcGxlLmNvbSAgXG4iCisgICAgICAgICAgICAgICAgICAgICAiICAyLjMuNC41XHRnb29nbGUuY29tICAgd3d3Lmdvb2dsZS5jb21cdHd3dzIuZ29vZ2xlLmNvbVxuIgorICAgICAgICAgICAgICAgICAgICAgIiNjb21tZW50XG4iCisgICAgICAgICAgICAgICAgICAgICAiNC41LjYuN1xuIgorICAgICAgICAgICAgICAgICAgICAgIjEuMy41LjcgIFxuIgorICAgICAgICAgICAgICAgICAgICAgIjo6MSAgICBpcHY2LmNvbSIpOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIEZJTEUgKmZwID0gZm9wZW4oaG9zdHNmaWxlLmZpbGVuYW1lKCksICJyIik7CisgIEFTU0VSVF9ORShudWxscHRyLCBmcCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURGQU1JTFksIGFyZXNfX2dldF9ob3N0ZW50KGZwLCBBRl9JTkVUK0FGX0lORVQ2LCAmaG9zdCkpOworICByZXdpbmQoZnApOworCisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfX2dldF9ob3N0ZW50KGZwLCBBRl9JTkVULCAmaG9zdCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzMTsKKyAgc3MxIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieydleGFtcGxlLmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMS4yLjMuNF19Iiwgc3MxLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7CisgIGhvc3QgPSBudWxscHRyOworCisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfX2dldF9ob3N0ZW50KGZwLCBBRl9JTkVULCAmaG9zdCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzMjsKKyAgc3MyIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieydnb29nbGUuY29tJyBhbGlhc2VzPVt3d3cuZ29vZ2xlLmNvbSwgd3d3Mi5nb29nbGUuY29tXSBhZGRycz1bMi4zLjQuNV19Iiwgc3MyLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7CisgIGhvc3QgPSBudWxscHRyOworCisgIEVYUEVDVF9FUShBUkVTX0VPRiwgYXJlc19fZ2V0X2hvc3RlbnQoZnAsIEFGX0lORVQsICZob3N0KSk7CisKKyAgcmV3aW5kKGZwKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19fZ2V0X2hvc3RlbnQoZnAsIEFGX0lORVQ2LCAmaG9zdCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzMzsKKyAgc3MzIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieydpcHY2LmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAxXX0iLCBzczMuc3RyKCkpOworICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKKyAgaG9zdCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX0VPRiwgYXJlc19fZ2V0X2hvc3RlbnQoZnAsIEFGX0lORVQ2LCAmaG9zdCkpOworICBmY2xvc2UoZnApOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIEdldEhvc3RlbnRBbGxvY0ZhaWwpIHsKKyAgVGVtcEZpbGUgaG9zdHNmaWxlKCIxLjIuMy40IGV4YW1wbGUuY29tIGFsaWFzMSBhbGlhczJcbiIpOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIEZJTEUgKmZwID0gZm9wZW4oaG9zdHNmaWxlLmZpbGVuYW1lKCksICJyIik7CisgIEFTU0VSVF9ORShudWxscHRyLCBmcCk7CisKKyAgZm9yIChpbnQgaWkgPSAxOyBpaSA8PSA4OyBpaSsrKSB7CisgICAgcmV3aW5kKGZwKTsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBob3N0ID0gbnVsbHB0cjsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfX2dldF9ob3N0ZW50KGZwLCBBRl9JTkVULCAmaG9zdCkpIDw8IGlpOworICB9CisgIGZjbG9zZShmcCk7Cit9CisjZW5kaWYKKworI2lmZGVmIENBUkVTX0VYUE9TRV9TVEFUSUNTCisvLyBUaGVzZSB0ZXN0cyBhY2Nlc3MgaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucyBmcm9tIHRoZSBsaWJyYXJ5LCB3aGljaAorLy8gYXJlIG9ubHkgZXhwb3NlZCB3aGVuIENBUkVTX0VYUE9TRV9TVEFUSUNTIGhhcyBiZWVuIGNvbmZpZ3VyZWQuIEFzIHN1Y2gKKy8vIHRoZXkgYXJlIHRpZ2h0bHkgY291cGxlIHRvIHRoZSBpbnRlcm5hbCBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGRldGFpbHMuCitleHRlcm4gIkMiIGNoYXIgKmFyZXNfc3RyaWVuZHN0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworVEVTVF9GKExpYnJhcnlUZXN0LCBTdHJpZW5kc3RyKSB7CisgIEVYUEVDVF9FUShudWxscHRyLCBhcmVzX3N0cmllbmRzdHIoImFiYyIsICIxMjM0NSIpKTsKKyAgRVhQRUNUX05FKG51bGxwdHIsIGFyZXNfc3RyaWVuZHN0cigiYWJjMTIzNDUiLCAiMTIzNDUiKSk7CisgIEVYUEVDVF9ORShudWxscHRyLCBhcmVzX3N0cmllbmRzdHIoImFiY3h5enp5IiwgIlhZWlpZIikpOworICBFWFBFQ1RfTkUobnVsbHB0ciwgYXJlc19zdHJpZW5kc3RyKCJ4eXp6eSIsICJYWVpaWSIpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGFyZXNfc3RyaWVuZHN0cigieHl4enkiLCAiWFlaWlkiKSk7CisgIEVYUEVDVF9ORShudWxscHRyLCBhcmVzX3N0cmllbmRzdHIoIiIsICIiKSk7CisgIGNvbnN0IGNoYXIgKnN0ciA9ICJwbHVnaCI7CisgIEVYUEVDVF9ORShudWxscHRyLCBhcmVzX3N0cmllbmRzdHIoc3RyLCBzdHIpKTsKK30KK2V4dGVybiAiQyIgaW50IHNpbmdsZV9kb21haW4oYXJlc19jaGFubmVsLCBjb25zdCBjaGFyKiwgY2hhcioqKTsKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIFNpbmdsZURvbWFpbikgeworICBUZW1wRmlsZSBhbGlhc2VzKCJ3d3cgd3d3Lmdvb2dsZS5jb21cbiIpOworICBFbnZWYWx1ZSB3aXRoX2VudigiSE9TVEFMSUFTRVMiLCBhbGlhc2VzLmZpbGVuYW1lKCkpOworCisgIFNldEFsbG9jU2l6ZUZhaWwoMTI4KTsKKyAgY2hhciAqcHRyID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBzaW5nbGVfZG9tYWluKGNoYW5uZWxfLCAid3d3IiwgJnB0cikpOworCisgIGNoYW5uZWxfLT5mbGFncyB8PSBBUkVTX0ZMQUdfTk9TRUFSQ0h8QVJFU19GTEFHX05PQUxJQVNFUzsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgc2luZ2xlX2RvbWFpbihjaGFubmVsXywgInd3dyIsICZwdHIpKTsKKyAgRVhQRUNUX0VRKCJ3d3ciLCBzdGQ6OnN0cmluZyhwdHIpKTsKKyAgZnJlZShwdHIpOworICBwdHIgPSBudWxscHRyOworCisgIFNldEFsbG9jRmFpbCgxKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBzaW5nbGVfZG9tYWluKGNoYW5uZWxfLCAid3d3IiwgJnB0cikpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgcHRyKTsKK30KKyNlbmRpZgorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBTYXZlSW52YWxpZENoYW5uZWwpIHsKKyAgaW50IHNhdmVkID0gY2hhbm5lbF8tPm5zZXJ2ZXJzOworICBjaGFubmVsXy0+bnNlcnZlcnMgPSAtMTsKKyAgc3RydWN0IGFyZXNfb3B0aW9ucyBvcHRzOworICBpbnQgb3B0bWFzayA9IDA7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfc2F2ZV9vcHRpb25zKGNoYW5uZWxfLCAmb3B0cywgJm9wdG1hc2spKTsKKyAgY2hhbm5lbF8tPm5zZXJ2ZXJzID0gc2F2ZWQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0Cit9ICAvLyBuYW1lc3BhY2UgYXJlcwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtbGl2ZS5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LWxpdmUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmZjhlYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LWxpdmUuY2MKQEAgLTAsMCArMSw1OTQgQEAKKy8vIFRoaXMgZmlsZSBpbmNsdWRlcyB0ZXN0cyB0aGF0IGF0dGVtcHQgdG8gZG8gcmVhbCBsb29rdXBzCisvLyBvZiBETlMgbmFtZXMgdXNpbmcgdGhlIGxvY2FsIG1hY2hpbmUncyBsaXZlIGluZnJhc3RydWN0dXJlLgorLy8gQXMgYSByZXN1bHQsIHdlIGRvbid0IGNoZWNrIHRoZSByZXN1bHRzIHZlcnkgY2xvc2VseSwgdG8gYWxsb3cKKy8vIGZvciB2YXJ5aW5nIGxvY2FsIGNvbmZpZ3VyYXRpb25zLgorCisjaW5jbHVkZSAiYXJlcy10ZXN0LmgiCisKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworLy8gVXNlIHRoZSBhZGRyZXNzIG9mIEdvb2dsZSdzIHB1YmxpYyBETlMgc2VydmVycyBhcyBleGFtcGxlIGFkZHJlc3NlcyB0aGF0IGFyZQorLy8gbGlrZWx5IHRvIGJlIGFjY2Vzc2libGUgZXZlcnl3aGVyZS9ldmVyeXdoZW4uCit1bnNpZ25lZCBjaGFyIGdkbnNfYWRkcjRbNF0gPSB7MHgwOCwgMHgwOCwgMHgwOCwgMHgwOH07Cit1bnNpZ25lZCBjaGFyIGdkbnNfYWRkcjZbMTZdID0gezB4MjAsIDB4MDEsIDB4NDgsIDB4NjAsIDB4NDgsIDB4NjAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODh9OworCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0SG9zdEJ5TmFtZVY0KSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKKyAgRVhQRUNUX0xUKDAsIChpbnQpcmVzdWx0Lmhvc3RfLmFkZHJzXy5zaXplKCkpOworICBFWFBFQ1RfRVEoQUZfSU5FVCwgcmVzdWx0Lmhvc3RfLmFkZHJ0eXBlXyk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVHZXRIb3N0QnlOYW1lVjYpIHsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQ2LCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKKyAgRVhQRUNUX0xUKDAsIChpbnQpcmVzdWx0Lmhvc3RfLmFkZHJzXy5zaXplKCkpOworICBFWFBFQ1RfRVEoQUZfSU5FVDYsIHJlc3VsdC5ob3N0Xy5hZGRydHlwZV8pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0SG9zdEJ5QWRkclY0KSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieWFkZHIoY2hhbm5lbF8sIGdkbnNfYWRkcjQsIHNpemVvZihnZG5zX2FkZHI0KSwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7CisgIEVYUEVDVF9MVCgwLCAoaW50KXJlc3VsdC5ob3N0Xy5hZGRyc18uc2l6ZSgpKTsKKyAgRVhQRUNUX0VRKEFGX0lORVQsIHJlc3VsdC5ob3N0Xy5hZGRydHlwZV8pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0SG9zdEJ5QWRkclY2KSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieWFkZHIoY2hhbm5lbF8sIGdkbnNfYWRkcjYsIHNpemVvZihnZG5zX2FkZHI2KSwgQUZfSU5FVDYsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfTFQoMCwgKGludClyZXN1bHQuaG9zdF8uYWRkcnNfLnNpemUoKSk7CisgIEVYUEVDVF9FUShBRl9JTkVUNiwgcmVzdWx0Lmhvc3RfLmFkZHJ0eXBlXyk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVHZXRIb3N0QnlOYW1lRmlsZSkgeworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisKKyAgLy8gU3RpbGwgbmVlZCBhIGNoYW5uZWwgZXZlbiB0byBxdWVyeSAvZXRjL2hvc3RzLgorICBFWFBFQ1RfRVEoQVJFU19FTk9URk9VTkQsCisgICAgICAgICAgICBhcmVzX2dldGhvc3RieW5hbWVfZmlsZShudWxscHRyLCAibG9jYWxob3N0IiwgQUZfSU5FVCwgJmhvc3QpKTsKKworICBpbnQgcmMgPSBhcmVzX2dldGhvc3RieW5hbWVfZmlsZShjaGFubmVsXywgImJvZ3VzLm1jbmFtZSIsIEFGX0lORVQsICZob3N0KTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworICBFWFBFQ1RfRVEoQVJFU19FTk9URk9VTkQsIHJjKTsKKworICByYyA9IGFyZXNfZ2V0aG9zdGJ5bmFtZV9maWxlKGNoYW5uZWxfLCAibG9jYWxob3N0IiwgQUZfSU5FVCwgJmhvc3QpOworICBpZiAocmMgPT0gQVJFU19TVUNDRVNTKSB7CisgICAgRVhQRUNUX05FKG51bGxwdHIsIGhvc3QpOworICAgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworICB9Cit9CisKK1RFU1RfUChEZWZhdWx0Q2hhbm5lbE1vZGVUZXN0LCBMaXZlR2V0TG9jYWxob3N0QnlOYW1lVjQpIHsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgImxvY2FsaG9zdCIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgaWYgKChyZXN1bHQuc3RhdHVzXyAhPSBBUkVTX0VOT1RGT1VORCkgJiYgKHJlc3VsdC5zdGF0dXNfICE9IEFSRVNfRUNPTk5SRUZVU0VEKSkgeworICAgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKKyAgICBFWFBFQ1RfRVEoMSwgKGludClyZXN1bHQuaG9zdF8uYWRkcnNfLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKEFGX0lORVQsIHJlc3VsdC5ob3N0Xy5hZGRydHlwZV8pOworICAgIEVYUEVDVF9ORShzdGQ6OnN0cmluZzo6bnBvcywgcmVzdWx0Lmhvc3RfLm5hbWVfLmZpbmQoImxvY2FsaG9zdCIpKTsKKyAgfQorfQorCitURVNUX1AoRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwgTGl2ZUdldExvY2FsaG9zdEJ5TmFtZVY2KSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJsb2NhbGhvc3QiLCBBRl9JTkVUNiwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBpZiAocmVzdWx0LnN0YXR1c18gPT0gQVJFU19TVUNDRVNTKSB7CisgICAgRVhQRUNUX0VRKDEsIChpbnQpcmVzdWx0Lmhvc3RfLmFkZHJzXy5zaXplKCkpOworICAgIEVYUEVDVF9FUShBRl9JTkVUNiwgcmVzdWx0Lmhvc3RfLmFkZHJ0eXBlXyk7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgICAgc3MgPDwgSG9zdEVudChyZXN1bHQuaG9zdF8pOworICAgIEVYUEVDVF9ORShzdGQ6OnN0cmluZzo6bnBvcywgcmVzdWx0Lmhvc3RfLm5hbWVfLmZpbmQoImxvY2FsaG9zdCIpKTsKKyAgfQorfQorCitURVNUX1AoRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwgTGl2ZUdldExvY2FsaG9zdEJ5TmFtZUlQVjQpIHsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgIjEyNy4wLjAuMSIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoMSwgKGludClyZXN1bHQuaG9zdF8uYWRkcnNfLnNpemUoKSk7CisgIEVYUEVDVF9FUShBRl9JTkVULCByZXN1bHQuaG9zdF8uYWRkcnR5cGVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IEhvc3RFbnQocmVzdWx0Lmhvc3RfKTsKKyAgRVhQRUNUX0VRKCJ7JzEyNy4wLjAuMScgYWxpYXNlcz1bXSBhZGRycz1bMTI3LjAuMC4xXX0iLCBzcy5zdHIoKSk7Cit9CisKK1RFU1RfUChEZWZhdWx0Q2hhbm5lbE1vZGVUZXN0LCBMaXZlR2V0TG9jYWxob3N0QnlOYW1lSVBWNikgeworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAiOjoxIiwgQUZfSU5FVDYsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgaWYgKHJlc3VsdC5zdGF0dXNfICE9IEFSRVNfRU5PVEZPVU5EKSB7CisgICAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICAgIEVYUEVDVF9FUSgxLCAoaW50KXJlc3VsdC5ob3N0Xy5hZGRyc18uc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoQUZfSU5FVDYsIHJlc3VsdC5ob3N0Xy5hZGRydHlwZV8pOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgIHNzIDw8IEhvc3RFbnQocmVzdWx0Lmhvc3RfKTsKKyAgICBFWFBFQ1RfRVEoInsnOjoxJyBhbGlhc2VzPVtdIGFkZHJzPVswMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDFdfSIsIHNzLnN0cigpKTsKKyAgfQorfQorCitURVNUX1AoRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwgTGl2ZUdldExvY2FsaG9zdEZhaWxGYW1pbHkpIHsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgIjEyNy4wLjAuMSIsIEFGX0lORVQrQUZfSU5FVDYsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PVElNUCwgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX1AoRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwgTGl2ZUdldExvY2FsaG9zdEJ5QWRkclY0KSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICBhZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisgIGFyZXNfZ2V0aG9zdGJ5YWRkcihjaGFubmVsXywgJmFkZHIsIHNpemVvZihhZGRyKSwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBpZiAocmVzdWx0LnN0YXR1c18gIT0gQVJFU19FTk9URk9VTkQpIHsKKyAgICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7CisgICAgRVhQRUNUX0xUKDAsIChpbnQpcmVzdWx0Lmhvc3RfLmFkZHJzXy5zaXplKCkpOworICAgIEVYUEVDVF9FUShBRl9JTkVULCByZXN1bHQuaG9zdF8uYWRkcnR5cGVfKTsKKyAgICBFWFBFQ1RfTkUoc3RkOjpzdHJpbmc6Om5wb3MsCisgICAgICAgICAgICAgIHJlc3VsdC5ob3N0Xy5uYW1lXy5maW5kKCJsb2NhbGhvc3QiKSk7CisgIH0KK30KKworVEVTVF9QKERlZmF1bHRDaGFubmVsTW9kZVRlc3QsIExpdmVHZXRMb2NhbGhvc3RCeUFkZHJWNikgeworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgYWRkci5zNl9hZGRyWzE1XSA9IDE7ICAvLyBpbjZhZGRyX2xvb3BiYWNrCisgIGFyZXNfZ2V0aG9zdGJ5YWRkcihjaGFubmVsXywgJmFkZHIsIHNpemVvZihhZGRyKSwgQUZfSU5FVDYsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgaWYgKHJlc3VsdC5zdGF0dXNfICE9IEFSRVNfRU5PVEZPVU5EKSB7CisgICAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICAgIEVYUEVDVF9MVCgwLCAoaW50KXJlc3VsdC5ob3N0Xy5hZGRyc18uc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoQUZfSU5FVDYsIHJlc3VsdC5ob3N0Xy5hZGRydHlwZV8pOworICAgIEVYUEVDVF9ORShzdGQ6OnN0cmluZzo6bnBvcywKKyAgICAgICAgICAgICAgcmVzdWx0Lmhvc3RfLm5hbWVfLmZpbmQoImxvY2FsaG9zdCIpKTsKKyAgfQorfQorCitURVNUX1AoRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwgTGl2ZUdldEhvc3RCeUFkZHJGYWlsRmFtaWx5KSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICB1bnNpZ25lZCBjaGFyIGFkZHJbNF0gPSB7OCwgOCwgOCwgOH07CisgIGFyZXNfZ2V0aG9zdGJ5YWRkcihjaGFubmVsXywgYWRkciwgc2l6ZW9mKGFkZHIpLCBBRl9JTkVUNitBRl9JTkVULAorICAgICAgICAgICAgICAgICAgICAgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PVElNUCwgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX1AoRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwgTGl2ZUdldEhvc3RCeUFkZHJGYWlsQWRkclNpemUpIHsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIHVuc2lnbmVkIGNoYXIgYWRkcls0XSA9IHs4LCA4LCA4LCA4fTsKKyAgYXJlc19nZXRob3N0YnlhZGRyKGNoYW5uZWxfLCBhZGRyLCBzaXplb2YoYWRkcikgLSAxLCBBRl9JTkVULAorICAgICAgICAgICAgICAgICAgICAgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PVElNUCwgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX1AoRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwgTGl2ZUdldEhvc3RCeUFkZHJGYWlsQWxsb2MpIHsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIHVuc2lnbmVkIGNoYXIgYWRkcls0XSA9IHs4LCA4LCA4LCA4fTsKKyAgU2V0QWxsb2NGYWlsKDEpOworICBhcmVzX2dldGhvc3RieWFkZHIoY2hhbm5lbF8sIGFkZHIsIHNpemVvZihhZGRyKSwgQUZfSU5FVCwKKyAgICAgICAgICAgICAgICAgICAgIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VOT01FTSwgcmVzdWx0LnN0YXR1c18pOworfQorCitJTlNUQU5USUFURV9URVNUX0NBU0VfUChNb2RlcywgRGVmYXVsdENoYW5uZWxNb2RlVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFsdWVzKCJmIiwgImIiLCAiZmIiLCAiYmYiKSk7CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVTZWFyY2hBKSB7CisgIFNlYXJjaFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfc2VhcmNoKGNoYW5uZWxfLCAid3d3LnlvdXR1YmUuY29tLiIsIG5zX2NfaW4sIG5zX3RfYSwKKyAgICAgICAgICAgICAgU2VhcmNoQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZVNlYXJjaEVtcHR5QSkgeworICBTZWFyY2hSZXN1bHQgcmVzdWx0OworICBhcmVzX3NlYXJjaChjaGFubmVsXywgIiIsIG5zX2NfaW4sIG5zX3RfYSwKKyAgICAgICAgICAgICAgU2VhcmNoQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9ORShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZVNlYXJjaE5TKSB7CisgIFNlYXJjaFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfc2VhcmNoKGNoYW5uZWxfLCAiZ29vZ2xlLmNvbS4iLCBuc19jX2luLCBuc190X25zLAorICAgICAgICAgICAgICBTZWFyY2hDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlU2VhcmNoTVgpIHsKKyAgU2VhcmNoUmVzdWx0IHJlc3VsdDsKKyAgYXJlc19zZWFyY2goY2hhbm5lbF8sICJnb29nbGUuY29tLiIsIG5zX2NfaW4sIG5zX3RfbXgsCisgICAgICAgICAgICAgIFNlYXJjaENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVTZWFyY2hUWFQpIHsKKyAgU2VhcmNoUmVzdWx0IHJlc3VsdDsKKyAgYXJlc19zZWFyY2goY2hhbm5lbF8sICJnb29nbGUuY29tLiIsIG5zX2NfaW4sIG5zX3RfdHh0LAorICAgICAgICAgICAgICBTZWFyY2hDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlU2VhcmNoU09BKSB7CisgIFNlYXJjaFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfc2VhcmNoKGNoYW5uZWxfLCAiZ29vZ2xlLmNvbS4iLCBuc19jX2luLCBuc190X3NvYSwKKyAgICAgICAgICAgICAgU2VhcmNoQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZVNlYXJjaFNSVikgeworICBTZWFyY2hSZXN1bHQgcmVzdWx0OworICBhcmVzX3NlYXJjaChjaGFubmVsXywgIl9pbWFwLl90Y3AuZ21haWwuY29tLiIsIG5zX2NfaW4sIG5zX3Rfc3J2LAorICAgICAgICAgICAgICBTZWFyY2hDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlU2VhcmNoQU5ZKSB7CisgIFNlYXJjaFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfc2VhcmNoKGNoYW5uZWxfLCAiZ29vZ2xlLmNvbS4iLCBuc19jX2luLCBuc190X2FueSwKKyAgICAgICAgICAgICAgU2VhcmNoQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZUdldE5hbWVJbmZvVjQpIHsKKyAgTmFtZUluZm9SZXN1bHQgcmVzdWx0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja2FkZHI7CisgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICBzb2NrYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgc29ja2FkZHIuc2luX3BvcnQgPSBodG9ucyg1Myk7CisgIHNvY2thZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDB4MDgwODA4MDgpOworICBhcmVzX2dldG5hbWVpbmZvKGNoYW5uZWxfLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikmc29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCisgICAgICAgICAgICAgICAgICAgQVJFU19OSV9MT09LVVBIT1NUfEFSRVNfTklfTE9PS1VQU0VSVklDRXxBUkVTX05JX1VEUCwKKyAgICAgICAgICAgICAgICAgICBOYW1lSW5mb0NhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7CisgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIjguOC44Ljg6NTMgPT4gIiA8PCByZXN1bHQubm9kZV8gPDwgIi8iIDw8IHJlc3VsdC5zZXJ2aWNlXyA8PCBzdGQ6OmVuZGw7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVHZXROYW1lSW5mb1Y0Tm9Qb3J0KSB7CisgIE5hbWVJbmZvUmVzdWx0IHJlc3VsdDsKKyAgc3RydWN0IHNvY2thZGRyX2luIHNvY2thZGRyOworICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yoc29ja2FkZHIpKTsKKyAgc29ja2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNvY2thZGRyLnNpbl9wb3J0ID0gaHRvbnMoMCk7CisgIHNvY2thZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDB4MDgwODA4MDgpOworICBhcmVzX2dldG5hbWVpbmZvKGNoYW5uZWxfLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikmc29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCisgICAgICAgICAgICAgICAgICAgQVJFU19OSV9MT09LVVBIT1NUfEFSRVNfTklfTE9PS1VQU0VSVklDRXxBUkVTX05JX1VEUCwKKyAgICAgICAgICAgICAgICAgICBOYW1lSW5mb0NhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7CisgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIjguOC44Ljg6MCA9PiAiIDw8IHJlc3VsdC5ub2RlXyA8PCAiLyIgPDwgcmVzdWx0LnNlcnZpY2VfIDw8IHN0ZDo6ZW5kbDsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZUdldE5hbWVJbmZvVjRVbmFzc2lnbmVkUG9ydCkgeworICBOYW1lSW5mb1Jlc3VsdCByZXN1bHQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBzb2NrYWRkcjsKKyAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgIHNvY2thZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBzb2NrYWRkci5zaW5fcG9ydCA9IGh0b25zKDQpOyAgLy8gVW5hc3NpZ25lZCBhdCBJQU5BCisgIHNvY2thZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDB4MDgwODA4MDgpOworICBhcmVzX2dldG5hbWVpbmZvKGNoYW5uZWxfLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikmc29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCisgICAgICAgICAgICAgICAgICAgQVJFU19OSV9MT09LVVBIT1NUfEFSRVNfTklfTE9PS1VQU0VSVklDRXxBUkVTX05JX1VEUCwKKyAgICAgICAgICAgICAgICAgICBOYW1lSW5mb0NhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7CisgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIjguOC44Ljg6NCA9PiAiIDw8IHJlc3VsdC5ub2RlXyA8PCAiLyIgPDwgcmVzdWx0LnNlcnZpY2VfIDw8IHN0ZDo6ZW5kbDsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZUdldE5hbWVJbmZvVjZCb3RoKSB7CisgIE5hbWVJbmZvUmVzdWx0IHJlc3VsdDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBzb2NrYWRkcjsKKyAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgIHNvY2thZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIHNvY2thZGRyLnNpbjZfcG9ydCA9IGh0b25zKDUzKTsKKyAgbWVtY3B5KHNvY2thZGRyLnNpbjZfYWRkci5zNl9hZGRyLCBnZG5zX2FkZHI2LCAxNik7CisgIGFyZXNfZ2V0bmFtZWluZm8oY2hhbm5lbF8sIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKKyAgICAgICAgICAgICAgICAgICBBUkVTX05JX1RDUHxBUkVTX05JX0xPT0tVUEhPU1R8QVJFU19OSV9MT09LVVBTRVJWSUNFfEFSRVNfTklfTk9GUUROLAorICAgICAgICAgICAgICAgICAgIE5hbWVJbmZvQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKKyAgaWYgKHZlcmJvc2UpIHN0ZDo6Y2VyciA8PCAiWzIwMDE6NDg2MDo0ODYwOjo4ODg4XTo1MyA9PiAiIDw8IHJlc3VsdC5ub2RlXyA8PCAiLyIgPDwgcmVzdWx0LnNlcnZpY2VfIDw8IHN0ZDo6ZW5kbDsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZUdldE5hbWVJbmZvVjZOZWl0aGVyKSB7CisgIE5hbWVJbmZvUmVzdWx0IHJlc3VsdDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBzb2NrYWRkcjsKKyAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgIHNvY2thZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIHNvY2thZGRyLnNpbjZfcG9ydCA9IGh0b25zKDUzKTsKKyAgbWVtY3B5KHNvY2thZGRyLnNpbjZfYWRkci5zNl9hZGRyLCBnZG5zX2FkZHI2LCAxNik7CisgIGFyZXNfZ2V0bmFtZWluZm8oY2hhbm5lbF8sIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKKyAgICAgICAgICAgICAgICAgICBBUkVTX05JX1RDUHxBUkVTX05JX05PRlFETiwgIC8vIE5laXRoZXIgc3BlY2lmaWVkID0+IGFzc3VtZSBsb29rdXAgaG9zdC4KKyAgICAgICAgICAgICAgICAgICBOYW1lSW5mb0NhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7CisgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIlsyMDAxOjQ4NjA6NDg2MDo6ODg4OF06NTMgPT4gIiA8PCByZXN1bHQubm9kZV8gPDwgIi8iIDw8IHJlc3VsdC5zZXJ2aWNlXyA8PCBzdGQ6OmVuZGw7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVHZXROYW1lSW5mb1Y0TnVtZXJpYykgeworICBOYW1lSW5mb1Jlc3VsdCByZXN1bHQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBzb2NrYWRkcjsKKyAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgIHNvY2thZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBzb2NrYWRkci5zaW5fcG9ydCA9IGh0b25zKDUzKTsKKyAgc29ja2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoMHgwODA4MDgwOCk7CisgIGFyZXNfZ2V0bmFtZWluZm8oY2hhbm5lbF8sIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKKyAgICAgICAgICAgICAgICAgICBBUkVTX05JX0xPT0tVUEhPU1R8QVJFU19OSV9MT09LVVBTRVJWSUNFfEFSRVNfTklfVENQfEFSRVNfTklfTlVNRVJJQ0hPU1QsCisgICAgICAgICAgICAgICAgICAgTmFtZUluZm9DYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoIjguOC44LjgiLCByZXN1bHQubm9kZV8pOworICBpZiAodmVyYm9zZSkgc3RkOjpjZXJyIDw8ICI4LjguOC44OjUzID0+ICIgPDwgcmVzdWx0Lm5vZGVfIDw8ICIvIiA8PCByZXN1bHQuc2VydmljZV8gPDwgc3RkOjplbmRsOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0TmFtZUluZm9WNk51bWVyaWMpIHsKKyAgTmFtZUluZm9SZXN1bHQgcmVzdWx0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNvY2thZGRyOworICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yoc29ja2FkZHIpKTsKKyAgc29ja2FkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgc29ja2FkZHIuc2luNl9wb3J0ID0gaHRvbnMoNTMpOworICBtZW1jcHkoc29ja2FkZHIuc2luNl9hZGRyLnM2X2FkZHIsIGdkbnNfYWRkcjYsIDE2KTsKKyAgYXJlc19nZXRuYW1laW5mbyhjaGFubmVsXywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLAorICAgICAgICAgICAgICAgICAgIEFSRVNfTklfTE9PS1VQSE9TVHxBUkVTX05JX0xPT0tVUFNFUlZJQ0V8QVJFU19OSV9EQ0NQfEFSRVNfTklfTlVNRVJJQ0hPU1QsCisgICAgICAgICAgICAgICAgICAgTmFtZUluZm9DYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoIjIwMDE6NDg2MDo0ODYwOjo4ODg4JTAiLCByZXN1bHQubm9kZV8pOworICBpZiAodmVyYm9zZSkgc3RkOjpjZXJyIDw8ICJbMjAwMTo0ODYwOjQ4NjA6Ojg4ODhdOjUzID0+ICIgPDwgcmVzdWx0Lm5vZGVfIDw8ICIvIiA8PCByZXN1bHQuc2VydmljZV8gPDwgc3RkOjplbmRsOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0TmFtZUluZm9WNkxpbmtMb2NhbCkgeworICBOYW1lSW5mb1Jlc3VsdCByZXN1bHQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc29ja2FkZHI7CisgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICBzb2NrYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICBzb2NrYWRkci5zaW42X3BvcnQgPSBodG9ucyg1Myk7CisgIHVuc2lnbmVkIGNoYXIgYWRkcjZbMTZdID0gezB4ZmUsIDB4ODAsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDR9OworICBtZW1jcHkoc29ja2FkZHIuc2luNl9hZGRyLnM2X2FkZHIsIGFkZHI2LCAxNik7CisgIGFyZXNfZ2V0bmFtZWluZm8oY2hhbm5lbF8sIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKKyAgICAgICAgICAgICAgICAgICBBUkVTX05JX0xPT0tVUEhPU1R8QVJFU19OSV9MT09LVVBTRVJWSUNFfEFSRVNfTklfRENDUHxBUkVTX05JX05VTUVSSUNIT1NULAorICAgICAgICAgICAgICAgICAgIE5hbWVJbmZvQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJlc3VsdC5zdGF0dXNfKTsKKyAgRVhQRUNUX0VRKCJmZTgwOjEwMjoxMDI6OjMwNCUwIiwgcmVzdWx0Lm5vZGVfKTsKKyAgaWYgKHZlcmJvc2UpIHN0ZDo6Y2VyciA8PCAiW2ZlODA6MTAyOjEwMjo6MzA0XTo1MyA9PiAiIDw8IHJlc3VsdC5ub2RlXyA8PCAiLyIgPDwgcmVzdWx0LnNlcnZpY2VfIDw8IHN0ZDo6ZW5kbDsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZUdldE5hbWVJbmZvVjROb3RGb3VuZCkgeworICBOYW1lSW5mb1Jlc3VsdCByZXN1bHQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBzb2NrYWRkcjsKKyAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgIHNvY2thZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBzb2NrYWRkci5zaW5fcG9ydCA9IGh0b25zKDQpOyAgLy8gUG9ydCA0IHVuYXNzaWduZWQgYXQgSUFOQQorICAvLyBSRkM1NzM3IHNheXMgMTkyLjAuMi4wIHNob3VsZCBub3QgYmUgdXNlZCBwdWJsaWNhbGx5LgorICBzb2NrYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCgweEMwMDAwMjAwKTsKKyAgYXJlc19nZXRuYW1laW5mbyhjaGFubmVsXywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLAorICAgICAgICAgICAgICAgICAgIEFSRVNfTklfTE9PS1VQSE9TVHxBUkVTX05JX0xPT0tVUFNFUlZJQ0V8QVJFU19OSV9VRFAsCisgICAgICAgICAgICAgICAgICAgTmFtZUluZm9DYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoIjE5Mi4wLjIuMCIsIHJlc3VsdC5ub2RlXyk7CisgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIjE5Mi4wLjIuMDo1MyA9PiAiIDw8IHJlc3VsdC5ub2RlXyA8PCAiLyIgPDwgcmVzdWx0LnNlcnZpY2VfIDw8IHN0ZDo6ZW5kbDsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZUdldE5hbWVJbmZvVjROb3RGb3VuZEZhaWwpIHsKKyAgTmFtZUluZm9SZXN1bHQgcmVzdWx0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja2FkZHI7CisgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICBzb2NrYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgc29ja2FkZHIuc2luX3BvcnQgPSBodG9ucyg1Myk7CisgIC8vIFJGQzU3Mzcgc2F5cyAxOTIuMC4yLjAgc2hvdWxkIG5vdCBiZSB1c2VkIHB1YmxpY2FsbHkuCisgIHNvY2thZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDB4QzAwMDAyMDApOworICBhcmVzX2dldG5hbWVpbmZvKGNoYW5uZWxfLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikmc29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCisgICAgICAgICAgICAgICAgICAgQVJFU19OSV9MT09LVVBIT1NUfEFSRVNfTklfTE9PS1VQU0VSVklDRXxBUkVTX05JX1VEUHxBUkVTX05JX05BTUVSRVFELAorICAgICAgICAgICAgICAgICAgIE5hbWVJbmZvQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VOT1RGT1VORCwgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0TmFtZUluZm9WNk5vdEZvdW5kKSB7CisgIE5hbWVJbmZvUmVzdWx0IHJlc3VsdDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBzb2NrYWRkcjsKKyAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgIHNvY2thZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIHNvY2thZGRyLnNpbjZfcG9ydCA9IGh0b25zKDUzKTsKKyAgLy8gMjAwMTpkYjg6Oi8zMiBpcyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gZG9jdW1lbnRhdGlvbi4KKyAgdW5zaWduZWQgY2hhciBhZGRyNlsxNl0gPSB7MHgyMCwgMHgwMSwgMHgwZCwgMHhiOCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwNH07CisgIG1lbWNweShzb2NrYWRkci5zaW42X2FkZHIuczZfYWRkciwgYWRkcjYsIDE2KTsKKyAgYXJlc19nZXRuYW1laW5mbyhjaGFubmVsXywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLAorICAgICAgICAgICAgICAgICAgIEFSRVNfTklfTE9PS1VQSE9TVHxBUkVTX05JX0xPT0tVUFNFUlZJQ0V8QVJFU19OSV9VRFAsCisgICAgICAgICAgICAgICAgICAgTmFtZUluZm9DYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoIjIwMDE6ZGI4OjEwMjo6MzA0JTAiLCByZXN1bHQubm9kZV8pOworICBpZiAodmVyYm9zZSkgc3RkOjpjZXJyIDw8ICJbMjAwMTpkYjg6MTAyOjozMDRdOjUzID0+ICIgPDwgcmVzdWx0Lm5vZGVfIDw8ICIvIiA8PCByZXN1bHQuc2VydmljZV8gPDwgc3RkOjplbmRsOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0TmFtZUludmFsaWRGYW1pbHkpIHsKKyAgTmFtZUluZm9SZXN1bHQgcmVzdWx0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNvY2thZGRyOworICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yoc29ja2FkZHIpKTsKKyAgc29ja2FkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNiArIEFGX0lORVQ7CisgIHNvY2thZGRyLnNpbjZfcG9ydCA9IGh0b25zKDUzKTsKKyAgbWVtY3B5KHNvY2thZGRyLnNpbjZfYWRkci5zNl9hZGRyLCBnZG5zX2FkZHI2LCAxNik7CisgIGFyZXNfZ2V0bmFtZWluZm8oY2hhbm5lbF8sIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKKyAgICAgICAgICAgICAgICAgICBBUkVTX05JX0xPT0tVUEhPU1R8QVJFU19OSV9MT09LVVBTRVJWSUNFfEFSRVNfTklfVURQLAorICAgICAgICAgICAgICAgICAgIE5hbWVJbmZvQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VOT1RJTVAsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgTGl2ZUdldE5hbWVJbnZhbGlkRmxhZ3MpIHsKKyAgTmFtZUluZm9SZXN1bHQgcmVzdWx0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNvY2thZGRyOworICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yoc29ja2FkZHIpKTsKKyAgc29ja2FkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgc29ja2FkZHIuc2luNl9wb3J0ID0gaHRvbnMoNTMpOworICBtZW1jcHkoc29ja2FkZHIuc2luNl9hZGRyLnM2X2FkZHIsIGdkbnNfYWRkcjYsIDE2KTsKKyAgLy8gQXNrIGZvciBib3RoIGEgbmFtZS1yZXF1aXJlZCwgYW5kIGEgbnVtZXJpYyBob3N0LgorICBhcmVzX2dldG5hbWVpbmZvKGNoYW5uZWxfLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikmc29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCisgICAgICAgICAgICAgICAgICAgQVJFU19OSV9MT09LVVBIT1NUfEFSRVNfTklfTE9PS1VQU0VSVklDRXxBUkVTX05JX1VEUHxBUkVTX05JX05VTUVSSUNIT1NUfEFSRVNfTklfTkFNRVJFUUQsCisgICAgICAgICAgICAgICAgICAgTmFtZUluZm9DYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBREZMQUdTLCByZXN1bHQuc3RhdHVzXyk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVHZXRTZXJ2aWNlSW5mbykgeworICBOYW1lSW5mb1Jlc3VsdCByZXN1bHQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBzb2NrYWRkcjsKKyAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgIHNvY2thZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBzb2NrYWRkci5zaW5fcG9ydCA9IGh0b25zKDUzKTsKKyAgc29ja2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoMHgwODA4MDgwOCk7CisgIC8vIEp1c3QgbG9vayB1cCBzZXJ2aWNlIGluZm8KKyAgYXJlc19nZXRuYW1laW5mbyhjaGFubmVsXywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLAorICAgICAgICAgICAgICAgICAgIEFSRVNfTklfTE9PS1VQU0VSVklDRXxBUkVTX05JX1NDVFAsCisgICAgICAgICAgICAgICAgICAgTmFtZUluZm9DYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoIiIsIHJlc3VsdC5ub2RlXyk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIExpdmVHZXRTZXJ2aWNlSW5mb051bWVyaWMpIHsKKyAgTmFtZUluZm9SZXN1bHQgcmVzdWx0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja2FkZHI7CisgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICBzb2NrYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgc29ja2FkZHIuc2luX3BvcnQgPSBodG9ucyg1Myk7CisgIHNvY2thZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDB4MDgwODA4MDgpOworICAvLyBKdXN0IGxvb2sgdXAgc2VydmljZSBpbmZvCisgIGFyZXNfZ2V0bmFtZWluZm8oY2hhbm5lbF8sIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKKyAgICAgICAgICAgICAgICAgICBBUkVTX05JX0xPT0tVUFNFUlZJQ0V8QVJFU19OSV9TQ1RQfEFSRVNfTklfTlVNRVJJQ1NFUlYsCisgICAgICAgICAgICAgICAgICAgTmFtZUluZm9DYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoIiIsIHJlc3VsdC5ub2RlXyk7CisgIEVYUEVDVF9FUSgiNTMiLCByZXN1bHQuc2VydmljZV8pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBMaXZlR2V0TmFtZUluZm9BbGxvY0ZhaWwpIHsKKyAgTmFtZUluZm9SZXN1bHQgcmVzdWx0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja2FkZHI7CisgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICBzb2NrYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgc29ja2FkZHIuc2luX3BvcnQgPSBodG9ucyg1Myk7CisgIHNvY2thZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDB4MDgwODA4MDgpOworICBTZXRBbGxvY0ZhaWwoMSk7CisgIGFyZXNfZ2V0bmFtZWluZm8oY2hhbm5lbF8sIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKKyAgICAgICAgICAgICAgICAgICBBUkVTX05JX0xPT0tVUEhPU1R8QVJFU19OSV9MT09LVVBTRVJWSUNFfEFSRVNfTklfVURQLAorICAgICAgICAgICAgICAgICAgIE5hbWVJbmZvQ2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VOT01FTSwgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBHZXRTb2NrKSB7CisgIGFyZXNfc29ja2V0X3Qgc29ja3NbM10gPSB7LTEsIC0xLCAtMX07CisgIGludCBiaXRtYXNrID0gYXJlc19nZXRzb2NrKGNoYW5uZWxfLCBzb2NrcywgMyk7CisgIEVYUEVDVF9FUSgwLCBiaXRtYXNrKTsKKyAgYml0bWFzayA9IGFyZXNfZ2V0c29jayhjaGFubmVsXywgbnVsbHB0ciwgMCk7CisgIEVYUEVDVF9FUSgwLCBiaXRtYXNrKTsKKworICAvLyBBc2sgYWdhaW4gd2l0aCBhIHBlbmRpbmcgcXVlcnkuCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBiaXRtYXNrID0gYXJlc19nZXRzb2NrKGNoYW5uZWxfLCBzb2NrcywgMyk7CisgIEVYUEVDVF9ORSgwLCBiaXRtYXNrKTsKKyAgYml0bWFzayA9IGFyZXNfZ2V0c29jayhjaGFubmVsXywgbnVsbHB0ciwgMCk7CisgIEVYUEVDVF9FUSgwLCBiaXRtYXNrKTsKKworICBQcm9jZXNzKCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgR2V0VENQU29jaykgeworICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKKyAgc3RydWN0IGFyZXNfb3B0aW9ucyBvcHRzID0gezB9OworICBvcHRzLnRjcF9wb3J0ID0gNTM7CisgIG9wdHMuZmxhZ3MgPSBBUkVTX0ZMQUdfVVNFVkM7CisgIGludCBvcHRtYXNrID0gQVJFU19PUFRfVENQX1BPUlQgfCBBUkVTX09QVF9GTEFHUzsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19pbml0X29wdGlvbnMoJmNoYW5uZWwsICZvcHRzLCBvcHRtYXNrKSk7CisgIEVYUEVDVF9ORShudWxscHRyLCBjaGFubmVsKTsKKworICBhcmVzX3NvY2tldF90IHNvY2tzWzNdID0gey0xLCAtMSwgLTF9OworICBpbnQgYml0bWFzayA9IGFyZXNfZ2V0c29jayhjaGFubmVsLCBzb2NrcywgMyk7CisgIEVYUEVDVF9FUSgwLCBiaXRtYXNrKTsKKyAgYml0bWFzayA9IGFyZXNfZ2V0c29jayhjaGFubmVsLCBudWxscHRyLCAwKTsKKyAgRVhQRUNUX0VRKDAsIGJpdG1hc2spOworCisgIC8vIEFzayBhZ2FpbiB3aXRoIGEgcGVuZGluZyBxdWVyeS4KKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgYml0bWFzayA9IGFyZXNfZ2V0c29jayhjaGFubmVsLCBzb2NrcywgMyk7CisgIEVYUEVDVF9ORSgwLCBiaXRtYXNrKTsKKyAgYml0bWFzayA9IGFyZXNfZ2V0c29jayhjaGFubmVsLCBudWxscHRyLCAwKTsKKyAgRVhQRUNUX0VRKDAsIGJpdG1hc2spOworCisgIFByb2Nlc3NXb3JrKGNoYW5uZWwsIE5vRXh0cmFGRHMsIG51bGxwdHIpOworCisgIGFyZXNfZGVzdHJveShjaGFubmVsKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1tYWluLmNjIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtbWFpbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2U5MGNiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtbWFpbi5jYwpAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJhcmVzLXRlc3QuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgeworICBzdGQ6OnZlY3RvcjxjaGFyKj4gZ3Rlc3RfYXJndiA9IHthcmd2WzBdfTsKKyAgZm9yIChpbnQgaWkgPSAxOyBpaSA8IGFyZ2M7IGlpKyspIHsKKyAgICBpZiAoc3RyY21wKGFyZ3ZbaWldLCAiLXYiKSA9PSAwKSB7CisgICAgICBhcmVzOjp0ZXN0Ojp2ZXJib3NlID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKChzdHJjbXAoYXJndltpaV0sICItcCIpID09IDApICYmIChpaSArIDEgPCBhcmdjKSkgeworICAgICAgaWkrKzsKKyAgICAgIGFyZXM6OnRlc3Q6Om1vY2tfcG9ydCA9IGF0b2koYXJndltpaV0pOworICAgIH0gZWxzZSB7CisgICAgICBndGVzdF9hcmd2LnB1c2hfYmFjayhhcmd2W2lpXSk7CisgICAgfQorICB9CisgIGludCBndGVzdF9hcmdjID0gZ3Rlc3RfYXJndi5zaXplKCk7CisgIGd0ZXN0X2FyZ3YucHVzaF9iYWNrKG51bGxwdHIpOworICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZndGVzdF9hcmdjLCBndGVzdF9hcmd2LmRhdGEoKSk7CisKKyNpZmRlZiBXSU4zMgorICBXT1JEIHdWZXJzaW9uUmVxdWVzdGVkID0gTUFLRVdPUkQoMiwgMik7CisgIFdTQURBVEEgd3NhRGF0YTsKKyAgV1NBU3RhcnR1cCh3VmVyc2lvblJlcXVlc3RlZCwgJndzYURhdGEpOworI2Vsc2UKKyAgc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworI2VuZGlmCisKKyAgaW50IHJjID0gUlVOX0FMTF9URVNUUygpOworCisjaWZkZWYgV0lOMzIKKyAgV1NBQ2xlYW51cCgpOworI2VuZGlmCisKKyAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtbWlzYy5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LW1pc2MuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1YmMwYgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LW1pc2MuY2MKQEAgLTAsMCArMSw0NzMgQEAKKyNpbmNsdWRlICJhcmVzLXRlc3QuaCIKKyNpbmNsdWRlICJkbnMtcHJvdG8uaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgR2V0U2VydmVycykgeworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VydmVycyA9IEdldE5hbWVTZXJ2ZXJzKGNoYW5uZWxfKTsKKyAgaWYgKHZlcmJvc2UpIHsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXJ2ZXIgOiBzZXJ2ZXJzKSB7CisgICAgICBzdGQ6OmNlcnIgPDwgIk5hbWVzZXJ2ZXI6ICIgPDwgc2VydmVyIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIH0KK30KKworVEVTVF9GKERlZmF1bHRDaGFubmVsVGVzdCwgR2V0U2VydmVyc0ZhaWx1cmVzKSB7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsCisgICAgICAgICAgICBhcmVzX3NldF9zZXJ2ZXJzX2NzdihjaGFubmVsXywgIjEuMi4zLjQsMi4zLjQuNSIpKTsKKyAgc3RydWN0IGFyZXNfYWRkcl9ub2RlKiBzZXJ2ZXJzID0gbnVsbHB0cjsKKyAgU2V0QWxsb2NGYWlsKDEpOworICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfZ2V0X3NlcnZlcnMoY2hhbm5lbF8sICZzZXJ2ZXJzKSk7CisgIFNldEFsbG9jRmFpbCgyKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBhcmVzX2dldF9zZXJ2ZXJzKGNoYW5uZWxfLCAmc2VydmVycykpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX2dldF9zZXJ2ZXJzKG51bGxwdHIsICZzZXJ2ZXJzKSk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIFNldFNlcnZlcnMpIHsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19zZXRfc2VydmVycyhjaGFubmVsXywgbnVsbHB0cikpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZW1wdHk7CisgIEVYUEVDVF9FUShlbXB0eSwgR2V0TmFtZVNlcnZlcnMoY2hhbm5lbF8pKTsKKworICBzdHJ1Y3QgYXJlc19hZGRyX25vZGUgc2VydmVyMTsKKyAgc3RydWN0IGFyZXNfYWRkcl9ub2RlIHNlcnZlcjI7CisgIHNlcnZlcjEubmV4dCA9ICZzZXJ2ZXIyOworICBzZXJ2ZXIxLmZhbWlseSA9IEFGX0lORVQ7CisgIHNlcnZlcjEuYWRkci5hZGRyNC5zX2FkZHIgPSBodG9ubCgweDAxMDIwMzA0KTsKKyAgc2VydmVyMi5uZXh0ID0gbnVsbHB0cjsKKyAgc2VydmVyMi5mYW1pbHkgPSBBRl9JTkVUOworICBzZXJ2ZXIyLmFkZHIuYWRkcjQuc19hZGRyID0gaHRvbmwoMHgwMjAzMDQwNSk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfc2V0X3NlcnZlcnMobnVsbHB0ciwgJnNlcnZlcjEpKTsKKworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3NldF9zZXJ2ZXJzKGNoYW5uZWxfLCAmc2VydmVyMSkpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhwZWN0ZWQgPSB7IjEuMi4zLjQiLCAiMi4zLjQuNSJ9OworICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIEdldE5hbWVTZXJ2ZXJzKGNoYW5uZWxfKSk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIFNldFNlcnZlcnNQb3J0cykgeworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzKGNoYW5uZWxfLCBudWxscHRyKSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbXB0eTsKKyAgRVhQRUNUX0VRKGVtcHR5LCBHZXROYW1lU2VydmVycyhjaGFubmVsXykpOworCisgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlIHNlcnZlcjE7CisgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlIHNlcnZlcjI7CisgIHNlcnZlcjEubmV4dCA9ICZzZXJ2ZXIyOworICBzZXJ2ZXIxLmZhbWlseSA9IEFGX0lORVQ7CisgIHNlcnZlcjEuYWRkci5hZGRyNC5zX2FkZHIgPSBodG9ubCgweDAxMDIwMzA0KTsKKyAgc2VydmVyMS51ZHBfcG9ydCA9IDExMTsKKyAgc2VydmVyMS50Y3BfcG9ydCA9IDExMTsKKyAgc2VydmVyMi5uZXh0ID0gbnVsbHB0cjsKKyAgc2VydmVyMi5mYW1pbHkgPSBBRl9JTkVUOworICBzZXJ2ZXIyLmFkZHIuYWRkcjQuc19hZGRyID0gaHRvbmwoMHgwMjAzMDQwNSk7CisgIHNlcnZlcjIudWRwX3BvcnQgPSAwOworICBzZXJ2ZXIyLnRjcF9wb3J0ID0gMDs7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMobnVsbHB0ciwgJnNlcnZlcjEpKTsKKworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzKGNoYW5uZWxfLCAmc2VydmVyMSkpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhwZWN0ZWQgPSB7IjEuMi4zLjQ6MTExIiwgIjIuMy40LjUifTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkLCBHZXROYW1lU2VydmVycyhjaGFubmVsXykpOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBTZXRTZXJ2ZXJzQ1NWKSB7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfc2V0X3NlcnZlcnNfY3N2KG51bGxwdHIsICIxLjIuMy40IikpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3NldF9zZXJ2ZXJzX2NzdihudWxscHRyLCAieHl6enkscGx1Z2giKSk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfc2V0X3NlcnZlcnNfY3N2KG51bGxwdHIsICIyNTYuMS4yLjMiKSk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfc2V0X3NlcnZlcnNfY3N2KG51bGxwdHIsICIxLjIuMy40LjUiKSk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfc2V0X3NlcnZlcnNfY3N2KG51bGxwdHIsICIxOjI6Mzo0OjUiKSk7CisKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywKKyAgICAgICAgICAgIGFyZXNfc2V0X3NlcnZlcnNfY3N2KGNoYW5uZWxfLCAiMS4yLjMuNCwwMTAyOjAzMDQ6MDUwNjowNzA4OjA5MTA6MTExMjoxMzE0OjE1MTYsMi4zLjQuNSIpKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGVjdGVkID0geyIxLjIuMy40IiwgIjAxMDI6MDMwNDowNTA2OjA3MDg6MDkxMDoxMTEyOjEzMTQ6MTUxNiIsICIyLjMuNC41In07CisgIEVYUEVDVF9FUShleHBlY3RlZCwgR2V0TmFtZVNlcnZlcnMoY2hhbm5lbF8pKTsKKworICAvLyBTYW1lLCB3aXRoIHNwYWNlcworICBFWFBFQ1RfRVEoQVJFU19FQkFEU1RSLAorICAgICAgICAgICAgYXJlc19zZXRfc2VydmVyc19jc3YoY2hhbm5lbF8sICIxLjIuMy40ICwgMDEwMjowMzA0OjA1MDY6MDcwODowOTEwOjExMTI6MTMxNDoxNTE2LCAyLjMuNC41IikpOworCisgIC8vIFNhbWUsIHdpdGggcG9ydHMKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywKKyAgICAgICAgICAgIGFyZXNfc2V0X3NlcnZlcnNfY3N2KGNoYW5uZWxfLCAiMS4yLjMuNDo1NCxbMDEwMjowMzA0OjA1MDY6MDcwODowOTEwOjExMTI6MTMxNDoxNTE2XTo4MCwyLjMuNC41OjU1IikpOworICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIEdldE5hbWVTZXJ2ZXJzKGNoYW5uZWxfKSk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsCisgICAgICAgICAgICBhcmVzX3NldF9zZXJ2ZXJzX3BvcnRzX2NzdihjaGFubmVsXywgIjEuMi4zLjQ6NTQsWzAxMDI6MDMwNDowNTA2OjA3MDg6MDkxMDoxMTEyOjEzMTQ6MTUxNl06ODAsMi4zLjQuNTo1NSIpKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGVjdGVkMiA9IHsiMS4yLjMuNDo1NCIsICJbMDEwMjowMzA0OjA1MDY6MDcwODowOTEwOjExMTI6MTMxNDoxNTE2XTo4MCIsICIyLjMuNC41OjU1In07CisgIEVYUEVDVF9FUShleHBlY3RlZDIsIEdldE5hbWVTZXJ2ZXJzKGNoYW5uZWxfKSk7CisKKyAgLy8gU2hvdWxkIHN1cnZpdmUgZHVwbGljYXRpb24KKyAgYXJlc19jaGFubmVsIGNoYW5uZWwyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2R1cCgmY2hhbm5lbDIsIGNoYW5uZWxfKSk7CisgIEVYUEVDVF9FUShleHBlY3RlZDIsIEdldE5hbWVTZXJ2ZXJzKGNoYW5uZWwyKSk7CisgIGFyZXNfZGVzdHJveShjaGFubmVsMik7CisKKyAgLy8gQWxsb2NhdGlvbiBmYWlsdXJlIGNhc2VzCisgIGZvciAoaW50IGZhaWwgPSAxOyBmYWlsIDw9IDU7IGZhaWwrKykgeworICAgIFNldEFsbG9jRmFpbChmYWlsKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sCisgICAgICAgICAgICAgIGFyZXNfc2V0X3NlcnZlcnNfY3N2KGNoYW5uZWxfLCAiMS4yLjMuNCwwMTAyOjAzMDQ6MDUwNjowNzA4OjA5MTA6MTExMjoxMzE0OjE1MTYsMi4zLjQuNSIpKTsKKyAgfQorCisgIC8vIEJsYW5rIHNlcnZlcnMKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19zZXRfc2VydmVyc19jc3YoY2hhbm5lbF8sICIiKSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub25lOworICBFWFBFQ1RfRVEobm9uZSwgR2V0TmFtZVNlcnZlcnMoY2hhbm5lbF8pKTsKKworICBFWFBFQ1RfRVEoQVJFU19FQkFEU1RSLCBhcmVzX3NldF9zZXJ2ZXJzX2NzdihjaGFubmVsXywgIjIuMy40LjUsMS4yLjMuNDosMy40LjUuNiIpKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFNUUiwgYXJlc19zZXRfc2VydmVyc19jc3YoY2hhbm5lbF8sICIyLjMuNC41LDEuMi4zLjQ6WiwzLjQuNS42IikpOworfQorCitURVNUX0YoRGVmYXVsdENoYW5uZWxUZXN0LCBUaW1lb3V0VmFsdWUpIHsKKyAgc3RydWN0IHRpbWV2YWwgdGluZm87CisgIHRpbmZvLnR2X3NlYyA9IDA7CisgIHRpbmZvLnR2X3VzZWMgPSAwOworICBzdHJ1Y3QgdGltZXZhbCB0bWF4OworICB0bWF4LnR2X3NlYyA9IDA7CisgIHRtYXgudHZfdXNlYyA9IDEwOworICBzdHJ1Y3QgdGltZXZhbCogcHQ7CisKKyAgLy8gTm8gdGltZXJzID0+IGdldCBtYXggYmFjay4KKyAgcHQgPSBhcmVzX3RpbWVvdXQoY2hhbm5lbF8sICZ0bWF4LCAmdGluZm8pOworICBFWFBFQ1RfRVEoJnRtYXgsIHB0KTsKKyAgRVhQRUNUX0VRKDAsIHB0LT50dl9zZWMpOworICBFWFBFQ1RfRVEoMTAsIHB0LT50dl91c2VjKTsKKworICBwdCA9IGFyZXNfdGltZW91dChjaGFubmVsXywgbnVsbHB0ciwgJnRpbmZvKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIHB0KTsKKworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKworICAvLyBOb3cgdGhlcmUncyBhIHRpbWVyIHJ1bm5pbmcuCisgIHB0ID0gYXJlc190aW1lb3V0KGNoYW5uZWxfLCAmdG1heCwgJnRpbmZvKTsKKyAgRVhQRUNUX0VRKCZ0bWF4LCBwdCk7CisgIEVYUEVDVF9FUSgwLCBwdC0+dHZfc2VjKTsKKyAgRVhQRUNUX0VRKDEwLCBwdC0+dHZfdXNlYyk7CisKKyAgdG1heC50dl9zZWMgPSAxMDA7CisgIHB0ID0gYXJlc190aW1lb3V0KGNoYW5uZWxfLCAmdG1heCwgJnRpbmZvKTsKKyAgRVhQRUNUX0VRKCZ0aW5mbywgcHQpOworCisgIHB0ID0gYXJlc190aW1lb3V0KGNoYW5uZWxfLCBudWxscHRyLCAmdGluZm8pOworICBFWFBFQ1RfRVEoJnRpbmZvLCBwdCk7CisKKyAgUHJvY2VzcygpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIEluZXROdG9QKSB7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIGFkZHIuc19hZGRyID0gaHRvbmwoMHgwMTAyMDMwNCk7CisgIGNoYXIgYnVmZmVyWzI1Nl07CisgIEVYUEVDVF9FUShidWZmZXIsIGFyZXNfaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgIEVYUEVDVF9FUSgiMS4yLjMuNCIsIHN0ZDo6c3RyaW5nKGJ1ZmZlcikpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIE1rcXVlcnkpIHsKKyAgYnl0ZSogcDsKKyAgaW50IGxlbjsKKyAgYXJlc19ta3F1ZXJ5KCJleGFtcGxlLmNvbSIsIG5zX2NfaW4sIG5zX3RfYSwgMHgxMjM0LCAwLCAmcCwgJmxlbik7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEocCwgcCArIGxlbik7CisgIGFyZXNfZnJlZV9zdHJpbmcocCk7CisKKyAgc3RkOjpzdHJpbmcgYWN0dWFsID0gUGFja2V0VG9TdHJpbmcoZGF0YSk7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2EpKTsKKyAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPSBQYWNrZXRUb1N0cmluZyhwa3QuZGF0YSgpKTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIENyZWF0ZVF1ZXJ5KSB7CisgIGJ5dGUqIHA7CisgIGludCBsZW47CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsCisgICAgICAgICAgICBhcmVzX2NyZWF0ZV9xdWVyeSgiZXhhbVxcQGxlLmNvbSIsIG5zX2NfaW4sIG5zX3RfYSwgMHgxMjM0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAsICZsZW4sIDApKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YShwLCBwICsgbGVuKTsKKyAgYXJlc19mcmVlX3N0cmluZyhwKTsKKworICBzdGQ6OnN0cmluZyBhY3R1YWwgPSBQYWNrZXRUb1N0cmluZyhkYXRhKTsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtQGxlLmNvbSIsIG5zX3RfYSkpOworICBzdGQ6OnN0cmluZyBleHBlY3RlZCA9IFBhY2tldFRvU3RyaW5nKHBrdC5kYXRhKCkpOworICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgQ3JlYXRlUXVlcnlUcmFpbGluZ0VzY2FwZWREb3QpIHsKKyAgYnl0ZSogcDsKKyAgaW50IGxlbjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywKKyAgICAgICAgICAgIGFyZXNfY3JlYXRlX3F1ZXJ5KCJleGFtcGxlLmNvbVxcLiIsIG5zX2NfaW4sIG5zX3RfYSwgMHgxMjM0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAsICZsZW4sIDApKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YShwLCBwICsgbGVuKTsKKyAgYXJlc19mcmVlX3N0cmluZyhwKTsKKworICBzdGQ6OnN0cmluZyBhY3R1YWwgPSBQYWNrZXRUb1N0cmluZyhkYXRhKTsKKyAgRVhQRUNUX0VRKCJSRVEgUVJZICBROnsnZXhhbXBsZS5jb21cXC4nIElOIEF9IiwgYWN0dWFsKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBDcmVhdGVRdWVyeUZhaWx1cmVzKSB7CisgIGJ5dGUqIHA7CisgIGludCBsZW47CisgIC8vIFJDMTAzNSBoYXMgYSAyNTUgYnl0ZSBsaW1pdCBvbiBuYW1lcy4KKyAgc3RkOjpzdHJpbmcgbG9uZ25hbWU7CisgIGZvciAoaW50IGlpID0gMDsgaWkgPCAxNzsgaWkrKykgeworICAgIGxvbmduYW1lICs9ICJmZWRjYmE5ODc2NTQzMjEwIjsKKyAgfQorICBwID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRE5BTUUsCisgICAgICAgICAgICBhcmVzX2NyZWF0ZV9xdWVyeShsb25nbmFtZS5jX3N0cigpLCBuc19jX2luLCBuc190X2EsIDB4MTIzNCwgMCwKKyAgICAgICAgICAgICAgICAgICAgJnAsICZsZW4sIDApKTsKKyAgaWYgKHApIGFyZXNfZnJlZV9zdHJpbmcocCk7CisKKyAgU2V0QWxsb2NGYWlsKDEpOworCisgIHAgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sCisgICAgICAgICAgICBhcmVzX2NyZWF0ZV9xdWVyeSgiZXhhbXBsZS5jb20iLCBuc19jX2luLCBuc190X2EsIDB4MTIzNCwgMCwKKyAgICAgICAgICAgICAgICAgICAgJnAsICZsZW4sIDApKTsKKyAgaWYgKHApIGFyZXNfZnJlZV9zdHJpbmcocCk7CisKKyAgLy8gNjMtY2hhciBsaW1pdCBvbiBhIHNpbmdsZSBsYWJlbAorICBzdGQ6OnN0cmluZyBsb25nbGFiZWwgPSAiYS5hMTIzNDU2Nzg5YjEyMzQ1Njc4OWMxMjM0NTY3ODlkMTIzNDU2Nzg5ZTEyMzQ1Njc4OWYxMjM0NTY3ODlnMTIzNDU2Nzg5Lm9yZyI7CisgIHAgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfY3JlYXRlX3F1ZXJ5KGxvbmdsYWJlbC5jX3N0cigpLCBuc19jX2luLCBuc190X2EsIDB4MTIzNCwgMCwKKyAgICAgICAgICAgICAgICAgICAgJnAsICZsZW4sIDApKTsKKyAgaWYgKHApIGFyZXNfZnJlZV9zdHJpbmcocCk7CisKKyAgLy8gRW1wdHkgbm9uLXRlcm1pbmFsIGxhYmVsCisgIHAgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfY3JlYXRlX3F1ZXJ5KCJleGFtcGxlLi5jb20iLCBuc19jX2luLCBuc190X2EsIDB4MTIzNCwgMCwKKyAgICAgICAgICAgICAgICAgICAgJnAsICZsZW4sIDApKTsKKyAgaWYgKHApIGFyZXNfZnJlZV9zdHJpbmcocCk7Cit9CisKK1RFU1RfRihEZWZhdWx0Q2hhbm5lbFRlc3QsIFNlbmRGYWlsdXJlKSB7CisgIHVuc2lnbmVkIGNoYXIgYnVmWzJdOworICBTZWFyY2hSZXN1bHQgcmVzdWx0OworICBhcmVzX3NlbmQoY2hhbm5lbF8sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIFNlYXJjaENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFFVRVJZLCByZXN1bHQuc3RhdHVzXyk7Cit9CisKK3N0ZDo6c3RyaW5nIEV4cGFuZE5hbWUoY29uc3Qgc3RkOjp2ZWN0b3I8Ynl0ZT4mIGRhdGEsIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKmVuY2xlbikgeworICBjaGFyICpuYW1lID0gbnVsbHB0cjsKKyAgaW50IHJjID0gYXJlc19leHBhbmRfbmFtZShkYXRhLmRhdGEoKSArIG9mZnNldCwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBlbmNsZW4pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByYyk7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgaWYgKHJjID09IEFSRVNfU1VDQ0VTUykgeworICAgIHJlc3VsdCA9IG5hbWU7CisgIH0gZWxzZSB7CisgICAgcmVzdWx0ID0gIjxlcnJvcj4iOworICB9CisgIGZyZWUobmFtZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgRXhwYW5kTmFtZSkgeworICBsb25nIGVuY2xlbjsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTEgPSB7MSwgJ2EnLCAyLCAnYicsICdjJywgMywgJ2QnLCAnZScsICdmJywgMH07CisgIEVYUEVDVF9FUSgiYS5iYy5kZWYiLCBFeHBhbmROYW1lKGRhdGExLCAwLCAmZW5jbGVuKSk7CisgIEVYUEVDVF9FUShkYXRhMS5zaXplKCksIGVuY2xlbik7CisKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTIgPSB7MH07CisgIEVYUEVDVF9FUSgiIiwgRXhwYW5kTmFtZShkYXRhMiwgMCwgJmVuY2xlbikpOworICBFWFBFQ1RfRVEoMSwgZW5jbGVuKTsKKworICAvLyBDb21wbGV0ZSBuYW1lIGluZGlyZWN0aW9uCisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEzID0gezB4MTIsIDB4MjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsICdkJywgJ2UnLCAnZicsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAsIDJ9OworICBFWFBFQ1RfRVEoImRlZiIsIEV4cGFuZE5hbWUoZGF0YTMsIDIsICZlbmNsZW4pKTsKKyAgRVhQRUNUX0VRKDUsIGVuY2xlbik7CisgIEVYUEVDVF9FUSgiZGVmIiwgRXhwYW5kTmFtZShkYXRhMywgNywgJmVuY2xlbikpOworICBFWFBFQ1RfRVEoMiwgZW5jbGVuKTsKKworICAvLyBPbmUgbGFiZWwgdGhlbiBpbmRpcmVjdGlvbgorICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhNCA9IHsweDEyLCAweDIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCAnZCcsICdlJywgJ2YnLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAnYScsIDB4QzAsIDJ9OworICBFWFBFQ1RfRVEoImRlZiIsIEV4cGFuZE5hbWUoZGF0YTQsIDIsICZlbmNsZW4pKTsKKyAgRVhQRUNUX0VRKDUsIGVuY2xlbik7CisgIEVYUEVDVF9FUSgiYS5kZWYiLCBFeHBhbmROYW1lKGRhdGE0LCA3LCAmZW5jbGVuKSk7CisgIEVYUEVDVF9FUSg0LCBlbmNsZW4pOworCisgIC8vIFR3byBsYWJlbHMgdGhlbiBpbmRpcmVjdGlvbgorICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhNSA9IHsweDEyLCAweDIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCAnZCcsICdlJywgJ2YnLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAnYScsIDEsICdiJywgMHhDMCwgMn07CisgIEVYUEVDVF9FUSgiZGVmIiwgRXhwYW5kTmFtZShkYXRhNSwgMiwgJmVuY2xlbikpOworICBFWFBFQ1RfRVEoNSwgZW5jbGVuKTsKKyAgRVhQRUNUX0VRKCJhLmIuZGVmIiwgRXhwYW5kTmFtZShkYXRhNSwgNywgJmVuY2xlbikpOworICBFWFBFQ1RfRVEoNiwgZW5jbGVuKTsKKworICAvLyBFbXB0eSBuYW1lLCBpbmRpcmVjdGlvbiB0byBlbXB0eSBuYW1lCisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE2ID0gezB4MTIsIDB4MjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAsIDJ9OworICBFWFBFQ1RfRVEoIiIsIEV4cGFuZE5hbWUoZGF0YTYsIDIsICZlbmNsZW4pKTsKKyAgRVhQRUNUX0VRKDEsIGVuY2xlbik7CisgIEVYUEVDVF9FUSgiIiwgRXhwYW5kTmFtZShkYXRhNiwgMywgJmVuY2xlbikpOworICBFWFBFQ1RfRVEoMiwgZW5jbGVuKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBFeHBhbmROYW1lRmFpbHVyZSkgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhMSA9IHsweDAzLCAnYycsICdvJywgJ20nLCAweDAwfTsKKyAgY2hhciAqbmFtZSA9IG51bGxwdHI7CisgIGxvbmcgZW5jbGVuOworICBTZXRBbGxvY0ZhaWwoMSk7CisgIEVYUEVDVF9FUShBUkVTX0VOT01FTSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX25hbWUoZGF0YTEuZGF0YSgpLCBkYXRhMS5kYXRhKCksIGRhdGExLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZlbmNsZW4pKTsKKworICAvLyBFbXB0eSBwYWNrZXQKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRE5BTUUsCisgICAgICAgICAgICBhcmVzX2V4cGFuZF9uYW1lKGRhdGExLmRhdGEoKSwgZGF0YTEuZGF0YSgpLCAwLCAmbmFtZSwgJmVuY2xlbikpOworCisgIC8vIFN0YXJ0IGJleW9uZCBlbmNsb3NpbmcgZGF0YQorICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX25hbWUoZGF0YTEuZGF0YSgpICsgZGF0YTEuc2l6ZSgpLCBkYXRhMS5kYXRhKCksIGRhdGExLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZlbmNsZW4pKTsKKworICAvLyBMZW5ndGggYmV5b25kIHNpemUgb2YgZW5jbG9zaW5nIGRhdGEKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTJhID0gezB4MTMsICdjJywgJ28nLCAnbScsIDB4MDB9OworICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX25hbWUoZGF0YTJhLmRhdGEoKSwgZGF0YTJhLmRhdGEoKSwgZGF0YTJhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZlbmNsZW4pKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTJiID0gezB4MX07CisgIEVYUEVDVF9FUShBUkVTX0VCQUROQU1FLAorICAgICAgICAgICAgYXJlc19leHBhbmRfbmFtZShkYXRhMmIuZGF0YSgpLCBkYXRhMmIuZGF0YSgpLCBkYXRhMmIuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmVuY2xlbikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhMmMgPSB7MHhDMH07CisgIEVYUEVDVF9FUShBUkVTX0VCQUROQU1FLAorICAgICAgICAgICAgYXJlc19leHBhbmRfbmFtZShkYXRhMmMuZGF0YSgpLCBkYXRhMmMuZGF0YSgpLCBkYXRhMmMuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmVuY2xlbikpOworCisgIC8vIEluZGlyZWN0aW9uIGJleW9uZCBlbmNsb3NpbmcgZGF0YQorICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhM2EgPSB7MHhDMCwgMHgwMn07CisgIEVYUEVDVF9FUShBUkVTX0VCQUROQU1FLAorICAgICAgICAgICAgYXJlc19leHBhbmRfbmFtZShkYXRhM2EuZGF0YSgpLCBkYXRhM2EuZGF0YSgpLCBkYXRhM2Euc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmVuY2xlbikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhM2IgPSB7MHhDMCwgMHgwQSwgJ2MnLCAnbycsICdtJywgMHgwMH07CisgIEVYUEVDVF9FUShBUkVTX0VCQUROQU1FLAorICAgICAgICAgICAgYXJlc19leHBhbmRfbmFtZShkYXRhM2IuZGF0YSgpLCBkYXRhM2IuZGF0YSgpLCBkYXRhM2Iuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmVuY2xlbikpOworCisgIC8vIEludmFsaWQgdG9wIGJpdHMgaW4gbGFiZWwgbGVuZ3RoCisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE0ID0gezB4MDMsICdjJywgJ28nLCAnbScsIDB4MDAsIDB4ODAsIDB4MDB9OworICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX25hbWUoZGF0YTQuZGF0YSgpICsgNSwgZGF0YTQuZGF0YSgpLCBkYXRhNC5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCAmZW5jbGVuKSk7CisKKyAgLy8gTGFiZWwgdG9vIGxvbmc6IDY0LWJ5dGUgbGFiZWwsIHdpdGggaW52YWxpZCB0b3AgMiBiaXRzIG9mIGxlbmd0aCAoMDEpLgorICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhNSA9IHsweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDB9OworICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX25hbWUoZGF0YTUuZGF0YSgpLCBkYXRhNS5kYXRhKCksIGRhdGE1LnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZlbmNsZW4pKSA8PCBuYW1lOworCisgIC8vIEluY29tcGxldGUgaW5kaXJlY3QgbGVuZ3RoCisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE2ID0gezB4MDMsICdjJywgJ28nLCAnbScsIDB4MDAsIDB4QzB9OworICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX25hbWUoZGF0YTYuZGF0YSgpICsgNSwgZGF0YTYuZGF0YSgpLCBkYXRhNi5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCAmZW5jbGVuKSk7CisKKyAgLy8gSW5kaXJlY3Rpb24gbG9vcHMKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTcgPSB7MHhDMCwgMHgwMiwgMHhDMCwgMHgwMH07CisgIEVYUEVDVF9FUShBUkVTX0VCQUROQU1FLAorICAgICAgICAgICAgYXJlc19leHBhbmRfbmFtZShkYXRhNy5kYXRhKCksIGRhdGE3LmRhdGEoKSwgZGF0YTcuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmVuY2xlbikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhOCA9IHszLCAnZCcsICdlJywgJ2YnLCAweEMwLCAweDA4LCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCAnYScsICdiJywgJ2MnLCAweEMwLCAweDAwfTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRE5BTUUsCisgICAgICAgICAgICBhcmVzX2V4cGFuZF9uYW1lKGRhdGE4LmRhdGEoKSwgZGF0YTguZGF0YSgpLCBkYXRhOC5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCAmZW5jbGVuKSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE5ID0gezB4MTIsIDB4MjMsICAvLyBzdGFydCAyIGJ5dGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsICdkJywgJ2UnLCAnZicsIDB4QzAsIDB4MDJ9OworICBFWFBFQ1RfRVEoQVJFU19FQkFETkFNRSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX25hbWUoZGF0YTkuZGF0YSgpICsgMiwgZGF0YTkuZGF0YSgpLCBkYXRhOS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCAmZW5jbGVuKSk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgQ3JlYXRlRUROU1F1ZXJ5KSB7CisgIGJ5dGUqIHA7CisgIGludCBsZW47CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsCisgICAgICAgICAgICBhcmVzX2NyZWF0ZV9xdWVyeSgiZXhhbXBsZS5jb20iLCBuc19jX2luLCBuc190X2EsIDB4MTIzNCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLCAmbGVuLCAxMjgwKSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEocCwgcCArIGxlbik7CisgIGFyZXNfZnJlZV9zdHJpbmcocCk7CisKKyAgc3RkOjpzdHJpbmcgYWN0dWFsID0gUGFja2V0VG9TdHJpbmcoZGF0YSk7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TT3B0UlIoMCwgMTI4MCkpOworICBzdGQ6OnN0cmluZyBleHBlY3RlZCA9IFBhY2tldFRvU3RyaW5nKHBrdC5kYXRhKCkpOworICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgQ3JlYXRlUm9vdFF1ZXJ5KSB7CisgIGJ5dGUqIHA7CisgIGludCBsZW47CisgIGFyZXNfY3JlYXRlX3F1ZXJ5KCIuIiwgbnNfY19pbiwgbnNfdF9hLCAweDEyMzQsIDAsICZwLCAmbGVuLCAwKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YShwLCBwICsgbGVuKTsKKyAgYXJlc19mcmVlX3N0cmluZyhwKTsKKworICBzdGQ6OnN0cmluZyBhY3R1YWwgPSBQYWNrZXRUb1N0cmluZyhkYXRhKTsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCIiLCBuc190X2EpKTsKKyAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPSBQYWNrZXRUb1N0cmluZyhwa3QuZGF0YSgpKTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFZlcnNpb24pIHsKKyAgLy8gQXNzdW1lIGxpbmtlZCB0byBzYW1lIHZlcnNpb24KKyAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKEFSRVNfVkVSU0lPTl9TVFIpLAorICAgICAgICAgICAgc3RkOjpzdHJpbmcoYXJlc192ZXJzaW9uKG51bGxwdHIpKSk7CisgIGludCB2ZXJzaW9uOworICBhcmVzX3ZlcnNpb24oJnZlcnNpb24pOworICBFWFBFQ1RfRVEoQVJFU19WRVJTSU9OLCB2ZXJzaW9uKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBTdHJlcnJvcikgeworICBFWFBFQ1RfRVEoIlN1Y2Nlc3NmdWwgY29tcGxldGlvbiIsCisgICAgICAgICAgICBzdGQ6OnN0cmluZyhhcmVzX3N0cmVycm9yKEFSRVNfU1VDQ0VTUykpKTsKKyAgRVhQRUNUX0VRKCJETlMgcXVlcnkgY2FuY2VsbGVkIiwKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGFyZXNfc3RyZXJyb3IoQVJFU19FQ0FOQ0VMTEVEKSkpOworICBFWFBFQ1RfRVEoInVua25vd24iLAorICAgICAgICAgICAgc3RkOjpzdHJpbmcoYXJlc19zdHJlcnJvcig5OSkpKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBFeHBhbmRTdHJpbmcpIHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gczEgPSB7IDMsICdhJywgJ2InLCAnYyd9OworICBjaGFyKiByZXN1bHQgPSBudWxscHRyOworICBsb25nIGxlbjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX3N0cmluZyhzMS5kYXRhKCksIHMxLmRhdGEoKSwgczEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKiopJnJlc3VsdCwgJmxlbikpOworICBFWFBFQ1RfRVEoImFiYyIsIHN0ZDo6c3RyaW5nKHJlc3VsdCkpOworICBFWFBFQ1RfRVEoMSArIDMsIGxlbik7ICAvLyBhbW91bnQgb2YgZGF0YSBjb25zdW1lZCBpbmNsdWRlcyAxIGJ5dGUgbGVuCisgIGZyZWUocmVzdWx0KTsKKyAgcmVzdWx0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFNUUiwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX3N0cmluZyhzMS5kYXRhKCkgKyAxLCBzMS5kYXRhKCksIHMxLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcioqKSZyZXN1bHQsICZsZW4pKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFNUUiwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX3N0cmluZyhzMS5kYXRhKCkgKyA0LCBzMS5kYXRhKCksIHMxLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcioqKSZyZXN1bHQsICZsZW4pKTsKKyAgU2V0QWxsb2NTaXplRmFpbCgzICsgMSk7CisgIEVYUEVDVF9FUShBUkVTX0VOT01FTSwKKyAgICAgICAgICAgIGFyZXNfZXhwYW5kX3N0cmluZyhzMS5kYXRhKCksIHMxLmRhdGEoKSwgczEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKiopJnJlc3VsdCwgJmxlbikpOworfQorCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGFyZXMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LW1vY2suY2MgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1tb2NrLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYmU2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1tb2NrLmNjCkBAIC0wLDAgKzEsMTE2MSBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK3VzaW5nIHRlc3Rpbmc6Okludm9rZVdpdGhvdXRBcmdzOwordXNpbmcgdGVzdGluZzo6RG9BbGw7CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgQmFzaWMpIHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gcmVwbHkgPSB7CisgICAgMHgwMCwgMHgwMCwgIC8vIHFpZAorICAgIDB4ODQsIC8vIHJlc3BvbnNlICsgcXVlcnkgKyBBQSArIG5vdC1UQyArIG5vdC1SRAorICAgIDB4MDAsIC8vIG5vdC1SQSArIG5vdC1aICsgbm90LUFEICsgbm90LUNEICsgcmM9Tm9FcnJvcgorICAgIDB4MDAsIDB4MDEsICAvLyAxIHF1ZXN0aW9uCisgICAgMHgwMCwgMHgwMSwgIC8vIDEgYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyAwIGF1dGhvcml0eSBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gMCBhZGRpdGlvbmFsIFJScworICAgIC8vIFF1ZXN0aW9uCisgICAgMHgwMywgJ3cnLCAndycsICd3JywKKyAgICAweDA2LCAnZycsICdvJywgJ28nLCAnZycsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDAxLCAgLy8gdHlwZSBBCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gQW5zd2VyCisgICAgMHgwMywgJ3cnLCAndycsICd3JywKKyAgICAweDA2LCAnZycsICdvJywgJ28nLCAnZycsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDAxLCAgLy8gdHlwZSBBCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgIC8vIFRUTAorICAgIDB4MDAsIDB4MDQsICAvLyByZGF0YSBsZW5ndGgKKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0CisgIH07CisKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseURhdGEoJnNlcnZlcl8sIHJlcGx5KSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgRVhQRUNUX0VRKCJ7J3d3dy5nb29nbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsxLjIuMy40XX0iLCBzcy5zdHIoKSk7Cit9CisKKy8vIFVEUCBvbmx5IHNvIG1vY2sgc2VydmVyIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGNvbmNhdGVuYXRlZCByZXF1ZXN0cworVEVTVF9QKE1vY2tVRFBDaGFubmVsVGVzdCwgUGFyYWxsZWxMb29rdXBzKSB7CisgIEROU1BhY2tldCByc3AxOworICByc3AxLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3cuZ29vZ2xlLmNvbSIsIDEwMCwgezIsIDMsIDQsIDV9KSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3AxKSk7CisgIEROU1BhY2tldCByc3AyOworICByc3AyLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigid3d3LmV4YW1wbGUuY29tIiwgMTAwLCB7MSwgMiwgMywgNH0pKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3AyKSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQxOworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQxKTsKKyAgSG9zdFJlc3VsdCByZXN1bHQyOworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZXhhbXBsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0Mik7CisgIEhvc3RSZXN1bHQgcmVzdWx0MzsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0Myk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0MS5kb25lXyk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdDIuZG9uZV8pOworICBFWFBFQ1RfVFJVRShyZXN1bHQzLmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3MxOworICBzczEgPDwgcmVzdWx0MS5ob3N0XzsKKyAgRVhQRUNUX0VRKCJ7J3d3dy5nb29nbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsyLjMuNC41XX0iLCBzczEuc3RyKCkpOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczI7CisgIHNzMiA8PCByZXN1bHQyLmhvc3RfOworICBFWFBFQ1RfRVEoInsnd3d3LmV4YW1wbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsxLjIuMy40XX0iLCBzczIuc3RyKCkpOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczM7CisgIHNzMyA8PCByZXN1bHQzLmhvc3RfOworICBFWFBFQ1RfRVEoInsnd3d3Lmdvb2dsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjVdfSIsIHNzMy5zdHIoKSk7Cit9CisKKy8vIFVEUCB0byBUQ1Agc3BlY2lmaWMgdGVzdAorVEVTVF9QKE1vY2tVRFBDaGFubmVsVGVzdCwgVHJ1bmNhdGlvblJldHJ5KSB7CisgIEROU1BhY2tldCByc3B0cnVuY2F0ZWQ7CisgIHJzcHRydW5jYXRlZC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKS5zZXRfdGMoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpOworICBETlNQYWNrZXQgcnNwb2s7CisgIHJzcG9rLnNldF9yZXNwb25zZSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3cuZ29vZ2xlLmNvbSIsIDEwMCwgezEsIDIsIDMsIDR9KSk7CisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJnJzcHRydW5jYXRlZCkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KCZzZXJ2ZXJfLCAmcnNwb2spKTsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgRVhQRUNUX0VRKCJ7J3d3dy5nb29nbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsxLjIuMy40XX0iLCBzcy5zdHIoKSk7Cit9CisKK3N0YXRpYyBpbnQgc29ja19jYl9jb3VudCA9IDA7CitzdGF0aWMgaW50IFNvY2tldENvbm5lY3RDYWxsYmFjayhhcmVzX3NvY2tldF90IGZkLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkgeworICBpbnQgcmMgPSAqKGludCopZGF0YTsKKyAgaWYgKHZlcmJvc2UpIHN0ZDo6Y2VyciA8PCAiU29ja2V0Q29ubmVjdENhbGxiYWNrKCIgPDwgZmQgPDwgIikgaW52b2tlZCIgPDwgc3RkOjplbmRsOworICBzb2NrX2NiX2NvdW50Kys7CisgIHJldHVybiByYzsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgU29ja0NhbGxiYWNrKSB7CisgIEROU1BhY2tldCByc3A7CisgIHJzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigid3d3Lmdvb2dsZS5jb20iLCAxMDAsIHsyLCAzLCA0LCA1fSkpOworICBFWFBFQ1RfQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbE9uY2UoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3ApKTsKKworICAvLyBHZXQgbm90aWZpZWQgb2YgbmV3IHNvY2tldHMKKyAgaW50IHJjID0gQVJFU19TVUNDRVNTOworICBhcmVzX3NldF9zb2NrZXRfY2FsbGJhY2soY2hhbm5lbF8sIFNvY2tldENvbm5lY3RDYWxsYmFjaywgJnJjKTsKKworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgc29ja19jYl9jb3VudCA9IDA7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX0VRKDEsIHNvY2tfY2JfY291bnQpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnd3d3Lmdvb2dsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjVdfSIsIHNzLnN0cigpKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgU29ja0ZhaWxDYWxsYmFjaykgeworICAvLyBOb3RpZmljYXRpb24gb2YgbmV3IHNvY2tldHMgZ2l2ZXMgYW4gZXJyb3IuCisgIGludCByYyA9IC0xOworICBhcmVzX3NldF9zb2NrZXRfY2FsbGJhY2soY2hhbm5lbF8sIFNvY2tldENvbm5lY3RDYWxsYmFjaywgJnJjKTsKKworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgc29ja19jYl9jb3VudCA9IDA7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX0xUKDEsIHNvY2tfY2JfY291bnQpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19FQ09OTlJFRlVTRUQsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworc3RhdGljIGludCBzb2NrX2NvbmZpZ19jYl9jb3VudCA9IDA7CitzdGF0aWMgaW50IFNvY2tldENvbmZpZ3VyZUNhbGxiYWNrKGFyZXNfc29ja2V0X3QgZmQsIGludCB0eXBlLCB2b2lkICpkYXRhKSB7CisgIGludCByYyA9ICooaW50KilkYXRhOworICBpZiAodmVyYm9zZSkgc3RkOjpjZXJyIDw8ICJTb2NrZXRDb25maWd1cmVDYWxsYmFjaygiIDw8IGZkIDw8ICIpIGludm9rZWQiIDw8IHN0ZDo6ZW5kbDsKKyAgc29ja19jb25maWdfY2JfY291bnQrKzsKKyAgcmV0dXJuIHJjOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBTb2NrQ29uZmlndXJlQ2FsbGJhY2spIHsKKyAgRE5TUGFja2V0IHJzcDsKKyAgcnNwLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3cuZ29vZ2xlLmNvbSIsIDEwMCwgezIsIDMsIDQsIDV9KSk7CisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJnJzcCkpOworCisgIC8vIEdldCBub3RpZmllZCBvZiBuZXcgc29ja2V0cworICBpbnQgcmMgPSBBUkVTX1NVQ0NFU1M7CisgIGFyZXNfc2V0X3NvY2tldF9jb25maWd1cmVfY2FsbGJhY2soY2hhbm5lbF8sIFNvY2tldENvbmZpZ3VyZUNhbGxiYWNrLCAmcmMpOworCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBzb2NrX2NvbmZpZ19jYl9jb3VudCA9IDA7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX0VRKDEsIHNvY2tfY29uZmlnX2NiX2NvdW50KTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgRVhQRUNUX0VRKCJ7J3d3dy5nb29nbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsyLjMuNC41XX0iLCBzcy5zdHIoKSk7Cit9CisKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIFNvY2tDb25maWd1cmVGYWlsQ2FsbGJhY2spIHsKKyAgLy8gTm90aWZpY2F0aW9uIG9mIG5ldyBzb2NrZXRzIGdpdmVzIGFuIGVycm9yLgorICBpbnQgcmMgPSAtMTsKKyAgYXJlc19zZXRfc29ja2V0X2NvbmZpZ3VyZV9jYWxsYmFjayhjaGFubmVsXywgU29ja2V0Q29uZmlndXJlQ2FsbGJhY2ssICZyYyk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIHNvY2tfY29uZmlnX2NiX2NvdW50ID0gMDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfTFQoMSwgc29ja19jb25maWdfY2JfY291bnQpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19FQ09OTlJFRlVTRUQsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworLy8gVENQIG9ubHkgdG8gcHJldmVudCByZXRyaWVzCitURVNUX1AoTW9ja1RDUENoYW5uZWxUZXN0LCBNYWxmb3JtZWRSZXNwb25zZSkgeworICBzdGQ6OnZlY3RvcjxieXRlPiBvbmUgPSB7MHgwMX07CisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseURhdGEoJnNlcnZlcl8sIG9uZSkpOworCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VUSU1FT1VULCByZXN1bHQuc3RhdHVzXyk7Cit9CisKK1RFU1RfUChNb2NrVENQQ2hhbm5lbFRlc3QsIEZvcm1FcnJSZXNwb25zZSkgeworICBETlNQYWNrZXQgcnNwOworICByc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKTsKKyAgcnNwLnNldF9yY29kZShuc19yX2Zvcm1lcnIpOworICBFWFBFQ1RfQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbE9uY2UoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3ApKTsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUZPUk1FUlIsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9QKE1vY2tUQ1BDaGFubmVsVGVzdCwgU2VydkZhaWxSZXNwb25zZSkgeworICBETlNQYWNrZXQgcnNwOworICByc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKTsKKyAgcnNwLnNldF9yY29kZShuc19yX3NlcnZmYWlsKTsKKyAgRVhQRUNUX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KCZzZXJ2ZXJfLCAmcnNwKSk7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIC8vIEFSRVNfRkxBR19OT0NIRUNLUkVTUCBub3Qgc2V0LCBzbyBTRVJWRkFJTCBjb25zdW1lZAorICBFWFBFQ1RfRVEoQVJFU19FQ09OTlJFRlVTRUQsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9QKE1vY2tUQ1BDaGFubmVsVGVzdCwgTm90SW1wbFJlc3BvbnNlKSB7CisgIEROU1BhY2tldCByc3A7CisgIHJzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpOworICByc3Auc2V0X3Jjb2RlKG5zX3Jfbm90aW1wbCk7CisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJnJzcCkpOworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICAvLyBBUkVTX0ZMQUdfTk9DSEVDS1JFU1Agbm90IHNldCwgc28gTk9USU1QTCBjb25zdW1lZAorICBFWFBFQ1RfRVEoQVJFU19FQ09OTlJFRlVTRUQsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9QKE1vY2tUQ1BDaGFubmVsVGVzdCwgUmVmdXNlZFJlc3BvbnNlKSB7CisgIEROU1BhY2tldCByc3A7CisgIHJzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpOworICByc3Auc2V0X3Jjb2RlKG5zX3JfcmVmdXNlZCk7CisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJnJzcCkpOworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICAvLyBBUkVTX0ZMQUdfTk9DSEVDS1JFU1Agbm90IHNldCwgc28gUkVGVVNFRCBjb25zdW1lZAorICBFWFBFQ1RfRVEoQVJFU19FQ09OTlJFRlVTRUQsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9QKE1vY2tUQ1BDaGFubmVsVGVzdCwgWVhEb21haW5SZXNwb25zZSkgeworICBETlNQYWNrZXQgcnNwOworICByc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKTsKKyAgcnNwLnNldF9yY29kZShuc19yX3l4ZG9tYWluKTsKKyAgRVhQRUNUX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KCZzZXJ2ZXJfLCAmcnNwKSk7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworY2xhc3MgTW9ja0V4dHJhT3B0c1Rlc3QKKyAgICA6IHB1YmxpYyBNb2NrQ2hhbm5lbE9wdHNUZXN0LAorICAgICAgcHVibGljIDo6dGVzdGluZzo6V2l0aFBhcmFtSW50ZXJmYWNlPCBzdGQ6OnBhaXI8aW50LCBib29sPiA+IHsKKyBwdWJsaWM6CisgIE1vY2tFeHRyYU9wdHNUZXN0KCkKKyAgICA6IE1vY2tDaGFubmVsT3B0c1Rlc3QoMSwgR2V0UGFyYW0oKS5maXJzdCwgR2V0UGFyYW0oKS5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGxPcHRpb25zKCZvcHRzXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFSRVNfT1BUX1NPQ0tfU05EQlVGfEFSRVNfT1BUX1NPQ0tfUkNWQlVGKSB7fQorICBzdGF0aWMgc3RydWN0IGFyZXNfb3B0aW9ucyogRmlsbE9wdGlvbnMoc3RydWN0IGFyZXNfb3B0aW9ucyAqIG9wdHMpIHsKKyAgICBtZW1zZXQob3B0cywgMCwgc2l6ZW9mKHN0cnVjdCBhcmVzX29wdGlvbnMpKTsKKyAgICAvLyBTZXQgYSBmZXcgb3B0aW9ucyB0aGF0IGFmZmVjdCBzb2NrZXQgY29tbXVuaWNhdGlvbnMKKyAgICBvcHRzLT5zb2NrZXRfc2VuZF9idWZmZXJfc2l6ZSA9IDUxNDsKKyAgICBvcHRzLT5zb2NrZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZSA9IDUxNDsKKyAgICByZXR1cm4gb3B0czsKKyAgfQorIHByaXZhdGU6CisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0c187Cit9OworCitURVNUX1AoTW9ja0V4dHJhT3B0c1Rlc3QsIFNpbXBsZVF1ZXJ5KSB7CisgIGFyZXNfc2V0X2xvY2FsX2lwNChjaGFubmVsXywgMHg3RjAwMDAwMSk7CisgIGJ5dGUgYWRkcjZbMTZdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDF9OworICBhcmVzX3NldF9sb2NhbF9pcDYoY2hhbm5lbF8sIGFkZHI2KTsKKyAgYXJlc19zZXRfbG9jYWxfZGV2KGNoYW5uZWxfLCAiZHVtbXkiKTsKKworICBETlNQYWNrZXQgcnNwOworICByc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoInd3dy5nb29nbGUuY29tIiwgMTAwLCB7MiwgMywgNCwgNX0pKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJnJzcCkpOworCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCByZXN1bHQuaG9zdF87CisgIEVYUEVDVF9FUSgieyd3d3cuZ29vZ2xlLmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMi4zLjQuNV19Iiwgc3Muc3RyKCkpOworfQorCitjbGFzcyBNb2NrRmxhZ3NDaGFubmVsT3B0c1Rlc3QKKyAgICA6IHB1YmxpYyBNb2NrQ2hhbm5lbE9wdHNUZXN0LAorICAgICAgcHVibGljIDo6dGVzdGluZzo6V2l0aFBhcmFtSW50ZXJmYWNlPCBzdGQ6OnBhaXI8aW50LCBib29sPiA+IHsKKyBwdWJsaWM6CisgIE1vY2tGbGFnc0NoYW5uZWxPcHRzVGVzdChpbnQgZmxhZ3MpCisgICAgOiBNb2NrQ2hhbm5lbE9wdHNUZXN0KDEsIEdldFBhcmFtKCkuZmlyc3QsIEdldFBhcmFtKCkuc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsT3B0aW9ucygmb3B0c18sIGZsYWdzKSwgQVJFU19PUFRfRkxBR1MpIHt9CisgIHN0YXRpYyBzdHJ1Y3QgYXJlc19vcHRpb25zKiBGaWxsT3B0aW9ucyhzdHJ1Y3QgYXJlc19vcHRpb25zICogb3B0cywgaW50IGZsYWdzKSB7CisgICAgbWVtc2V0KG9wdHMsIDAsIHNpemVvZihzdHJ1Y3QgYXJlc19vcHRpb25zKSk7CisgICAgb3B0cy0+ZmxhZ3MgPSBmbGFnczsKKyAgICByZXR1cm4gb3B0czsKKyAgfQorIHByaXZhdGU6CisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0c187Cit9OworCitjbGFzcyBNb2NrTm9DaGVja1Jlc3BDaGFubmVsVGVzdCA6IHB1YmxpYyBNb2NrRmxhZ3NDaGFubmVsT3B0c1Rlc3QgeworIHB1YmxpYzoKKyAgTW9ja05vQ2hlY2tSZXNwQ2hhbm5lbFRlc3QoKSA6IE1vY2tGbGFnc0NoYW5uZWxPcHRzVGVzdChBUkVTX0ZMQUdfTk9DSEVDS1JFU1ApIHt9Cit9OworCitURVNUX1AoTW9ja05vQ2hlY2tSZXNwQ2hhbm5lbFRlc3QsIFNlcnZGYWlsUmVzcG9uc2UpIHsKKyAgRE5TUGFja2V0IHJzcDsKKyAgcnNwLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSk7CisgIHJzcC5zZXRfcmNvZGUobnNfcl9zZXJ2ZmFpbCk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3ApKTsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRVNFUlZGQUlMLCByZXN1bHQuc3RhdHVzXyk7Cit9CisKK1RFU1RfUChNb2NrTm9DaGVja1Jlc3BDaGFubmVsVGVzdCwgTm90SW1wbFJlc3BvbnNlKSB7CisgIEROU1BhY2tldCByc3A7CisgIHJzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpOworICByc3Auc2V0X3Jjb2RlKG5zX3Jfbm90aW1wbCk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3ApKTsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PVElNUCwgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX1AoTW9ja05vQ2hlY2tSZXNwQ2hhbm5lbFRlc3QsIFJlZnVzZWRSZXNwb25zZSkgeworICBETlNQYWNrZXQgcnNwOworICByc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKTsKKyAgcnNwLnNldF9yY29kZShuc19yX3JlZnVzZWQpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmcnNwKSk7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VSRUZVU0VELCByZXN1bHQuc3RhdHVzXyk7Cit9CisKK2NsYXNzIE1vY2tFRE5TQ2hhbm5lbFRlc3QgOiBwdWJsaWMgTW9ja0ZsYWdzQ2hhbm5lbE9wdHNUZXN0IHsKKyBwdWJsaWM6CisgIE1vY2tFRE5TQ2hhbm5lbFRlc3QoKSA6IE1vY2tGbGFnc0NoYW5uZWxPcHRzVGVzdChBUkVTX0ZMQUdfRUROUykge30KK307CisKK1RFU1RfUChNb2NrRUROU0NoYW5uZWxUZXN0LCBSZXRyeVdpdGhvdXRFRE5TKSB7CisgIEROU1BhY2tldCByc3BmYWlsOworICByc3BmYWlsLnNldF9yZXNwb25zZSgpLnNldF9hYSgpLnNldF9yY29kZShuc19yX3NlcnZmYWlsKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpOworICBETlNQYWNrZXQgcnNwb2s7CisgIHJzcG9rLnNldF9yZXNwb25zZSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3cuZ29vZ2xlLmNvbSIsIDEwMCwgezEsIDIsIDMsIDR9KSk7CisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJnJzcGZhaWwpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJnJzcG9rKSk7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCByZXN1bHQuaG9zdF87CisgIEVYUEVDVF9FUSgieyd3d3cuZ29vZ2xlLmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMS4yLjMuNF19Iiwgc3Muc3RyKCkpOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBTZWFyY2hEb21haW5zKSB7CisgIEROU1BhY2tldCBub2ZpcnN0OworICBub2ZpcnN0LnNldF9yZXNwb25zZSgpLnNldF9hYSgpLnNldF9yY29kZShuc19yX254ZG9tYWluKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vZmlyc3QpKTsKKyAgRE5TUGFja2V0IG5vc2Vjb25kOworICBub3NlY29uZC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKS5zZXRfcmNvZGUobnNfcl9ueGRvbWFpbikKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnNlY29uZC5vcmciLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5zZWNvbmQub3JnIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vc2Vjb25kKSk7CisgIEROU1BhY2tldCB5ZXN0aGlyZDsKKyAgeWVzdGhpcmQuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnRoaXJkLmdvdiIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigid3d3LnRoaXJkLmdvdiIsIDB4MDIwMCwgezIsIDMsIDQsIDV9KSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cudGhpcmQuZ292IiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJnllc3RoaXJkKSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dyIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgRVhQRUNUX0VRKCJ7J3d3dy50aGlyZC5nb3YnIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjVdfSIsIHNzLnN0cigpKTsKK30KKworLy8gUmVsaWVzIG9uIHJldHJpZXMgc28gaXMgVURQLW9ubHkKK1RFU1RfUChNb2NrVURQQ2hhbm5lbFRlc3QsIFNlYXJjaERvbWFpbnNXaXRoUmVzZW50UmVwbHkpIHsKKyAgRE5TUGFja2V0IG5vZmlyc3Q7CisgIG5vZmlyc3Quc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkuc2V0X3Jjb2RlKG5zX3Jfbnhkb21haW4pCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5maXJzdC5jb20iLCBuc190X2EpKTsKKyAgRVhQRUNUX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbE9uY2UoU2V0UmVwbHkoJnNlcnZlcl8sICZub2ZpcnN0KSk7CisgIEROU1BhY2tldCBub3NlY29uZDsKKyAgbm9zZWNvbmQuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkuc2V0X3Jjb2RlKG5zX3Jfbnhkb21haW4pCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5zZWNvbmQub3JnIiwgbnNfdF9hKSk7CisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3LnNlY29uZC5vcmciLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJm5vc2Vjb25kKSk7CisgIEROU1BhY2tldCB5ZXN0aGlyZDsKKyAgeWVzdGhpcmQuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnRoaXJkLmdvdiIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigid3d3LnRoaXJkLmdvdiIsIDB4MDIwMCwgezIsIDMsIDQsIDV9KSk7CisgIC8vIEJlZm9yZSBzZW5kaW5nIHRoZSByZWFsIGFuc3dlciwgcmVzZW5kIGFuIGVhcmxpZXIgcmVwbHkKKyAgRVhQRUNUX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cudGhpcmQuZ292IiwgbnNfdF9hKSkKKyAgICAuV2lsbE9uY2UoRG9BbGwoU2V0UmVwbHkoJnNlcnZlcl8sICZub2ZpcnN0KSwKKyAgICAgICAgICAgICAgICAgICAgU2V0UmVwbHlRSUQoJnNlcnZlcl8sIDEyMykpKQorICAgIC5XaWxsT25jZShEb0FsbChTZXRSZXBseSgmc2VydmVyXywgJnllc3RoaXJkKSwKKyAgICAgICAgICAgICAgICAgICAgU2V0UmVwbHlRSUQoJnNlcnZlcl8sIC0xKSkpOworCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3ciLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCByZXN1bHQuaG9zdF87CisgIEVYUEVDVF9FUSgieyd3d3cudGhpcmQuZ292JyBhbGlhc2VzPVtdIGFkZHJzPVsyLjMuNC41XX0iLCBzcy5zdHIoKSk7Cit9CisKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIFNlYXJjaERvbWFpbnNCYXJlKSB7CisgIEROU1BhY2tldCBub2ZpcnN0OworICBub2ZpcnN0LnNldF9yZXNwb25zZSgpLnNldF9hYSgpLnNldF9yY29kZShuc19yX254ZG9tYWluKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vZmlyc3QpKTsKKyAgRE5TUGFja2V0IG5vc2Vjb25kOworICBub3NlY29uZC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKS5zZXRfcmNvZGUobnNfcl9ueGRvbWFpbikKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnNlY29uZC5vcmciLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5zZWNvbmQub3JnIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vc2Vjb25kKSk7CisgIEROU1BhY2tldCBub3RoaXJkOworICBub3RoaXJkLnNldF9yZXNwb25zZSgpLnNldF9hYSgpLnNldF9yY29kZShuc19yX254ZG9tYWluKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cudGhpcmQuZ292IiwgbnNfdF9hKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cudGhpcmQuZ292IiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vdGhpcmQpKTsKKyAgRE5TUGFja2V0IHllc2JhcmU7CisgIHllc2JhcmUuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3IiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3ciLCAweDAyMDAsIHsyLCAzLCA0LCA1fSkpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3IiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJnllc2JhcmUpKTsKKworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3IiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnd3d3JyBhbGlhc2VzPVtdIGFkZHJzPVsyLjMuNC41XX0iLCBzcy5zdHIoKSk7Cit9CisKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIFNlYXJjaE5vRGF0YVRoZW5TdWNjZXNzKSB7CisgIC8vIEZpcnN0IHR3byBzZWFyY2ggZG9tYWlucyByZWNvZ25pemUgdGhlIG5hbWUgYnV0IGhhdmUgbm8gQSByZWNvcmRzLgorICBETlNQYWNrZXQgbm9maXJzdDsKKyAgbm9maXJzdC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vZmlyc3QpKTsKKyAgRE5TUGFja2V0IG5vc2Vjb25kOworICBub3NlY29uZC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuc2Vjb25kLm9yZyIsIG5zX3RfYSkpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3LnNlY29uZC5vcmciLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmbm9zZWNvbmQpKTsKKyAgRE5TUGFja2V0IHllc3RoaXJkOworICB5ZXN0aGlyZC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cudGhpcmQuZ292IiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3cudGhpcmQuZ292IiwgMHgwMjAwLCB7MiwgMywgNCwgNX0pKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy50aGlyZC5nb3YiLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmeWVzdGhpcmQpKTsKKworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3IiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnd3d3LnRoaXJkLmdvdicgYWxpYXNlcz1bXSBhZGRycz1bMi4zLjQuNV19Iiwgc3Muc3RyKCkpOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBTZWFyY2hOb0RhdGFUaGVuTm9EYXRhQmFyZSkgeworICAvLyBGaXJzdCB0d28gc2VhcmNoIGRvbWFpbnMgcmVjb2duaXplIHRoZSBuYW1lIGJ1dCBoYXZlIG5vIEEgcmVjb3Jkcy4KKyAgRE5TUGFja2V0IG5vZmlyc3Q7CisgIG5vZmlyc3Quc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LmZpcnN0LmNvbSIsIG5zX3RfYSkpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3LmZpcnN0LmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZub2ZpcnN0KSk7CisgIEROU1BhY2tldCBub3NlY29uZDsKKyAgbm9zZWNvbmQuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnNlY29uZC5vcmciLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5zZWNvbmQub3JnIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vc2Vjb25kKSk7CisgIEROU1BhY2tldCBub3RoaXJkOworICBub3RoaXJkLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy50aGlyZC5nb3YiLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy50aGlyZC5nb3YiLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmbm90aGlyZCkpOworICBETlNQYWNrZXQgbm9iYXJlOworICBub2JhcmUuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3IiwgbnNfdF9hKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3ciLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmbm9iYXJlKSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dyIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgcmVzdWx0LnN0YXR1c18pOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBTZWFyY2hOb0RhdGFUaGVuRmFpbCkgeworICAvLyBGaXJzdCB0d28gc2VhcmNoIGRvbWFpbnMgcmVjb2duaXplIHRoZSBuYW1lIGJ1dCBoYXZlIG5vIEEgcmVjb3Jkcy4KKyAgRE5TUGFja2V0IG5vZmlyc3Q7CisgIG5vZmlyc3Quc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LmZpcnN0LmNvbSIsIG5zX3RfYSkpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3LmZpcnN0LmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZub2ZpcnN0KSk7CisgIEROU1BhY2tldCBub3NlY29uZDsKKyAgbm9zZWNvbmQuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnNlY29uZC5vcmciLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5zZWNvbmQub3JnIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vc2Vjb25kKSk7CisgIEROU1BhY2tldCBub3RoaXJkOworICBub3RoaXJkLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy50aGlyZC5nb3YiLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy50aGlyZC5nb3YiLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmbm90aGlyZCkpOworICBETlNQYWNrZXQgbm9iYXJlOworICBub2JhcmUuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkuc2V0X3Jjb2RlKG5zX3Jfbnhkb21haW4pCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dyIsIG5zX3RfYSkpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3IiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vYmFyZSkpOworCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3ciLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgU2VhcmNoQWxsb2NGYWlsdXJlKSB7CisgIFNlYXJjaFJlc3VsdCByZXN1bHQ7CisgIFNldEFsbG9jRmFpbCgxKTsKKyAgYXJlc19zZWFyY2goY2hhbm5lbF8sICJmdWxseS5xdWFsaWZpZWQuIiwgbnNfY19pbiwgbnNfdF9hLCBTZWFyY2hDYWxsYmFjaywgJnJlc3VsdCk7CisgIC8qIEFscmVhZHkgZG9uZSAqLworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgU2VhcmNoSGlnaE5kb3RzKSB7CisgIEROU1BhY2tldCBub2JhcmU7CisgIG5vYmFyZS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKS5zZXRfcmNvZGUobnNfcl9ueGRvbWFpbikKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiYS5iLmMudy53LnciLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoImEuYi5jLncudy53IiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vYmFyZSkpOworICBETlNQYWNrZXQgeWVzZmlyc3Q7CisgIHllc2ZpcnN0LnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImEuYi5jLncudy53LmZpcnN0LmNvbSIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigiYS5iLmMudy53LncuZmlyc3QuY29tIiwgMHgwMjAwLCB7MiwgMywgNCwgNX0pKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoImEuYi5jLncudy53LmZpcnN0LmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZ5ZXNmaXJzdCkpOworCisgIFNlYXJjaFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfc2VhcmNoKGNoYW5uZWxfLCAiYS5iLmMudy53LnciLCBuc19jX2luLCBuc190X2EsIFNlYXJjaENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCByZXN1bHQuc3RhdHVzXyk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBQYWNrZXRUb1N0cmluZyhyZXN1bHQuZGF0YV8pOworICBFWFBFQ1RfRVEoIlJTUCBRUlkgQUEgTk9FUlJPUiBROnsnYS5iLmMudy53LncuZmlyc3QuY29tJyBJTiBBfSAiCisgICAgICAgICAgICAiQTp7J2EuYi5jLncudy53LmZpcnN0LmNvbScgSU4gQSBUVEw9NTEyIDIuMy40LjV9IiwKKyAgICAgICAgICAgIHNzLnN0cigpKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgVW5zcGVjaWZpZWRGYW1pbHlWNikgeworICBETlNQYWNrZXQgcnNwNjsKKyAgcnNwNi5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FhYWFSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MHgyMSwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAzfSkpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgiZXhhbXBsZS5jb20iLCBuc190X2FhYWEpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmcnNwNikpOworCisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJleGFtcGxlLmNvbS4iLCBBRl9VTlNQRUMsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgLy8gRGVmYXVsdCB0byBJUHY2IHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlLgorICBFWFBFQ1RfRVEoInsnZXhhbXBsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIxMjE6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDMwM119Iiwgc3Muc3RyKCkpOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBVbnNwZWNpZmllZEZhbWlseVY0KSB7CisgIEROU1BhY2tldCByc3A2OworICByc3A2LnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hYWFhKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3A2KSk7CisgIEROU1BhY2tldCByc3A0OworICByc3A0LnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJleGFtcGxlLmNvbSIsIDEwMCwgezIsIDMsIDQsIDV9KSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJleGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3A0KSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgImV4YW1wbGUuY29tLiIsIEFGX1VOU1BFQywgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnZXhhbXBsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjVdfSIsIHNzLnN0cigpKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgVW5zcGVjaWZpZWRGYW1pbHlOb0RhdGEpIHsKKyAgRE5TUGFja2V0IHJzcDY7CisgIHJzcDYuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2FhYWEpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNDbmFtZVJSKCJleGFtcGxlLmNvbSIsIDEwMCwgImVsc2V3aGVyZS5jb20iKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3A2KSk7CisgIEROU1BhY2tldCByc3A0OworICByc3A0LnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJleGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3A0KSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgImV4YW1wbGUuY29tLiIsIEFGX1VOU1BFQywgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnJyBhbGlhc2VzPVtdIGFkZHJzPVtdfSIsIHNzLnN0cigpKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgVW5zcGVjaWZpZWRGYW1pbHlDbmFtZTZBNCkgeworICBETlNQYWNrZXQgcnNwNjsKKyAgcnNwNi5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImV4YW1wbGUuY29tIiwgMTAwLCAiZWxzZXdoZXJlLmNvbSIpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoImV4YW1wbGUuY29tIiwgbnNfdF9hYWFhKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJnJzcDYpKTsKKyAgRE5TUGFja2V0IHJzcDQ7CisgIHJzcDQuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoImV4YW1wbGUuY29tIiwgMTAwLCB7MSwgMiwgMywgNH0pKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoImV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJnJzcDQpKTsKKworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAiZXhhbXBsZS5jb20uIiwgQUZfVU5TUEVDLCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCByZXN1bHQuaG9zdF87CisgIEVYUEVDVF9FUSgieydleGFtcGxlLmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMS4yLjMuNF19Iiwgc3Muc3RyKCkpOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBFeHBsaWNpdElQKSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICIxLjIuMy40IiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsgIC8vIEltbWVkaWF0ZSByZXR1cm4KKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgcmVzdWx0LnN0YXR1c18pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnMS4yLjMuNCcgYWxpYXNlcz1bXSBhZGRycz1bMS4yLjMuNF19Iiwgc3Muc3RyKCkpOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBFeHBsaWNpdElQQWxsb2NGYWlsKSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBTZXRBbGxvY1NpemVGYWlsKHN0cmxlbigiMS4yLjMuNCIpICsgMSk7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgIjEuMi4zLjQiLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOyAgLy8gSW1tZWRpYXRlIHJldHVybgorICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIHJlc3VsdC5zdGF0dXNfKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgU29ydExpc3RWNCkgeworICBETlNQYWNrZXQgcnNwOworICByc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoImV4YW1wbGUuY29tIiwgMTAwLCB7MjIsIDIzLCAyNCwgMjV9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJleGFtcGxlLmNvbSIsIDEwMCwgezEyLCAxMywgMTQsIDE1fSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigiZXhhbXBsZS5jb20iLCAxMDAsIHsyLCAzLCA0LCA1fSkpOworICBPTl9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgiZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmcnNwKSk7CisKKyAgeworICAgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAiMTIuMTMuMC4wLzI1NS4yNTUuMC4wIDEyMzQ6OjU2NzgiKSk7CisgICAgSG9zdFJlc3VsdCByZXN1bHQ7CisgICAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAiZXhhbXBsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgICBQcm9jZXNzKCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgICBzcyA8PCByZXN1bHQuaG9zdF87CisgICAgRVhQRUNUX0VRKCJ7J2V4YW1wbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsxMi4xMy4xNC4xNSwgMjIuMjMuMjQuMjUsIDIuMy40LjVdfSIsIHNzLnN0cigpKTsKKyAgfQorICB7CisgICAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19zZXRfc29ydGxpc3QoY2hhbm5lbF8sICIyLjMuMC4wLzE2IDEzMC4xNDAuMTUwLjE2MC8yNiIpKTsKKyAgICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJleGFtcGxlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICAgIFByb2Nlc3MoKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgICBFWFBFQ1RfRVEoInsnZXhhbXBsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjUsIDIyLjIzLjI0LjI1LCAxMi4xMy4xNC4xNV19Iiwgc3Muc3RyKCkpOworICB9CisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0aW9uczsKKyAgbWVtc2V0KCZvcHRpb25zLCAwLCBzaXplb2Yob3B0aW9ucykpOworICBpbnQgb3B0bWFzayA9IDA7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2F2ZV9vcHRpb25zKGNoYW5uZWxfLCAmb3B0aW9ucywgJm9wdG1hc2spKTsKKyAgRVhQRUNUX1RSVUUoKG9wdG1hc2sgJiBBUkVTX09QVF9TT1JUTElTVCkgPT0gQVJFU19PUFRfU09SVExJU1QpOworICBhcmVzX2Rlc3Ryb3lfb3B0aW9ucygmb3B0aW9ucyk7Cit9CisKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIFNvcnRMaXN0VjYpIHsKKyAgRE5TUGFja2V0IHJzcDsKKyAgcnNwLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hYWFhKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQWFhYVJSKCJleGFtcGxlLmNvbSIsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsweDExLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDJ9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQWFhYVJSKCJleGFtcGxlLmNvbSIsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsweDIxLCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDN9KSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyc3ApKTsKKworICB7CisgICAgYXJlc19zZXRfc29ydGxpc3QoY2hhbm5lbF8sICIxMTExOjovMTYgMi4zLjAuMC8yNTUuMjU1LjAuMCIpOworICAgIEhvc3RSZXN1bHQgcmVzdWx0OworICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgImV4YW1wbGUuY29tLiIsIEFGX0lORVQ2LCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICAgIFByb2Nlc3MoKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgICBFWFBFQ1RfRVEoInsnZXhhbXBsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzExMTE6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDIwMiwgIgorICAgICAgICAgICAgICAiMjEyMTowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMzAzXX0iLCBzcy5zdHIoKSk7CisgIH0KKyAgeworICAgIGFyZXNfc2V0X3NvcnRsaXN0KGNoYW5uZWxfLCAiMjEyMTo6LzgiKTsKKyAgICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJleGFtcGxlLmNvbS4iLCBBRl9JTkVUNiwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgICBQcm9jZXNzKCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgICBzcyA8PCByZXN1bHQuaG9zdF87CisgICAgRVhQRUNUX0VRKCJ7J2V4YW1wbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsyMTIxOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAzMDMsICIKKyAgICAgICAgICAgICAgIjExMTE6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDIwMl19Iiwgc3Muc3RyKCkpOworICB9Cit9CisKKy8vIFJlbGllcyBvbiByZXRyaWVzIHNvIGlzIFVEUC1vbmx5CitURVNUX1AoTW9ja1VEUENoYW5uZWxUZXN0LCBTZWFyY2hEb21haW5zQWxsb2NGYWlsKSB7CisgIEROU1BhY2tldCBub2ZpcnN0OworICBub2ZpcnN0LnNldF9yZXNwb25zZSgpLnNldF9hYSgpLnNldF9yY29kZShuc19yX254ZG9tYWluKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vZmlyc3QpKTsKKyAgRE5TUGFja2V0IG5vc2Vjb25kOworICBub3NlY29uZC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKS5zZXRfcmNvZGUobnNfcl9ueGRvbWFpbikKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnNlY29uZC5vcmciLCBuc190X2EpKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5zZWNvbmQub3JnIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJm5vc2Vjb25kKSk7CisgIEROU1BhY2tldCB5ZXN0aGlyZDsKKyAgeWVzdGhpcmQuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LnRoaXJkLmdvdiIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigid3d3LnRoaXJkLmdvdiIsIDB4MDIwMCwgezIsIDMsIDQsIDV9KSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cudGhpcmQuZ292IiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJnllc3RoaXJkKSk7CisKKyAgLy8gRmFpbCBhIHZhcmlldHkgb2YgZGlmZmVyZW50IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGNvbmZpcm0KKyAgLy8gdGhhdCB0aGUgb3BlcmF0aW9uIGVpdGhlciBmYWlscyB3aXRoIEVOT01FTSBvciBzdWNjZWVkcworICAvLyB3aXRoIHRoZSBleHBlY3RlZCByZXN1bHQuCisgIGNvbnN0IGludCBrQ291bnQgPSAzNDsKKyAgSG9zdFJlc3VsdCByZXN1bHRzW2tDb3VudF07CisgIGZvciAoaW50IGlpID0gMTsgaWkgPD0ga0NvdW50OyBpaSsrKSB7CisgICAgSG9zdFJlc3VsdCogcmVzdWx0ID0gJihyZXN1bHRzW2lpIC0gMV0pOworICAgIENsZWFyRmFpbHMoKTsKKyAgICBTZXRBbGxvY0ZhaWwoaWkpOworICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dyIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgcmVzdWx0KTsKKyAgICBQcm9jZXNzKCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LT5kb25lXyk7CisgICAgaWYgKHJlc3VsdC0+c3RhdHVzXyA9PSBBUkVTX1NVQ0NFU1MpIHsKKyAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgICAgc3MgPDwgcmVzdWx0LT5ob3N0XzsKKyAgICAgIEVYUEVDVF9FUSgieyd3d3cudGhpcmQuZ292JyBhbGlhc2VzPVtdIGFkZHJzPVsyLjMuNC41XX0iLCBzcy5zdHIoKSkgPDwgIiBmYWlsZWQgYWxsb2MgIyIgPDwgaWk7CisgICAgICBpZiAodmVyYm9zZSkgc3RkOjpjZXJyIDw8ICJTdWNjZWVkZWQgZGVzcGl0ZSBmYWlsdXJlIG9mIGFsbG9jICMiIDw8IGlpIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIH0KKworICAvLyBFeHBsaWNpdGx5IGRlc3Ryb3kgdGhlIGNoYW5uZWwgbm93LCBzbyB0aGF0IHRoZSBIb3N0UmVzdWx0IG9iamVjdHMKKyAgLy8gYXJlIHN0aWxsIHZhbGlkIChpbiBjYXNlIGFueSBwZW5kaW5nIHdvcmsgcmVmZXJzIHRvIHRoZW0pLgorICBhcmVzX2Rlc3Ryb3koY2hhbm5lbF8pOworICBjaGFubmVsXyA9IG51bGxwdHI7Cit9CisKKy8vIFJlbGllcyBvbiByZXRyaWVzIHNvIGlzIFVEUC1vbmx5CitURVNUX1AoTW9ja1VEUENoYW5uZWxUZXN0LCBSZXNlbmQpIHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gbm90aGluZzsKKyAgRE5TUGFja2V0IHJlcGx5OworICByZXBseS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigid3d3Lmdvb2dsZS5jb20iLCAweDAxMDAsIHsweDAxLCAweDAyLCAweDAzLCAweDA0fSkpOworCisgIEVYUEVDVF9DQUxMKHNlcnZlcl8sIE9uUmVxdWVzdCgid3d3Lmdvb2dsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseURhdGEoJnNlcnZlcl8sIG5vdGhpbmcpKQorICAgIC5XaWxsT25jZShTZXRSZXBseURhdGEoJnNlcnZlcl8sIG5vdGhpbmcpKQorICAgIC5XaWxsT25jZShTZXRSZXBseSgmc2VydmVyXywgJnJlcGx5KSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dy5nb29nbGUuY29tLiIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgRVhQRUNUX0VRKDIsIHJlc3VsdC50aW1lb3V0c18pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnd3d3Lmdvb2dsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzEuMi4zLjRdfSIsIHNzLnN0cigpKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgQ2FuY2VsSW1tZWRpYXRlKSB7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZ29vZ2xlLmNvbS4iLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBhcmVzX2NhbmNlbChjaGFubmVsXyk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VDQU5DRUxMRUQsIHJlc3VsdC5zdGF0dXNfKTsKKyAgRVhQRUNUX0VRKDAsIHJlc3VsdC50aW1lb3V0c18pOworfQorCisvLyBSZWxpZXMgb24gcmV0cmllcyBzbyBpcyBVRFAtb25seQorVEVTVF9QKE1vY2tVRFBDaGFubmVsVGVzdCwgQ2FuY2VsTGF0ZXIpIHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gbm90aGluZzsKKworICAvLyBPbiBzZWNvbmQgcmVxdWVzdCwgY2FuY2VsIHRoZSBjaGFubmVsLgorICBFWFBFQ1RfQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbE9uY2UoU2V0UmVwbHlEYXRhKCZzZXJ2ZXJfLCBub3RoaW5nKSkKKyAgICAuV2lsbE9uY2UoQ2FuY2VsQ2hhbm5lbCgmc2VydmVyXywgY2hhbm5lbF8pKTsKKworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBFWFBFQ1RfRVEoQVJFU19FQ0FOQ0VMTEVELCByZXN1bHQuc3RhdHVzXyk7CisgIEVYUEVDVF9FUSgwLCByZXN1bHQudGltZW91dHNfKTsKK30KKworVEVTVF9QKE1vY2tDaGFubmVsVGVzdCwgR2V0SG9zdEJ5TmFtZURlc3Ryb3lBYnNvbHV0ZSkgeworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3Lmdvb2dsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbF8pOworICBjaGFubmVsXyA9IG51bGxwdHI7CisKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsgIC8vIFN5bmNocm9ub3VzCisgIEVYUEVDVF9FUShBUkVTX0VERVNUUlVDVElPTiwgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoMCwgcmVzdWx0LnRpbWVvdXRzXyk7Cit9CisKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIEdldEhvc3RCeU5hbWVEZXN0cm95UmVsYXRpdmUpIHsKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dyIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisKKyAgYXJlc19kZXN0cm95KGNoYW5uZWxfKTsKKyAgY2hhbm5lbF8gPSBudWxscHRyOworCisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7ICAvLyBTeW5jaHJvbm91cworICBFWFBFQ1RfRVEoQVJFU19FREVTVFJVQ1RJT04sIHJlc3VsdC5zdGF0dXNfKTsKKyAgRVhQRUNUX0VRKDAsIHJlc3VsdC50aW1lb3V0c18pOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBHZXRIb3N0QnlBZGRyRGVzdHJveSkgeworICB1bnNpZ25lZCBjaGFyIGdkbnNfYWRkcjRbNF0gPSB7MHgwOCwgMHgwOCwgMHgwOCwgMHgwOH07CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieWFkZHIoY2hhbm5lbF8sIGdkbnNfYWRkcjQsIHNpemVvZihnZG5zX2FkZHI0KSwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKworICBhcmVzX2Rlc3Ryb3koY2hhbm5lbF8pOworICBjaGFubmVsXyA9IG51bGxwdHI7CisKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsgIC8vIFN5bmNocm9ub3VzCisgIEVYUEVDVF9FUShBUkVTX0VERVNUUlVDVElPTiwgcmVzdWx0LnN0YXR1c18pOworICBFWFBFQ1RfRVEoMCwgcmVzdWx0LnRpbWVvdXRzXyk7Cit9CisKKyNpZm5kZWYgV0lOMzIKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIEhvc3RBbGlhcykgeworICBETlNQYWNrZXQgcmVwbHk7CisgIHJlcGx5LnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5nb29nbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3cuZ29vZ2xlLmNvbSIsIDB4MDEwMCwgezB4MDEsIDB4MDIsIDB4MDMsIDB4MDR9KSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZ29vZ2xlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxCeURlZmF1bHQoU2V0UmVwbHkoJnNlcnZlcl8sICZyZXBseSkpOworCisgIFRlbXBGaWxlIGFsaWFzZXMoIlxuXG4jIHd3dyBjb21tZW50ZWRvdXRcbnd3dyB3d3cuZ29vZ2xlLmNvbVxuIik7CisgIEVudlZhbHVlIHdpdGhfZW52KCJIT1NUQUxJQVNFUyIsIGFsaWFzZXMuZmlsZW5hbWUoKSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dyIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIFByb2Nlc3MoKTsKKyAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IHJlc3VsdC5ob3N0XzsKKyAgRVhQRUNUX0VRKCJ7J3d3dy5nb29nbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsxLjIuMy40XX0iLCBzcy5zdHIoKSk7Cit9CisKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIEhvc3RBbGlhc01pc3NpbmcpIHsKKyAgRE5TUGFja2V0IHllc2ZpcnN0OworICB5ZXNmaXJzdC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJ3d3cuZmlyc3QuY29tIiwgMHgwMjAwLCB7MiwgMywgNCwgNX0pKTsKKyAgT05fQ0FMTChzZXJ2ZXJfLCBPblJlcXVlc3QoInd3dy5maXJzdC5jb20iLCBuc190X2EpKQorICAgIC5XaWxsQnlEZWZhdWx0KFNldFJlcGx5KCZzZXJ2ZXJfLCAmeWVzZmlyc3QpKTsKKworICBUZW1wRmlsZSBhbGlhc2VzKCJcblxuIyB3d3cgY29tbWVudGVkb3V0XG53dyB3d3cuZ29vZ2xlLmNvbVxuIik7CisgIEVudlZhbHVlIHdpdGhfZW52KCJIT1NUQUxJQVNFUyIsIGFsaWFzZXMuZmlsZW5hbWUoKSk7CisgIEhvc3RSZXN1bHQgcmVzdWx0OworICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3ciLCBBRl9JTkVULCBIb3N0Q2FsbGJhY2ssICZyZXN1bHQpOworICBQcm9jZXNzKCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCByZXN1bHQuaG9zdF87CisgIEVYUEVDVF9FUSgieyd3d3cuZmlyc3QuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsyLjMuNC41XX0iLCBzcy5zdHIoKSk7Cit9CisKK1RFU1RfUChNb2NrQ2hhbm5lbFRlc3QsIEhvc3RBbGlhc01pc3NpbmdGaWxlKSB7CisgIEROU1BhY2tldCB5ZXNmaXJzdDsKKyAgeWVzZmlyc3Quc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigid3d3LmZpcnN0LmNvbSIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigid3d3LmZpcnN0LmNvbSIsIDB4MDIwMCwgezIsIDMsIDQsIDV9KSk7CisgIE9OX0NBTEwoc2VydmVyXywgT25SZXF1ZXN0KCJ3d3cuZmlyc3QuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbEJ5RGVmYXVsdChTZXRSZXBseSgmc2VydmVyXywgJnllc2ZpcnN0KSk7CisKKyAgRW52VmFsdWUgd2l0aF9lbnYoIkhPU1RBTElBU0VTIiwgImJvZ3VzLm1jZmlsZSIpOworICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgYXJlc19nZXRob3N0YnluYW1lKGNoYW5uZWxfLCAid3d3IiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgUHJvY2VzcygpOworICBFWFBFQ1RfVFJVRShyZXN1bHQuZG9uZV8pOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgcmVzdWx0Lmhvc3RfOworICBFWFBFQ1RfRVEoInsnd3d3LmZpcnN0LmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMi4zLjQuNV19Iiwgc3Muc3RyKCkpOworfQorCitURVNUX1AoTW9ja0NoYW5uZWxUZXN0LCBIb3N0QWxpYXNVbnJlYWRhYmxlKSB7CisgIFRlbXBGaWxlIGFsaWFzZXMoInd3dyB3d3cuZ29vZ2xlLmNvbVxuIik7CisgIGNobW9kKGFsaWFzZXMuZmlsZW5hbWUoKSwgMCk7CisgIEVudlZhbHVlIHdpdGhfZW52KCJIT1NUQUxJQVNFUyIsIGFsaWFzZXMuZmlsZW5hbWUoKSk7CisKKyAgSG9zdFJlc3VsdCByZXN1bHQ7CisgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsXywgInd3dyIsIEFGX0lORVQsIEhvc3RDYWxsYmFjaywgJnJlc3VsdCk7CisgIEVYUEVDVF9UUlVFKHJlc3VsdC5kb25lXyk7CisgIEVYUEVDVF9FUShBUkVTX0VGSUxFLCByZXN1bHQuc3RhdHVzXyk7CisgIGNobW9kKGFsaWFzZXMuZmlsZW5hbWUoKSwgMDc3Nyk7Cit9CisjZW5kaWYKKworY2xhc3MgTW9ja011bHRpU2VydmVyQ2hhbm5lbFRlc3QKKyAgOiBwdWJsaWMgTW9ja0NoYW5uZWxPcHRzVGVzdCwKKyAgICBwdWJsaWMgOjp0ZXN0aW5nOjpXaXRoUGFyYW1JbnRlcmZhY2U8IHN0ZDo6cGFpcjxpbnQsIGJvb2w+ID4geworIHB1YmxpYzoKKyAgTW9ja011bHRpU2VydmVyQ2hhbm5lbFRlc3QoYm9vbCByb3RhdGUpCisgICAgOiBNb2NrQ2hhbm5lbE9wdHNUZXN0KDMsIEdldFBhcmFtKCkuZmlyc3QsIEdldFBhcmFtKCkuc2Vjb25kLCBudWxscHRyLCByb3RhdGUgPyBBUkVTX09QVF9ST1RBVEUgOiAwKSB7fQorICB2b2lkIENoZWNrRXhhbXBsZSgpIHsKKyAgICBIb3N0UmVzdWx0IHJlc3VsdDsKKyAgICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbF8sICJ3d3cuZXhhbXBsZS5jb20uIiwgQUZfSU5FVCwgSG9zdENhbGxiYWNrLCAmcmVzdWx0KTsKKyAgICBQcm9jZXNzKCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmRvbmVfKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgICBzcyA8PCByZXN1bHQuaG9zdF87CisgICAgRVhQRUNUX0VRKCJ7J3d3dy5leGFtcGxlLmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMi4zLjQuNV19Iiwgc3Muc3RyKCkpOworICB9Cit9OworCitjbGFzcyBSb3RhdGVNdWx0aU1vY2tUZXN0IDogcHVibGljIE1vY2tNdWx0aVNlcnZlckNoYW5uZWxUZXN0IHsKKyBwdWJsaWM6CisgIFJvdGF0ZU11bHRpTW9ja1Rlc3QoKSA6IE1vY2tNdWx0aVNlcnZlckNoYW5uZWxUZXN0KHRydWUpIHt9Cit9OworCitjbGFzcyBOb1JvdGF0ZU11bHRpTW9ja1Rlc3QgOiBwdWJsaWMgTW9ja011bHRpU2VydmVyQ2hhbm5lbFRlc3QgeworIHB1YmxpYzoKKyAgTm9Sb3RhdGVNdWx0aU1vY2tUZXN0KCkgOiBNb2NrTXVsdGlTZXJ2ZXJDaGFubmVsVGVzdChmYWxzZSkge30KK307CisKKworVEVTVF9QKFJvdGF0ZU11bHRpTW9ja1Rlc3QsIFRoaXJkU2VydmVyKSB7CisgIEROU1BhY2tldCBzZXJ2ZmFpbHJzcDsKKyAgc2VydmZhaWxyc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkuc2V0X3Jjb2RlKG5zX3Jfc2VydmZhaWwpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpOworICBETlNQYWNrZXQgbm90aW1wbHJzcDsKKyAgbm90aW1wbHJzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKS5zZXRfcmNvZGUobnNfcl9ub3RpbXBsKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKTsKKyAgRE5TUGFja2V0IG9rcnNwOworICBva3JzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoInd3dy5leGFtcGxlLmNvbSIsIDEwMCwgezIsMyw0LDV9KSk7CisKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzBdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzBdLmdldCgpLCAmc2VydmZhaWxyc3ApKTsKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzFdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzFdLmdldCgpLCAmbm90aW1wbHJzcCkpOworICBFWFBFQ1RfQ0FMTCgqc2VydmVyc19bMl0sIE9uUmVxdWVzdCgid3d3LmV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbE9uY2UoU2V0UmVwbHkoc2VydmVyc19bMl0uZ2V0KCksICZva3JzcCkpOworICBDaGVja0V4YW1wbGUoKTsKKworICAvLyBTZWNvbmQgdGltZSBhcm91bmQsIHN0YXJ0cyBmcm9tIHNlcnZlciBbMV0uCisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1sxXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1sxXS5nZXQoKSwgJnNlcnZmYWlscnNwKSk7CisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1syXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1syXS5nZXQoKSwgJm5vdGltcGxyc3ApKTsKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzBdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzBdLmdldCgpLCAmb2tyc3ApKTsKKyAgQ2hlY2tFeGFtcGxlKCk7CisKKyAgLy8gVGhpcmQgdGltZSBhcm91bmQsIHN0YXJ0cyBmcm9tIHNlcnZlciBbMl0uCisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1syXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1syXS5nZXQoKSwgJnNlcnZmYWlscnNwKSk7CisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1swXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1swXS5nZXQoKSwgJm5vdGltcGxyc3ApKTsKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzFdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzFdLmdldCgpLCAmb2tyc3ApKTsKKyAgQ2hlY2tFeGFtcGxlKCk7Cit9CisKK1RFU1RfUChOb1JvdGF0ZU11bHRpTW9ja1Rlc3QsIFRoaXJkU2VydmVyKSB7CisgIEROU1BhY2tldCBzZXJ2ZmFpbHJzcDsKKyAgc2VydmZhaWxyc3Auc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkuc2V0X3Jjb2RlKG5zX3Jfc2VydmZhaWwpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpOworICBETlNQYWNrZXQgbm90aW1wbHJzcDsKKyAgbm90aW1wbHJzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKS5zZXRfcmNvZGUobnNfcl9ub3RpbXBsKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKTsKKyAgRE5TUGFja2V0IG9rcnNwOworICBva3JzcC5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoInd3dy5leGFtcGxlLmNvbSIsIDEwMCwgezIsMyw0LDV9KSk7CisKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzBdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzBdLmdldCgpLCAmc2VydmZhaWxyc3ApKTsKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzFdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzFdLmdldCgpLCAmbm90aW1wbHJzcCkpOworICBFWFBFQ1RfQ0FMTCgqc2VydmVyc19bMl0sIE9uUmVxdWVzdCgid3d3LmV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuV2lsbE9uY2UoU2V0UmVwbHkoc2VydmVyc19bMl0uZ2V0KCksICZva3JzcCkpOworICBDaGVja0V4YW1wbGUoKTsKKworICAvLyBTZWNvbmQgdGltZSBhcm91bmQsIHN0aWxsIHN0YXJ0cyBmcm9tIHNlcnZlciBbMF0uCisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1swXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1swXS5nZXQoKSwgJnNlcnZmYWlscnNwKSk7CisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1sxXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1sxXS5nZXQoKSwgJm5vdGltcGxyc3ApKTsKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzJdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzJdLmdldCgpLCAmb2tyc3ApKTsKKyAgQ2hlY2tFeGFtcGxlKCk7CisKKyAgLy8gVGhpcmQgdGltZSBhcm91bmQsIHN0aWxsIHN0YXJ0cyBmcm9tIHNlcnZlciBbMF0uCisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1swXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1swXS5nZXQoKSwgJnNlcnZmYWlscnNwKSk7CisgIEVYUEVDVF9DQUxMKCpzZXJ2ZXJzX1sxXSwgT25SZXF1ZXN0KCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2EpKQorICAgIC5XaWxsT25jZShTZXRSZXBseShzZXJ2ZXJzX1sxXS5nZXQoKSwgJm5vdGltcGxyc3ApKTsKKyAgRVhQRUNUX0NBTEwoKnNlcnZlcnNfWzJdLCBPblJlcXVlc3QoInd3dy5leGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLldpbGxPbmNlKFNldFJlcGx5KHNlcnZlcnNfWzJdLmdldCgpLCAmb2tyc3ApKTsKKyAgQ2hlY2tFeGFtcGxlKCk7Cit9CisKKworSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoQWRkcmVzc0ZhbWlsaWVzLCBNb2NrQ2hhbm5lbFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcyhzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQsIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCBmYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCB0cnVlKSkpOworCitJTlNUQU5USUFURV9URVNUX0NBU0VfUChBZGRyZXNzRmFtaWxpZXMsIE1vY2tVRFBDaGFubmVsVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFsdWVzKEFGX0lORVQsIEFGX0lORVQ2KSk7CisKK0lOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKEFkZHJlc3NGYW1pbGllcywgTW9ja1RDUENoYW5uZWxUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgOjp0ZXN0aW5nOjpWYWx1ZXMoQUZfSU5FVCwgQUZfSU5FVDYpKTsKKworSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoQWRkcmVzc0ZhbWlsaWVzLCBNb2NrRXh0cmFPcHRzVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFsdWVzKHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVCwgZmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXI8aW50LCBib29sPihBRl9JTkVULCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVDYsIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVDYsIHRydWUpKSk7CisKK0lOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKEFkZHJlc3NGYW1pbGllcywgTW9ja05vQ2hlY2tSZXNwQ2hhbm5lbFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcyhzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQsIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCBmYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCB0cnVlKSkpOworCitJTlNUQU5USUFURV9URVNUX0NBU0VfUChBZGRyZXNzRmFtaWxpZXMsIE1vY2tFRE5TQ2hhbm5lbFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcyhzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQsIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCBmYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCB0cnVlKSkpOworCitJTlNUQU5USUFURV9URVNUX0NBU0VfUChUcmFuc3BvcnRNb2RlcywgUm90YXRlTXVsdGlNb2NrVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFsdWVzKHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVCwgZmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXI8aW50LCBib29sPihBRl9JTkVULCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVDYsIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVDYsIHRydWUpKSk7CisKK0lOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKFRyYW5zcG9ydE1vZGVzLCBOb1JvdGF0ZU11bHRpTW9ja1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcyhzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQsIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyPGludCwgYm9vbD4oQUZfSU5FVCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCBmYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcjxpbnQsIGJvb2w+KEFGX0lORVQ2LCB0cnVlKSkpOworCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGFyZXMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LW5zLmNjIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtbnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjNDU1MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LW5zLmNjCkBAIC0wLDAgKzEsMTk5IEBACisjaW5jbHVkZSAiYXJlcy10ZXN0LmgiCisKKyNpZmRlZiBIQVZFX0NPTlRBSU5FUgorCisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IENvbnRhaW5lckluZm8geworICBDb250YWluZXJGaWxlc3lzdGVtKiBmc187CisgIHN0ZDo6c3RyaW5nIGhvc3RuYW1lXzsKKyAgc3RkOjpzdHJpbmcgZG9tYWlubmFtZV87CisgIFZvaWRUb0ludEZuIGZuXzsKK307CisKK2ludCBFbnRlckNvbnRhaW5lcih2b2lkICpkYXRhKSB7CisgIENvbnRhaW5lckluZm8gKmNvbnRhaW5lciA9IChDb250YWluZXJJbmZvKilkYXRhOworCisgIGlmICh2ZXJib3NlKSB7CisgICAgc3RkOjpjZXJyIDw8ICJSdW5uaW5nIGZ1bmN0aW9uIGluIGNvbnRhaW5lciB7Y2hyb290PSciCisgICAgICAgICAgICAgIDw8IGNvbnRhaW5lci0+ZnNfLT5yb290KCkgPDwgIicsIGhvc3RuYW1lPSciIDw8IGNvbnRhaW5lci0+aG9zdG5hbWVfCisgICAgICAgICAgICAgIDw8ICInLCBkb21haW5uYW1lPSciIDw8IGNvbnRhaW5lci0+ZG9tYWlubmFtZV8gPDwgIid9IgorICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgIH0KKworICAvLyBFbnN1cmUgd2UgYXJlIGFwcGFyZW50bHkgcm9vdCBiZWZvcmUgY29udGludWluZy4KKyAgaW50IGNvdW50ID0gMTA7CisgIHdoaWxlIChnZXR1aWQoKSAhPSAwICYmIGNvdW50ID4gMCkgeworICAgIHVzbGVlcCgxMDAwMDApOworICAgIGNvdW50LS07CisgIH0KKyAgaWYgKGdldHVpZCgpICE9IDApIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkNoaWxkIGluIHVzZXIgbmFtZXNwYWNlIGhhcyB1aWQgIiA8PCBnZXR1aWQoKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmICghY29udGFpbmVyLT5mc18tPm1vdW50cHQoKS5lbXB0eSgpKSB7CisgICAgLy8gV2Ugd2FudCB0byBiaW5kIG1vdW50IHRoaXMgaW5zaWRlIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgorICAgIHN0ZDo6c3RyaW5nIGlubmVyZGlyID0gY29udGFpbmVyLT5mc18tPnJvb3QoKSArIGNvbnRhaW5lci0+ZnNfLT5tb3VudHB0KCk7CisgICAgaWYgKHZlcmJvc2UpIHN0ZDo6Y2VyciA8PCAiIG1vdW50IC0tYmluZCAiIDw8IGNvbnRhaW5lci0+ZnNfLT5tb3VudHB0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgIiA8PCBpbm5lcmRpciA8PCBzdGQ6OmVuZGw7CisgICAgaW50IHJjID0gbW91bnQoY29udGFpbmVyLT5mc18tPm1vdW50cHQoKS5jX3N0cigpLCBpbm5lcmRpci5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICJub25lIiwgTVNfQklORCwgMCk7CisgICAgaWYgKHJjICE9IDApIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiV2FybmluZzogZmFpbGVkIHRvIGJpbmQgbW91bnQgIiA8PCBjb250YWluZXItPmZzXy0+bW91bnRwdCgpIDw8ICIgYXQgIgorICAgICAgICAgICAgICAgIDw8IGlubmVyZGlyIDw8ICIsIGVycm5vPSIgPDwgZXJybm8gPDwgc3RkOjplbmRsOworICAgIH0KKyAgfQorCisgIC8vIE1vdmUgaW50byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KKyAgaWYgKGNoZGlyKGNvbnRhaW5lci0+ZnNfLT5yb290KCkuY19zdHIoKSkgIT0gMCkgeworICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIGNoZGlyKCciIDw8IGNvbnRhaW5lci0+ZnNfLT5yb290KCkKKyAgICAgICAgICAgICAgPDwgIicpLCBlcnJubz0iIDw8IGVycm5vIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgLy8gQW5kIG1ha2UgaXQgdGhlIG5ldyByb290IGRpcmVjdG9yeTsKKyAgY2hhciBidWZmZXJbUEFUSF9NQVggKyAxXTsKKyAgaWYgKGdldGN3ZChidWZmZXIsIFBBVEhfTUFYKSA9PSBOVUxMKSB7CisgICAgc3RkOjpjZXJyIDw8ICJmYWlsZWQgdG8gcmV0cmlldmUgY3dkLCBlcnJubz0iIDw8IGVycm5vIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgYnVmZmVyW1BBVEhfTUFYXSA9ICdcMCc7CisgIGlmIChjaHJvb3QoYnVmZmVyKSAhPSAwKSB7CisgICAgc3RkOjpjZXJyIDw8ICJjaHJvb3QoJyIgPDwgYnVmZmVyIDw8ICInKSBmYWlsZWQsIGVycm5vPSIgPDwgZXJybm8gPDwgc3RkOjplbmRsOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8vIFNldCBob3N0L2RvbWFpbm5hbWVzIGlmIHNwZWNpZmllZAorICBpZiAoIWNvbnRhaW5lci0+aG9zdG5hbWVfLmVtcHR5KCkpIHsKKyAgICBpZiAoc2V0aG9zdG5hbWUoY29udGFpbmVyLT5ob3N0bmFtZV8uY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLT5ob3N0bmFtZV8uc2l6ZSgpKSAhPSAwKSB7CisgICAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBzZXRob3N0bmFtZSgnIiA8PCBjb250YWluZXItPmhvc3RuYW1lXworICAgICAgICAgICAgICAgIDw8ICInKSwgZXJybm89IiA8PCBlcnJubyA8PCBzdGQ6OmVuZGw7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisgIGlmICghY29udGFpbmVyLT5kb21haW5uYW1lXy5lbXB0eSgpKSB7CisgICAgaWYgKHNldGRvbWFpbm5hbWUoY29udGFpbmVyLT5kb21haW5uYW1lXy5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+ZG9tYWlubmFtZV8uc2l6ZSgpKSAhPSAwKSB7CisgICAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBzZXRkb21haW5uYW1lKCciIDw8IGNvbnRhaW5lci0+ZG9tYWlubmFtZV8KKyAgICAgICAgICAgICAgICA8PCAiJyksIGVycm5vPSIgPDwgZXJybm8gPDwgc3RkOjplbmRsOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgIHJldHVybiBjb250YWluZXItPmZuXygpOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworLy8gUnVuIGEgZnVuY3Rpb24gd2hpbGU6CisvLyAgLSBjaHJvb3QoKWVkIGludG8gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeQorLy8gIC0gaGF2aW5nIGEgc3BlY2lmaWVkIGhvc3RuYW1lL2RvbWFpbm5hbWUKKworaW50IFJ1bkluQ29udGFpbmVyKENvbnRhaW5lckZpbGVzeXN0ZW0qIGZzLCBjb25zdCBzdGQ6OnN0cmluZyYgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbm5hbWUsIFZvaWRUb0ludEZuIGZuKSB7CisgIGNvbnN0IGludCBzdGFja19zaXplID0gMTAyNCAqIDEwMjQ7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IHN0YWNrKHN0YWNrX3NpemUsIDApOworICBDb250YWluZXJJbmZvIGNvbnRhaW5lciA9IHtmcywgaG9zdG5hbWUsIGRvbWFpbm5hbWUsIGZufTsKKworICAvLyBTdGFydCBhIGNoaWxkIHByb2Nlc3MgaW4gYSBuZXcgdXNlciBhbmQgVVRTIG5hbWVzcGFjZQorICBwaWRfdCBjaGlsZCA9IGNsb25lKEVudGVyQ29udGFpbmVyLCBzdGFjay5kYXRhKCkgKyBzdGFja19zaXplLAorICAgICAgICAgICAgICAgICAgICAgIENMT05FX1ZNfENMT05FX05FV05TfENMT05FX05FV1VTRVJ8Q0xPTkVfTkVXVVRTfFNJR0NITEQsCisgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikmY29udGFpbmVyKTsKKyAgaWYgKGNoaWxkIDwgMCkgeworICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIGNsb25lKCksIGVycm5vPSIgPDwgZXJybm8gPDwgc3RkOjplbmRsOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8vIEJ1aWxkIHRoZSBVSUQgbWFwIHRoYXQgbWFrZXMgdXMgbG9vayBsaWtlIHJvb3QgaW5zaWRlIHRoZSBuYW1lc3BhY2UuCisgIHN0ZDo6c3RyaW5nc3RyZWFtIG1hcGZpbGVzczsKKyAgbWFwZmlsZXNzIDw8ICIvcHJvYy8iIDw8IGNoaWxkIDw8ICIvdWlkX21hcCI7CisgIHN0ZDo6c3RyaW5nIG1hcGZpbGUgPSBtYXBmaWxlc3Muc3RyKCk7CisgIGludCBmZCA9IG9wZW4obWFwZmlsZS5jX3N0cigpLCBPX0NSRUFUfE9fV1JPTkxZfE9fVFJVTkMsIDA2NDQpOworICBpZiAoZmQgPCAwKSB7CisgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gY3JlYXRlICciIDw8IG1hcGZpbGUgPDwgIiciIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgc3RkOjpzdHJpbmdzdHJlYW0gY29udGVudHNzOworICBjb250ZW50c3MgPDwgIjAgIiA8PCBnZXR1aWQoKSA8PCAiIDEiIDw8IHN0ZDo6ZW5kbDsKKyAgc3RkOjpzdHJpbmcgY29udGVudCA9IGNvbnRlbnRzcy5zdHIoKTsKKyAgaW50IHJjID0gd3JpdGUoZmQsIGNvbnRlbnQuY19zdHIoKSwgY29udGVudC5zaXplKCkpOworICBpZiAocmMgIT0gKGludCljb250ZW50LnNpemUoKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIHdyaXRlIHVpZCBtYXAgdG8gJyIgPDwgbWFwZmlsZSA8PCAiJyIgPDwgc3RkOjplbmRsOworICB9CisgIGNsb3NlKGZkKTsKKworICAvLyBXYWl0IGZvciB0aGUgY2hpbGQgcHJvY2VzcyBhbmQgcmV0cmlldmUgaXRzIHN0YXR1cy4KKyAgaW50IHN0YXR1czsKKyAgd2FpdHBpZChjaGlsZCwgJnN0YXR1cywgMCk7CisgIGlmIChyYyA8PSAwKSB7CisgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gd2FpdHBpZCgiIDw8IGNoaWxkIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmICghV0lGRVhJVEVEKHN0YXR1cykpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkNoaWxkICIgPDwgY2hpbGQgPDwgIiBkaWQgbm90IGV4aXQgbm9ybWFsbHkiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuIHN0YXR1czsKK30KKworQ29udGFpbmVyRmlsZXN5c3RlbTo6Q29udGFpbmVyRmlsZXN5c3RlbShOYW1lQ29udGVudExpc3QgZmlsZXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtb3VudHB0KSB7CisgIHJvb3RkaXJfID0gVGVtcE5hbShudWxscHRyLCAiYXJlcy1jaHJvb3QiKTsKKyAgbWtkaXIocm9vdGRpcl8uY19zdHIoKSwgMDc1NSk7CisgIGRpcnNfLnB1c2hfZnJvbnQocm9vdGRpcl8pOworICBmb3IgKGNvbnN0IGF1dG8mIG5jIDogZmlsZXMpIHsKKyAgICBzdGQ6OnN0cmluZyBmdWxscGF0aCA9IHJvb3RkaXJfICsgbmMuZmlyc3Q7CisgICAgaW50IGlkeCA9IGZ1bGxwYXRoLnJmaW5kKCcvJyk7CisgICAgc3RkOjpzdHJpbmcgZGlyID0gZnVsbHBhdGguc3Vic3RyKDAsIGlkeCk7CisgICAgRW5zdXJlRGlyRXhpc3RzKGRpcik7CisgICAgZmlsZXNfLnB1c2hfYmFjayhzdGQ6OnVuaXF1ZV9wdHI8VHJhbnNpZW50RmlsZT4oCisgICAgICAgIG5ldyBUcmFuc2llbnRGaWxlKGZ1bGxwYXRoLCBuYy5zZWNvbmQpKSk7CisgIH0KKyAgaWYgKCFtb3VudHB0LmVtcHR5KCkpIHsKKyAgICBjaGFyIGJ1ZmZlcltQQVRIX01BWCArIDFdOworICAgIGlmIChyZWFscGF0aChtb3VudHB0LmNfc3RyKCksIGJ1ZmZlcikpIHsKKyAgICAgIG1vdW50cHRfID0gYnVmZmVyOworICAgICAgc3RkOjpzdHJpbmcgZnVsbHBhdGggPSByb290ZGlyXyArIG1vdW50cHRfOworICAgICAgRW5zdXJlRGlyRXhpc3RzKGZ1bGxwYXRoKTsKKyAgICB9CisgIH0KK30KKworQ29udGFpbmVyRmlsZXN5c3RlbTo6fkNvbnRhaW5lckZpbGVzeXN0ZW0oKSB7CisgIGZpbGVzXy5jbGVhcigpOworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIgOiBkaXJzXykgeworICAgIHJtZGlyKGRpci5jX3N0cigpKTsKKyAgfQorfQorCit2b2lkIENvbnRhaW5lckZpbGVzeXN0ZW06OkVuc3VyZURpckV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZGlyKSB7CisgIGlmIChzdGQ6OmZpbmQoZGlyc18uYmVnaW4oKSwgZGlyc18uZW5kKCksIGRpcikgIT0gZGlyc18uZW5kKCkpIHsKKyAgICByZXR1cm47CisgIH0KKyAgc2l6ZV90IGlkeCA9IGRpci5yZmluZCgnLycpOworICBpZiAoaWR4ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgc3RkOjpzdHJpbmcgcHJldmRpciA9IGRpci5zdWJzdHIoMCwgaWR4KTsKKyAgICBFbnN1cmVEaXJFeGlzdHMocHJldmRpcik7CisgIH0KKyAgLy8gRW5zdXJlIHRoaXMgZGlyZWN0b3J5IGlzIGluIHRoZSBsaXN0IGJlZm9yZSBpdHMgYW5jZXN0b3JzLgorICBta2RpcihkaXIuY19zdHIoKSwgMDc1NSk7CisgIGRpcnNfLnB1c2hfZnJvbnQoZGlyKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtcGFyc2UtYS5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLWEuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkOTU5MQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLWEuY2MKQEAgLTAsMCArMSwzNjIgQEAKKyNpbmNsdWRlICJhcmVzLXRlc3QuaCIKKyNpbmNsdWRlICJkbnMtcHJvdG8uaCIKKworI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgYXJlcyB7CituYW1lc3BhY2UgdGVzdCB7CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VBUmVwbHlPSykgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJleGFtcGxlLmNvbSIsIDB4MDEwMjAzMDQsIHsyLDMsNCw1fSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBxaWQKKyAgICAweDg0LCAvLyByZXNwb25zZSArIHF1ZXJ5ICsgQUEgKyBub3QtVEMgKyBub3QtUkQKKyAgICAweDAwLCAvLyBub3QtUkEgKyBub3QtWiArIG5vdC1BRCArIG5vdC1DRCArIHJjPU5vRXJyb3IKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIHF1ZXN0aW9ucworICAgIDB4MDAsIDB4MDEsICAvLyBudW0gYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYWRkaXRpb25hbCBSUnMKKyAgICAvLyBRdWVzdGlvbgorICAgIDB4MDcsICdlJywgJ3gnLCAnYScsICdtJywgJ3AnLCAnbCcsICdlJywKKyAgICAweDAzLCAnYycsICdvJywgJ20nLAorICAgIDB4MDAsCisgICAgMHgwMCwgMHgwMSwgIC8vIHR5cGUgQQorICAgIDB4MDAsIDB4MDEsICAvLyBjbGFzcyBJTgorICAgIC8vIEFuc3dlciAxCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDAxLCAgLy8gUlIgdHlwZQorICAgIDB4MDAsIDB4MDEsICAvLyBjbGFzcyBJTgorICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIC8vIFRUTAorICAgIDB4MDAsIDB4MDQsICAvLyByZGF0YSBsZW5ndGgKKyAgICAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICB9OworICBFWFBFQ1RfRVEoZGF0YSwgcGt0LmRhdGEoKSk7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzVdOworICBpbnQgY291bnQgPSA1OworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMSwgY291bnQpOworICBFWFBFQ1RfRVEoMHgwMTAyMDMwNCwgaW5mb1swXS50dGwpOworICB1bnNpZ25lZCBsb25nIGV4cGVjdGVkX2FkZHIgPSBodG9ubCgweDAyMDMwNDA1KTsKKyAgRVhQRUNUX0VRKGV4cGVjdGVkX2FkZHIsIGluZm9bMF0uaXBhZGRyLnNfYWRkcik7CisgIEVYUEVDVF9FUSgiMi4zLjQuNSIsIEFkZHJlc3NUb1N0cmluZygmKGluZm9bMF0uaXBhZGRyKSwgNCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBIb3N0RW50KGhvc3QpOworICBFWFBFQ1RfRVEoInsnZXhhbXBsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjVdfSIsIHNzLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7CisKKyAgLy8gUmVwZWF0IHdpdGhvdXQgcHJvdmlkaW5nIGEgaG9zdGVudAorICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUSgxLCBjb3VudCk7CisgIEVYUEVDVF9FUSgweDAxMDIwMzA0LCBpbmZvWzBdLnR0bCk7CisgIEVYUEVDVF9FUShleHBlY3RlZF9hZGRyLCBpbmZvWzBdLmlwYWRkci5zX2FkZHIpOworICBFWFBFQ1RfRVEoIjIuMy40LjUiLCBBZGRyZXNzVG9TdHJpbmcoJihpbmZvWzBdLmlwYWRkciksIDQpKTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZU1hbGZvcm1lZEFSZXBseSkgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBbMDoyKSBxaWQKKyAgICAweDg0LCAvLyBbMl0gcmVzcG9uc2UgKyBxdWVyeSArIEFBICsgbm90LVRDICsgbm90LVJECisgICAgMHgwMCwgLy8gWzNdIG5vdC1SQSArIG5vdC1aICsgbm90LUFEICsgbm90LUNEICsgcmM9Tm9FcnJvcgorICAgIDB4MDAsIDB4MDEsICAvLyBbNDo2KSBudW0gcXVlc3Rpb25zCisgICAgMHgwMCwgMHgwMSwgIC8vIFs2OjgpIG51bSBhbnN3ZXIgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIFs4OjEwKSBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDAsICAvLyBbMTA6MTIpIG51bSBhZGRpdGlvbmFsIFJScworICAgIC8vIFF1ZXN0aW9uCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLCAvLyBbMTI6MjApCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywgLy8gWzIwLDI0KQorICAgIDB4MDAsIC8vIFsyNF0KKyAgICAweDAwLCAweDAxLCAgLy8gWzI1OjI2KSB0eXBlIEEKKyAgICAweDAwLCAweDAxLCAgLy8gWzI3OjI5KSBjbGFzcyBJTgorICAgIC8vIEFuc3dlciAxCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLCAvLyBbMjk6MzcpCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywgLy8gWzM3OjQxKQorICAgIDB4MDAsIC8vIFs0MV0KKyAgICAweDAwLCAweDAxLCAgLy8gWzQyOjQ0KSBSUiB0eXBlCisgICAgMHgwMCwgMHgwMSwgIC8vIFs0NDo0NikgY2xhc3MgSU4KKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAvLyBbNDY6NTApIFRUTAorICAgIDB4MDAsIDB4MDQsICAvLyBbNTA6NTIpIHJkYXRhIGxlbmd0aAorICAgIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIC8vIFs1Miw1NikKKyAgfTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRydHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisKKyAgLy8gSW52YWxpZCBSUi1sZW4uCisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGludmFsaWRfcnJsZW4oZGF0YSk7CisgIGludmFsaWRfcnJsZW5bNTFdID0gMTgwOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9hX3JlcGx5KGludmFsaWRfcnJsZW4uZGF0YSgpLCBpbnZhbGlkX3JybGVuLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisKKyAgLy8gVHJ1bmNhdGUgbWlkLXF1ZXN0aW9uLgorICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCAyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisKKyAgLy8gVHJ1bmNhdGUgbWlkLWFuc3dlci4KKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgNDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQVJlcGx5Tm9EYXRhKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2EpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzJdOworICBpbnQgY291bnQgPSAyOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMCwgY291bnQpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisKKyAgLy8gQWdhaW4gYnV0IHdpdGggYSBDTkFNRS4KKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImV4YW1wbGUuY29tIiwgMjAwLCAiYy5leGFtcGxlLmNvbSIpKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKDAsIGNvdW50KTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQVJlcGx5VmFyaWFudEEpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoNjM2Nikuc2V0X3JkKCkuc2V0X3JhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigibWl0LmVkdSIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigibWl0LmVkdSIsIDUyLCB7MTgsNywyMiw2OX0pKQorICAgIC5hZGRfYXV0aChuZXcgRE5TTnNSUigibWl0LmVkdSIsIDI5MiwgIlcyME5TLm1pdC5lZHUiKSkKKyAgICAuYWRkX2F1dGgobmV3IEROU05zUlIoIm1pdC5lZHUiLCAyOTIsICJCSVRTWS5taXQuZWR1IikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJtaXQuZWR1IiwgMjkyLCAiU1RSQVdCLm1pdC5lZHUiKSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigiU1RSQVdCLm1pdC5lZHUiLCAyOTIsIHsxOCw3MSwwLDE1MX0pKTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRydHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMSwgY291bnQpOworICBFWFBFQ1RfRVEoIjE4LjcuMjIuNjkiLCBBZGRyZXNzVG9TdHJpbmcoJihpbmZvWzBdLmlwYWRkciksIDQpKTsKKyAgRVhQRUNUX0VRKDUyLCBpbmZvWzBdLnR0bCk7CisgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQVJlcGx5SnVzdENuYW1lKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDYzNjYpLnNldF9yZCgpLnNldF9yYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIm1pdC5lZHUiLCBuc190X2EpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNDbmFtZVJSKCJtaXQuZWR1IiwgNTIsICJvdGhlci5taXQuZWR1IikpOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIHN0cnVjdCBhcmVzX2FkZHJ0dGwgaW5mb1syXTsKKyAgaW50IGNvdW50ID0gMjsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUSgwLCBjb3VudCk7CisgIEFTU0VSVF9ORShudWxscHRyLCBob3N0KTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieydvdGhlci5taXQuZWR1JyBhbGlhc2VzPVttaXQuZWR1XSBhZGRycz1bXX0iLCBzcy5zdHIoKSk7CisgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQVJlcGx5VmFyaWFudENuYW1lKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDYzNjYpLnNldF9yZCgpLnNldF9yYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInF1ZXJ5LmV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigicXVlcnkuZXhhbXBsZS5jb20iLCAyMDAsICJyZWRpcmVjdC5xdWVyeS5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoInJlZGlyZWN0LnF1ZXJ5LmV4YW1wbGUuY29tIiwgMzAwLCB7MTI5LDk3LDEyMywyMn0pKQorICAgIC5hZGRfYXV0aChuZXcgRE5TTnNSUigiZXhhbXBsZS5jb20iLCAyMTgsICJhYS5uczEuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2F1dGgobmV3IEROU05zUlIoImV4YW1wbGUuY29tIiwgMjE4LCAibnMyLmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJleGFtcGxlLmNvbSIsIDIxOCwgIm5zMy5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYXV0aChuZXcgRE5TTnNSUigiZXhhbXBsZS5jb20iLCAyMTgsICJuczQuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigiYWEubnMxLmV4YW1wbGUuY29tIiwgMjE4LCB7MTI5LDk3LDEsMX0pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJuczIuZXhhbXBsZS5jb20iLCAyMTgsIHsxMjksOTcsMSwyfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoIm5zMy5leGFtcGxlLmNvbSIsIDIxOCwgezEyOSw5NywxLDN9KSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigibnM0LmV4YW1wbGUuY29tIiwgMjE4LCB7MTI5LDk3LDEsNH0pKTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRydHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMSwgY291bnQpOworICBFWFBFQ1RfRVEoIjEyOS45Ny4xMjMuMjIiLCBBZGRyZXNzVG9TdHJpbmcoJihpbmZvWzBdLmlwYWRkciksIDQpKTsKKyAgLy8gVFRMIGlzIHJlZHVjZWQgdG8gbWF0Y2ggQ05BTUUncy4KKyAgRVhQRUNUX0VRKDIwMCwgaW5mb1swXS50dGwpOworICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKKworICAvLyBSZXBlYXQgcGFyc2luZyB3aXRob3V0IHBsYWNlcyB0byBwdXQgdGhlIHJlc3VsdHMuCisgIGNvdW50ID0gMDsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIGluZm8sICZjb3VudCkpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQVJlcGx5VmFyaWFudENuYW1lQ2hhaW4pIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoNjM2Nikuc2V0X3JkKCkuc2V0X3JhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiYzEubG9jYWxob3N0IiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigiYzEubG9jYWxob3N0IiwgNjA0ODAwLCAiYzIubG9jYWxob3N0IikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImMyLmxvY2FsaG9zdCIsIDYwNDgwMCwgImMzLmxvY2FsaG9zdCIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNDbmFtZVJSKCJjMy5sb2NhbGhvc3QiLCA2MDQ4MDAsICJjNC5sb2NhbGhvc3QiKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJjNC5sb2NhbGhvc3QiLCA2MDQ4MDAsIHs4LDgsOCw4fSkpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJsb2NhbGhvc3QiLCA2MDQ4MDAsICJsb2NhbGhvc3QiKSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigibG9jYWxob3N0IiwgNjA0ODAwLCB7MTI3LDAsMCwxfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBYWFhUlIoImxvY2FsaG9zdCIsIDYwNDgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsweDdGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDF9KSk7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzJdOworICBpbnQgY291bnQgPSAyOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKDEsIGNvdW50KTsKKyAgRVhQRUNUX0VRKCI4LjguOC44IiwgQWRkcmVzc1RvU3RyaW5nKCYoaW5mb1swXS5pcGFkZHIpLCA0KSk7CisgIEVYUEVDVF9FUSg2MDQ4MDAsIGluZm9bMF0udHRsKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgRElTQUJMRURfUGFyc2VBUmVwbHlWYXJpYW50Q25hbWVMYXN0KSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDYzNjYpLnNldF9yZCgpLnNldF9yYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInF1ZXJ5LmV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJyZWRpcmVjdC5xdWVyeS5leGFtcGxlLmNvbSIsIDMwMCwgezEyOSw5NywxMjMsMjIxfSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigicmVkaXJlY3QucXVlcnkuZXhhbXBsZS5jb20iLCAzMDAsIHsxMjksOTcsMTIzLDIyMn0pKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoInJlZGlyZWN0LnF1ZXJ5LmV4YW1wbGUuY29tIiwgMzAwLCB7MTI5LDk3LDEyMywyMjN9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJyZWRpcmVjdC5xdWVyeS5leGFtcGxlLmNvbSIsIDMwMCwgezEyOSw5NywxMjMsMjI0fSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoInF1ZXJ5LmV4YW1wbGUuY29tIiwgNjAsICJyZWRpcmVjdC5xdWVyeS5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TVHh0UlIoInF1ZXJ5LmV4YW1wbGUuY29tIiwgNjAsIHsidGV4dCByZWNvcmQifSkpOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIHN0cnVjdCBhcmVzX2FkZHJ0dGwgaW5mb1s4XTsKKyAgaW50IGNvdW50ID0gODsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUSg0LCBjb3VudCk7CisgIEVYUEVDVF9FUSgiMTI5Ljk3LjEyMy4yMjEiLCBBZGRyZXNzVG9TdHJpbmcoJihpbmZvWzBdLmlwYWRkciksIDQpKTsKKyAgRVhQRUNUX0VRKCIxMjkuOTcuMTIzLjIyMiIsIEFkZHJlc3NUb1N0cmluZygmKGluZm9bMV0uaXBhZGRyKSwgNCkpOworICBFWFBFQ1RfRVEoIjEyOS45Ny4xMjMuMjIzIiwgQWRkcmVzc1RvU3RyaW5nKCYoaW5mb1syXS5pcGFkZHIpLCA0KSk7CisgIEVYUEVDVF9FUSgiMTI5Ljk3LjEyMy4yMjQiLCBBZGRyZXNzVG9TdHJpbmcoJihpbmZvWzNdLmlwYWRkciksIDQpKTsKKyAgRVhQRUNUX0VRKDMwMCwgaW5mb1swXS50dGwpOworICBFWFBFQ1RfRVEoMzAwLCBpbmZvWzFdLnR0bCk7CisgIEVYUEVDVF9FUSgzMDAsIGluZm9bMl0udHRsKTsKKyAgRVhQRUNUX0VRKDMwMCwgaW5mb1szXS50dGwpOworICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZUFSZXBseUVycm9ycykgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJleGFtcGxlLmNvbSIsIDEwMCwgezB4MDIsIDB4MDMsIDB4MDQsIDB4MDV9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE7CisKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRydHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisKKyAgLy8gTm8gcXVlc3Rpb24uCisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSk7CisKKyAgLy8gUXVlc3Rpb24gIT0gYW5zd2VyCisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJBeGFtcGxlLmNvbSIsIG5zX3RfYSkpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSk7CisKKyNpZmRlZiBESVNBQkxFRAorICAvLyBOb3QgYSByZXNwb25zZS4KKyAgcGt0LnNldF9yZXNwb25zZShmYWxzZSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LnNldF9yZXNwb25zZSh0cnVlKTsKKworICAvLyBCYWQgcmV0dXJuIGNvZGUuCisgIHBrdC5zZXRfcmNvZGUobnNfcl9mb3JtZXJyKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisgIHBrdC5zZXRfcmNvZGUobnNfcl9ub2Vycm9yKTsKKyNlbmRpZgorCisgIC8vIFR3byBxdWVzdGlvbnMKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hKSk7CisKKyAgLy8gV3Jvbmcgc29ydCBvZiBhbnN3ZXIuCisgIHBrdC5hbnN3ZXJzXy5jbGVhcigpOworICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TTXhSUigiZXhhbXBsZS5jb20iLCAxMDAsIDEwMCwgIm14MS5leGFtcGxlLmNvbSIpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoImV4YW1wbGUuY29tIiwgMTAwLCB7MHgwMiwgMHgwMywgMHgwNCwgMHgwNX0pKTsKKworICAvLyBObyBhbnN3ZXIuCisgIHBrdC5hbnN3ZXJzXy5jbGVhcigpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TQVJSKCJleGFtcGxlLmNvbSIsIDEwMCwgezB4MDIsIDB4MDMsIDB4MDQsIDB4MDV9KSk7CisKKyAgLy8gVHJ1bmNhdGVkIHBhY2tldHMuCisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBmb3IgKHNpemVfdCBsZW4gPSAxOyBsZW4gPCBkYXRhLnNpemUoKTsgbGVuKyspIHsKKyAgICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9hX3JlcGx5KGRhdGEuZGF0YSgpLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworICAgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIGluZm8sICZjb3VudCkpOworICB9Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VBUmVwbHlBbGxvY0ZhaWwpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImV4YW1wbGUuY29tIiwgMzAwLCAiYy5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBUlIoImMuZXhhbXBsZS5jb20iLCA1MDAsIHsweDAyLCAweDAzLCAweDA0LCAweDA1fSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIHN0cnVjdCBhcmVzX2FkZHJ0dGwgaW5mb1syXTsKKyAgaW50IGNvdW50ID0gMjsKKworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDg7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpIDw8IGlpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGFyZXMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLWFhYWEuY2MgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1hYWFhLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDQ1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1hYWFhLmNjCkBAIC0wLDAgKzEsMTkxIEBACisjaW5jbHVkZSAiYXJlcy10ZXN0LmgiCisjaW5jbHVkZSAiZG5zLXByb3RvLmgiCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGFyZXMgeworbmFtZXNwYWNlIHRlc3QgeworCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQWFhYVJlcGx5T0spIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FhYWFSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDA0LCAweDA0LCAweDA0LCAweDA0fSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRyNnR0bCBpbmZvWzVdOworICBpbnQgY291bnQgPSA1OworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMSwgY291bnQpOworICBFWFBFQ1RfRVEoMTAwLCBpbmZvWzBdLnR0bCk7CisgIEVYUEVDVF9FUSgweDAxLCBpbmZvWzBdLmlwNmFkZHIuX1M2X3VuLl9TNl91OFswXSk7CisgIEVYUEVDVF9FUSgweDAyLCBpbmZvWzBdLmlwNmFkZHIuX1M2X3VuLl9TNl91OFs0XSk7CisgIEFTU0VSVF9ORShudWxscHRyLCBob3N0KTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieydleGFtcGxlLmNvbScgYWxpYXNlcz1bXSBhZGRycz1bMDEwMTowMTAxOjAyMDI6MDIwMjowMzAzOjAzMDM6MDQwNDowNDA0XX0iLCBzcy5zdHIoKSk7CisgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworCisgIC8vIFJlcGVhdCB3aXRob3V0IHByb3ZpZGluZyBwbGFjZXMgdG8gcHV0IHRoZSByZXN1bHRzCisgIGNvdW50ID0gMDsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9hYWFhX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIGluZm8sICZjb3VudCkpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQWFhYVJlcGx5Q25hbWUpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImV4YW1wbGUuY29tIiwgNTAsICJjLmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FhYWFSUigiYy5leGFtcGxlLmNvbSIsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDR9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIHN0cnVjdCBhcmVzX2FkZHI2dHRsIGluZm9bNV07CisgIGludCBjb3VudCA9IDU7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfYWFhYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUSgxLCBjb3VudCk7CisgIC8vIENOQU1FIFRUTCBvdmVycmlkZXMgQUFBQSBUVEwuCisgIEVYUEVDVF9FUSg1MCwgaW5mb1swXS50dGwpOworICBFWFBFQ1RfRVEoMHgwMSwgaW5mb1swXS5pcDZhZGRyLl9TNl91bi5fUzZfdThbMF0pOworICBFWFBFQ1RfRVEoMHgwMiwgaW5mb1swXS5pcDZhZGRyLl9TNl91bi5fUzZfdThbNF0pOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBIb3N0RW50KGhvc3QpOworICBFWFBFQ1RfRVEoInsnYy5leGFtcGxlLmNvbScgYWxpYXNlcz1bZXhhbXBsZS5jb21dIGFkZHJzPVswMTAxOjAxMDE6MDIwMjowMjAyOjAzMDM6MDMwMzowNDA0OjA0MDRdfSIsIHNzLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7CisKKyAgLy8gUmVwZWF0IHdpdGhvdXQgcHJvdmlkaW5nIGEgaG9zdGVudAorICBjb3VudCA9IDU7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfYWFhYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKDEsIGNvdW50KTsKKyAgRVhQRUNUX0VRKDUwLCBpbmZvWzBdLnR0bCk7CisgIEVYUEVDVF9FUSgweDAxLCBpbmZvWzBdLmlwNmFkZHIuX1M2X3VuLl9TNl91OFswXSk7CisgIEVYUEVDVF9FUSgweDAyLCBpbmZvWzBdLmlwNmFkZHIuX1M2X3VuLl9TNl91OFs0XSk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VBYWFhUmVwbHlOb0RhdGEpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRyNnR0bCBpbmZvWzJdOworICBpbnQgY291bnQgPSAyOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMCwgY291bnQpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisKKyAgLy8gQWdhaW4gYnV0IHdpdGggYSBDTkFNRS4KKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImV4YW1wbGUuY29tIiwgMjAwLCAiYy5leGFtcGxlLmNvbSIpKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9hYWFhX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKDAsIGNvdW50KTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlQWFhYVJlcGx5RXJyb3JzKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2FhYWEpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNBYWFhUlIoImV4YW1wbGUuY29tIiwgMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNH0pKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTsKKworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIHN0cnVjdCBhcmVzX2FkZHI2dHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisKKyAgLy8gTm8gcXVlc3Rpb24uCisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9hYWFhX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hYWFhKSk7CisKKyAgLy8gUXVlc3Rpb24gIT0gYW5zd2VyCisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJBeGFtcGxlLmNvbSIsIG5zX3RfYWFhYSkpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9hYWFhX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2FhYWEpKTsKKworICAvLyBUd28gcXVlc3Rpb25zLgorICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2FhYWEpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X2FhYWEpKTsKKworICAvLyBXcm9uZyBzb3J0IG9mIGFuc3dlci4KKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNNeFJSKCJleGFtcGxlLmNvbSIsIDEwMCwgMTAwLCAibXgxLmV4YW1wbGUuY29tIikpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9hYWFhX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworICBwa3QuYW5zd2Vyc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU0FhYWFSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDA0LCAweDA0LCAweDA0LCAweDA0fSkpOworCisgIC8vIE5vIGFuc3dlci4KKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNBYWFhUlIoImV4YW1wbGUuY29tIiwgMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNH0pKTsKKworICAvLyBUcnVuY2F0ZWQgcGFja2V0cy4KKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIGZvciAoc2l6ZV90IGxlbiA9IDE7IGxlbiA8IGRhdGEuc2l6ZSgpOyBsZW4rKykgeworICAgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkoZGF0YS5kYXRhKCksIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisgICAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfYWFhYV9yZXBseShkYXRhLmRhdGEoKSwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgaW5mbywgJmNvdW50KSk7CisgIH0KK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZUFhYWFSZXBseUFsbG9jRmFpbCkgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9hYWFhKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigiZXhhbXBsZS5jb20iLCAzMDAsICJjLmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FhYWFSUigiYy5leGFtcGxlLmNvbSIsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDR9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIHN0cnVjdCBhcmVzX2FkZHI2dHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisKKyAgZm9yIChpbnQgaWkgPSAxOyBpaSA8PSA4OyBpaSsrKSB7CisgICAgQ2xlYXJGYWlscygpOworICAgIFNldEFsbG9jRmFpbChpaSk7CisgICAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LCBpbmZvLCAmY291bnQpKSA8PCBpaTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1teC5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLW14LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzI0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1teC5jYwpAQCAtMCwwICsxLDE0MSBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZU14UmVwbHlPSykgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9teCkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU014UlIoImV4YW1wbGUuY29tIiwgMTAwLCAxMDAsICJteDEuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTXhSUigiZXhhbXBsZS5jb20iLCAxMDAsIDIwMCwgIm14Mi5leGFtcGxlLmNvbSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisKKyAgc3RydWN0IGFyZXNfbXhfcmVwbHkqIG14ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9teF9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZteCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgbXgpOworICBFWFBFQ1RfRVEoIm14MS5leGFtcGxlLmNvbSIsIHN0ZDo6c3RyaW5nKG14LT5ob3N0KSk7CisgIEVYUEVDVF9FUSgxMDAsIG14LT5wcmlvcml0eSk7CisKKyAgc3RydWN0IGFyZXNfbXhfcmVwbHkqIG14MiA9IG14LT5uZXh0OworICBBU1NFUlRfTkUobnVsbHB0ciwgbXgyKTsKKyAgRVhQRUNUX0VRKCJteDIuZXhhbXBsZS5jb20iLCBzdGQ6OnN0cmluZyhteDItPmhvc3QpKTsKKyAgRVhQRUNUX0VRKDIwMCwgbXgyLT5wcmlvcml0eSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBteDItPm5leHQpOworCisgIGFyZXNfZnJlZV9kYXRhKG14KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZU14UmVwbHlNYWxmb3JtZWQpIHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHsKKyAgICAweDEyLCAweDM0LCAgLy8gcWlkCisgICAgMHg4NCwgLy8gcmVzcG9uc2UgKyBxdWVyeSArIEFBICsgbm90LVRDICsgbm90LVJECisgICAgMHgwMCwgLy8gbm90LVJBICsgbm90LVogKyBub3QtQUQgKyBub3QtQ0QgKyByYz1Ob0Vycm9yCisgICAgMHgwMCwgMHgwMSwgIC8vIG51bSBxdWVzdGlvbnMKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIGFuc3dlciBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIGF1dGhvcml0eSBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIGFkZGl0aW9uYWwgUlJzCisgICAgLy8gUXVlc3Rpb24KKyAgICAweDA3LCAnZScsICd4JywgJ2EnLCAnbScsICdwJywgJ2wnLCAnZScsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MEYsICAvLyB0eXBlIE1YCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gQW5zd2VyIDEKKyAgICAweDA3LCAnZScsICd4JywgJ2EnLCAnbScsICdwJywgJ2wnLCAnZScsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MEYsICAvLyBSUiB0eXBlCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgLy8gVFRMCisgICAgMHgwMCwgMHgwMSwgIC8vIHJkYXRhIGxlbmd0aCAtLSB0b28gc2hvcnQKKyAgICAweDAyLAorICB9OworCisgIHN0cnVjdCBhcmVzX214X3JlcGx5KiBteCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX214X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm14KSk7CisgIEFTU0VSVF9FUShudWxscHRyLCBteCk7Cit9CisKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZU14UmVwbHlFcnJvcnMpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNNeFJSKCJleGFtcGxlLmNvbSIsIDEwMCwgMTAwLCAibXgxLmV4YW1wbGUuY29tIikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhOworICBzdHJ1Y3QgYXJlc19teF9yZXBseSogbXggPSBudWxscHRyOworCisgIC8vIE5vIHF1ZXN0aW9uLgorICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfbXhfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmbXgpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIG14KTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9teCkpOworCisjaWZkZWYgRElTQUJMRUQKKyAgLy8gUXVlc3Rpb24gIT0gYW5zd2VyCisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJBeGFtcGxlLmNvbSIsIG5zX3RfbXgpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX214X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm14KSk7CisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKTsKKyNlbmRpZgorCisgIC8vIFR3byBxdWVzdGlvbnMuCisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX214X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm14KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBteCk7CisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKTsKKworICAvLyBXcm9uZyBzb3J0IG9mIGFuc3dlci4KKyAgLy8gVE9ETyhkcnlzZGFsZSk6IGNoZWNrIGlmIHRoaXMgc2hvdWxkIGJlIEFSRVNfRU5PREFUQT8KKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigiZXhhbXBsZS5hYmMuZGVmLmNvbSIsIDE4MCwgMCwgMTAsIDgxNjAsICJleGFtcGxlLmFiYy5kZWYuY29tIikpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9teF9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZteCkpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgbXgpOworICBwa3QuYW5zd2Vyc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU014UlIoImV4YW1wbGUuY29tIiwgMTAwLCAxMDAsICJteDEuZXhhbXBsZS5jb20iKSk7CisKKyAgLy8gTm8gYW5zd2VyLgorICBwa3QuYW5zd2Vyc18uY2xlYXIoKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfcGFyc2VfbXhfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmbXgpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIG14KTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU014UlIoImV4YW1wbGUuY29tIiwgMTAwLCAxMDAsICJteDEuZXhhbXBsZS5jb20iKSk7CisKKyAgLy8gVHJ1bmNhdGVkIHBhY2tldHMuCisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBmb3IgKHNpemVfdCBsZW4gPSAxOyBsZW4gPCBkYXRhLnNpemUoKTsgbGVuKyspIHsKKyAgICBpbnQgcmMgPSBhcmVzX3BhcnNlX214X3JlcGx5KGRhdGEuZGF0YSgpLCBsZW4sICZteCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIG14KTsKKyAgICBFWFBFQ1RfVFJVRShyYyA9PSBBUkVTX0VCQURSRVNQIHx8IHJjID09IEFSRVNfRUJBRE5BTUUpOworICB9Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VNeFJlcGx5QWxsb2NGYWlsKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X214KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigiZXhhbXBsZS5jb20iLCAzMDAsICJjLmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU014UlIoImMuZXhhbXBsZS5jb20iLCAxMDAsIDEwMCwgIm14MS5leGFtcGxlLmNvbSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisgIHN0cnVjdCBhcmVzX214X3JlcGx5KiBteCA9IG51bGxwdHI7CisKKyAgZm9yIChpbnQgaWkgPSAxOyBpaSA8PSA1OyBpaSsrKSB7CisgICAgQ2xlYXJGYWlscygpOworICAgIFNldEFsbG9jRmFpbChpaSk7CisgICAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBhcmVzX3BhcnNlX214X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm14KSkgPDwgaWk7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1uYXB0ci5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLW5hcHRyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDEzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1uYXB0ci5jYwpAQCAtMCwwICsxLDExOSBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZU5hcHRyUmVwbHlPSykgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9uYXB0cikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU05hcHRyUlIoImV4YW1wbGUuY29tIiwgMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCAyMCwgIlNQIiwgInNlcnZpY2UiLCAicmVnZXhwIiwgInJlcGxhY2UiKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTmFwdHJSUigiZXhhbXBsZS5jb20iLCAweDAwMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEsIDIxLCAiU1AiLCAic2VydmljZTIiLCAicmVnZXhwMiIsICJyZXBsYWNlMiIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisKKyAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkqIG5hcHRyID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9uYXB0cl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZuYXB0cikpOworICBBU1NFUlRfTkUobnVsbHB0ciwgbmFwdHIpOworICBFWFBFQ1RfRVEoIlNQIiwgc3RkOjpzdHJpbmcoKGNoYXIqKW5hcHRyLT5mbGFncykpOworICBFWFBFQ1RfRVEoInNlcnZpY2UiLCBzdGQ6OnN0cmluZygoY2hhciopbmFwdHItPnNlcnZpY2UpKTsKKyAgRVhQRUNUX0VRKCJyZWdleHAiLCBzdGQ6OnN0cmluZygoY2hhciopbmFwdHItPnJlZ2V4cCkpOworICBFWFBFQ1RfRVEoInJlcGxhY2UiLCBzdGQ6OnN0cmluZygoY2hhciopbmFwdHItPnJlcGxhY2VtZW50KSk7CisgIEVYUEVDVF9FUSgxMCwgbmFwdHItPm9yZGVyKTsKKyAgRVhQRUNUX0VRKDIwLCBuYXB0ci0+cHJlZmVyZW5jZSk7CisKKyAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkqIG5hcHRyMiA9IG5hcHRyLT5uZXh0OworICBBU1NFUlRfTkUobnVsbHB0ciwgbmFwdHIyKTsKKyAgRVhQRUNUX0VRKCJTUCIsIHN0ZDo6c3RyaW5nKChjaGFyKiluYXB0cjItPmZsYWdzKSk7CisgIEVYUEVDVF9FUSgic2VydmljZTIiLCBzdGQ6OnN0cmluZygoY2hhciopbmFwdHIyLT5zZXJ2aWNlKSk7CisgIEVYUEVDVF9FUSgicmVnZXhwMiIsIHN0ZDo6c3RyaW5nKChjaGFyKiluYXB0cjItPnJlZ2V4cCkpOworICBFWFBFQ1RfRVEoInJlcGxhY2UyIiwgc3RkOjpzdHJpbmcoKGNoYXIqKW5hcHRyMi0+cmVwbGFjZW1lbnQpKTsKKyAgRVhQRUNUX0VRKDExLCBuYXB0cjItPm9yZGVyKTsKKyAgRVhQRUNUX0VRKDIxLCBuYXB0cjItPnByZWZlcmVuY2UpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgbmFwdHIyLT5uZXh0KTsKKworICBhcmVzX2ZyZWVfZGF0YShuYXB0cik7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VOYXB0clJlcGx5RXJyb3JzKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X25hcHRyKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTmFwdHJSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsIDIwLCAiU1AiLCAic2VydmljZSIsICJyZWdleHAiLCAicmVwbGFjZSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTsKKyAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkqIG5hcHRyID0gbnVsbHB0cjsKKworICAvLyBObyBxdWVzdGlvbi4KKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX25hcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm5hcHRyKSk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbmFwdHIpKTsKKworI2lmZGVmIERJU0FCTEVECisgIC8vIFF1ZXN0aW9uICE9IGFuc3dlcgorICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiQXhhbXBsZS5jb20iLCBuc190X25hcHRyKSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX25hcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm5hcHRyKSk7CisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbmFwdHIpKTsKKyNlbmRpZgorCisgIC8vIFR3byBxdWVzdGlvbnMKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9uYXB0cikpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfbmFwdHJfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmbmFwdHIpKTsKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9uYXB0cikpOworCisgIC8vIFdyb25nIHNvcnQgb2YgYW5zd2VyLgorICBwa3QuYW5zd2Vyc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU014UlIoImV4YW1wbGUuY29tIiwgMTAwLCAxMDAsICJteDEuZXhhbXBsZS5jb20iKSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX25hcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm5hcHRyKSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBuYXB0cik7CisgIHBrdC5hbnN3ZXJzXy5jbGVhcigpOworICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TTmFwdHJSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsIDIwLCAiU1AiLCAic2VydmljZSIsICJyZWdleHAiLCAicmVwbGFjZSIpKTsKKworICAvLyBObyBhbnN3ZXIuCisgIHBrdC5hbnN3ZXJzXy5jbGVhcigpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9uYXB0cl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZuYXB0cikpOworICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TTmFwdHJSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsIDIwLCAiU1AiLCAic2VydmljZSIsICJyZWdleHAiLCAicmVwbGFjZSIpKTsKKworICAvLyBUcnVuY2F0ZWQgcGFja2V0cy4KKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIGZvciAoc2l6ZV90IGxlbiA9IDE7IGxlbiA8IGRhdGEuc2l6ZSgpOyBsZW4rKykgeworICAgIGludCByYyA9IGFyZXNfcGFyc2VfbmFwdHJfcmVwbHkoZGF0YS5kYXRhKCksIGxlbiwgJm5hcHRyKTsKKyAgICBFWFBFQ1RfVFJVRShyYyA9PSBBUkVTX0VCQURSRVNQIHx8IHJjID09IEFSRVNfRUJBRE5BTUUpOworICB9Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VOYXB0clJlcGx5QWxsb2NGYWlsKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X25hcHRyKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTmFwdHJSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsIDIwLCAiU1AiLCAic2VydmljZSIsICJyZWdleHAiLCAicmVwbGFjZSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNOYXB0clJSKCJleGFtcGxlLmNvbSIsIDB4MDAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMSwgMjEsICJTUCIsICJzZXJ2aWNlMiIsICJyZWdleHAyIiwgInJlcGxhY2UyIikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKyAgc3RydWN0IGFyZXNfbmFwdHJfcmVwbHkqIG5hcHRyID0gbnVsbHB0cjsKKworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDEzOyBpaSsrKSB7CisgICAgQ2xlYXJGYWlscygpOworICAgIFNldEFsbG9jRmFpbChpaSk7CisgICAgRVhQRUNUX0VRKEFSRVNfRU5PTUVNLCBhcmVzX3BhcnNlX25hcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJm5hcHRyKSk7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1ucy5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLW5zLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjUzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1ucy5jYwpAQCAtMCwwICsxLDExOSBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZU5zUmVwbHlPSykgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9ucykpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU05zUlIoImV4YW1wbGUuY29tIiwgMTAwLCAibnMuZXhhbXBsZS5jb20iKSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworCisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9uc19yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZob3N0KSk7CisgIEFTU0VSVF9ORShudWxscHRyLCBob3N0KTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieydleGFtcGxlLmNvbScgYWxpYXNlcz1bbnMuZXhhbXBsZS5jb21dIGFkZHJzPVtdfSIsIHNzLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VOc1JlcGx5TXVsdGlwbGUpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMTA1MDEpLnNldF9yZXNwb25zZSgpLnNldF9yZCgpLnNldF9yYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImdvb2dsZS5jb20iLCBuc190X25zKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTnNSUigiZ29vZ2xlLmNvbSIsIDU5LCAibnMxLmdvb2dsZS5jb20iKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTnNSUigiZ29vZ2xlLmNvbSIsIDU5LCAibnMyLmdvb2dsZS5jb20iKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTnNSUigiZ29vZ2xlLmNvbSIsIDU5LCAibnMzLmdvb2dsZS5jb20iKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTnNSUigiZ29vZ2xlLmNvbSIsIDU5LCAibnM0Lmdvb2dsZS5jb20iKSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigibnM0Lmdvb2dsZS5jb20iLCAyNDcsIHsyMTYsMjM5LDM4LDEwfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoIm5zMi5nb29nbGUuY29tIiwgMjQ3LCB7MjE2LDIzOSwzNCwxMH0pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJuczEuZ29vZ2xlLmNvbSIsIDI0NywgezIxNiwyMzksMzIsMTB9KSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigibnMzLmdvb2dsZS5jb20iLCAyNDcsIHsyMTYsMjM5LDM2LDEwfSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfbnNfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmaG9zdCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBIb3N0RW50KGhvc3QpOworICBFWFBFQ1RfRVEoInsnZ29vZ2xlLmNvbScgYWxpYXNlcz1bbnMxLmdvb2dsZS5jb20sIG5zMi5nb29nbGUuY29tLCBuczMuZ29vZ2xlLmNvbSwgbnM0Lmdvb2dsZS5jb21dIGFkZHJzPVtdfSIsIHNzLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VOc1JlcGx5RXJyb3JzKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X25zKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTnNSUigiZXhhbXBsZS5jb20iLCAxMDAsICJucy5leGFtcGxlLmNvbSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworCisgIC8vIE5vIHF1ZXN0aW9uLgorICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfbnNfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmaG9zdCkpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X25zKSk7CisKKyNpZmRlZiBESVNBQkxFRAorICAvLyBRdWVzdGlvbiAhPSBhbnN3ZXIKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIkF4YW1wbGUuY29tIiwgbnNfdF9ucykpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9uc19yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZob3N0KSk7CisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbnMpKTsKKyNlbmRpZgorCisgIC8vIFR3byBxdWVzdGlvbnMuCisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbnMpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX25zX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJmhvc3QpKTsKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9ucykpOworCisgIC8vIFdyb25nIHNvcnQgb2YgYW5zd2VyLgorICBwa3QuYW5zd2Vyc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU014UlIoImV4YW1wbGUuY29tIiwgMTAwLCAxMDAsICJteDEuZXhhbXBsZS5jb20iKSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX25zX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJmhvc3QpKTsKKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNOc1JSKCJleGFtcGxlLmNvbSIsIDEwMCwgIm5zLmV4YW1wbGUuY29tIikpOworCisgIC8vIE5vIGFuc3dlci4KKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX25zX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJmhvc3QpKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU05zUlIoImV4YW1wbGUuY29tIiwgMTAwLCAibnMuZXhhbXBsZS5jb20iKSk7CisKKyAgLy8gVHJ1bmNhdGVkIHBhY2tldHMuCisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBmb3IgKHNpemVfdCBsZW4gPSAxOyBsZW4gPCBkYXRhLnNpemUoKTsgbGVuKyspIHsKKyAgICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9uc19yZXBseShkYXRhLmRhdGEoKSwgbGVuLCAmaG9zdCkpOworICB9Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VOc1JlcGx5QWxsb2NGYWlsKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X25zKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigiZXhhbXBsZS5jb20iLCAzMDAsICJjLmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU05zUlIoImMuZXhhbXBsZS5jb20iLCAxMDAsICJucy5leGFtcGxlLmNvbSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDg7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfcGFyc2VfbnNfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmaG9zdCkpIDw8IGlpOworICB9Cit9CisKKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1wdHIuY2MgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1wdHIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2OWIyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLXB0ci5jYwpAQCAtMCwwICsxLDI0OSBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVB0clJlcGx5T0spIHsKKyAgYnl0ZSBhZGRydjRbNF0gPSB7MHgxMCwgMHgyMCwgMHgzMCwgMHg0MH07CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgbnNfdF9wdHIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIuY29tIikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKworICBzdHJ1Y3QgaG9zdGVudCAqaG9zdCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcnY0LCBzaXplb2YoYWRkcnY0KSwgQUZfSU5FVCwgJmhvc3QpKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIGhvc3QpOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgSG9zdEVudChob3N0KTsKKyAgRVhQRUNUX0VRKCJ7J290aGVyLmNvbScgYWxpYXNlcz1bb3RoZXIuY29tXSBhZGRycz1bMTYuMzIuNDguNjRdfSIsIHNzLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VQdHJSZXBseUNuYW1lKSB7CisgIGJ5dGUgYWRkcnY0WzRdID0gezB4MTAsIDB4MjAsIDB4MzAsIDB4NDB9OworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIjY0LjQ4LjMyLjE2LmluLWFkZHIuYXJwYSIsIG5zX3RfcHRyKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgNTAsICI2NC40OC4zMi44LmluLWFkZHIuYXJwYSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuOC5pbi1hZGRyLmFycGEiLCAxMDAsICJvdGhlci5jb20iKSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworCisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9wdHJfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRydjQsIHNpemVvZihhZGRydjQpLCBBRl9JTkVULCAmaG9zdCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBIb3N0RW50KGhvc3QpOworICBFWFBFQ1RfRVEoInsnb3RoZXIuY29tJyBhbGlhc2VzPVtvdGhlci5jb21dIGFkZHJzPVsxNi4zMi40OC42NF19Iiwgc3Muc3RyKCkpOworICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKK30KKworCitzdHJ1Y3QgRE5TTWFsZm9ybWVkQ25hbWVSUiA6IHB1YmxpYyBETlNDbmFtZVJSIHsKKyAgRE5TTWFsZm9ybWVkQ25hbWVSUihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHR0bCwgY29uc3Qgc3RkOjpzdHJpbmcmIG90aGVyKQorICAgIDogRE5TQ25hbWVSUihuYW1lLCB0dGwsIG90aGVyKSB7fQorICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhKCkgY29uc3QgeworICAgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBETlNSUjo6ZGF0YSgpOworICAgIHN0ZDo6dmVjdG9yPGJ5dGU+IGVuY25hbWUgPSBFbmNvZGVTdHJpbmcob3RoZXJfKTsKKyAgICBlbmNuYW1lWzBdID0gZW5jbmFtZVswXSArIDYzOyAgLy8gaW52YWxpZCBsYWJlbCBsZW5ndGgKKyAgICBpbnQgbGVuID0gZW5jbmFtZS5zaXplKCk7CisgICAgUHVzaEludDE2KCZkYXRhLCBsZW4pOworICAgIGRhdGEuaW5zZXJ0KGRhdGEuZW5kKCksIGVuY25hbWUuYmVnaW4oKSwgZW5jbmFtZS5lbmQoKSk7CisgICAgcmV0dXJuIGRhdGE7CisgIH0KK307CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VQdHJSZXBseU1hbGZvcm1lZENuYW1lKSB7CisgIGJ5dGUgYWRkcnY0WzRdID0gezB4MTAsIDB4MjAsIDB4MzAsIDB4NDB9OworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIjY0LjQ4LjMyLjE2LmluLWFkZHIuYXJwYSIsIG5zX3RfcHRyKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TTWFsZm9ybWVkQ25hbWVSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgNTAsICI2NC40OC4zMi44LmluLWFkZHIuYXJwYSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuOC5pbi1hZGRyLmFycGEiLCAxMDAsICJvdGhlci5jb20iKSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworCisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJ2NCwgc2l6ZW9mKGFkZHJ2NCksIEFGX0lORVQsICZob3N0KSk7CisgIEFTU0VSVF9FUShudWxscHRyLCBob3N0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZU1hbnlQdHJSZXBseSkgeworICBieXRlIGFkZHJ2NFs0XSA9IHsweDEwLCAweDIwLCAweDMwLCAweDQwfTsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCBuc190X3B0cikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1B0clJSKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCAxMDAsICJtYWluLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIxLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIyLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIzLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI0LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI1LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI2LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI3LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI4LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI5LmNvbSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX3B0cl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJ2NCwgc2l6ZW9mKGFkZHJ2NCksIEFGX0lORVQsICZob3N0KSk7CisgIEFTU0VSVF9ORShudWxscHRyLCBob3N0KTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VQdHJSZXBseUFkZGl0aW9uYWwpIHsKKyAgYnl0ZSBhZGRydjRbNF0gPSB7MHgxMCwgMHgyMCwgMHgzMCwgMHg0MH07CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgbnNfdF9wdHIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgNTUsICJvdGhlci5jb20iKSkKKyAgICAuYWRkX2F1dGgobmV3IEROU05zUlIoIjE2LmluLWFkZHIuYXJwYSIsIDIzNCwgIm5zMS5vdGhlci5jb20iKSkKKyAgICAuYWRkX2F1dGgobmV3IEROU05zUlIoIjE2LmluLWFkZHIuYXJwYSIsIDIzNCwgImJiLm5zMi5vdGhlci5jb20iKSkKKyAgICAuYWRkX2F1dGgobmV3IEROU05zUlIoIjE2LmluLWFkZHIuYXJwYSIsIDIzNCwgIm5zMy5vdGhlci5jb20iKSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigibnMxLm90aGVyLmNvbSIsIDIyOSwgezEwLDIwLDMwLDQxfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoImJiLm5zMi5vdGhlci5jb20iLCAyMjksIHsxMCwyMCwzMCw0Mn0pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJuczMub3RoZXIuY29tIiwgMjI5LCB7MTAsMjAsMzAsNDN9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworCisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9wdHJfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRydjQsIHNpemVvZihhZGRydjQpLCBBRl9JTkVULCAmaG9zdCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBIb3N0RW50KGhvc3QpOworICBFWFBFQ1RfRVEoInsnb3RoZXIuY29tJyBhbGlhc2VzPVtvdGhlci5jb21dIGFkZHJzPVsxNi4zMi40OC42NF19Iiwgc3Muc3RyKCkpOworICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVB0clJlcGx5RXJyb3JzKSB7CisgIGJ5dGUgYWRkcnY0WzRdID0gezB4MTAsIDB4MjAsIDB4MzAsIDB4NDB9OworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIjY0LjQ4LjMyLjE2LmluLWFkZHIuYXJwYSIsIG5zX3RfcHRyKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TUHRyUlIoIjY0LjQ4LjMyLjE2LmluLWFkZHIuYXJwYSIsIDEwMCwgIm90aGVyLmNvbSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworCisgIC8vIE5vIHF1ZXN0aW9uLgorICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJ2NCwgc2l6ZW9mKGFkZHJ2NCksIEFGX0lORVQsICZob3N0KSk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCBuc190X3B0cikpOworCisgIC8vIFF1ZXN0aW9uICE9IGFuc3dlcgorICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiOTkuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgbnNfdF9wdHIpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfcGFyc2VfcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcnY0LCBzaXplb2YoYWRkcnY0KSwgQUZfSU5FVCwgJmhvc3QpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIGhvc3QpOworICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgbnNfdF9wdHIpKTsKKworICAvLyBUd28gcXVlc3Rpb25zLgorICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgbnNfdF9wdHIpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3B0cl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRydjQsIHNpemVvZihhZGRydjQpLCBBRl9JTkVULCAmaG9zdCkpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCBuc190X3B0cikpOworCisgIC8vIFdyb25nIHNvcnQgb2YgYW5zd2VyLgorICBwa3QuYW5zd2Vyc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU014UlIoImV4YW1wbGUuY29tIiwgMTAwLCAxMDAsICJteDEuZXhhbXBsZS5jb20iKSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX3B0cl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJ2NCwgc2l6ZW9mKGFkZHJ2NCksIEFGX0lORVQsICZob3N0KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIuY29tIikpOworCisgIC8vIE5vIGFuc3dlci4KKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX3B0cl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJ2NCwgc2l6ZW9mKGFkZHJ2NCksIEFGX0lORVQsICZob3N0KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU1B0clJSKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCAxMDAsICJvdGhlci5jb20iKSk7CisKKyAgLy8gVHJ1bmNhdGVkIHBhY2tldHMuCisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBmb3IgKHNpemVfdCBsZW4gPSAxOyBsZW4gPCBkYXRhLnNpemUoKTsgbGVuKyspIHsKKyAgICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9wdHJfcmVwbHkoZGF0YS5kYXRhKCksIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcnY0LCBzaXplb2YoYWRkcnY0KSwgQUZfSU5FVCwgJmhvc3QpKTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgaG9zdCk7CisgIH0KKworICAvLyBUcnVuY2F0ZWQgcGFja2V0cyB3aXRoIENOQU1FLgorICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgNTAsICI2NC40OC4zMi44LmluLWFkZHIuYXJwYSIpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIGZvciAoc2l6ZV90IGxlbiA9IDE7IGxlbiA8IGRhdGEuc2l6ZSgpOyBsZW4rKykgeworICAgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3B0cl9yZXBseShkYXRhLmRhdGEoKSwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRydjQsIHNpemVvZihhZGRydjQpLCBBRl9JTkVULCAmaG9zdCkpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBob3N0KTsKKyAgfQorfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlUHRyUmVwbHlBbGxvY0ZhaWxTb21lKSB7CisgIGJ5dGUgYWRkcnY0WzRdID0gezB4MTAsIDB4MjAsIDB4MzAsIDB4NDB9OworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIjY0LjQ4LjMyLjE2LmluLWFkZHIuYXJwYSIsIG5zX3RfcHRyKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TUHRyUlIoIjY0LjQ4LjMyLjE2LmluLWFkZHIuYXJwYSIsIDEwMCwgIm1haW4uY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1B0clJSKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCAxMDAsICJvdGhlcjEuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1B0clJSKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCAxMDAsICJvdGhlcjIuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1B0clJSKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCAxMDAsICJvdGhlcjMuY29tIikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworCisgIGZvciAoaW50IGlpID0gMTsgaWkgPD0gMTg7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfcGFyc2VfcHRyX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJ2NCwgc2l6ZW9mKGFkZHJ2NCksIEFGX0lORVQsICZob3N0KSkgPDwgaWk7CisgIH0KK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVB0clJlcGx5QWxsb2NGYWlsTWFueSkgeworICBieXRlIGFkZHJ2NFs0XSA9IHsweDEwLCAweDIwLCAweDMwLCAweDQwfTsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCBuc190X3B0cikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1B0clJSKCI2NC40OC4zMi4xNi5pbi1hZGRyLmFycGEiLCAxMDAsICJtYWluLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIxLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIyLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXIzLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI0LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI1LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI2LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI3LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI4LmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNQdHJSUigiNjQuNDguMzIuMTYuaW4tYWRkci5hcnBhIiwgMTAwLCAib3RoZXI5LmNvbSIpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDYzOyBpaSsrKSB7CisgICAgQ2xlYXJGYWlscygpOworICAgIFNldEFsbG9jRmFpbChpaSk7CisgICAgaW50IHJjID0gYXJlc19wYXJzZV9wdHJfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJ2NCwgc2l6ZW9mKGFkZHJ2NCksIEFGX0lORVQsICZob3N0KTsKKyAgICBpZiAocmMgIT0gQVJFU19FTk9NRU0pIHsKKyAgICAgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIHJjKTsKKyAgICAgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworICAgICAgaG9zdCA9IG51bGxwdHI7CisgICAgfQorICB9Cit9CisKKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1zb2EuY2MgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1zb2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhNGI3YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLXNvYS5jYwpAQCAtMCwwICsxLDEwOCBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVNvYVJlcGx5T0spIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3Rfc29hKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TU29hUlIoImV4YW1wbGUuY29tIiwgMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29hMS5leGFtcGxlLmNvbSIsICJmcmVkLmV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMywgNCwgNSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKworICBzdHJ1Y3QgYXJlc19zb2FfcmVwbHkqIHNvYSA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2Vfc29hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnNvYSkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgc29hKTsKKyAgRVhQRUNUX0VRKCJzb2ExLmV4YW1wbGUuY29tIiwgc3RkOjpzdHJpbmcoc29hLT5uc25hbWUpKTsKKyAgRVhQRUNUX0VRKCJmcmVkLmV4YW1wbGUuY29tIiwgc3RkOjpzdHJpbmcoc29hLT5ob3N0bWFzdGVyKSk7CisgIEVYUEVDVF9FUSgxLCBzb2EtPnNlcmlhbCk7CisgIEVYUEVDVF9FUSgyLCBzb2EtPnJlZnJlc2gpOworICBFWFBFQ1RfRVEoMywgc29hLT5yZXRyeSk7CisgIEVYUEVDVF9FUSg0LCBzb2EtPmV4cGlyZSk7CisgIEVYUEVDVF9FUSg1LCBzb2EtPm1pbnR0bCk7CisgIGFyZXNfZnJlZV9kYXRhKHNvYSk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VTb2FSZXBseUVycm9ycykgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9zb2EpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNTb2FSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2ExLmV4YW1wbGUuY29tIiwgImZyZWQuZXhhbXBsZS5jb20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzLCA0LCA1KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE7CisgIHN0cnVjdCBhcmVzX3NvYV9yZXBseSogc29hID0gbnVsbHB0cjsKKworICAvLyBObyBxdWVzdGlvbi4KKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3NvYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZzb2EpKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9zb2EpKTsKKworI2lmZGVmIERJU0FCTEVECisgIC8vIFF1ZXN0aW9uICE9IGFuc3dlcgorICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiQXhhbXBsZS5jb20iLCBuc190X3NvYSkpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgRVhQRUNUX0VRKEFSRVNfRU5PREFUQSwgYXJlc19wYXJzZV9zb2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmc29hKSk7CisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3Rfc29hKSk7CisjZW5kaWYKKworICAvLyBUd28gcXVlc3Rpb25zCisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3Rfc29hKSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9zb2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmc29hKSk7CisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3Rfc29hKSk7CisKKyAgLy8gV3Jvbmcgc29ydCBvZiBhbnN3ZXIuCisgIHBrdC5hbnN3ZXJzXy5jbGVhcigpOworICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TTXhSUigiZXhhbXBsZS5jb20iLCAxMDAsIDEwMCwgIm14MS5leGFtcGxlLmNvbSIpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3NvYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZzb2EpKTsKKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNTb2FSUigiZXhhbXBsZS5jb20iLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2ExLmV4YW1wbGUuY29tIiwgImZyZWQuZXhhbXBsZS5jb20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzLCA0LCA1KSk7CisKKyAgLy8gTm8gYW5zd2VyLgorICBwa3QuYW5zd2Vyc18uY2xlYXIoKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3NvYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZzb2EpKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU1NvYVJSKCJleGFtcGxlLmNvbSIsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvYTEuZXhhbXBsZS5jb20iLCAiZnJlZC5leGFtcGxlLmNvbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMsIDQsIDUpKTsKKworICAvLyBUcnVuY2F0ZWQgcGFja2V0cy4KKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIGZvciAoc2l6ZV90IGxlbiA9IDE7IGxlbiA8IGRhdGEuc2l6ZSgpOyBsZW4rKykgeworICAgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3NvYV9yZXBseShkYXRhLmRhdGEoKSwgbGVuLCAmc29hKSk7CisgIH0KK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVNvYVJlcGx5QWxsb2NGYWlsKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X3NvYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1NvYVJSKCJleGFtcGxlLmNvbSIsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvYTEuZXhhbXBsZS5jb20iLCAiZnJlZC5leGFtcGxlLmNvbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMsIDQsIDUpKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisgIHN0cnVjdCBhcmVzX3NvYV9yZXBseSogc29hID0gbnVsbHB0cjsKKworICBmb3IgKGludCBpaSA9IDE7IGlpIDw9IDU7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfcGFyc2Vfc29hX3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnNvYSkpIDw8IGlpOworICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0Cit9ICAvLyBuYW1lc3BhY2UgYXJlcwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtcGFyc2Utc3J2LmNjIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QtcGFyc2Utc3J2LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjUxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS1zcnYuY2MKQEAgLTAsMCArMSwyODggQEAKKyNpbmNsdWRlICJhcmVzLXRlc3QuaCIKKyNpbmNsdWRlICJkbnMtcHJvdG8uaCIKKworI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgYXJlcyB7CituYW1lc3BhY2UgdGVzdCB7CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VTcnZSZXBseU9LKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X3NydikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1NydlJSKCJleGFtcGxlLmNvbSIsIDEwMCwgMTAsIDIwLCAzMCwgInNydi5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigiZXhhbXBsZS5jb20iLCAxMDAsIDExLCAyMSwgMzEsICJzcnYyLmV4YW1wbGUuY29tIikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKworICBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkqIHNydiA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2Vfc3J2X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnNydikpOworICBBU1NFUlRfTkUobnVsbHB0ciwgc3J2KTsKKworICBFWFBFQ1RfRVEoInNydi5leGFtcGxlLmNvbSIsIHN0ZDo6c3RyaW5nKHNydi0+aG9zdCkpOworICBFWFBFQ1RfRVEoMTAsIHNydi0+cHJpb3JpdHkpOworICBFWFBFQ1RfRVEoMjAsIHNydi0+d2VpZ2h0KTsKKyAgRVhQRUNUX0VRKDMwLCBzcnYtPnBvcnQpOworCisgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSogc3J2MiA9IHNydi0+bmV4dDsKKyAgQVNTRVJUX05FKG51bGxwdHIsIHNydjIpOworICBFWFBFQ1RfRVEoInNydjIuZXhhbXBsZS5jb20iLCBzdGQ6OnN0cmluZyhzcnYyLT5ob3N0KSk7CisgIEVYUEVDVF9FUSgxMSwgc3J2Mi0+cHJpb3JpdHkpOworICBFWFBFQ1RfRVEoMjEsIHNydjItPndlaWdodCk7CisgIEVYUEVDVF9FUSgzMSwgc3J2Mi0+cG9ydCk7CisgIEVYUEVDVF9FUShudWxscHRyLCBzcnYyLT5uZXh0KTsKKworICBhcmVzX2ZyZWVfZGF0YShzcnYpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlU3J2UmVwbHlTaW5nbGUpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmFiYy5kZWYuY29tIiwgbnNfdF9zcnYpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigiZXhhbXBsZS5hYmMuZGVmLmNvbSIsIDE4MCwgMCwgMTAsIDgxNjAsICJleGFtcGxlLmFiYy5kZWYuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTEud2hlcmUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTIud2hlcmUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTMud2hlcmUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTQud2hlcmUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTUud2hlcmUuY29tIikpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoImVsc2UyLndoZXJlLmNvbSIsIDQyLCB7MTcyLDE5LDAsMX0pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJlbHNlNS53aGVyZS5jb20iLCA0MiwgezE3MiwxOSwwLDJ9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworCisgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSogc3J2ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9zcnZfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmc3J2KSk7CisgIEFTU0VSVF9ORShudWxscHRyLCBzcnYpOworCisgIEVYUEVDVF9FUSgiZXhhbXBsZS5hYmMuZGVmLmNvbSIsIHN0ZDo6c3RyaW5nKHNydi0+aG9zdCkpOworICBFWFBFQ1RfRVEoMCwgc3J2LT5wcmlvcml0eSk7CisgIEVYUEVDVF9FUSgxMCwgc3J2LT53ZWlnaHQpOworICBFWFBFQ1RfRVEoODE2MCwgc3J2LT5wb3J0KTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIHNydi0+bmV4dCk7CisKKyAgYXJlc19mcmVlX2RhdGEoc3J2KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVNydlJlcGx5TWFsZm9ybWVkKSB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSB7CisgICAgMHgxMiwgMHgzNCwgIC8vIHFpZAorICAgIDB4ODQsIC8vIHJlc3BvbnNlICsgcXVlcnkgKyBBQSArIG5vdC1UQyArIG5vdC1SRAorICAgIDB4MDAsIC8vIG5vdC1SQSArIG5vdC1aICsgbm90LUFEICsgbm90LUNEICsgcmM9Tm9FcnJvcgorICAgIDB4MDAsIDB4MDEsICAvLyBudW0gcXVlc3Rpb25zCisgICAgMHgwMCwgMHgwMSwgIC8vIG51bSBhbnN3ZXIgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhdXRob3JpdHkgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhZGRpdGlvbmFsIFJScworICAgIC8vIFF1ZXN0aW9uCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDIxLCAgLy8gdHlwZSBTUlYKKyAgICAweDAwLCAweDAxLCAgLy8gY2xhc3MgSU4KKyAgICAvLyBBbnN3ZXIgMQorICAgIDB4MDcsICdlJywgJ3gnLCAnYScsICdtJywgJ3AnLCAnbCcsICdlJywKKyAgICAweDAzLCAnYycsICdvJywgJ20nLAorICAgIDB4MDAsCisgICAgMHgwMCwgMHgyMSwgIC8vIFJSIHR5cGUKKyAgICAweDAwLCAweDAxLCAgLy8gY2xhc3MgSU4KKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAvLyBUVEwKKyAgICAweDAwLCAweDA0LCAgLy8gcmRhdGEgbGVuZ3RoIC0tIHRvbyBzaG9ydAorICAgIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgIH07CisKKyAgc3RydWN0IGFyZXNfc3J2X3JlcGx5KiBzcnYgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV9zcnZfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmc3J2KSk7CisgIEFTU0VSVF9FUShudWxscHRyLCBzcnYpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlU3J2UmVwbHlNdWx0aXBsZSkgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9yYSgpLnNldF9yZCgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInNydi5leGFtcGxlLmNvbSIsIG5zX3Rfc3J2KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TU3J2UlIoInNydi5leGFtcGxlLmNvbSIsIDMwMCwgMCwgNSwgNjc4OSwgImExLnNydi5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigic3J2LmV4YW1wbGUuY29tIiwgMzAwLCAwLCA1LCA0NTY3LCAiYTIuc3J2LmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1NydlJSKCJzcnYuZXhhbXBsZS5jb20iLCAzMDAsIDAsIDUsIDU2NzgsICJhMy5zcnYuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2F1dGgobmV3IEROU05zUlIoImV4YW1wbGUuY29tIiwgMzAwLCAibnMxLmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJleGFtcGxlLmNvbSIsIDMwMCwgIm5zMi5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYXV0aChuZXcgRE5TTnNSUigiZXhhbXBsZS5jb20iLCAzMDAsICJuczMuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigiYTEuc3J2LmV4YW1wbGUuY29tIiwgMzAwLCB7MTcyLDE5LDEsMX0pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJhMi5zcnYuZXhhbXBsZS5jb20iLCAzMDAsIHsxNzIsMTksMSwyfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoImEzLnNydi5leGFtcGxlLmNvbSIsIDMwMCwgezE3MiwxOSwxLDN9KSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigibjEuZXhhbXBsZS5jb20iLCAzMDAsIHsxNzIsMTksMCwxfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoIm4yLmV4YW1wbGUuY29tIiwgMzAwLCB7MTcyLDE5LDAsMn0pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJuMy5leGFtcGxlLmNvbSIsIDMwMCwgezE3MiwxOSwwLDN9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworCisgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSogc3J2MCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2Vfc3J2X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnNydjApKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIHNydjApOworICBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkqIHNydiA9IHNydjA7CisKKyAgRVhQRUNUX0VRKCJhMS5zcnYuZXhhbXBsZS5jb20iLCBzdGQ6OnN0cmluZyhzcnYtPmhvc3QpKTsKKyAgRVhQRUNUX0VRKDAsIHNydi0+cHJpb3JpdHkpOworICBFWFBFQ1RfRVEoNSwgc3J2LT53ZWlnaHQpOworICBFWFBFQ1RfRVEoNjc4OSwgc3J2LT5wb3J0KTsKKyAgRVhQRUNUX05FKG51bGxwdHIsIHNydi0+bmV4dCk7CisgIHNydiA9IHNydi0+bmV4dDsKKworICBFWFBFQ1RfRVEoImEyLnNydi5leGFtcGxlLmNvbSIsIHN0ZDo6c3RyaW5nKHNydi0+aG9zdCkpOworICBFWFBFQ1RfRVEoMCwgc3J2LT5wcmlvcml0eSk7CisgIEVYUEVDVF9FUSg1LCBzcnYtPndlaWdodCk7CisgIEVYUEVDVF9FUSg0NTY3LCBzcnYtPnBvcnQpOworICBFWFBFQ1RfTkUobnVsbHB0ciwgc3J2LT5uZXh0KTsKKyAgc3J2ID0gc3J2LT5uZXh0OworCisgIEVYUEVDVF9FUSgiYTMuc3J2LmV4YW1wbGUuY29tIiwgc3RkOjpzdHJpbmcoc3J2LT5ob3N0KSk7CisgIEVYUEVDVF9FUSgwLCBzcnYtPnByaW9yaXR5KTsKKyAgRVhQRUNUX0VRKDUsIHNydi0+d2VpZ2h0KTsKKyAgRVhQRUNUX0VRKDU2NzgsIHNydi0+cG9ydCk7CisgIEVYUEVDVF9FUShudWxscHRyLCBzcnYtPm5leHQpOworCisgIGFyZXNfZnJlZV9kYXRhKHNydjApOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlU3J2UmVwbHlDbmFtZSkgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuYWJjLmRlZi5jb20iLCBuc190X3NydikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImV4YW1wbGUuYWJjLmRlZi5jb20iLCAzMDAsICJjbmFtZS5hYmMuZGVmLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigiY25hbWUuYWJjLmRlZi5jb20iLCAzMDAsIDAsIDEwLCAxMjM0LCAic3J2LmFiYy5kZWYuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTEud2hlcmUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTIud2hlcmUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJhYmMuZGVmLmNvbSIsIDQ0LCAiZWxzZTMud2hlcmUuY29tIikpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoImV4YW1wbGUuYWJjLmRlZi5jb20iLCAzMDAsIHsxNzIsMTksMCwxfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoImVsc2UxLndoZXJlLmNvbSIsIDQyLCB7MTcyLDE5LDAsMX0pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJlbHNlMi53aGVyZS5jb20iLCA0MiwgezE3MiwxOSwwLDJ9KSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigiZWxzZTMud2hlcmUuY29tIiwgNDIsIHsxNzIsMTksMCwzfSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKworICBzdHJ1Y3QgYXJlc19zcnZfcmVwbHkqIHNydiA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2Vfc3J2X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnNydikpOworICBBU1NFUlRfTkUobnVsbHB0ciwgc3J2KTsKKworICBFWFBFQ1RfRVEoInNydi5hYmMuZGVmLmNvbSIsIHN0ZDo6c3RyaW5nKHNydi0+aG9zdCkpOworICBFWFBFQ1RfRVEoMCwgc3J2LT5wcmlvcml0eSk7CisgIEVYUEVDVF9FUSgxMCwgc3J2LT53ZWlnaHQpOworICBFWFBFQ1RfRVEoMTIzNCwgc3J2LT5wb3J0KTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIHNydi0+bmV4dCk7CisKKyAgYXJlc19mcmVlX2RhdGEoc3J2KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVNydlJlcGx5Q25hbWVNdWx0aXBsZSkgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9yYSgpLnNldF9yZCgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oInF1ZXJ5LmV4YW1wbGUuY29tIiwgbnNfdF9zcnYpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNDbmFtZVJSKCJxdWVyeS5leGFtcGxlLmNvbSIsIDMwMCwgInNydi5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigic3J2LmV4YW1wbGUuY29tIiwgMzAwLCAwLCA1LCA2Nzg5LCAiYTEuc3J2LmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1NydlJSKCJzcnYuZXhhbXBsZS5jb20iLCAzMDAsIDAsIDUsIDQ1NjcsICJhMi5zcnYuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TU3J2UlIoInNydi5leGFtcGxlLmNvbSIsIDMwMCwgMCwgNSwgNTY3OCwgImEzLnNydi5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYXV0aChuZXcgRE5TTnNSUigiZXhhbXBsZS5jb20iLCAzMDAsICJuczEuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2F1dGgobmV3IEROU05zUlIoImV4YW1wbGUuY29tIiwgMzAwLCAibnMyLmV4YW1wbGUuY29tIikpCisgICAgLmFkZF9hdXRoKG5ldyBETlNOc1JSKCJleGFtcGxlLmNvbSIsIDMwMCwgIm5zMy5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJhMS5zcnYuZXhhbXBsZS5jb20iLCAzMDAsIHsxNzIsMTksMSwxfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoImEyLnNydi5leGFtcGxlLmNvbSIsIDMwMCwgezE3MiwxOSwxLDJ9KSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigiYTMuc3J2LmV4YW1wbGUuY29tIiwgMzAwLCB7MTcyLDE5LDEsM30pKQorICAgIC5hZGRfYWRkaXRpb25hbChuZXcgRE5TQVJSKCJuMS5leGFtcGxlLmNvbSIsIDMwMCwgezE3MiwxOSwwLDF9KSkKKyAgICAuYWRkX2FkZGl0aW9uYWwobmV3IEROU0FSUigibjIuZXhhbXBsZS5jb20iLCAzMDAsIHsxNzIsMTksMCwyfSkpCisgICAgLmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBUlIoIm4zLmV4YW1wbGUuY29tIiwgMzAwLCB7MTcyLDE5LDAsM30pKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisKKyAgc3RydWN0IGFyZXNfc3J2X3JlcGx5KiBzcnYwID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV9zcnZfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmc3J2MCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgc3J2MCk7CisgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSogc3J2ID0gc3J2MDsKKworICBFWFBFQ1RfRVEoImExLnNydi5leGFtcGxlLmNvbSIsIHN0ZDo6c3RyaW5nKHNydi0+aG9zdCkpOworICBFWFBFQ1RfRVEoMCwgc3J2LT5wcmlvcml0eSk7CisgIEVYUEVDVF9FUSg1LCBzcnYtPndlaWdodCk7CisgIEVYUEVDVF9FUSg2Nzg5LCBzcnYtPnBvcnQpOworICBFWFBFQ1RfTkUobnVsbHB0ciwgc3J2LT5uZXh0KTsKKyAgc3J2ID0gc3J2LT5uZXh0OworCisgIEVYUEVDVF9FUSgiYTIuc3J2LmV4YW1wbGUuY29tIiwgc3RkOjpzdHJpbmcoc3J2LT5ob3N0KSk7CisgIEVYUEVDVF9FUSgwLCBzcnYtPnByaW9yaXR5KTsKKyAgRVhQRUNUX0VRKDUsIHNydi0+d2VpZ2h0KTsKKyAgRVhQRUNUX0VRKDQ1NjcsIHNydi0+cG9ydCk7CisgIEVYUEVDVF9ORShudWxscHRyLCBzcnYtPm5leHQpOworICBzcnYgPSBzcnYtPm5leHQ7CisKKyAgRVhQRUNUX0VRKCJhMy5zcnYuZXhhbXBsZS5jb20iLCBzdGQ6OnN0cmluZyhzcnYtPmhvc3QpKTsKKyAgRVhQRUNUX0VRKDAsIHNydi0+cHJpb3JpdHkpOworICBFWFBFQ1RfRVEoNSwgc3J2LT53ZWlnaHQpOworICBFWFBFQ1RfRVEoNTY3OCwgc3J2LT5wb3J0KTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIHNydi0+bmV4dCk7CisKKyAgYXJlc19mcmVlX2RhdGEoc3J2MCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VTcnZSZXBseUVycm9ycykgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuYWJjLmRlZi5jb20iLCBuc190X3NydikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1NydlJSKCJleGFtcGxlLmFiYy5kZWYuY29tIiwgMTgwLCAwLCAxMCwgODE2MCwgImV4YW1wbGUuYWJjLmRlZi5jb20iKSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE7CisgIHN0cnVjdCBhcmVzX3Nydl9yZXBseSogc3J2ID0gbnVsbHB0cjsKKworICAvLyBObyBxdWVzdGlvbi4KKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3Nydl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZzcnYpKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuYWJjLmRlZi5jb20iLCBuc190X3NydikpOworCisjaWZkZWYgRElTQUJMRUQKKyAgLy8gUXVlc3Rpb24gIT0gYW5zd2VyCisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJBeGFtcGxlLmNvbSIsIG5zX3Rfc3J2KSk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX3Nydl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZzcnYpKTsKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9zcnYpKTsKKyNlbmRpZgorCisgIC8vIFR3byBxdWVzdGlvbnMuCisgIHBrdC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmFiYy5kZWYuY29tIiwgbnNfdF9zcnYpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3Nydl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZzcnYpKTsKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIjY0LjQ4LjMyLjE2LmluLWFkZHIuYXJwYSIsIG5zX3RfcHRyKSk7CisKKyAgLy8gV3Jvbmcgc29ydCBvZiBhbnN3ZXIuCisgIHBrdC5hbnN3ZXJzXy5jbGVhcigpOworICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TTXhSUigiZXhhbXBsZS5jb20iLCAxMDAsIDEwMCwgIm14MS5leGFtcGxlLmNvbSIpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2Vfc3J2X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnNydikpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgc3J2KTsKKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigiZXhhbXBsZS5hYmMuZGVmLmNvbSIsIDE4MCwgMCwgMTAsIDgxNjAsICJleGFtcGxlLmFiYy5kZWYuY29tIikpOworCisgIC8vIE5vIGFuc3dlci4KKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX3Nydl9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZzcnYpKTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU1NydlJSKCJleGFtcGxlLmFiYy5kZWYuY29tIiwgMTgwLCAwLCAxMCwgODE2MCwgImV4YW1wbGUuYWJjLmRlZi5jb20iKSk7CisKKyAgLy8gVHJ1bmNhdGVkIHBhY2tldHMuCisgIGRhdGEgPSBwa3QuZGF0YSgpOworICBmb3IgKHNpemVfdCBsZW4gPSAxOyBsZW4gPCBkYXRhLnNpemUoKTsgbGVuKyspIHsKKyAgICBpbnQgcmMgPSBhcmVzX3BhcnNlX3Nydl9yZXBseShkYXRhLmRhdGEoKSwgbGVuLCAmc3J2KTsKKyAgICBFWFBFQ1RfVFJVRShyYyA9PSBBUkVTX0VCQURSRVNQIHx8IHJjID09IEFSRVNfRUJBRE5BTUUpOworICB9Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VTcnZSZXBseUFsbG9jRmFpbCkgeworICBETlNQYWNrZXQgcGt0OworICBwa3Quc2V0X3FpZCgweDEyMzQpLnNldF9yZXNwb25zZSgpLnNldF9hYSgpCisgICAgLmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuYWJjLmRlZi5jb20iLCBuc190X3NydikpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0NuYW1lUlIoImV4YW1wbGUuY29tIiwgMzAwLCAiYy5leGFtcGxlLmNvbSIpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNTcnZSUigiZXhhbXBsZS5hYmMuZGVmLmNvbSIsIDE4MCwgMCwgMTAsIDgxNjAsICJleGFtcGxlLmFiYy5kZWYuY29tIikpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKyAgc3RydWN0IGFyZXNfc3J2X3JlcGx5KiBzcnYgPSBudWxscHRyOworCisgIGZvciAoaW50IGlpID0gMTsgaWkgPD0gNTsgaWkrKykgeworICAgIENsZWFyRmFpbHMoKTsKKyAgICBTZXRBbGxvY0ZhaWwoaWkpOworICAgIEVYUEVDVF9FUShBUkVTX0VOT01FTSwgYXJlc19wYXJzZV9zcnZfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmc3J2KSkgPDwgaWk7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS10eHQuY2MgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS10eHQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhYWFhMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLXR4dC5jYwpAQCAtMCwwICsxLDI2NiBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVR4dFJlcGx5T0spIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQxID0gInR4dDEuZXhhbXBsZS5jb20iOworICBzdGQ6OnN0cmluZyBleHBlY3RlZDJhID0gInR4dDJhIjsKKyAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQyYigiQUJDXDBBQkMiLCA3KTsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNUeHRSUigiZXhhbXBsZS5jb20iLCAxMDAsIHtleHBlY3RlZDF9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TVHh0UlIoImV4YW1wbGUuY29tIiwgMTAwLCB7ZXhwZWN0ZWQyYSwgZXhwZWN0ZWQyYn0pKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisKKyAgc3RydWN0IGFyZXNfdHh0X3JlcGx5KiB0eHQgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX3R4dF9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZ0eHQpKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIHR4dCk7CisgIEVYUEVDVF9FUShzdGQ6OnZlY3RvcjxieXRlPihleHBlY3RlZDEuZGF0YSgpLCBleHBlY3RlZDEuZGF0YSgpICsgZXhwZWN0ZWQxLnNpemUoKSksCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxieXRlPih0eHQtPnR4dCwgdHh0LT50eHQgKyB0eHQtPmxlbmd0aCkpOworCisgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSogdHh0MiA9IHR4dC0+bmV4dDsKKyAgQVNTRVJUX05FKG51bGxwdHIsIHR4dDIpOworICBFWFBFQ1RfRVEoc3RkOjp2ZWN0b3I8Ynl0ZT4oZXhwZWN0ZWQyYS5kYXRhKCksIGV4cGVjdGVkMmEuZGF0YSgpICsgZXhwZWN0ZWQyYS5zaXplKCkpLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Ynl0ZT4odHh0Mi0+dHh0LCB0eHQyLT50eHQgKyB0eHQyLT5sZW5ndGgpKTsKKworICBzdHJ1Y3QgYXJlc190eHRfcmVwbHkqIHR4dDMgPSB0eHQyLT5uZXh0OworICBBU1NFUlRfTkUobnVsbHB0ciwgdHh0Myk7CisgIEVYUEVDVF9FUShzdGQ6OnZlY3RvcjxieXRlPihleHBlY3RlZDJiLmRhdGEoKSwgZXhwZWN0ZWQyYi5kYXRhKCkgKyBleHBlY3RlZDJiLnNpemUoKSksCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxieXRlPih0eHQzLT50eHQsIHR4dDMtPnR4dCArIHR4dDMtPmxlbmd0aCkpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgdHh0My0+bmV4dCk7CisKKyAgYXJlc19mcmVlX2RhdGEodHh0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVR4dEV4dFJlcGx5T0spIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQxID0gInR4dDEuZXhhbXBsZS5jb20iOworICBzdGQ6OnN0cmluZyBleHBlY3RlZDJhID0gInR4dDJhIjsKKyAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQyYigiQUJDXDBBQkMiLCA3KTsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNUeHRSUigiZXhhbXBsZS5jb20iLCAxMDAsIHtleHBlY3RlZDF9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TVHh0UlIoImV4YW1wbGUuY29tIiwgMTAwLCB7ZXhwZWN0ZWQyYSwgZXhwZWN0ZWQyYn0pKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHBrdC5kYXRhKCk7CisKKyAgc3RydWN0IGFyZXNfdHh0X2V4dCogdHh0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV90eHRfcmVwbHlfZXh0KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnR4dCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgdHh0KTsKKyAgRVhQRUNUX0VRKHN0ZDo6dmVjdG9yPGJ5dGU+KGV4cGVjdGVkMS5kYXRhKCksIGV4cGVjdGVkMS5kYXRhKCkgKyBleHBlY3RlZDEuc2l6ZSgpKSwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGJ5dGU+KHR4dC0+dHh0LCB0eHQtPnR4dCArIHR4dC0+bGVuZ3RoKSk7CisgIEVYUEVDVF9FUSgxLCB0eHQtPnJlY29yZF9zdGFydCk7CisKKyAgc3RydWN0IGFyZXNfdHh0X2V4dCogdHh0MiA9IHR4dC0+bmV4dDsKKyAgQVNTRVJUX05FKG51bGxwdHIsIHR4dDIpOworICBFWFBFQ1RfRVEoc3RkOjp2ZWN0b3I8Ynl0ZT4oZXhwZWN0ZWQyYS5kYXRhKCksIGV4cGVjdGVkMmEuZGF0YSgpICsgZXhwZWN0ZWQyYS5zaXplKCkpLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Ynl0ZT4odHh0Mi0+dHh0LCB0eHQyLT50eHQgKyB0eHQyLT5sZW5ndGgpKTsKKyAgRVhQRUNUX0VRKDEsIHR4dDItPnJlY29yZF9zdGFydCk7CisKKyAgc3RydWN0IGFyZXNfdHh0X2V4dCogdHh0MyA9IHR4dDItPm5leHQ7CisgIEFTU0VSVF9ORShudWxscHRyLCB0eHQzKTsKKyAgRVhQRUNUX0VRKHN0ZDo6dmVjdG9yPGJ5dGU+KGV4cGVjdGVkMmIuZGF0YSgpLCBleHBlY3RlZDJiLmRhdGEoKSArIGV4cGVjdGVkMmIuc2l6ZSgpKSwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGJ5dGU+KHR4dDMtPnR4dCwgdHh0My0+dHh0ICsgdHh0My0+bGVuZ3RoKSk7CisgIEVYUEVDVF9FUShudWxscHRyLCB0eHQzLT5uZXh0KTsKKyAgRVhQRUNUX0VRKDAsIHR4dDMtPnJlY29yZF9zdGFydCk7CisKKyAgYXJlc19mcmVlX2RhdGEodHh0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVR4dE1hbGZvcm1lZFJlcGx5MSkgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBxaWQKKyAgICAweDg0LCAvLyByZXNwb25zZSArIHF1ZXJ5ICsgQUEgKyBub3QtVEMgKyBub3QtUkQKKyAgICAweDAwLCAvLyBub3QtUkEgKyBub3QtWiArIG5vdC1BRCArIG5vdC1DRCArIHJjPU5vRXJyb3IKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIHF1ZXN0aW9ucworICAgIDB4MDAsIDB4MDEsICAvLyBudW0gYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYWRkaXRpb25hbCBSUnMKKyAgICAvLyBRdWVzdGlvbgorICAgIDB4MDcsICdlJywgJ3gnLCAnYScsICdtJywgJ3AnLCAnbCcsICdlJywKKyAgICAweDAzLCAnYycsICdvJywgJ20nLAorICAgIDB4MDAsCisgICAgMHgwMCwgMHgxMCwgIC8vIHR5cGUgVFhUCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gQW5zd2VyIDEKKyAgICAweDA3LCAnZScsICd4JywgJ2EnLCAnbScsICdwJywgJ2wnLCAnZScsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MTAsICAvLyBSUiB0eXBlCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgLy8gVFRMCisgICAgMHgwMCwgMHgwMywgIC8vIHJkYXRhIGxlbmd0aAorICAgIDB4MTIsICdhJywgJ2InLCAgLy8gaW52YWxpZCBsZW5ndGgKKyAgfTsKKworICBzdHJ1Y3QgYXJlc190eHRfcmVwbHkqIHR4dCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3R4dF9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZ0eHQpKTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIHR4dCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VUeHRNYWxmb3JtZWRSZXBseTIpIHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHsKKyAgICAweDEyLCAweDM0LCAgLy8gcWlkCisgICAgMHg4NCwgLy8gcmVzcG9uc2UgKyBxdWVyeSArIEFBICsgbm90LVRDICsgbm90LVJECisgICAgMHgwMCwgLy8gbm90LVJBICsgbm90LVogKyBub3QtQUQgKyBub3QtQ0QgKyByYz1Ob0Vycm9yCisgICAgMHgwMCwgMHgwMSwgIC8vIG51bSBxdWVzdGlvbnMKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIGFuc3dlciBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIGF1dGhvcml0eSBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIGFkZGl0aW9uYWwgUlJzCisgICAgLy8gUXVlc3Rpb24KKyAgICAweDA3LCAnZScsICd4JywgJ2EnLCAnbScsICdwJywgJ2wnLCAnZScsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MTAsICAvLyB0eXBlIFRYVAorICAgIDB4MDAsIDB4MDEsICAvLyBjbGFzcyBJTgorICAgIC8vIEFuc3dlciAxCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDEwLCAgLy8gUlIgdHlwZQorICAgIC8vIHRydW5jYXRlZAorICB9OworCisgIHN0cnVjdCBhcmVzX3R4dF9yZXBseSogdHh0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfdHh0X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnR4dCkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgdHh0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVR4dE1hbGZvcm1lZFJlcGx5MykgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBxaWQKKyAgICAweDg0LCAvLyByZXNwb25zZSArIHF1ZXJ5ICsgQUEgKyBub3QtVEMgKyBub3QtUkQKKyAgICAweDAwLCAvLyBub3QtUkEgKyBub3QtWiArIG5vdC1BRCArIG5vdC1DRCArIHJjPU5vRXJyb3IKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIHF1ZXN0aW9ucworICAgIDB4MDAsIDB4MDEsICAvLyBudW0gYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYWRkaXRpb25hbCBSUnMKKyAgICAvLyBRdWVzdGlvbgorICAgIDB4MDcsICdlJywgJ3gnLCAnYScsICdtJywgJ3AnLCAnbCcsICdlJywKKyAgICAweDAzLCAnYycsICdvJywgJ20nLAorICAgIDB4MDAsCisgICAgMHgwMCwgMHgxMCwgIC8vIHR5cGUgVFhUCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gQW5zd2VyIDEKKyAgICAweDA3LCAnZScsICd4JywgJ2EnLCAnbScsICdwJywgJ2wnLCAnZScsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MTAsICAvLyBSUiB0eXBlCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgLy8gVFRMCisgICAgMHgwMCwgMHgxMywgIC8vIHJkYXRhIGxlbmd0aCBJTlZBTElECisgICAgMHgwMiwgJ2EnLCAnYicsCisgIH07CisKKyAgc3RydWN0IGFyZXNfdHh0X3JlcGx5KiB0eHQgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV90eHRfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmdHh0KSk7CisgIEFTU0VSVF9FUShudWxscHRyLCB0eHQpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlVHh0TWFsZm9ybWVkUmVwbHk0KSB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSB7CisgICAgMHgxMiwgMHgzNCwgIC8vIHFpZAorICAgIDB4ODQsIC8vIHJlc3BvbnNlICsgcXVlcnkgKyBBQSArIG5vdC1UQyArIG5vdC1SRAorICAgIDB4MDAsIC8vIG5vdC1SQSArIG5vdC1aICsgbm90LUFEICsgbm90LUNEICsgcmM9Tm9FcnJvcgorICAgIDB4MDAsIDB4MDEsICAvLyBudW0gcXVlc3Rpb25zCisgICAgMHgwMCwgMHgwMSwgIC8vIG51bSBhbnN3ZXIgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhdXRob3JpdHkgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhZGRpdGlvbmFsIFJScworICAgIC8vIFF1ZXN0aW9uCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDEwLCAgLy8gdHlwZSBUWFQKKyAgICAweDAwLCAvLyBUUlVOQ0FURUQKKyAgfTsKKworICBzdHJ1Y3QgYXJlc190eHRfcmVwbHkqIHR4dCA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX0VCQURSRVNQLCBhcmVzX3BhcnNlX3R4dF9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZ0eHQpKTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIHR4dCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VUeHRSZXBseUVycm9ycykgeworICBETlNQYWNrZXQgcGt0OworICBzdGQ6OnN0cmluZyBleHBlY3RlZDEgPSAidHh0MS5leGFtcGxlLmNvbSI7CisgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkMmEgPSAidHh0MmEiOworICBzdGQ6OnN0cmluZyBleHBlY3RlZDJiID0gInR4dDJiIjsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNUeHRSUigiZXhhbXBsZS5jb20iLCAxMDAsIHtleHBlY3RlZDF9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TVHh0UlIoImV4YW1wbGUuY29tIiwgMTAwLCB7ZXhwZWN0ZWQxfSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU1R4dFJSKCJleGFtcGxlLmNvbSIsIDEwMCwge2V4cGVjdGVkMmEsIGV4cGVjdGVkMmJ9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworICBzdHJ1Y3QgYXJlc190eHRfcmVwbHkqIHR4dCA9IG51bGxwdHI7CisKKyAgLy8gTm8gcXVlc3Rpb24uCisgIHBrdC5xdWVzdGlvbnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICB0eHQgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19FQkFEUkVTUCwgYXJlc19wYXJzZV90eHRfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAmdHh0KSk7CisgIEVYUEVDVF9FUShudWxscHRyLCB0eHQpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X214KSk7CisKKyNpZmRlZiBESVNBQkxFRAorICAvLyBRdWVzdGlvbiAhPSBhbnN3ZXIKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oIkF4YW1wbGUuY29tIiwgbnNfdF90eHQpKTsKKyAgZGF0YSA9IHBrdC5kYXRhKCk7CisgIEVYUEVDVF9FUShBUkVTX0VOT0RBVEEsIGFyZXNfcGFyc2VfdHh0X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnR4dCkpOworICBwa3QucXVlc3Rpb25zXy5jbGVhcigpOworICBwa3QuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiZXhhbXBsZS5jb20iLCBuc190X3R4dCkpOworI2VuZGlmCisKKyAgLy8gVHdvIHF1ZXN0aW9ucy4KKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9teCkpOworICBkYXRhID0gcGt0LmRhdGEoKTsKKyAgdHh0ID0gbnVsbHB0cjsKKyAgRVhQRUNUX0VRKEFSRVNfRUJBRFJFU1AsIGFyZXNfcGFyc2VfdHh0X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnR4dCkpOworICBFWFBFQ1RfRVEobnVsbHB0ciwgdHh0KTsKKyAgcGt0LnF1ZXN0aW9uc18uY2xlYXIoKTsKKyAgcGt0LmFkZF9xdWVzdGlvbihuZXcgRE5TUXVlc3Rpb24oImV4YW1wbGUuY29tIiwgbnNfdF9teCkpOworCisgIC8vIE5vIGFuc3dlci4KKyAgcGt0LmFuc3dlcnNfLmNsZWFyKCk7CisgIGRhdGEgPSBwa3QuZGF0YSgpOworICB0eHQgPSBudWxscHRyOworICBFWFBFQ1RfRVEoQVJFU19FTk9EQVRBLCBhcmVzX3BhcnNlX3R4dF9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksICZ0eHQpKTsKKyAgRVhQRUNUX0VRKG51bGxwdHIsIHR4dCk7CisgIHBrdC5hZGRfYW5zd2VyKG5ldyBETlNUeHRSUigiZXhhbXBsZS5jb20iLCAxMDAsIHtleHBlY3RlZDF9KSk7CisKKyAgLy8gVHJ1bmNhdGVkIHBhY2tldHMuCisgIGZvciAoc2l6ZV90IGxlbiA9IDE7IGxlbiA8IGRhdGEuc2l6ZSgpOyBsZW4rKykgeworICAgIHR4dCA9IG51bGxwdHI7CisgICAgRVhQRUNUX05FKEFSRVNfU1VDQ0VTUywgYXJlc19wYXJzZV90eHRfcmVwbHkoZGF0YS5kYXRhKCksIGxlbiwgJnR4dCkpOworICAgIEVYUEVDVF9FUShudWxscHRyLCB0eHQpOworICB9Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VUeHRSZXBseUFsbG9jRmFpbCkgeworICBETlNQYWNrZXQgcGt0OworICBzdGQ6OnN0cmluZyBleHBlY3RlZDEgPSAidHh0MS5leGFtcGxlLmNvbSI7CisgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkMmEgPSAidHh0MmEiOworICBzdGQ6OnN0cmluZyBleHBlY3RlZDJiID0gInR4dDJiIjsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbSIsIG5zX3RfbXgpKQorICAgIC5hZGRfYW5zd2VyKG5ldyBETlNDbmFtZVJSKCJleGFtcGxlLmNvbSIsIDMwMCwgImMuZXhhbXBsZS5jb20iKSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TVHh0UlIoImMuZXhhbXBsZS5jb20iLCAxMDAsIHtleHBlY3RlZDF9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TVHh0UlIoImMuZXhhbXBsZS5jb20iLCAxMDAsIHtleHBlY3RlZDF9KSkKKyAgICAuYWRkX2Fuc3dlcihuZXcgRE5TVHh0UlIoImMuZXhhbXBsZS5jb20iLCAxMDAsIHtleHBlY3RlZDJhLCBleHBlY3RlZDJifSkpOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gcGt0LmRhdGEoKTsKKyAgc3RydWN0IGFyZXNfdHh0X3JlcGx5KiB0eHQgPSBudWxscHRyOworCisgIGZvciAoaW50IGlpID0gMTsgaWkgPD0gMTM7IGlpKyspIHsKKyAgICBDbGVhckZhaWxzKCk7CisgICAgU2V0QWxsb2NGYWlsKGlpKTsKKyAgICBFWFBFQ1RfRVEoQVJFU19FTk9NRU0sIGFyZXNfcGFyc2VfdHh0X3JlcGx5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgJnR4dCkpIDw8IGlpOworICB9Cit9CisKKworfSAgLy8gbmFtZXNwYWNlIHRlc3QKK30gIC8vIG5hbWVzcGFjZSBhcmVzCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LXBhcnNlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTRmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC1wYXJzZS5jYwpAQCAtMCwwICsxLDIxOSBAQAorI2luY2x1ZGUgImFyZXMtdGVzdC5oIgorI2luY2x1ZGUgImRucy1wcm90by5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhcmVzIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZVJvb3ROYW1lKSB7CisgIEROU1BhY2tldCBwa3Q7CisgIHBrdC5zZXRfcWlkKDB4MTIzNCkuc2V0X3Jlc3BvbnNlKCkuc2V0X2FhKCkKKyAgICAuYWRkX3F1ZXN0aW9uKG5ldyBETlNRdWVzdGlvbigiLiIsIG5zX3RfYSkpCisgICAgLmFkZF9hbnN3ZXIobmV3IEROU0FSUigiLiIsIDEwMCwgezB4MDIsIDB4MDMsIDB4MDQsIDB4MDV9KSk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBwa3QuZGF0YSgpOworCisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzJdOworICBpbnQgY291bnQgPSAyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMSwgY291bnQpOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgSG9zdEVudChob3N0KTsKKyAgRVhQRUNUX0VRKCJ7JycgYWxpYXNlcz1bXSBhZGRycz1bMi4zLjQuNV19Iiwgc3Muc3RyKCkpOworICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZUluZGlyZWN0Um9vdE5hbWUpIHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHsKKyAgICAweDEyLCAweDM0LCAgLy8gcWlkCisgICAgMHg4NCwgLy8gcmVzcG9uc2UgKyBxdWVyeSArIEFBICsgbm90LVRDICsgbm90LVJECisgICAgMHgwMCwgLy8gbm90LVJBICsgbm90LVogKyBub3QtQUQgKyBub3QtQ0QgKyByYz1Ob0Vycm9yCisgICAgMHgwMCwgMHgwMSwgIC8vIG51bSBxdWVzdGlvbnMKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIGFuc3dlciBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIGF1dGhvcml0eSBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIGFkZGl0aW9uYWwgUlJzCisgICAgLy8gUXVlc3Rpb24KKyAgICAweEMwLCAweDA0LCAgLy8gd2VpcmQ6IHBvaW50ZXIgdG8gYSByYW5kb20gemVybyBlYXJsaWVyIGluIHRoZSBtZXNzYWdlCisgICAgMHgwMCwgMHgwMSwgIC8vIHR5cGUgQQorICAgIDB4MDAsIDB4MDEsICAvLyBjbGFzcyBJTgorICAgIC8vIEFuc3dlciAxCisgICAgMHhDMCwgMHgwNCwKKyAgICAweDAwLCAweDAxLCAgLy8gUlIgdHlwZQorICAgIDB4MDAsIDB4MDEsICAvLyBjbGFzcyBJTgorICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIC8vIFRUTAorICAgIDB4MDAsIDB4MDQsICAvLyByZGF0YSBsZW5ndGgKKyAgICAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICB9OworCisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzJdOworICBpbnQgY291bnQgPSAyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMSwgY291bnQpOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgSG9zdEVudChob3N0KTsKKyAgRVhQRUNUX0VRKCJ7JycgYWxpYXNlcz1bXSBhZGRycz1bMi4zLjQuNV19Iiwgc3Muc3RyKCkpOworICBhcmVzX2ZyZWVfaG9zdGVudChob3N0KTsKK30KKworVEVTVF9GKExpYnJhcnlUZXN0LCBQYXJzZUVzY2FwZWROYW1lKSB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSB7CisgICAgMHgxMiwgMHgzNCwgIC8vIHFpZAorICAgIDB4ODQsIC8vIHJlc3BvbnNlICsgcXVlcnkgKyBBQSArIG5vdC1UQyArIG5vdC1SRAorICAgIDB4MDAsIC8vIG5vdC1SQSArIG5vdC1aICsgbm90LUFEICsgbm90LUNEICsgcmM9Tm9FcnJvcgorICAgIDB4MDAsIDB4MDEsICAvLyBudW0gcXVlc3Rpb25zCisgICAgMHgwMCwgMHgwMSwgIC8vIG51bSBhbnN3ZXIgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhdXRob3JpdHkgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhZGRpdGlvbmFsIFJScworICAgIC8vIFF1ZXN0aW9uCisgICAgMHgwNSwgJ2EnLCAnXFwnLCAnYicsICcuJywgJ2MnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDAxLCAgLy8gdHlwZSBBCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gQW5zd2VyIDEKKyAgICAweDA1LCAnYScsICdcXCcsICdiJywgJy4nLCAnYycsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MDEsICAvLyBSUiB0eXBlCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgLy8gVFRMCisgICAgMHgwMCwgMHgwNCwgIC8vIHJkYXRhIGxlbmd0aAorICAgIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgIH07CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzJdOworICBpbnQgY291bnQgPSAyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBFWFBFQ1RfRVEoMSwgY291bnQpOworICBIb3N0RW50IGhlbnQoaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBoZW50OworICAvLyBUaGUgcHJpbnRhYmxlIG5hbWUgaXMgZXhwYW5kZWQgd2l0aCBlc2NhcGVzLgorICBFWFBFQ1RfRVEoMTEsIGhlbnQubmFtZV8uc2l6ZSgpKTsKKyAgRVhQRUNUX0VRKCdhJywgaGVudC5uYW1lX1swXSk7CisgIEVYUEVDVF9FUSgnXFwnLCBoZW50Lm5hbWVfWzFdKTsKKyAgRVhQRUNUX0VRKCdcXCcsIGhlbnQubmFtZV9bMl0pOworICBFWFBFQ1RfRVEoJ2InLCBoZW50Lm5hbWVfWzNdKTsKKyAgRVhQRUNUX0VRKCdcXCcsIGhlbnQubmFtZV9bNF0pOworICBFWFBFQ1RfRVEoJy4nLCBoZW50Lm5hbWVfWzVdKTsKKyAgRVhQRUNUX0VRKCdjJywgaGVudC5uYW1lX1s2XSk7CisgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlUGFydGlhbENvbXByZXNzZWROYW1lKSB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSB7CisgICAgMHgxMiwgMHgzNCwgIC8vIHFpZAorICAgIDB4ODQsIC8vIHJlc3BvbnNlICsgcXVlcnkgKyBBQSArIG5vdC1UQyArIG5vdC1SRAorICAgIDB4MDAsIC8vIG5vdC1SQSArIG5vdC1aICsgbm90LUFEICsgbm90LUNEICsgcmM9Tm9FcnJvcgorICAgIDB4MDAsIDB4MDEsICAvLyBudW0gcXVlc3Rpb25zCisgICAgMHgwMCwgMHgwMSwgIC8vIG51bSBhbnN3ZXIgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhdXRob3JpdHkgUlJzCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBhZGRpdGlvbmFsIFJScworICAgIC8vIFF1ZXN0aW9uCisgICAgMHgwMywgJ3cnLCAndycsICd3JywKKyAgICAweDA3LCAnZScsICd4JywgJ2EnLCAnbScsICdwJywgJ2wnLCAnZScsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MDEsICAvLyB0eXBlIEEKKyAgICAweDAwLCAweDAxLCAgLy8gY2xhc3MgSU4KKyAgICAvLyBBbnN3ZXIgMQorICAgIDB4MDMsICd3JywgJ3cnLCAndycsCisgICAgMHhjMCwgMHgxMCwgIC8vIG9mZnNldCAxNgorICAgIDB4MDAsIDB4MDEsICAvLyBSUiB0eXBlCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgLy8gVFRMCisgICAgMHgwMCwgMHgwNCwgIC8vIHJkYXRhIGxlbmd0aAorICAgIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgIH07CisgIHN0cnVjdCBob3N0ZW50ICpob3N0ID0gbnVsbHB0cjsKKyAgc3RydWN0IGFyZXNfYWRkcnR0bCBpbmZvWzJdOworICBpbnQgY291bnQgPSAyOworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX3BhcnNlX2FfcmVwbHkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsIGluZm8sICZjb3VudCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgaG9zdCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBIb3N0RW50KGhvc3QpOworICBFWFBFQ1RfRVEoInsnd3d3LmV4YW1wbGUuY29tJyBhbGlhc2VzPVtdIGFkZHJzPVsyLjMuNC41XX0iLCBzcy5zdHIoKSk7CisgIGFyZXNfZnJlZV9ob3N0ZW50KGhvc3QpOworfQorCitURVNUX0YoTGlicmFyeVRlc3QsIFBhcnNlRnVsbHlDb21wcmVzc2VkTmFtZSkgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBxaWQKKyAgICAweDg0LCAvLyByZXNwb25zZSArIHF1ZXJ5ICsgQUEgKyBub3QtVEMgKyBub3QtUkQKKyAgICAweDAwLCAvLyBub3QtUkEgKyBub3QtWiArIG5vdC1BRCArIG5vdC1DRCArIHJjPU5vRXJyb3IKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIHF1ZXN0aW9ucworICAgIDB4MDAsIDB4MDEsICAvLyBudW0gYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYWRkaXRpb25hbCBSUnMKKyAgICAvLyBRdWVzdGlvbgorICAgIDB4MDMsICd3JywgJ3cnLCAndycsCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDAxLCAgLy8gdHlwZSBBCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gQW5zd2VyIDEKKyAgICAweGMwLCAweDBjLCAgLy8gb2Zmc2V0IDEyCisgICAgMHgwMCwgMHgwMSwgIC8vIFJSIHR5cGUKKyAgICAweDAwLCAweDAxLCAgLy8gY2xhc3MgSU4KKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAvLyBUVEwKKyAgICAweDAwLCAweDA0LCAgLy8gcmRhdGEgbGVuZ3RoCisgICAgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgfTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRydHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEFTU0VSVF9ORShudWxscHRyLCBob3N0KTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieyd3d3cuZXhhbXBsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjVdfSIsIHNzLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7Cit9CisKK1RFU1RfRihMaWJyYXJ5VGVzdCwgUGFyc2VGdWxseUNvbXByZXNzZWROYW1lMikgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBxaWQKKyAgICAweDg0LCAvLyByZXNwb25zZSArIHF1ZXJ5ICsgQUEgKyBub3QtVEMgKyBub3QtUkQKKyAgICAweDAwLCAvLyBub3QtUkEgKyBub3QtWiArIG5vdC1BRCArIG5vdC1DRCArIHJjPU5vRXJyb3IKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIHF1ZXN0aW9ucworICAgIDB4MDAsIDB4MDEsICAvLyBudW0gYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYWRkaXRpb25hbCBSUnMKKyAgICAvLyBRdWVzdGlvbgorICAgIDB4QzAsIDB4MTIsICAvLyBwb2ludGVyIHRvIGxhdGVyIGluIG1lc3NhZ2UKKyAgICAweDAwLCAweDAxLCAgLy8gdHlwZSBBCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gQW5zd2VyIDEKKyAgICAweDAzLCAndycsICd3JywgJ3cnLAorICAgIDB4MDcsICdlJywgJ3gnLCAnYScsICdtJywgJ3AnLCAnbCcsICdlJywKKyAgICAweDAzLCAnYycsICdvJywgJ20nLAorICAgIDB4MDAsCisgICAgMHgwMCwgMHgwMSwgIC8vIFJSIHR5cGUKKyAgICAweDAwLCAweDAxLCAgLy8gY2xhc3MgSU4KKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAvLyBUVEwKKyAgICAweDAwLCAweDA0LCAgLy8gcmRhdGEgbGVuZ3RoCisgICAgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgfTsKKyAgc3RydWN0IGhvc3RlbnQgKmhvc3QgPSBudWxscHRyOworICBzdHJ1Y3QgYXJlc19hZGRydHRsIGluZm9bMl07CisgIGludCBjb3VudCA9IDI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfcGFyc2VfYV9yZXBseShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgaW5mbywgJmNvdW50KSk7CisgIEFTU0VSVF9ORShudWxscHRyLCBob3N0KTsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIHNzIDw8IEhvc3RFbnQoaG9zdCk7CisgIEVYUEVDVF9FUSgieyd3d3cuZXhhbXBsZS5jb20nIGFsaWFzZXM9W10gYWRkcnM9WzIuMy40LjVdfSIsIHNzLnN0cigpKTsKKyAgYXJlc19mcmVlX2hvc3RlbnQoaG9zdCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0Cit9ICAvLyBuYW1lc3BhY2UgYXJlcwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QuY2MgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZjYmE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9hcmVzLXRlc3QuY2MKQEAgLTAsMCArMSw2NjcgQEAKKyNpbmNsdWRlICJhcmVzLXRlc3QuaCIKKyNpbmNsdWRlICJkbnMtcHJvdG8uaCIKKworLy8gSW5jbHVkZSBhcmVzIGludGVybmFsIGZpbGVzIGZvciBETlMgcHJvdG9jb2wgZGV0YWlscworI2luY2x1ZGUgIm5hbWVzZXIuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgQllURV9DQVNUIChjaGFyICopCisjZGVmaW5lIHNjbG9zZSh4KSBjbG9zZXNvY2tldCh4KQorI2RlZmluZSBta2Rpcl8oZCwgcCkgbWtkaXIoZCkKKyNlbHNlCisjZGVmaW5lIEJZVEVfQ0FTVAorI2RlZmluZSBzY2xvc2UoeCkgY2xvc2UoeCkKKyNkZWZpbmUgbWtkaXJfKGQsIHApIG1rZGlyKGQsIHApCisjZW5kaWYKKworbmFtZXNwYWNlIGFyZXMgeworbmFtZXNwYWNlIHRlc3QgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKK2ludCBtb2NrX3BvcnQgPSA1MzAwOworCit1bnNpZ25lZCBsb25nIGxvbmcgTGlicmFyeVRlc3Q6OmZhaWxzXyA9IDA7CitzdGQ6Om1hcDxzaXplX3QsIGludD4gTGlicmFyeVRlc3Q6OnNpemVfZmFpbHNfOworCit2b2lkIFByb2Nlc3NXb3JrKGFyZXNfY2hhbm5lbCBjaGFubmVsLAorICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHN0ZDo6c2V0PGludD4oKT4gZ2V0X2V4dHJhZmRzLAorICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoaW50KT4gcHJvY2Vzc19leHRyYSkgeworICBpbnQgbmZkcywgY291bnQ7CisgIGZkX3NldCByZWFkZXJzLCB3cml0ZXJzOworICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICAvLyBSZXRyaWV2ZSB0aGUgc2V0IG9mIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCB0aGUgbGlicmFyeSB3YW50cyB1cyB0byBtb25pdG9yLgorICAgIEZEX1pFUk8oJnJlYWRlcnMpOworICAgIEZEX1pFUk8oJndyaXRlcnMpOworICAgIG5mZHMgPSBhcmVzX2ZkcyhjaGFubmVsLCAmcmVhZGVycywgJndyaXRlcnMpOworICAgIGlmIChuZmRzID09IDApICAvLyBubyB3b3JrIGxlZnQgdG8gZG8gaW4gdGhlIGxpYnJhcnkKKyAgICAgIHJldHVybjsKKworICAgIC8vIEFkZCBpbiB0aGUgZXh0cmEgRkRzIGlmIHByZXNlbnQuCisgICAgc3RkOjpzZXQ8aW50PiBleHRyYWZkcyA9IGdldF9leHRyYWZkcygpOworICAgIGZvciAoaW50IGV4dHJhZmQgOiBleHRyYWZkcykgeworICAgICAgRkRfU0VUKGV4dHJhZmQsICZyZWFkZXJzKTsKKyAgICAgIGlmIChleHRyYWZkID49IG5mZHMpIHsKKyAgICAgICAgbmZkcyA9IGV4dHJhZmQgKyAxOworICAgICAgfQorICAgIH0KKworICAgIC8vIFdhaXQgZm9yIGFjdGl2aXR5IG9yIHRpbWVvdXQuCisgICAgdHYudHZfc2VjID0gMDsKKyAgICB0di50dl91c2VjID0gMTAwMDAwOyAgLy8gMTAwbXMKKyAgICBjb3VudCA9IHNlbGVjdChuZmRzLCAmcmVhZGVycywgJndyaXRlcnMsIG51bGxwdHIsICZ0dik7CisgICAgaWYgKGNvdW50IDwgMCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJzZWxlY3QoKSBmYWlsZWQsIGVycm5vICVkXG4iLCBlcnJubyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTGV0IHRoZSBsaWJyYXJ5IHByb2Nlc3MgYW55IGFjdGl2aXR5LgorICAgIGFyZXNfcHJvY2VzcyhjaGFubmVsLCAmcmVhZGVycywgJndyaXRlcnMpOworCisgICAgLy8gTGV0IHRoZSBwcm92aWRlZCBjYWxsYmFjayBwcm9jZXNzIGFueSBhY3Rpdml0eSBvbiB0aGUgZXh0cmEgRkQuCisgICAgZm9yIChpbnQgZXh0cmFmZCA6IGV4dHJhZmRzKSB7CisgICAgICBpZiAoRkRfSVNTRVQoZXh0cmFmZCwgJnJlYWRlcnMpKSB7CisgICAgICAgIHByb2Nlc3NfZXh0cmEoZXh0cmFmZCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8vIHN0YXRpYwordm9pZCBMaWJyYXJ5VGVzdDo6U2V0QWxsb2NGYWlsKGludCBudGgpIHsKKyAgYXNzZXJ0KG50aCA+IDApOworICBhc3NlcnQobnRoIDw9IChpbnQpKDggKiBzaXplb2YoZmFpbHNfKSkpOworICBmYWlsc18gfD0gKDFMTCA8PCAobnRoIC0gMSkpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgTGlicmFyeVRlc3Q6OlNldEFsbG9jU2l6ZUZhaWwoc2l6ZV90IHNpemUpIHsKKyAgc2l6ZV9mYWlsc19bc2l6ZV0rKzsKK30KKworLy8gc3RhdGljCit2b2lkIExpYnJhcnlUZXN0OjpDbGVhckZhaWxzKCkgeworICBmYWlsc18gPSAwOworICBzaXplX2ZhaWxzXy5jbGVhcigpOworfQorCisKKy8vIHN0YXRpYworYm9vbCBMaWJyYXJ5VGVzdDo6U2hvdWxkQWxsb2NGYWlsKHNpemVfdCBzaXplKSB7CisgIGJvb2wgZmFpbCA9IChmYWlsc18gJiAweDAxKTsKKyAgZmFpbHNfID4+PSAxOworICBpZiAoc2l6ZV9mYWlsc19bc2l6ZV0gPiAwKSB7CisgICAgc2l6ZV9mYWlsc19bc2l6ZV0tLTsKKyAgICBmYWlsID0gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFpbDsKK30KKworLy8gc3RhdGljCit2b2lkKiBMaWJyYXJ5VGVzdDo6YW1hbGxvYyhzaXplX3Qgc2l6ZSkgeworICBpZiAoU2hvdWxkQWxsb2NGYWlsKHNpemUpKSB7CisgICAgaWYgKHZlcmJvc2UpIHN0ZDo6Y2VyciA8PCAiRmFpbGluZyBtYWxsb2MoIiA8PCBzaXplIDw8ICIpIHJlcXVlc3QiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworICB9Cit9CisKKy8vIHN0YXRpYwordm9pZCogTGlicmFyeVRlc3Q6OmFyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKFNob3VsZEFsbG9jRmFpbChzaXplKSkgeworICAgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIkZhaWxpbmcgcmVhbGxvYygiIDw8IHB0ciA8PCAiLCAiIDw8IHNpemUgPDwgIikgcmVxdWVzdCIgPDwgc3RkOjplbmRsOworICAgIHJldHVybiBudWxscHRyOworICB9IGVsc2UgeworICAgIHJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7CisgIH0KK30KKworLy8gc3RhdGljCit2b2lkIExpYnJhcnlUZXN0OjphZnJlZSh2b2lkICpwdHIpIHsKKyAgZnJlZShwdHIpOworfQorCitzdGQ6OnNldDxpbnQ+IE5vRXh0cmFGRHMoKSB7CisgIHJldHVybiBzdGQ6OnNldDxpbnQ+KCk7Cit9CisKK3ZvaWQgRGVmYXVsdENoYW5uZWxUZXN0OjpQcm9jZXNzKCkgeworICBQcm9jZXNzV29yayhjaGFubmVsXywgTm9FeHRyYUZEcywgbnVsbHB0cik7Cit9CisKK3ZvaWQgRGVmYXVsdENoYW5uZWxNb2RlVGVzdDo6UHJvY2VzcygpIHsKKyAgUHJvY2Vzc1dvcmsoY2hhbm5lbF8sIE5vRXh0cmFGRHMsIG51bGxwdHIpOworfQorCitNb2NrU2VydmVyOjpNb2NrU2VydmVyKGludCBmYW1pbHksIGludCBwb3J0LCBpbnQgdGNwcG9ydCkKKyAgOiB1ZHBwb3J0Xyhwb3J0KSwgdGNwcG9ydF8odGNwcG9ydCA/IHRjcHBvcnQgOiB1ZHBwb3J0XyksIHFpZF8oLTEpIHsKKyAgLy8gQ3JlYXRlIGEgVENQIHNvY2tldCB0byByZWNlaXZlIGRhdGEgb24uCisgIHRjcGZkXyA9IHNvY2tldChmYW1pbHksIFNPQ0tfU1RSRUFNLCAwKTsKKyAgRVhQRUNUX05FKC0xLCB0Y3BmZF8pOworICBpbnQgb3B0dmFsID0gMTsKKyAgc2V0c29ja29wdCh0Y3BmZF8sIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKyAgICAgICAgICAgICBCWVRFX0NBU1QgJm9wdHZhbCAsIHNpemVvZihpbnQpKTsKKyAgLy8gU2VuZCBUQ1AgZGF0YSByaWdodCBhd2F5LgorICBzZXRzb2Nrb3B0KHRjcGZkXywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLAorICAgICAgICAgICAgIEJZVEVfQ0FTVCAmb3B0dmFsICwgc2l6ZW9mKGludCkpOworCisgIC8vIENyZWF0ZSBhIFVEUCBzb2NrZXQgdG8gcmVjZWl2ZSBkYXRhIG9uLgorICB1ZHBmZF8gPSBzb2NrZXQoZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTsKKyAgRVhQRUNUX05FKC0xLCB1ZHBmZF8pOworCisgIC8vIEJpbmQgdGhlIHNvY2tldHMgdG8gdGhlIGdpdmVuIHBvcnQuCisgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkgeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIGFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHRjcHBvcnRfKTsKKyAgICBpbnQgdGNwcmMgPSBiaW5kKHRjcGZkXywgKHN0cnVjdCBzb2NrYWRkciopJmFkZHIsIHNpemVvZihhZGRyKSk7CisgICAgRVhQRUNUX0VRKDAsIHRjcHJjKSA8PCAiRmFpbGVkIHRvIGJpbmQgQUZfSU5FVCB0byBUQ1AgcG9ydCAiIDw8IHRjcHBvcnRfOworICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyh1ZHBwb3J0Xyk7CisgICAgaW50IHVkcHJjID0gYmluZCh1ZHBmZF8sIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBzaXplb2YoYWRkcikpOworICAgIEVYUEVDVF9FUSgwLCB1ZHByYykgPDwgIkZhaWxlZCB0byBiaW5kIEFGX0lORVQgdG8gVURQIHBvcnQgIiA8PCB1ZHBwb3J0XzsKKyAgfSBlbHNlIHsKKyAgICBFWFBFQ1RfRVEoQUZfSU5FVDYsIGZhbWlseSk7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgbWVtc2V0KCZhZGRyLnNpbjZfYWRkciwgMCwgc2l6ZW9mKGFkZHIuc2luNl9hZGRyKSk7ICAvLyBpbjZhZGRyX2FueQorICAgIGFkZHIuc2luNl9wb3J0ID0gaHRvbnModGNwcG9ydF8pOworICAgIGludCB0Y3ByYyA9IGJpbmQodGNwZmRfLCAoc3RydWN0IHNvY2thZGRyKikmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgdGNwcmMpIDw8ICJGYWlsZWQgdG8gYmluZCBBRl9JTkVUNiB0byBUQ1AgcG9ydCAiIDw8IHRjcHBvcnRfOworICAgIGFkZHIuc2luNl9wb3J0ID0gaHRvbnModWRwcG9ydF8pOworICAgIGludCB1ZHByYyA9IGJpbmQodWRwZmRfLCAoc3RydWN0IHNvY2thZGRyKikmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgdWRwcmMpIDw8ICJGYWlsZWQgdG8gYmluZCBBRl9JTkVUNiB0byBVRFAgcG9ydCAiIDw8IHVkcHBvcnRfOworICB9CisgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIkNvbmZpZ3VyZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgIDw8IChmYW1pbHkgPT0gQUZfSU5FVCA/ICJJUHY0IiA6ICJJUHY2IikKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIG1vY2sgc2VydmVyIHdpdGggVENQIHNvY2tldCAiIDw8IHRjcGZkXworICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgb24gcG9ydCAiIDw8IHRjcHBvcnRfCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBhbmQgVURQIHNvY2tldCAiIDw8IHVkcGZkXworICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgb24gcG9ydCAiIDw8IHVkcHBvcnRfIDw8IHN0ZDo6ZW5kbDsKKworICAvLyBGb3IgVENQLCBhbHNvIG5lZWQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucy4KKyAgRVhQRUNUX0VRKDAsIGxpc3Rlbih0Y3BmZF8sIDUpKSA8PCAiRmFpbGVkIHRvIGxpc3RlbiBmb3IgVENQIGNvbm5lY3Rpb25zIjsKK30KKworTW9ja1NlcnZlcjo6fk1vY2tTZXJ2ZXIoKSB7CisgIGZvciAoaW50IGZkIDogY29ubmZkc18pIHsKKyAgICBzY2xvc2UoZmQpOworICB9CisgIHNjbG9zZSh0Y3BmZF8pOworICBzY2xvc2UodWRwZmRfKTsKK30KKwordm9pZCBNb2NrU2VydmVyOjpQcm9jZXNzRkQoaW50IGZkKSB7CisgIGlmIChmZCAhPSB0Y3BmZF8gJiYgZmQgIT0gdWRwZmRfICYmIGNvbm5mZHNfLmZpbmQoZmQpID09IGNvbm5mZHNfLmVuZCgpKSB7CisgICAgLy8gTm90IG9uZSBvZiBvdXIgRkRzLgorICAgIHJldHVybjsKKyAgfQorICBpZiAoZmQgPT0gdGNwZmRfKSB7CisgICAgaW50IGNvbm5mZCA9IGFjY2VwdCh0Y3BmZF8sIE5VTEwsIE5VTEwpOworICAgIGlmIChjb25uZmQgPCAwKSB7CisgICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yIGFjY2VwdGluZyBjb25uZWN0aW9uIG9uIGZkICIgPDwgZmQgPDwgc3RkOjplbmRsOworICAgIH0gZWxzZSB7CisgICAgICBjb25uZmRzXy5pbnNlcnQoY29ubmZkKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gQWN0aXZpdHkgb24gYSBkYXRhLWJlYXJpbmcgZmlsZSBkZXNjcmlwdG9yLgorICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOworICBzb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKKyAgYnl0ZSBidWZmZXJbMjA0OF07CisgIGludCBsZW4gPSByZWN2ZnJvbShmZCwgQllURV9DQVNUIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDAsCisgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRybGVuKTsKKyAgYnl0ZSogZGF0YSA9IGJ1ZmZlcjsKKyAgaWYgKGZkICE9IHVkcGZkXykgeworICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgY29ubmZkc18uZXJhc2Uoc3RkOjpmaW5kKGNvbm5mZHNfLmJlZ2luKCksIGNvbm5mZHNfLmVuZCgpLCBmZCkpOworICAgICAgc2Nsb3NlKGZkKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGxlbiA8IDIpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiUGFja2V0IHRvbyBzaG9ydCAoIiA8PCBsZW4gPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IHRjcGxlbiA9IChkYXRhWzBdIDw8IDgpICsgZGF0YVsxXTsKKyAgICBkYXRhICs9IDI7CisgICAgbGVuIC09IDI7CisgICAgaWYgKHRjcGxlbiAhPSBsZW4pIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiV2FybmluZzogVENQIGxlbmd0aCAiIDw8IHRjcGxlbgorICAgICAgICAgICAgICAgIDw8ICIgZG9lc24ndCBtYXRjaCByZW1haW5pbmcgZGF0YSBsZW5ndGggIiA8PCBsZW4gPDwgc3RkOjplbmRsOworICAgIH0KKyAgfQorCisgIC8vIEFzc3VtZSB0aGUgcGFja2V0IGlzIGEgd2VsbC1mb3JtZWQgRE5TIHJlcXVlc3QgYW5kIGV4dHJhY3QgdGhlIHJlcXVlc3QKKyAgLy8gZGV0YWlscy4KKyAgaWYgKGxlbiA8IE5TX0hGSVhFRFNaKSB7CisgICAgc3RkOjpjZXJyIDw8ICJQYWNrZXQgdG9vIHNob3J0ICgiIDw8IGxlbiA8PCAiKSIgPDwgc3RkOjplbmRsOworICAgIHJldHVybjsKKyAgfQorICBpbnQgcWlkID0gRE5TX0hFQURFUl9RSUQoZGF0YSk7CisgIGlmIChETlNfSEVBREVSX1FSKGRhdGEpICE9IDApIHsKKyAgICBzdGQ6OmNlcnIgPDwgIk5vdCBhIHJlcXVlc3QiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKEROU19IRUFERVJfT1BDT0RFKGRhdGEpICE9IG5zX29fcXVlcnkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIk5vdCBhIHF1ZXJ5IChvcGNvZGUgIiA8PCBETlNfSEVBREVSX09QQ09ERShkYXRhKQorICAgICAgICAgICAgICA8PCAiKSIgPDwgc3RkOjplbmRsOworICAgIHJldHVybjsKKyAgfQorICBpZiAoRE5TX0hFQURFUl9RRENPVU5UKGRhdGEpICE9IDEpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIlVuZXhwZWN0ZWQgcXVlc3Rpb24gY291bnQgKCIgPDwgRE5TX0hFQURFUl9RRENPVU5UKGRhdGEpCisgICAgICAgICAgICAgIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuOworICB9CisgIGJ5dGUqIHF1ZXN0aW9uID0gZGF0YSArIDEyOworICBpbnQgcWxlbiA9IGxlbiAtIDEyOworCisgIGNoYXIgKm5hbWUgPSBudWxscHRyOworICBsb25nIGVuY2xlbjsKKyAgYXJlc19leHBhbmRfbmFtZShxdWVzdGlvbiwgZGF0YSwgbGVuLCAmbmFtZSwgJmVuY2xlbik7CisgIGlmICghbmFtZSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIHJldHJpZXZlIG5hbWUiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm47CisgIH0KKyAgcWxlbiAtPSBlbmNsZW47CisgIHF1ZXN0aW9uICs9IGVuY2xlbjsKKyAgc3RkOjpzdHJpbmcgbmFtZXN0cihuYW1lKTsKKyAgZnJlZShuYW1lKTsKKworICBpZiAocWxlbiA8IDQpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIlVuZXhwZWN0ZWQgcXVlc3Rpb24gc2l6ZSAoIiA8PCBxbGVuCisgICAgICAgICAgICAgIDw8ICIgYnl0ZXMgYWZ0ZXIgbmFtZSkiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKEROU19RVUVTVElPTl9DTEFTUyhxdWVzdGlvbikgIT0gbnNfY19pbikgeworICAgIHN0ZDo6Y2VyciA8PCAiVW5leHBlY3RlZCBxdWVzdGlvbiBjbGFzcyAoIiA8PCBETlNfUVVFU1RJT05fQ0xBU1MocXVlc3Rpb24pCisgICAgICAgICAgICAgIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuOworICB9CisgIGludCBycnR5cGUgPSBETlNfUVVFU1RJT05fVFlQRShxdWVzdGlvbik7CisKKyAgaWYgKHZlcmJvc2UpIHsKKyAgICBzdGQ6OnZlY3RvcjxieXRlPiByZXEoZGF0YSwgZGF0YSArIGxlbik7CisgICAgc3RkOjpjZXJyIDw8ICJyZWNlaXZlZCAiIDw8IChmZCA9PSB1ZHBmZF8gPyAiVURQIiA6ICJUQ1AiKSA8PCAiIHJlcXVlc3QgIiA8PCBQYWNrZXRUb1N0cmluZyhyZXEpCisgICAgICAgICAgICAgIDw8ICIgb24gcG9ydCAiIDw8IChmZCA9PSB1ZHBmZF8gPyB1ZHBwb3J0XyA6IHRjcHBvcnRfKSA8PCBzdGQ6OmVuZGw7CisgICAgc3RkOjpjZXJyIDw8ICJQcm9jZXNzUmVxdWVzdCgiIDw8IHFpZCA8PCAiLCAnIiA8PCBuYW1lc3RyCisgICAgICAgICAgICAgIDw8ICInLCAiIDw8IFJSVHlwZVRvU3RyaW5nKHJydHlwZSkgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgfQorICBQcm9jZXNzUmVxdWVzdChmZCwgJmFkZHIsIGFkZHJsZW4sIHFpZCwgbmFtZXN0ciwgcnJ0eXBlKTsKK30KKworc3RkOjpzZXQ8aW50PiBNb2NrU2VydmVyOjpmZHMoKSBjb25zdCB7CisgIHN0ZDo6c2V0PGludD4gcmVzdWx0ID0gY29ubmZkc187CisgIHJlc3VsdC5pbnNlcnQodGNwZmRfKTsKKyAgcmVzdWx0Lmluc2VydCh1ZHBmZF8pOworICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIE1vY2tTZXJ2ZXI6OlByb2Nlc3NSZXF1ZXN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UqIGFkZHIsIGludCBhZGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcWlkLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHJydHlwZSkgeworICAvLyBCZWZvcmUgcHJvY2Vzc2luZywgbGV0IGdNb2NrIGtub3cgdGhlIHJlcXVlc3QgaXMgaGFwcGVuaW5nLgorICBPblJlcXVlc3QobmFtZSwgcnJ0eXBlKTsKKworICBpZiAocmVwbHlfLnNpemUoKSA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gTWFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGN1cnJlbnQgcGVuZGluZyByZXBseS4KKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gcmVwbHkgPSByZXBseV87CisKKyAgaWYgKHFpZF8gPj0gMCkgeworICAgIC8vIFVzZSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWQgcXVlcnkgSUQuCisgICAgcWlkID0gcWlkXzsKKyAgfQorICBpZiAocmVwbHkuc2l6ZSgpID49ICAyKSB7CisgICAgLy8gT3ZlcndyaXRlIHRoZSBxdWVyeSBJRCBpZiBzcGFjZSB0byBkbyBzby4KKyAgICByZXBseVswXSA9IChieXRlKSgocWlkID4+IDgpICYgMHhmZik7CisgICAgcmVwbHlbMV0gPSAoYnl0ZSkocWlkICYgMHhmZik7CisgIH0KKyAgaWYgKHZlcmJvc2UpIHN0ZDo6Y2VyciA8PCAic2VuZGluZyByZXBseSAiIDw8IFBhY2tldFRvU3RyaW5nKHJlcGx5KQorICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgb24gcG9ydCAiIDw8ICgoZmQgPT0gdWRwZmRfKSA/IHVkcHBvcnRfIDogdGNwcG9ydF8pIDw8IHN0ZDo6ZW5kbDsKKworICAvLyBQcmVmaXggd2l0aCAyLWJ5dGUgbGVuZ3RoIGlmIFRDUC4KKyAgaWYgKGZkICE9IHVkcGZkXykgeworICAgIGludCBsZW4gPSByZXBseS5zaXplKCk7CisgICAgc3RkOjp2ZWN0b3I8Ynl0ZT4gdmxlbiA9IHsoYnl0ZSkoKGxlbiAmIDB4RkYwMCkgPj4gOCksIChieXRlKShsZW4gJiAweEZGKX07CisgICAgcmVwbHkuaW5zZXJ0KHJlcGx5LmJlZ2luKCksIHZsZW4uYmVnaW4oKSwgdmxlbi5lbmQoKSk7CisgICAgLy8gQWxzbywgZG9uJ3QgYm90aGVyIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgYWRkciA9IG51bGxwdHI7CisgICAgYWRkcmxlbiA9IDA7CisgIH0KKworICBpbnQgcmMgPSBzZW5kdG8oZmQsIEJZVEVfQ0FTVCByZXBseS5kYXRhKCksIHJlcGx5LnNpemUoKSwgMCwKKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyLCBhZGRybGVuKTsKKyAgaWYgKHJjIDwgc3RhdGljX2Nhc3Q8aW50PihyZXBseS5zaXplKCkpKSB7CisgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gc2VuZCBmdWxsIHJlcGx5LCByYz0iIDw8IHJjIDw8IHN0ZDo6ZW5kbDsKKyAgfQorfQorCisvLyBzdGF0aWMKK01vY2tDaGFubmVsT3B0c1Rlc3Q6Ok5pY2VNb2NrU2VydmVycyBNb2NrQ2hhbm5lbE9wdHNUZXN0OjpCdWlsZFNlcnZlcnMoaW50IGNvdW50LCBpbnQgZmFtaWx5LCBpbnQgYmFzZV9wb3J0KSB7CisgIE5pY2VNb2NrU2VydmVycyBzZXJ2ZXJzOworICBhc3NlcnQoY291bnQgPiAwKTsKKyAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGNvdW50OyBpaSsrKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5pY2VNb2NrU2VydmVyPiBzZXJ2ZXIobmV3IE5pY2VNb2NrU2VydmVyKGZhbWlseSwgYmFzZV9wb3J0ICsgaWkpKTsKKyAgICBzZXJ2ZXJzLnB1c2hfYmFjayhzdGQ6Om1vdmUoc2VydmVyKSk7CisgIH0KKyAgcmV0dXJuIHNlcnZlcnM7Cit9CisKK01vY2tDaGFubmVsT3B0c1Rlc3Q6Ok1vY2tDaGFubmVsT3B0c1Rlc3QoaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlX3RjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyZXNfb3B0aW9ucyogZ2l2ZW5vcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bWFzaykKKyAgOiBzZXJ2ZXJzXyhCdWlsZFNlcnZlcnMoY291bnQsIGZhbWlseSwgbW9ja19wb3J0KSksCisgICAgc2VydmVyXygqc2VydmVyc19bMF0uZ2V0KCkpLCBjaGFubmVsXyhudWxscHRyKSB7CisgIC8vIFNldCB1cCBjaGFubmVsIG9wdGlvbnMuCisgIHN0cnVjdCBhcmVzX29wdGlvbnMgb3B0czsKKyAgaWYgKGdpdmVub3B0cykgeworICAgIG1lbWNweSgmb3B0cywgZ2l2ZW5vcHRzLCBzaXplb2Yob3B0cykpOworICB9IGVsc2UgeworICAgIG1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKyAgfQorCisgIC8vIFBvaW50IHRoZSBsaWJyYXJ5IGF0IHRoZSBmaXJzdCBtb2NrIHNlcnZlciBieSBkZWZhdWx0IChvdmVycmlkZGVuIGJlbG93KS4KKyAgb3B0cy51ZHBfcG9ydCA9IG1vY2tfcG9ydDsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9VRFBfUE9SVDsKKyAgb3B0cy50Y3BfcG9ydCA9IG1vY2tfcG9ydDsKKyAgb3B0bWFzayB8PSBBUkVTX09QVF9UQ1BfUE9SVDsKKworICAvLyBJZiBub3QgYWxyZWFkeSBvdmVycmlkZGVuLCBzZXQgc2hvcnQtaXNoIHRpbWVvdXRzLgorICBpZiAoIShvcHRtYXNrICYgKEFSRVNfT1BUX1RJTUVPVVRNU3xBUkVTX09QVF9USU1FT1VUKSkpIHsKKyAgICBvcHRzLnRpbWVvdXQgPSAxNTAwOworICAgIG9wdG1hc2sgfD0gQVJFU19PUFRfVElNRU9VVE1TOworICB9CisgIC8vIElmIG5vdCBhbHJlYWR5IG92ZXJyaWRkZW4sIHNldCAzIHJldHJpZXMuCisgIGlmICghKG9wdG1hc2sgJiBBUkVTX09QVF9UUklFUykpIHsKKyAgICBvcHRzLnRyaWVzID0gMzsKKyAgICBvcHRtYXNrIHw9IEFSRVNfT1BUX1RSSUVTOworICB9CisgIC8vIElmIG5vdCBhbHJlYWR5IG92ZXJyaWRkZW4sIHNldCBzZWFyY2ggZG9tYWlucy4KKyAgY29uc3QgY2hhciAqZG9tYWluc1szXSA9IHsiZmlyc3QuY29tIiwgInNlY29uZC5vcmciLCAidGhpcmQuZ292In07CisgIGlmICghKG9wdG1hc2sgJiBBUkVTX09QVF9ET01BSU5TKSkgeworICAgIG9wdHMubmRvbWFpbnMgPSAzOworICAgIG9wdHMuZG9tYWlucyA9IChjaGFyKiopZG9tYWluczsKKyAgICBvcHRtYXNrIHw9IEFSRVNfT1BUX0RPTUFJTlM7CisgIH0KKyAgaWYgKGZvcmNlX3RjcCkgeworICAgIG9wdHMuZmxhZ3MgfD0gQVJFU19GTEFHX1VTRVZDOworICAgIG9wdG1hc2sgfD0gQVJFU19PUFRfRkxBR1M7CisgIH0KKworICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2luaXRfb3B0aW9ucygmY2hhbm5lbF8sICZvcHRzLCBvcHRtYXNrKSk7CisgIEVYUEVDVF9ORShudWxscHRyLCBjaGFubmVsXyk7CisKKyAgLy8gU2V0IHVwIHNlcnZlcnMgYWZ0ZXIgY29uc3RydWN0aW9uIHNvIHdlIGNhbiBzZXQgaW5kaXZpZHVhbCBwb3J0cworICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSogcHJldiA9IG51bGxwdHI7CisgIHN0cnVjdCBhcmVzX2FkZHJfcG9ydF9ub2RlKiBmaXJzdCA9IG51bGxwdHI7CisgIGZvciAoY29uc3QgYXV0byYgc2VydmVyIDogc2VydmVyc18pIHsKKyAgICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSogbm9kZSA9IChzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSopbWFsbG9jKHNpemVvZigqbm9kZSkpOworICAgIGlmIChwcmV2KSB7CisgICAgICBwcmV2LT5uZXh0ID0gbm9kZTsKKyAgICB9IGVsc2UgeworICAgICAgZmlyc3QgPSBub2RlOworICAgIH0KKyAgICBub2RlLT5uZXh0ID0gbnVsbHB0cjsKKyAgICBub2RlLT5mYW1pbHkgPSBmYW1pbHk7CisgICAgbm9kZS0+dWRwX3BvcnQgPSBzZXJ2ZXItPnVkcHBvcnQoKTsKKyAgICBub2RlLT50Y3BfcG9ydCA9IHNlcnZlci0+dGNwcG9ydCgpOworICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgbm9kZS0+YWRkci5hZGRyNC5zX2FkZHIgPSBodG9ubCgweDdGMDAwMDAxKTsKKyAgICB9IGVsc2UgeworICAgICAgbWVtc2V0KCZub2RlLT5hZGRyLmFkZHI2LCAwLCBzaXplb2Yobm9kZS0+YWRkci5hZGRyNikpOworICAgICAgbm9kZS0+YWRkci5hZGRyNi5fUzZfdW4uX1M2X3U4WzE1XSA9IDE7CisgICAgfQorICAgIHByZXYgPSBub2RlOworICB9CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfc2V0X3NlcnZlcnNfcG9ydHMoY2hhbm5lbF8sIGZpcnN0KSk7CisKKyAgd2hpbGUgKGZpcnN0KSB7CisgICAgcHJldiA9IGZpcnN0OworICAgIGZpcnN0ID0gZmlyc3QtPm5leHQ7CisgICAgZnJlZShwcmV2KTsKKyAgfQorICBpZiAodmVyYm9zZSkgeworICAgIHN0ZDo6Y2VyciA8PCAiQ29uZmlndXJlZCBsaWJyYXJ5IHdpdGggc2VydmVyczoiOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXJ2ZXJzID0gR2V0TmFtZVNlcnZlcnMoY2hhbm5lbF8pOworICAgIGZvciAoY29uc3QgYXV0byYgc2VydmVyIDogc2VydmVycykgeworICAgICAgc3RkOjpjZXJyIDw8ICIgIiA8PCBzZXJ2ZXI7CisgICAgfQorICAgIHN0ZDo6Y2VyciA8PCBzdGQ6OmVuZGw7CisgIH0KK30KKworTW9ja0NoYW5uZWxPcHRzVGVzdDo6fk1vY2tDaGFubmVsT3B0c1Rlc3QoKSB7CisgIGlmIChjaGFubmVsXykgeworICAgIGFyZXNfZGVzdHJveShjaGFubmVsXyk7CisgIH0KKyAgY2hhbm5lbF8gPSBudWxscHRyOworfQorCitzdGQ6OnNldDxpbnQ+IE1vY2tDaGFubmVsT3B0c1Rlc3Q6OmZkcygpIGNvbnN0IHsKKyAgc3RkOjpzZXQ8aW50PiBmZHM7CisgIGZvciAoY29uc3QgYXV0byYgc2VydmVyIDogc2VydmVyc18pIHsKKyAgICBzdGQ6OnNldDxpbnQ+IHNlcnZlcmZkcyA9IHNlcnZlci0+ZmRzKCk7CisgICAgZmRzLmluc2VydChzZXJ2ZXJmZHMuYmVnaW4oKSwgc2VydmVyZmRzLmVuZCgpKTsKKyAgfQorICByZXR1cm4gZmRzOworfQorCit2b2lkIE1vY2tDaGFubmVsT3B0c1Rlc3Q6OlByb2Nlc3NGRChpbnQgZmQpIHsKKyAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBzZXJ2ZXJzXykgeworICAgIHNlcnZlci0+UHJvY2Vzc0ZEKGZkKTsKKyAgfQorfQorCit2b2lkIE1vY2tDaGFubmVsT3B0c1Rlc3Q6OlByb2Nlc3MoKSB7CisgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OnBsYWNlaG9sZGVyczsKKyAgUHJvY2Vzc1dvcmsoY2hhbm5lbF8sCisgICAgICAgICAgICAgIHN0ZDo6YmluZCgmTW9ja0NoYW5uZWxPcHRzVGVzdDo6ZmRzLCB0aGlzKSwKKyAgICAgICAgICAgICAgc3RkOjpiaW5kKCZNb2NrQ2hhbm5lbE9wdHNUZXN0OjpQcm9jZXNzRkQsIHRoaXMsIF8xKSk7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBIb3N0UmVzdWx0JiByZXN1bHQpIHsKKyAgb3MgPDwgJ3snOworICBpZiAocmVzdWx0LmRvbmVfKSB7CisgICAgb3MgPDwgU3RhdHVzVG9TdHJpbmcocmVzdWx0LnN0YXR1c18pIDw8ICIgIiA8PCByZXN1bHQuaG9zdF87CisgIH0gZWxzZSB7CisgICAgb3MgPDwgIihpbmNvbXBsZXRlKSI7CisgIH0KKyAgb3MgPDwgJ30nOworICByZXR1cm4gb3M7Cit9CisKK0hvc3RFbnQ6Okhvc3RFbnQoY29uc3Qgc3RydWN0IGhvc3RlbnQgKmhvc3RlbnQpIDogYWRkcnR5cGVfKC0xKSB7CisgIGlmICghaG9zdGVudCkKKyAgICByZXR1cm47CisgIGlmIChob3N0ZW50LT5oX25hbWUpCisgICAgbmFtZV8gPSBob3N0ZW50LT5oX25hbWU7CisgIGlmIChob3N0ZW50LT5oX2FsaWFzZXMpIHsKKyAgICBjaGFyKiogcGFsaWFzID0gaG9zdGVudC0+aF9hbGlhc2VzOworICAgIHdoaWxlICgqcGFsaWFzICE9IG51bGxwdHIpIHsKKyAgICAgIGFsaWFzZXNfLnB1c2hfYmFjaygqcGFsaWFzKTsKKyAgICAgIHBhbGlhcysrOworICAgIH0KKyAgfQorICBhZGRydHlwZV8gPSBob3N0ZW50LT5oX2FkZHJ0eXBlOworICBpZiAoaG9zdGVudC0+aF9hZGRyX2xpc3QpIHsKKyAgICBjaGFyKiogcGFkZHIgPSBob3N0ZW50LT5oX2FkZHJfbGlzdDsKKyAgICB3aGlsZSAoKnBhZGRyICE9IG51bGxwdHIpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGFkZHIgPSBBZGRyZXNzVG9TdHJpbmcoKnBhZGRyLCBob3N0ZW50LT5oX2xlbmd0aCk7CisgICAgICBhZGRyc18ucHVzaF9iYWNrKGFkZHIpOworICAgICAgcGFkZHIrKzsKKyAgICB9CisgIH0KK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEhvc3RFbnQmIGhvc3QpIHsKKyAgb3MgPDwgJ3snOworICBvcyA8PCAiJyIgPDwgaG9zdC5uYW1lXyA8PCAiJyAiCisgICAgIDw8ICJhbGlhc2VzPVsiOworICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgaG9zdC5hbGlhc2VzXy5zaXplKCk7IGlpKyspIHsKKyAgICBpZiAoaWkgPiAwKSBvcyA8PCAiLCAiOworICAgIG9zIDw8IGhvc3QuYWxpYXNlc19baWldOworICB9CisgIG9zIDw8ICJdICI7CisgIG9zIDw8ICJhZGRycz1bIjsKKyAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGhvc3QuYWRkcnNfLnNpemUoKTsgaWkrKykgeworICAgIGlmIChpaSA+IDApIG9zIDw8ICIsICI7CisgICAgb3MgPDwgaG9zdC5hZGRyc19baWldOworICB9CisgIG9zIDw8ICJdIjsKKyAgb3MgPDwgJ30nOworICByZXR1cm4gb3M7Cit9CisKK3ZvaWQgSG9zdENhbGxiYWNrKHZvaWQgKmRhdGEsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpob3N0ZW50KSB7CisgIEVYUEVDVF9ORShudWxscHRyLCBkYXRhKTsKKyAgSG9zdFJlc3VsdCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxIb3N0UmVzdWx0Kj4oZGF0YSk7CisgIHJlc3VsdC0+ZG9uZV8gPSB0cnVlOworICByZXN1bHQtPnN0YXR1c18gPSBzdGF0dXM7CisgIHJlc3VsdC0+dGltZW91dHNfID0gdGltZW91dHM7CisgIHJlc3VsdC0+aG9zdF8gPSBIb3N0RW50KGhvc3RlbnQpOworICBpZiAodmVyYm9zZSkgc3RkOjpjZXJyIDw8ICJIb3N0Q2FsbGJhY2soIiA8PCAqcmVzdWx0IDw8ICIpIiA8PCBzdGQ6OmVuZGw7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBTZWFyY2hSZXN1bHQmIHJlc3VsdCkgeworICBvcyA8PCAneyc7CisgIGlmIChyZXN1bHQuZG9uZV8pIHsKKyAgICBvcyA8PCBTdGF0dXNUb1N0cmluZyhyZXN1bHQuc3RhdHVzXykgPDwgIiAiIDw8IFBhY2tldFRvU3RyaW5nKHJlc3VsdC5kYXRhXyk7CisgIH0gZWxzZSB7CisgICAgb3MgPDwgIihpbmNvbXBsZXRlKSI7CisgIH0KKyAgb3MgPDwgJ30nOworICByZXR1cm4gb3M7Cit9CisKK3ZvaWQgU2VhcmNoQ2FsbGJhY2sodm9pZCAqZGF0YSwgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphYnVmLCBpbnQgYWxlbikgeworICBFWFBFQ1RfTkUobnVsbHB0ciwgZGF0YSk7CisgIFNlYXJjaFJlc3VsdCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxTZWFyY2hSZXN1bHQqPihkYXRhKTsKKyAgcmVzdWx0LT5kb25lXyA9IHRydWU7CisgIHJlc3VsdC0+c3RhdHVzXyA9IHN0YXR1czsKKyAgcmVzdWx0LT50aW1lb3V0c18gPSB0aW1lb3V0czsKKyAgcmVzdWx0LT5kYXRhXy5hc3NpZ24oYWJ1ZiwgYWJ1ZiArIGFsZW4pOworICBpZiAodmVyYm9zZSkgc3RkOjpjZXJyIDw8ICJTZWFyY2hDYWxsYmFjaygiIDw8ICpyZXN1bHQgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IE5hbWVJbmZvUmVzdWx0JiByZXN1bHQpIHsKKyAgb3MgPDwgJ3snOworICBpZiAocmVzdWx0LmRvbmVfKSB7CisgICAgb3MgPDwgU3RhdHVzVG9TdHJpbmcocmVzdWx0LnN0YXR1c18pIDw8ICIgIiA8PCByZXN1bHQubm9kZV8gPDwgIiAiIDw8IHJlc3VsdC5zZXJ2aWNlXzsKKyAgfSBlbHNlIHsKKyAgICBvcyA8PCAiKGluY29tcGxldGUpIjsKKyAgfQorICBvcyA8PCAnfSc7CisgIHJldHVybiBvczsKK30KKwordm9pZCBOYW1lSW5mb0NhbGxiYWNrKHZvaWQgKmRhdGEsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpub2RlLCBjaGFyICpzZXJ2aWNlKSB7CisgIEVYUEVDVF9ORShudWxscHRyLCBkYXRhKTsKKyAgTmFtZUluZm9SZXN1bHQqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmFtZUluZm9SZXN1bHQqPihkYXRhKTsKKyAgcmVzdWx0LT5kb25lXyA9IHRydWU7CisgIHJlc3VsdC0+c3RhdHVzXyA9IHN0YXR1czsKKyAgcmVzdWx0LT50aW1lb3V0c18gPSB0aW1lb3V0czsKKyAgcmVzdWx0LT5ub2RlXyA9IHN0ZDo6c3RyaW5nKG5vZGUgPyBub2RlIDogIiIpOworICByZXN1bHQtPnNlcnZpY2VfID0gc3RkOjpzdHJpbmcoc2VydmljZSA/IHNlcnZpY2UgOiAiIik7CisgIGlmICh2ZXJib3NlKSBzdGQ6OmNlcnIgPDwgIk5hbWVJbmZvQ2FsbGJhY2soIiA8PCAqcmVzdWx0IDw8ICIpIiA8PCBzdGQ6OmVuZGw7Cit9CisKK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXROYW1lU2VydmVycyhhcmVzX2NoYW5uZWwgY2hhbm5lbCkgeworICBzdHJ1Y3QgYXJlc19hZGRyX3BvcnRfbm9kZSogc2VydmVycyA9IG51bGxwdHI7CisgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfZ2V0X3NlcnZlcnNfcG9ydHMoY2hhbm5lbCwgJnNlcnZlcnMpKTsKKyAgc3RydWN0IGFyZXNfYWRkcl9wb3J0X25vZGUqIHNlcnZlciA9IHNlcnZlcnM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXN1bHRzOworICB3aGlsZSAoc2VydmVyKSB7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgICAgc3dpdGNoIChzZXJ2ZXItPmZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgIHNzIDw8IEFkZHJlc3NUb1N0cmluZygoY2hhciopJnNlcnZlci0+YWRkci5hZGRyNCwgNCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgaWYgKHNlcnZlci0+dWRwX3BvcnQgIT0gMCkgeworICAgICAgICBzcyA8PCAnWyc7CisgICAgICB9CisgICAgICBzcyA8PCBBZGRyZXNzVG9TdHJpbmcoKGNoYXIqKSZzZXJ2ZXItPmFkZHIuYWRkcjYsIDE2KTsKKyAgICAgIGlmIChzZXJ2ZXItPnVkcF9wb3J0ICE9IDApIHsKKyAgICAgICAgc3MgPDwgJ10nOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJlc3VsdHMucHVzaF9iYWNrKCI8dW5rbm93biBmYW1pbHk+Iik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHNlcnZlci0+dWRwX3BvcnQgIT0gMCkgeworICAgICAgc3MgPDwgIjoiIDw8IHNlcnZlci0+dWRwX3BvcnQ7CisgICAgfQorICAgIHJlc3VsdHMucHVzaF9iYWNrKHNzLnN0cigpKTsKKyAgICBzZXJ2ZXIgPSBzZXJ2ZXItPm5leHQ7CisgIH0KKyAgaWYgKHNlcnZlcnMpIGFyZXNfZnJlZV9kYXRhKHNlcnZlcnMpOworICByZXR1cm4gcmVzdWx0czsKK30KKworVHJhbnNpZW50RGlyOjpUcmFuc2llbnREaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcm5hbWUpIDogZGlybmFtZV8oZGlybmFtZSkgeworICBpZiAobWtkaXJfKGRpcm5hbWVfLmNfc3RyKCksIDA3NTUpICE9IDApIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBjcmVhdGUgc3ViZGlyZWN0b3J5ICciIDw8IGRpcm5hbWVfIDw8ICInIiA8PCBzdGQ6OmVuZGw7CisgIH0KK30KKworVHJhbnNpZW50RGlyOjp+VHJhbnNpZW50RGlyKCkgeworICBybWRpcihkaXJuYW1lXy5jX3N0cigpKTsKK30KKworVHJhbnNpZW50RmlsZTo6VHJhbnNpZW50RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50cykKKyAgICA6IGZpbGVuYW1lXyhmaWxlbmFtZSkgeworICBGSUxFICpmID0gZm9wZW4oZmlsZW5hbWUuY19zdHIoKSwgInciKTsKKyAgaWYgKGYgPT0gbnVsbHB0cikgeworICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGZhaWxlZCB0byBjcmVhdGUgJyIgPDwgZmlsZW5hbWUgPDwgIiciIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm47CisgIH0KKyAgaW50IHJjID0gZndyaXRlKGNvbnRlbnRzLmRhdGEoKSwgMSwgY29udGVudHMuc2l6ZSgpLCBmKTsKKyAgaWYgKHJjICE9IChpbnQpY29udGVudHMuc2l6ZSgpKSB7CisgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogZmFpbGVkIHRvIHdyaXRlIGNvbnRlbnRzIG9mICciIDw8IGZpbGVuYW1lIDw8ICInIiA8PCBzdGQ6OmVuZGw7CisgIH0KKyAgZmNsb3NlKGYpOworfQorCitUcmFuc2llbnRGaWxlOjp+VHJhbnNpZW50RmlsZSgpIHsKKyAgdW5saW5rKGZpbGVuYW1lXy5jX3N0cigpKTsKK30KKworc3RkOjpzdHJpbmcgVGVtcE5hbShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworICBjaGFyICpwID0gdGVtcG5hbShkaXIsIHByZWZpeCk7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdChwKTsKKyAgZnJlZShwKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworVGVtcEZpbGU6OlRlbXBGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50cykKKyAgOiBUcmFuc2llbnRGaWxlKFRlbXBOYW0obnVsbHB0ciwgImFyZXMiKSwgY29udGVudHMpIHsKKworfQorCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGFyZXMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvYXJlcy10ZXN0LmggYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjU0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2FyZXMtdGVzdC5oCkBAIC0wLDAgKzEsMzgzIEBACisvLyAtKi0gbW9kZTogYysrIC0qLQorI2lmbmRlZiBBUkVTX1RFU1RfSAorI2RlZmluZSBBUkVTX1RFU1RfSAorCisjaW5jbHVkZSAiYXJlcy5oIgorCisjaW5jbHVkZSAiZG5zLXByb3RvLmgiCisKKy8vIEluY2x1ZGUgYXJlcyBpbnRlcm5hbCBmaWxlIGZvciBETlMgcHJvdG9jb2wgY29uc3RhbnRzCisjaW5jbHVkZSAibmFtZXNlci5oIgorCisjaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QuaCIKKyNpbmNsdWRlICJnbW9jay9nbW9jay5oIgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1VTRVJfTkFNRVNQQUNFKSAmJiBkZWZpbmVkKEhBVkVfVVRTX05BTUVTUEFDRSkKKyNkZWZpbmUgSEFWRV9DT05UQUlORVIKKyNlbmRpZgorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGFyZXMgeworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKworbmFtZXNwYWNlIHRlc3QgeworCitleHRlcm4gYm9vbCB2ZXJib3NlOworZXh0ZXJuIGludCBtb2NrX3BvcnQ7CisKKy8vIFByb2Nlc3MgYWxsIHBlbmRpbmcgd29yayBvbiBhcmVzLW93bmVkIGZpbGUgZGVzY3JpcHRvcnMsIHBsdXMKKy8vIG9wdGlvbmFsbHkgdGhlIGdpdmVuIHNldC1vZi1GRHMgKyB3b3JrIGZ1bmN0aW9uLgordm9pZCBQcm9jZXNzV29yayhhcmVzX2NoYW5uZWwgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxzdGQ6OnNldDxpbnQ+KCk+IGdldF9leHRyYWZkcywKKyAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGludCk+IHByb2Nlc3NfZXh0cmEpOworc3RkOjpzZXQ8aW50PiBOb0V4dHJhRkRzKCk7CisKKy8vIFRlc3QgZml4dHVyZSB0aGF0IGVuc3VyZXMgbGlicmFyeSBpbml0aWFsaXphdGlvbiwgYW5kIGFsbG93cworLy8gbWVtb3J5IGFsbG9jYXRpb25zIHRvIGJlIGZhaWxlZC4KK2NsYXNzIExpYnJhcnlUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CisgcHVibGljOgorICBMaWJyYXJ5VGVzdCgpIHsKKyAgICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLAorICAgICAgICAgICAgICBhcmVzX2xpYnJhcnlfaW5pdF9tZW0oQVJFU19MSUJfSU5JVF9BTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTGlicmFyeVRlc3Q6OmFtYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTGlicmFyeVRlc3Q6OmFmcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxpYnJhcnlUZXN0OjphcmVhbGxvYykpOworICB9CisgIH5MaWJyYXJ5VGVzdCgpIHsKKyAgICBhcmVzX2xpYnJhcnlfY2xlYW51cCgpOworICAgIENsZWFyRmFpbHMoKTsKKyAgfQorICAvLyBTZXQgdGhlIG4tdGggbWFsbG9jIGNhbGwgKG9mIGFueSBzaXplKSBmcm9tIHRoZSBsaWJyYXJ5IHRvIGZhaWwuCisgIC8vIChudGggPT0gMSBtZWFucyB0aGUgbmV4dCBjYWxsKQorICBzdGF0aWMgdm9pZCBTZXRBbGxvY0ZhaWwoaW50IG50aCk7CisgIC8vIFNldCB0aGUgbmV4dCBtYWxsb2MgY2FsbCBmb3IgdGhlIGdpdmVuIHNpemUgdG8gZmFpbC4KKyAgc3RhdGljIHZvaWQgU2V0QWxsb2NTaXplRmFpbChzaXplX3Qgc2l6ZSk7CisgIC8vIFJlbW92ZSBhbnkgcGVuZGluZyBhbGxvYyBmYWlsdXJlcy4KKyAgc3RhdGljIHZvaWQgQ2xlYXJGYWlscygpOworCisgIHN0YXRpYyB2b2lkICphbWFsbG9jKHNpemVfdCBzaXplKTsKKyAgc3RhdGljIHZvaWQqIGFyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworICBzdGF0aWMgdm9pZCBhZnJlZSh2b2lkICpwdHIpOworIHByaXZhdGU6CisgIHN0YXRpYyBib29sIFNob3VsZEFsbG9jRmFpbChzaXplX3Qgc2l6ZSk7CisgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZmFpbHNfOworICBzdGF0aWMgc3RkOjptYXA8c2l6ZV90LCBpbnQ+IHNpemVfZmFpbHNfOworfTsKKworLy8gVGVzdCBmaXh0dXJlIHRoYXQgdXNlcyBhIGRlZmF1bHQgY2hhbm5lbC4KK2NsYXNzIERlZmF1bHRDaGFubmVsVGVzdCA6IHB1YmxpYyBMaWJyYXJ5VGVzdCB7CisgcHVibGljOgorICBEZWZhdWx0Q2hhbm5lbFRlc3QoKSA6IGNoYW5uZWxfKG51bGxwdHIpIHsKKyAgICBFWFBFQ1RfRVEoQVJFU19TVUNDRVNTLCBhcmVzX2luaXQoJmNoYW5uZWxfKSk7CisgICAgRVhQRUNUX05FKG51bGxwdHIsIGNoYW5uZWxfKTsKKyAgfQorCisgIH5EZWZhdWx0Q2hhbm5lbFRlc3QoKSB7CisgICAgYXJlc19kZXN0cm95KGNoYW5uZWxfKTsKKyAgICBjaGFubmVsXyA9IG51bGxwdHI7CisgIH0KKworICAvLyBQcm9jZXNzIGFsbCBwZW5kaW5nIHdvcmsgb24gYXJlcy1vd25lZCBmaWxlIGRlc2NyaXB0b3JzLgorICB2b2lkIFByb2Nlc3MoKTsKKworIHByb3RlY3RlZDoKKyAgYXJlc19jaGFubmVsIGNoYW5uZWxfOworfTsKKworLy8gVGVzdCBmaXh0dXJlIHRoYXQgdXNlcyBhIGRlZmF1bHQgY2hhbm5lbCB3aXRoIHRoZSBzcGVjaWZpZWQgbG9va3VwIG1vZGUuCitjbGFzcyBEZWZhdWx0Q2hhbm5lbE1vZGVUZXN0CisgICAgOiBwdWJsaWMgTGlicmFyeVRlc3QsCisgICAgICBwdWJsaWMgOjp0ZXN0aW5nOjpXaXRoUGFyYW1JbnRlcmZhY2U8c3RkOjpzdHJpbmc+IHsKKyBwdWJsaWM6CisgIERlZmF1bHRDaGFubmVsTW9kZVRlc3QoKSA6IGNoYW5uZWxfKG51bGxwdHIpIHsKKyAgICBzdHJ1Y3QgYXJlc19vcHRpb25zIG9wdHMgPSB7MH07CisgICAgb3B0cy5sb29rdXBzID0gc3RyZHVwKEdldFBhcmFtKCkuY19zdHIoKSk7CisgICAgaW50IG9wdG1hc2sgPSBBUkVTX09QVF9MT09LVVBTOworICAgIEVYUEVDVF9FUShBUkVTX1NVQ0NFU1MsIGFyZXNfaW5pdF9vcHRpb25zKCZjaGFubmVsXywgJm9wdHMsIG9wdG1hc2ssIE5VTEwpKTsKKyAgICBFWFBFQ1RfTkUobnVsbHB0ciwgY2hhbm5lbF8pOworICAgIGZyZWUob3B0cy5sb29rdXBzKTsKKyAgfQorCisgIH5EZWZhdWx0Q2hhbm5lbE1vZGVUZXN0KCkgeworICAgIGFyZXNfZGVzdHJveShjaGFubmVsXyk7CisgICAgY2hhbm5lbF8gPSBudWxscHRyOworICB9CisKKyAgLy8gUHJvY2VzcyBhbGwgcGVuZGluZyB3b3JrIG9uIGFyZXMtb3duZWQgZmlsZSBkZXNjcmlwdG9ycy4KKyAgdm9pZCBQcm9jZXNzKCk7CisKKyBwcm90ZWN0ZWQ6CisgIGFyZXNfY2hhbm5lbCBjaGFubmVsXzsKK307CisKKy8vIE1vY2sgRE5TIHNlcnZlciB0byBhbGxvdyByZXNwb25zZXMgdG8gYmUgc2NyaXB0ZWQgYnkgdGVzdHMuCitjbGFzcyBNb2NrU2VydmVyIHsKKyBwdWJsaWM6CisgIE1vY2tTZXJ2ZXIoaW50IGZhbWlseSwgaW50IHBvcnQsIGludCB0Y3Bwb3J0ID0gMCk7CisgIH5Nb2NrU2VydmVyKCk7CisKKyAgLy8gTW9jayBtZXRob2QgaW5kaWNhdGluZyB0aGUgcHJvY2Vzc2luZyBvZiBhIHBhcnRpY3VsYXIgPG5hbWUsIFJSdHlwZT4KKyAgLy8gcmVxdWVzdC4KKyAgTU9DS19NRVRIT0QyKE9uUmVxdWVzdCwgdm9pZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHJydHlwZSkpOworCisgIC8vIFNldCB0aGUgcmVwbHkgdG8gYmUgc2VudCBuZXh0OyB0aGUgcXVlcnkgSUQgZmllbGQgd2lsbCBiZSBvdmVyd3JpdHRlbgorICAvLyB3aXRoIHRoZSB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0LgorICB2b2lkIFNldFJlcGx5RGF0YShjb25zdCBzdGQ6OnZlY3RvcjxieXRlPiYgcmVwbHkpIHsgcmVwbHlfID0gcmVwbHk7IH0KKyAgdm9pZCBTZXRSZXBseShjb25zdCBETlNQYWNrZXQqIHJlcGx5KSB7IFNldFJlcGx5RGF0YShyZXBseS0+ZGF0YSgpKTsgfQorICB2b2lkIFNldFJlcGx5UUlEKGludCBxaWQpIHsgcWlkXyA9IHFpZDsgfQorCisgIC8vIFRoZSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IHRoZSBzZXJ2ZXIgaGFuZGxlcy4KKyAgc3RkOjpzZXQ8aW50PiBmZHMoKSBjb25zdDsKKworICAvLyBQcm9jZXNzIGFjdGl2aXR5IG9uIGEgZmlsZSBkZXNjcmlwdG9yLgorICB2b2lkIFByb2Nlc3NGRChpbnQgZmQpOworCisgIC8vIFBvcnRzIHRoZSBzZXJ2ZXIgaXMgcmVzcG9uZGluZyB0bworICBpbnQgdWRwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIHVkcHBvcnRfOyB9CisgIGludCB0Y3Bwb3J0KCkgY29uc3QgeyByZXR1cm4gdGNwcG9ydF87IH0KKworIHByaXZhdGU6CisgIHZvaWQgUHJvY2Vzc1JlcXVlc3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSogYWRkciwgaW50IGFkZHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50IHFpZCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCBycnR5cGUpOworCisgIGludCB1ZHBwb3J0XzsKKyAgaW50IHRjcHBvcnRfOworICBpbnQgdWRwZmRfOworICBpbnQgdGNwZmRfOworICBzdGQ6OnNldDxpbnQ+IGNvbm5mZHNfOworICBzdGQ6OnZlY3RvcjxieXRlPiByZXBseV87CisgIGludCBxaWRfOworfTsKKworLy8gVGVzdCBmaXh0dXJlIHRoYXQgdXNlcyBhIG1vY2sgRE5TIHNlcnZlci4KK2NsYXNzIE1vY2tDaGFubmVsT3B0c1Rlc3QgOiBwdWJsaWMgTGlicmFyeVRlc3QgeworIHB1YmxpYzoKKyAgTW9ja0NoYW5uZWxPcHRzVGVzdChpbnQgY291bnQsIGludCBmYW1pbHksIGJvb2wgZm9yY2VfdGNwLCBzdHJ1Y3QgYXJlc19vcHRpb25zKiBnaXZlbm9wdHMsIGludCBvcHRtYXNrKTsKKyAgfk1vY2tDaGFubmVsT3B0c1Rlc3QoKTsKKworICAvLyBQcm9jZXNzIGFsbCBwZW5kaW5nIHdvcmsgb24gYXJlcy1vd25lZCBhbmQgbW9jay1zZXJ2ZXItb3duZWQgZmlsZSBkZXNjcmlwdG9ycy4KKyAgdm9pZCBQcm9jZXNzKCk7CisKKyBwcm90ZWN0ZWQ6CisgIC8vIE5pY2VNb2NrU2VydmVyIGRvZXNuJ3QgY29tcGxhaW4gYWJvdXQgdW5pbnRlcmVzdGluZyBjYWxscy4KKyAgdHlwZWRlZiB0ZXN0aW5nOjpOaWNlTW9jazxNb2NrU2VydmVyPiBOaWNlTW9ja1NlcnZlcjsKKyAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjwgc3RkOjp1bmlxdWVfcHRyPE5pY2VNb2NrU2VydmVyPiA+IE5pY2VNb2NrU2VydmVyczsKKworICBzdGQ6OnNldDxpbnQ+IGZkcygpIGNvbnN0OworICB2b2lkIFByb2Nlc3NGRChpbnQgZmQpOworCisgIHN0YXRpYyBOaWNlTW9ja1NlcnZlcnMgQnVpbGRTZXJ2ZXJzKGludCBjb3VudCwgaW50IGZhbWlseSwgaW50IGJhc2VfcG9ydCk7CisKKyAgTmljZU1vY2tTZXJ2ZXJzIHNlcnZlcnNfOworICAvLyBDb252ZW5pZW5jZSByZWZlcmVuY2UgdG8gZmlyc3Qgc2VydmVyLgorICBOaWNlTW9ja1NlcnZlciYgc2VydmVyXzsKKyAgYXJlc19jaGFubmVsIGNoYW5uZWxfOworfTsKKworY2xhc3MgTW9ja0NoYW5uZWxUZXN0CisgICAgOiBwdWJsaWMgTW9ja0NoYW5uZWxPcHRzVGVzdCwKKyAgICAgIHB1YmxpYyA6OnRlc3Rpbmc6OldpdGhQYXJhbUludGVyZmFjZTwgc3RkOjpwYWlyPGludCwgYm9vbD4gPiB7CisgcHVibGljOgorICBNb2NrQ2hhbm5lbFRlc3QoKSA6IE1vY2tDaGFubmVsT3B0c1Rlc3QoMSwgR2V0UGFyYW0oKS5maXJzdCwgR2V0UGFyYW0oKS5zZWNvbmQsIG51bGxwdHIsIDApIHt9Cit9OworCitjbGFzcyBNb2NrVURQQ2hhbm5lbFRlc3QKKyAgICA6IHB1YmxpYyBNb2NrQ2hhbm5lbE9wdHNUZXN0LAorICAgICAgcHVibGljIDo6dGVzdGluZzo6V2l0aFBhcmFtSW50ZXJmYWNlPGludD4geworIHB1YmxpYzoKKyAgTW9ja1VEUENoYW5uZWxUZXN0KCkgOiBNb2NrQ2hhbm5lbE9wdHNUZXN0KDEsIEdldFBhcmFtKCksIGZhbHNlLCBudWxscHRyLCAwKSB7fQorfTsKKworY2xhc3MgTW9ja1RDUENoYW5uZWxUZXN0CisgICAgOiBwdWJsaWMgTW9ja0NoYW5uZWxPcHRzVGVzdCwKKyAgICAgIHB1YmxpYyA6OnRlc3Rpbmc6OldpdGhQYXJhbUludGVyZmFjZTxpbnQ+IHsKKyBwdWJsaWM6CisgIE1vY2tUQ1BDaGFubmVsVGVzdCgpIDogTW9ja0NoYW5uZWxPcHRzVGVzdCgxLCBHZXRQYXJhbSgpLCB0cnVlLCBudWxscHRyLCAwKSB7fQorfTsKKworLy8gZ01vY2sgYWN0aW9uIHRvIHNldCB0aGUgcmVwbHkgZm9yIGEgbW9jayBzZXJ2ZXIuCitBQ1RJT05fUDIoU2V0UmVwbHlEYXRhLCBtb2Nrc2VydmVyLCBkYXRhKSB7CisgIG1vY2tzZXJ2ZXItPlNldFJlcGx5RGF0YShkYXRhKTsKK30KK0FDVElPTl9QMihTZXRSZXBseSwgbW9ja3NlcnZlciwgcmVwbHkpIHsKKyAgbW9ja3NlcnZlci0+U2V0UmVwbHkocmVwbHkpOworfQorQUNUSU9OX1AyKFNldFJlcGx5UUlELCBtb2Nrc2VydmVyLCBxaWQpIHsKKyAgbW9ja3NlcnZlci0+U2V0UmVwbHlRSUQocWlkKTsKK30KKy8vIGdNb2NrIGFjdGlvbiB0byBjYW5jZWwgYSBjaGFubmVsLgorQUNUSU9OX1AyKENhbmNlbENoYW5uZWwsIG1vY2tzZXJ2ZXIsIGNoYW5uZWwpIHsKKyAgYXJlc19jYW5jZWwoY2hhbm5lbCk7Cit9CisKKy8vIEMrKyB3cmFwcGVyIGZvciBzdHJ1Y3QgaG9zdGVudC4KK3N0cnVjdCBIb3N0RW50IHsKKyAgSG9zdEVudCgpIDogYWRkcnR5cGVfKC0xKSB7fQorICBIb3N0RW50KGNvbnN0IHN0cnVjdCBob3N0ZW50KiBob3N0ZW50KTsKKyAgc3RkOjpzdHJpbmcgbmFtZV87CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhbGlhc2VzXzsKKyAgaW50IGFkZHJ0eXBlXzsgIC8vIEFGX0lORVQgb3IgQUZfSU5FVDYKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFkZHJzXzsKK307CitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSG9zdEVudCYgcmVzdWx0KTsKKworLy8gU3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIHRoZSByZXN1bHQgb2YgYW4gYXJlc19ob3N0X2NhbGxiYWNrIGludm9jYXRpb24uCitzdHJ1Y3QgSG9zdFJlc3VsdCB7CisgIC8vIFdoZXRoZXIgdGhlIGNhbGxiYWNrIGhhcyBiZWVuIGludm9rZWQuCisgIGJvb2wgZG9uZV87CisgIC8vIEV4cGxpY2l0bHkgcHJvdmlkZWQgcmVzdWx0IGluZm9ybWF0aW9uLgorICBpbnQgc3RhdHVzXzsKKyAgaW50IHRpbWVvdXRzXzsKKyAgLy8gQ29udGVudHMgb2YgdGhlIGhvc3RlbnQgc3RydWN0dXJlLCBpZiBwcm92aWRlZC4KKyAgSG9zdEVudCBob3N0XzsKK307CitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSG9zdFJlc3VsdCYgcmVzdWx0KTsKKworLy8gU3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIHRoZSByZXN1bHQgb2YgYW4gYXJlc19jYWxsYmFjayBpbnZvY2F0aW9uLgorc3RydWN0IFNlYXJjaFJlc3VsdCB7CisgIC8vIFdoZXRoZXIgdGhlIGNhbGxiYWNrIGhhcyBiZWVuIGludm9rZWQuCisgIGJvb2wgZG9uZV87CisgIC8vIEV4cGxpY2l0bHkgcHJvdmlkZWQgcmVzdWx0IGluZm9ybWF0aW9uLgorICBpbnQgc3RhdHVzXzsKKyAgaW50IHRpbWVvdXRzXzsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YV87Cit9Oworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFNlYXJjaFJlc3VsdCYgcmVzdWx0KTsKKworLy8gU3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIHRoZSByZXN1bHQgb2YgYW4gYXJlc19uYW1laW5mb19jYWxsYmFjayBpbnZvY2F0aW9uLgorc3RydWN0IE5hbWVJbmZvUmVzdWx0IHsKKyAgLy8gV2hldGhlciB0aGUgY2FsbGJhY2sgaGFzIGJlZW4gaW52b2tlZC4KKyAgYm9vbCBkb25lXzsKKyAgLy8gRXhwbGljaXRseSBwcm92aWRlZCByZXN1bHQgaW5mb3JtYXRpb24uCisgIGludCBzdGF0dXNfOworICBpbnQgdGltZW91dHNfOworICBzdGQ6OnN0cmluZyBub2RlXzsKKyAgc3RkOjpzdHJpbmcgc2VydmljZV87Cit9Oworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IE5hbWVJbmZvUmVzdWx0JiByZXN1bHQpOworCisvLyBTdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiBhcmVzIGNhbGxiYWNrcyB0aGF0IGZpbGwgb3V0IHRoZSBjb3JyZXNwb25kaW5nCisvLyBzdHJ1Y3R1cmVzLgordm9pZCBIb3N0Q2FsbGJhY2sodm9pZCAqZGF0YSwgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhvc3RlbnQpOwordm9pZCBTZWFyY2hDYWxsYmFjayh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmFidWYsIGludCBhbGVuKTsKK3ZvaWQgTmFtZUluZm9DYWxsYmFjayh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbm9kZSwgY2hhciAqc2VydmljZSk7CisKKy8vIFJldHJpZXZlIHRoZSBuYW1lIHNlcnZlcnMgdXNlZCBieSBhIGNoYW5uZWwuCitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0TmFtZVNlcnZlcnMoYXJlc19jaGFubmVsIGNoYW5uZWwpOworCisKKy8vIFJBSUkgY2xhc3MgdG8gdGVtcG9yYXJpbHkgY3JlYXRlIGEgZGlyZWN0b3J5IG9mIGEgZ2l2ZW4gbmFtZS4KK2NsYXNzIFRyYW5zaWVudERpciB7CisgcHVibGljOgorICBUcmFuc2llbnREaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcm5hbWUpOworICB+VHJhbnNpZW50RGlyKCk7CisKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBkaXJuYW1lXzsKK307CisKKy8vIEMrKyB3cmFwcGVyIGFyb3VuZCB0ZW1wbmFtKCkKK3N0ZDo6c3RyaW5nIFRlbXBOYW0oY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpwcmVmaXgpOworCisvLyBSQUlJIGNsYXNzIHRvIHRlbXBvcmFyaWx5IGNyZWF0ZSBmaWxlIG9mIGEgZ2l2ZW4gbmFtZSBhbmQgY29udGVudHMuCitjbGFzcyBUcmFuc2llbnRGaWxlIHsKKyBwdWJsaWM6CisgIFRyYW5zaWVudEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcgJmZpbGVuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudHMpOworICB+VHJhbnNpZW50RmlsZSgpOworCisgcHJvdGVjdGVkOgorICBzdGQ6OnN0cmluZyBmaWxlbmFtZV87Cit9OworCisvLyBSQUlJIGNsYXNzIGZvciBhIHRlbXBvcmFyeSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzLgorY2xhc3MgVGVtcEZpbGUgOiBwdWJsaWMgVHJhbnNpZW50RmlsZSB7CisgcHVibGljOgorICBUZW1wRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudHMpOworICBjb25zdCBjaGFyKiBmaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZpbGVuYW1lXy5jX3N0cigpOyB9Cit9OworCisjaWZuZGVmIFdJTjMyCisvLyBSQUlJIGNsYXNzIGZvciBhIHRlbXBvcmFyeSBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZS4KK2NsYXNzIEVudlZhbHVlIHsKKyBwdWJsaWM6CisgIEVudlZhbHVlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKSA6IG5hbWVfKG5hbWUpLCByZXN0b3JlXyhmYWxzZSkgeworICAgIGNoYXIgKm9yaWdpbmFsID0gZ2V0ZW52KG5hbWUpOworICAgIGlmIChvcmlnaW5hbCkgeworICAgICAgcmVzdG9yZV8gPSB0cnVlOworICAgICAgb3JpZ2luYWxfID0gb3JpZ2luYWw7CisgICAgfQorICAgIHNldGVudihuYW1lXy5jX3N0cigpLCB2YWx1ZSwgMSk7CisgIH0KKyAgfkVudlZhbHVlKCkgeworICAgIGlmIChyZXN0b3JlXykgeworICAgICAgc2V0ZW52KG5hbWVfLmNfc3RyKCksIG9yaWdpbmFsXy5jX3N0cigpLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgdW5zZXRlbnYobmFtZV8uY19zdHIoKSk7CisgICAgfQorICB9CisgcHJpdmF0ZToKKyAgc3RkOjpzdHJpbmcgbmFtZV87CisgIGJvb2wgcmVzdG9yZV87CisgIHN0ZDo6c3RyaW5nIG9yaWdpbmFsXzsKK307CisjZW5kaWYKKworCisjaWZkZWYgSEFWRV9DT05UQUlORVIKKy8vIExpbnV4LXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgZm9yIHJ1bm5pbmcgY29kZSBpbiBhIGNvbnRhaW5lciwgaW1wbGVtZW50ZWQKKy8vIGluIGFyZXMtdGVzdC1ucy5jYwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPGludCh2b2lkKT4gVm9pZFRvSW50Rm47Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+PiBOYW1lQ29udGVudExpc3Q7CisKK2NsYXNzIENvbnRhaW5lckZpbGVzeXN0ZW0geworIHB1YmxpYzoKKyAgQ29udGFpbmVyRmlsZXN5c3RlbShOYW1lQ29udGVudExpc3QgZmlsZXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtb3VudHB0KTsKKyAgfkNvbnRhaW5lckZpbGVzeXN0ZW0oKTsKKyAgc3RkOjpzdHJpbmcgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIHJvb3RkaXJfOyB9OworICBzdGQ6OnN0cmluZyBtb3VudHB0KCkgY29uc3QgeyByZXR1cm4gbW91bnRwdF87IH07CisgcHJpdmF0ZToKKyAgdm9pZCBFbnN1cmVEaXJFeGlzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcik7CisgIHN0ZDo6c3RyaW5nIHJvb3RkaXJfOworICBzdGQ6OnN0cmluZyBtb3VudHB0XzsKKyAgc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBkaXJzXzsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRyYW5zaWVudEZpbGU+PiBmaWxlc187Cit9OworCitpbnQgUnVuSW5Db250YWluZXIoQ29udGFpbmVyRmlsZXN5c3RlbSogZnMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZG9tYWlubmFtZSwgVm9pZFRvSW50Rm4gZm4pOworCisjZGVmaW5lIElDTEFTU19OQU1FKGNhc2VuYW1lLCB0ZXN0bmFtZSkgQ29udGFpbmVkIyNjYXNlbmFtZSMjXyMjdGVzdG5hbWUKKyNkZWZpbmUgQ09OVEFJTkVEX1RFU1RfRihjYXNlbmFtZSwgdGVzdG5hbWUsIGhvc3RuYW1lLCBkb21haW5uYW1lLCBmaWxlcykgICAgICAgXAorICBjbGFzcyBJQ0xBU1NfTkFNRShjYXNlbmFtZSwgdGVzdG5hbWUpIDogcHVibGljIGNhc2VuYW1lIHsgICAgICAgICAgICAgICAgICAgICBcCisgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJQ0xBU1NfTkFNRShjYXNlbmFtZSwgdGVzdG5hbWUpKCkge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBpbnQgSW5uZXJUZXN0Qm9keSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgVEVTVF9GKElDTEFTU19OQU1FKGNhc2VuYW1lLCB0ZXN0bmFtZSksIF8pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENvbnRhaW5lckZpbGVzeXN0ZW0gY2hyb290KGZpbGVzLCAiLi4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVm9pZFRvSW50Rm4gZm4oSUNMQVNTX05BTUUoY2FzZW5hbWUsIHRlc3RuYW1lKTo6SW5uZXJUZXN0Qm9keSk7ICAgICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRVEoMCwgUnVuSW5Db250YWluZXIoJmNocm9vdCwgaG9zdG5hbWUsIGRvbWFpbm5hbWUsIGZuKSk7ICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGludCBJQ0xBU1NfTkFNRShjYXNlbmFtZSwgdGVzdG5hbWUpOjpJbm5lclRlc3RCb2R5KCkKKworI2VuZGlmCisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0Cit9ICAvLyBuYW1lc3BhY2UgYXJlcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvY29uZmlnLmguaW4gYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjVjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2NvbmZpZy5oLmluCkBAIC0wLDAgKzEsODAgQEAKKy8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBkZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGJhc2ljIEMrKzExIHN5bnRheCAqLworI3VuZGVmIEhBVkVfQ1hYMTEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RMRkNOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUREJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvdGNwLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4gKi8KKyN1bmRlZiBIQVZFX1BUSFJFQUQKKworLyogSGF2ZSBQVEhSRUFEX1BSSU9fSU5IRVJJVC4gKi8KKyN1bmRlZiBIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERMSUJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NUQVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVU5JU1REX0gKKworLyogV2hldGhlciB1c2VyIG5hbWVzcGFjZXMgYXJlIGF2YWlsYWJsZSAqLworI3VuZGVmIEhBVkVfVVNFUl9OQU1FU1BBQ0UKKworLyogV2hldGhlciBVVFMgbmFtZXNwYWNlcyBhcmUgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9VVFNfTkFNRVNQQUNFCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuICovCisjdW5kZWYgTFRfT0JKRElSCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50IHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbgorICAgeW91ciBzeXN0ZW0uICovCisjdW5kZWYgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2NvbmZpZ3VyZSBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzJhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2NvbmZpZ3VyZQpAQCAtMCwwICsxLDE5NTY3IEBACisjISAvYmluL3NoCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgYy1hcmVzLXRlc3QgLS4KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPC0+LgorIworIworIyBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NiwgMTk5OC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIworIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQorCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworIyBVc2UgYSBwcm9wZXIgaW50ZXJuYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gZW5zdXJlIHdlIGRvbid0IGZhbGwKKyAgIyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIGNvbnRpbnVvdXNseSByZS1leGVjdXRpbmcgb3Vyc2VsdmVzLgorICBpZiB0ZXN0IHgiJHtfYXNfY2FuX3JlZXhlY30iICE9IHhubyAmJiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbgorICAgIF9hc19jYW5fcmVleGVjPW5vOyBleHBvcnQgX2FzX2Nhbl9yZWV4ZWM7CisgICAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKyMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgorQkFTSF9FTlY9L2Rldi9udWxsCitFTlY9L2Rldi9udWxsCisodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKK2Nhc2UgJC0gaW4gIyAoKCgoCisgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworICAqdiogKSBhc19vcHRzPS12IDs7CisgICp4KiApIGFzX29wdHM9LXggOzsKKyAgKiApIGFzX29wdHM9IDs7Citlc2FjCitleGVjICRDT05GSUdfU0hFTEwgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQorIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCisjIG91dCBhZnRlciBhIGZhaWxlZCBgZXhlYycuCiskYXNfZWNobyAiJDA6IGNvdWxkIG5vdCByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCIgPiYyCithc19mbl9leGl0IDI1NQorICBmaQorICAjIFdlIGRvbid0IHdhbnQgdGhpcyB0byBwcm9wYWdhdGUgdG8gb3RoZXIgc3VicHJvY2Vzc2VzLgorICAgICAgICAgIHsgX2FzX2Nhbl9yZWV4ZWM9OyB1bnNldCBfYXNfY2FuX3JlZXhlYzt9CitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorIgorICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Cithc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KK2FzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KKworZXhpdGNvZGU9MAorYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQoraWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgorCitlbHNlCisgIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKK3Rlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEKK3Rlc3QgLXggLyB8fCBleGl0IDEiCisgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisgIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KKyAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQorCisgIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCR7QkFTSF9WRVJTSU9OK3NldH1cIiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0IFwiWFxgcHJpbnRmICVzIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiBcXAorICAgICAgfHwgdGVzdCBcIlhcYHByaW50IC1yIC0tIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiApIHx8IGV4aXQgMQordGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBicmVhayAyCitmaQorZmkKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCisgIGFzX2ZvdW5kPWZhbHNlCitkb25lCiskYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2ZpOyB9CitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgorICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgICAgICAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKyMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgorQkFTSF9FTlY9L2Rldi9udWxsCitFTlY9L2Rldi9udWxsCisodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKK2Nhc2UgJC0gaW4gIyAoKCgoCisgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworICAqdiogKSBhc19vcHRzPS12IDs7CisgICp4KiApIGFzX29wdHM9LXggOzsKKyAgKiApIGFzX29wdHM9IDs7Citlc2FjCitleGVjICRDT05GSUdfU0hFTEwgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQorIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCisjIG91dCBhZnRlciBhIGZhaWxlZCBgZXhlYycuCiskYXNfZWNobyAiJDA6IGNvdWxkIG5vdCByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCIgPiYyCitleGl0IDI1NQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFuZCAtIGFib3V0IHlvdXIKKyQwOiBzeXN0ZW0sIGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCisgIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvWyRdTElORU5PLz0KKyAgJyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisgICAgICB0IGxpbmVubworICAgICAgYgorICAgICAgOmxpbmVubworICAgICAgTgorICAgICAgOmxvb3AKKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgdCBsb29wCisgICAgICBzLy1cbi4qLy8KKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQorCisgICMgSWYgd2UgaGFkIHRvIHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMLCB3ZSdyZSBlbnN1cmVkIHRvIGhhdmUKKyAgIyBhbHJlYWR5IGRvbmUgdGhhdCwgc28gZW5zdXJlIHdlIGRvbid0IHRyeSB0byBkbyBzbyBhZ2FpbiBhbmQgZmFsbAorICAjIGluIGFuIGluZmluaXRlIGxvb3AuICBUaGlzIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGluIHByYWN0aWNlLgorICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXBSJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXBSJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2FzX3Rlc3RfeD0ndGVzdCAteCcKK2FzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQorYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9J2MtYXJlcy10ZXN0JworUEFDS0FHRV9UQVJOQU1FPSdjLWFyZXMtdGVzdCcKK1BBQ0tBR0VfVkVSU0lPTj0nLScKK1BBQ0tBR0VfU1RSSU5HPSdjLWFyZXMtdGVzdCAtJworUEFDS0FHRV9CVUdSRVBPUlQ9Jy0nCitQQUNLQUdFX1VSTD0nJworCithY191bmlxdWVfZmlsZT0iYXJlcy10ZXN0LmNjIgorIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgorYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIgorCithY19zdWJzdF92YXJzPSdhbV9fRVhFRVhUX0ZBTFNFCithbV9fRVhFRVhUX1RSVUUKK0xUTElCT0JKUworTElCT0JKUworQ09ERV9DT1ZFUkFHRV9SVUxFUworQ09ERV9DT1ZFUkFHRV9MREZMQUdTCitDT0RFX0NPVkVSQUdFX0NGTEFHUworR0VOSFRNTAorTENPVgorR0NPVgorQ09ERV9DT1ZFUkFHRV9FTkFCTEVECitDT0RFX0NPVkVSQUdFX0VOQUJMRURfRkFMU0UKK0NPREVfQ09WRVJBR0VfRU5BQkxFRF9UUlVFCitQVEhSRUFEX0NGTEFHUworUFRIUkVBRF9MSUJTCitQVEhSRUFEX0NDCitheF9wdGhyZWFkX2NvbmZpZworTElCVE9PTF9ERVBTCitDWFhDUFAKK0NQUAorTFRfU1lTX0xJQlJBUllfUEFUSAorT1RPT0w2NAorT1RPT0wKK0xJUE8KK05NRURJVAorRFNZTVVUSUwKK01BTklGRVNUX1RPT0wKK1JBTkxJQgorYWNfY3RfQVIKK0FSCitETExUT09MCitPQkpEVU1QCitMTl9TCitOTQorYWNfY3RfRFVNUEJJTgorRFVNUEJJTgorTEQKK0ZHUkVQCitFR1JFUAorR1JFUAorU0VECithbV9fZmFzdGRlcENDX0ZBTFNFCithbV9fZmFzdGRlcENDX1RSVUUKK0NDREVQTU9ERQorYWNfY3RfQ0MKK0NGTEFHUworQ0MKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorTElCVE9PTAorSEFWRV9DWFgxMQorYW1fX2Zhc3RkZXBDWFhfRkFMU0UKK2FtX19mYXN0ZGVwQ1hYX1RSVUUKK0NYWERFUE1PREUKK2FtX19ub2RlcAorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DWFgKK0NQUEZMQUdTCitMREZMQUdTCitDWFhGTEFHUworQ1hYCitBTV9CQUNLU0xBU0gKK0FNX0RFRkFVTFRfVkVSQk9TSVRZCitBTV9ERUZBVUxUX1YKK0FNX1YKK2FtX191bnRhcgorYW1fX3RhcgorQU1UQVIKK2FtX19sZWFkaW5nX2RvdAorU0VUX01BS0UKK0FXSworbWtkaXJfcAorTUtESVJfUAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNCitTVFJJUAoraW5zdGFsbF9zaAorTUFLRUlORk8KK0FVVE9IRUFERVIKK0FVVE9NQUtFCitBVVRPQ09ORgorQUNMT0NBTAorVkVSU0lPTgorUEFDS0FHRQorQ1lHUEFUSF9XCithbV9faXNyYworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorcnVuc3RhdGVkaXIKK2xvY2Fsc3RhdGVkaXIKK3NoYXJlZHN0YXRlZGlyCitzeXNjb25mZGlyCitkYXRhZGlyCitkYXRhcm9vdGRpcgorbGliZXhlY2Rpcgorc2JpbmRpcgorYmluZGlyCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitwcmVmaXgKK2V4ZWNfcHJlZml4CitQQUNLQUdFX1VSTAorUEFDS0FHRV9CVUdSRVBPUlQKK1BBQ0tBR0VfU1RSSU5HCitQQUNLQUdFX1ZFUlNJT04KK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9OQU1FCitQQVRIX1NFUEFSQVRPUgorU0hFTEwnCithY19zdWJzdF9maWxlcz0nJworYWNfdXNlcl9vcHRzPScKK2VuYWJsZV9vcHRpb25fY2hlY2tpbmcKK2VuYWJsZV9zaWxlbnRfcnVsZXMKK2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nCitlbmFibGVfc2hhcmVkCitlbmFibGVfc3RhdGljCit3aXRoX3BpYworZW5hYmxlX2Zhc3RfaW5zdGFsbAord2l0aF9haXhfc29uYW1lCit3aXRoX2dudV9sZAord2l0aF9zeXNyb290CitlbmFibGVfbGlidG9vbF9sb2NrCit3aXRoX2djb3YKK2VuYWJsZV9jb2RlX2NvdmVyYWdlCisnCisgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcworaG9zdF9hbGlhcwordGFyZ2V0X2FsaWFzCitDWFgKK0NYWEZMQUdTCitMREZMQUdTCitMSUJTCitDUFBGTEFHUworQ0NDCitDQworQ0ZMQUdTCitMVF9TWVNfTElCUkFSWV9QQVRICitDUFAKK0NYWENQUCcKKworCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCithY19pbml0X2hlbHA9CithY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitjYWNoZV9maWxlPS9kZXYvbnVsbAorZXhlY19wcmVmaXg9Tk9ORQorbm9fY3JlYXRlPQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKyMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgorIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKyMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK3J1bnN0YXRlZGlyPScke2xvY2Fsc3RhdGVkaXJ9L3J1bicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworCithY19wcmV2PQorYWNfZGFzaGRhc2g9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgIGFjX3ByZXY9CisgICAgY29udGludWUKKyAgZmkKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgKj0/KikgYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKj0pICAgYWNfb3B0YXJnPSA7OworICAqKSAgICBhY19vcHRhcmc9eWVzIDs7CisgIGVzYWMKKworICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCisgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworCisgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisgICAgYWNfcHJldj1kb2NkaXIgOzsKKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKworICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisgIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCisgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAorICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKKyAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKyAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCisgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKworICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgd2l0aF9mcD1ubyA7OworCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXJ1bnN0YXRlZGlyIHwgLS1ydW5zdGF0ZWRpciB8IC0tcnVuc3RhdGVkaSB8IC0tcnVuc3RhdGVkIFwKKyAgfCAtLXJ1bnN0YXRlIHwgLS1ydW5zdGF0IHwgLS1ydW5zdGEgfCAtLXJ1bnN0IHwgLS1ydW5zIFwKKyAgfCAtLXJ1biB8IC0tcnUgfCAtLXIpCisgICAgYWNfcHJldj1ydW5zdGF0ZWRpciA7OworICAtcnVuc3RhdGVkaXI9KiB8IC0tcnVuc3RhdGVkaXI9KiB8IC0tcnVuc3RhdGVkaT0qIHwgLS1ydW5zdGF0ZWQ9KiBcCisgIHwgLS1ydW5zdGF0ZT0qIHwgLS1ydW5zdGF0PSogfCAtLXJ1bnN0YT0qIHwgLS1ydW5zdD0qIHwgLS1ydW5zPSogXAorICB8IC0tcnVuPSogfCAtLXJ1PSogfCAtLXI9KikKKyAgICBydW5zdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0kYWNfb3B0YXJnIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIDs7CisKKyAgKj0qKQorICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCisgICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OworICAgIGVzYWMKKyAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworCisgICopCisgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorICAgIDogIiR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259IgorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCisgICAgbm8pIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIgcnVuc3RhdGVkaXIKK2RvCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKK2RvbmUKKworIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitidWlsZD0kYnVpbGRfYWxpYXMKK2hvc3Q9JGhvc3RfYWxpYXMKK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisKKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgZmkKK2ZpCisKK2FjX3Rvb2xfcHJlZml4PQordGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorCit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisKKworYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCisKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgorZmkKK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKK2FjX2Fic19jb25mZGlyPWAoCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQorCisjCisjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisjCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICBjYXQgPDxfQUNFT0YKK1xgY29uZmlndXJlJyBjb25maWd1cmVzIGMtYXJlcy10ZXN0IC0gdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tcnVuc3RhdGVkaXI9RElSICAgICAgIG1vZGlmaWFibGUgcGVyLXByb2Nlc3MgZGF0YSBbTE9DQUxTVEFURURJUi9ydW5dCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9jLWFyZXMtdGVzdF0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KK19BQ0VPRgorCisgIGNhdCA8PFxfQUNFT0YKKworUHJvZ3JhbSBuYW1lczoKKyAgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVggICAgICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKyAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBjLWFyZXMtdGVzdCAtOiI7OworICAgZXNhYworICBjYXQgPDxcX0FDRU9GCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTEiKQorICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIikKKyAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLWZhc3QtaW5zdGFsbFs9UEtHU10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIFtkZWZhdWx0PXllc10KKyAgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayAgYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKQorICAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlICBXaGV0aGVyIHRvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIHN1cHBvcnQKKworT3B0aW9uYWwgUGFja2FnZXM6CisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0td2l0aC1waWNbPVBLR1NdICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAtLXdpdGgtYWl4LXNvbmFtZT1haXh8c3ZyNHxib3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgKGFrYSAiU09OQU1FIikgdmFyaWFudCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIG9uIEFJWCwgW2RlZmF1bHQ9YWl4XS4KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtc3lzcm9vdFs9RElSXSAgICBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgLS13aXRoLWdjb3Y9R0NPViAgICAgICAgdXNlIGdpdmVuIEdDT1YgZm9yIGNvdmVyYWdlIChHQ09WPWdjb3YpLgorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ1hYICAgICAgICAgQysrIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ1hYRkxBR1MgICAgQysrIGNvbXBpbGVyIGZsYWdzCisgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQorICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CisgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KKyAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTFRfU1lTX0xJQlJBUllfUEFUSAorICAgICAgICAgICAgICBVc2VyLWRlZmluZWQgcnVuLXRpbWUgbGlicmFyeSBzZWFyY2ggcGF0aC4KKyAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKyAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgorCitVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAoraXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgorCitSZXBvcnQgYnVncyB0byA8LT4uCitfQUNFT0YKK2FjX3N0YXR1cz0kPworZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxzZQorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcX0FDRU9GCitjLWFyZXMtdGVzdCBjb25maWd1cmUgLQorZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5CisKK0NvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCitfQUNFT0YKKyAgZXhpdAorZmkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2N4eF90cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJIHRlc3QgLXggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfbGluaworCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMgYW5kIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpbgorIyBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlCisKKyMgYWNfZm5fY190cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jcHAKKworIyBhY19mbl9jX3RyeV9ydW4gTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLiBBc3N1bWVzCisjIHRoYXQgZXhlY3V0YWJsZXMgKmNhbiogYmUgcnVuLgorYWNfZm5fY190cnlfcnVuICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyAgICAgICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgICAgIGFjX3JldHZhbD0kYWNfc3RhdHVzCitmaQorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X3J1bgorCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICQyLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICQyIGlubm9jdW91c18kMgorCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkMgorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY3h4X3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jcHAKKworIyBhY19mbl9jeHhfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJIHRlc3QgLXggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKKyMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCisgIHllczpubzogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisoICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byAtICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisKK0l0IHdhcyBjcmVhdGVkIGJ5IGMtYXJlcy10ZXN0ICRhc19tZSAtLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAjIworIyMgLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworfSA+JjUKKworY2F0ID4mNSA8PF9BQ0VPRgorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworX0FDRU9GCisKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCisjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorYWNfY29uZmlndXJlX2FyZ3MwPQorYWNfY29uZmlndXJlX2FyZ3MxPQorYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKK2ZvciBhY19wYXNzIGluIDEgMgorZG8KKyAgZm9yIGFjX2FyZworICBkbworICAgIGNhc2UgJGFjX2FyZyBpbgorICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICAgY29udGludWUgOzsKKyAgICAqXCcqKQorICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CisgICAgMikKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCisgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICBlbHNlCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKK2RvbmUKK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispCisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKyAgICBkbworICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICBkb25lIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisKKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKyAgICAuICIkYWNfc2l0ZV9maWxlIiBcCisgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJmYWlsZWQgdG8gbG9hZCBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICBmaQorZG9uZQorCitpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwgZmlsZXMKKyAgIyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuICBESkdQUCBlbXVsYXRlcyBpdCBhcyBhIHJlZ3VsYXIgZmlsZS4KKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRjYWNoZV9maWxlIiAmJiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CisgICAgZXNhYworICBmaQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICA+JGNhY2hlX2ZpbGUKK2ZpCisKKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKyMgdmFsdWUuCithY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgc2V0LCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsKTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKwkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKwlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCisJZmkKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KKyAgICAgIGZpOzsKKyAgZXNhYworICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCisgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgorICAgIGNhc2UgJGFjX25ld192YWwgaW4KKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7CisgICAgZXNhYworICBmaQorZG9uZQoraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKK2ZpCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKworCithbV9fYXBpX3ZlcnNpb249JzEuMTUnCisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiAiJExJTkVOTyIgNQorZmkKKworIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorCisKKyMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCisjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKyMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCisjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisjIEFJWCAvYmluL2luc3RhbGwKKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KK2lmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorY2FzZSAkYXNfZGlyLyBpbiAjKCgKKyAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAorICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKyAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCisgIC91c3IvdWNiLyogKSA7OworICAqKQorICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgIyBieSBkZWZhdWx0LgorICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworCWlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorCSAgICA6CisJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisJICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCisJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisJICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCisJICAgIHRoZW4KKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgICAgYnJlYWsgMworCSAgICBmaQorCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICA7OworZXNhYworCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisKK2ZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQorJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KKworIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KK3Rlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9CisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCisgICAgYXNfZm5fZXJyb3IgJD8gInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2YWx1ZTogJyRzcmNkaXInIiAiJExJTkVOTyIgNTs7Citlc2FjCisKKyMgRG8gJ3NldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIGFtX2hhc19zbGVwdD1ubworICAgZm9yIGFtX3RyeSBpbiAxIDI7IGRvCisgICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQorICAgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgorCSMgLUwgZGlkbid0IHdvcmsuCisJc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKwkmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKwkjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisJIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKwlhc19mbl9lcnJvciAkPyAibHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorICBhbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiAiJExJTkVOTyIgNQorICAgICBmaQorICAgICBpZiB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlIHx8IHRlc3QgJGFtX3RyeSAtZXEgMjsgdGhlbgorICAgICAgIGJyZWFrCisgICAgIGZpCisgICAgICMgSnVzdCBpbiBjYXNlLgorICAgICBzbGVlcCAxCisgICAgIGFtX2hhc19zbGVwdD15ZXMKKyAgIGRvbmUKKyAgIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUKKyAgICkKK3RoZW4KKyAgICMgT2suCisgICA6CitlbHNlCisgICBhc19mbl9lcnJvciAkPyAibmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgIiRMSU5FTk8iIDUKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorIyBJZiB3ZSBkaWRuJ3Qgc2xlZXAsIHdlIHN0aWxsIG5lZWQgdG8gZW5zdXJlIHRpbWUgc3RhbXBzIG9mIGNvbmZpZy5zdGF0dXMgYW5kCisjIGdlbmVyYXRlZCBmaWxlcyBhcmUgc3RyaWN0bHkgbmV3ZXIuCithbV9zbGVlcF9waWQ9CitpZiBncmVwICdzbGVwdDogbm8nIGNvbmZ0ZXN0LmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICggc2xlZXAgMSApICYKKyAgYW1fc2xlZXBfcGlkPSQhCitmaQorCitybSAtZiBjb25mdGVzdC5maWxlCisKK3Rlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgordGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgRG91YmxlIGFueSBcIG9yICQuCisjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJworcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisKKyMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCithbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKKworaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KK2ZpCisKK2lmIHRlc3QgeCIke2luc3RhbGxfc2grc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nICdzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gIm1ha2UgaW5zdGFsbC1zdHJpcCIuICBIb3dldmVyICdzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSAnU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgorICBpZiAke2FjX2N2X3BhdGhfbWtkaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbworCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwkgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIHx8IGNvbnRpbnVlCisJICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKAorCSAgICAgJ21rZGlyIChHTlUgY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoZmlsZXV0aWxzKSAnNC4xKikKKwkgICAgICAgYWNfY3ZfcGF0aF9ta2Rpcj0kYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0CisJICAgICAgIGJyZWFrIDM7OworCSAgIGVzYWMKKwkgZG9uZQorICAgICAgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorCisgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCisgICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgTUtESVJfUCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUtESVJfUCIgPiY1CiskYXNfZWNobyAiJE1LRElSX1AiID4mNjsgfQorCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCitybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsKK2ZpCisKK2Nhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gIyAoKCgKKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKK2VzYWMKK2FtX21ha2U9JHtNQUtFLW1ha2V9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiAkYXNfZWNobyAnVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY2OyB9CitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICAgIEFNX1Y9JyQoViknCisgIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCitlbHNlCisgIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCisgIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKK2ZpCitBTV9CQUNLU0xBU0g9J1wnCisKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBhbV9faXNyYz0nIC1JJChzcmNkaXIpJworICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAic291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiICIkTElORU5PIiA1CisgIGZpCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KKyBQQUNLQUdFPSdjLWFyZXMtdGVzdCcKKyBWRVJTSU9OPSctJworCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KKworQUNMT0NBTD0ke0FDTE9DQUwtIiR7YW1fbWlzc2luZ19ydW59YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9DT05GPSR7QVVUT0NPTkYtIiR7YW1fbWlzc2luZ19ydW59YXV0b2NvbmYifQorCisKK0FVVE9NQUtFPSR7QVVUT01BS0UtIiR7YW1fbWlzc2luZ19ydW59YXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259In0KKworCitBVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KKworCitNQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KKworIyBGb3IgYmV0dGVyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBUbyBiZSByZW1vdmVkIG9uY2UgQXV0b21ha2UgMS45LngKKyMgZGllcyBvdXQgZm9yIGdvb2QuICBGb3IgbW9yZSBiYWNrZ3JvdW5kLCBzZWU6CisjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAwMS5odG1sPgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMTQuaHRtbD4KK21rZGlyX3A9JyQoTUtESVJfUCknCisKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldCAoYW5kIHBvc3NpYmx5IHRoZSBUQVAgZHJpdmVyKS4gIFRoZQorIyBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uIHNvbWUgcGxhdGZvcm1zLgorIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKKyMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgorQU1UQVI9JyQke1RBUi10YXJ9JworCisKKyMgV2UnbGwgbG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KK19hbV90b29scz0nZ251dGFyICBwYXggY3BpbyBub25lJworCithbV9fdGFyPSckJHtUQVItdGFyfSBjaG9mIC0gIiQkdGFyZGlyIicgYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJworCisKKworCisKKworIyBQT1NJWCB3aWxsIHNheSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHRoYXQgcnVubmluZyAicm0gLWYiIHdpdGggbm8gYXJndW1lbnQKKyMgaXMgT0s7IGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gbWFrZSB0aGF0IGFzc3VtcHRpb24gaW4gb3VyIE1ha2VmaWxlCisjIHJlY2lwZXMuICBTbyB1c2UgYW4gYWdncmVzc2l2ZSBwcm9iZSB0byBjaGVjayB0aGF0IHRoZSB1c2FnZSB3ZSB3YW50IGlzCisjIGFjdHVhbGx5IHN1cHBvcnRlZCAiaW4gdGhlIHdpbGQiIHRvIGFuIGFjY2VwdGFibGUgZGVncmVlLgorIyBTZWUgYXV0b21ha2UgYnVnIzEwODI4LgorIyBUbyBtYWtlIGFueSBpc3N1ZSBtb3JlIHZpc2libGUsIGNhdXNlIHRoZSBydW5uaW5nIGNvbmZpZ3VyZSB0byBiZSBhYm9ydGVkCisjIGJ5IGRlZmF1bHQgaWYgdGhlICdybScgcHJvZ3JhbSBpbiB1c2UgZG9lc24ndCBtYXRjaCBvdXIgZXhwZWN0YXRpb25zOyB0aGUKKyMgdXNlciBjYW4gc3RpbGwgb3ZlcnJpZGUgdGhpcyB0aG91Z2guCitpZiBybSAtZiAmJiBybSAtZnIgJiYgcm0gLXJmOyB0aGVuIDogT0s7IGVsc2UKKyAgY2F0ID4mMiA8PCdFTkQnCitPb3BzIQorCitZb3VyICdybScgcHJvZ3JhbSBzZWVtcyB1bmFibGUgdG8gcnVuIHdpdGhvdXQgZmlsZSBvcGVyYW5kcyBzcGVjaWZpZWQKK29uIHRoZSBjb21tYW5kIGxpbmUsIGV2ZW4gd2hlbiB0aGUgJy1mJyBvcHRpb24gaXMgcHJlc2VudC4gIFRoaXMgaXMgY29udHJhcnkKK3RvIHRoZSBiZWhhdmlvdXIgb2YgbW9zdCBybSBwcm9ncmFtcyBvdXQgdGhlcmUsIGFuZCBub3QgY29uZm9ybWluZyB3aXRoCit0aGUgdXBjb21pbmcgUE9TSVggc3RhbmRhcmQ6IDxodHRwOi8vYXVzdGluZ3JvdXBidWdzLm5ldC92aWV3LnBocD9pZD01NDI+CisKK1BsZWFzZSB0ZWxsIGJ1Zy1hdXRvbWFrZUBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIHZhbHVlCitvZiB5b3VyICRQQVRIIGFuZCBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzIG1lc3NhZ2UuICBUaGlzCitjYW4gaGVscCB1cyBpbXByb3ZlIGZ1dHVyZSBhdXRvbWFrZSB2ZXJzaW9ucy4KKworRU5ECisgIGlmIHRlc3QgeCIkQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0iID0geCJ5ZXMiOyB0aGVuCisgICAgZWNobyAnQ29uZmlndXJhdGlvbiB3aWxsIHByb2NlZWQgYW55d2F5LCBzaW5jZSB5b3UgaGF2ZSBzZXQgdGhlJyA+JjIKKyAgICBlY2hvICdBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSB2YXJpYWJsZSB0byAieWVzIicgPiYyCisgICAgZWNobyA+JjIKKyAgZWxzZQorICAgIGNhdCA+JjIgPDwnRU5EJworQWJvcnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgdG8gZW5zdXJlIHlvdSB0YWtlIG5vdGljZSBvZiB0aGUgaXNzdWUuCisKK1lvdSBjYW4gZG93bmxvYWQgYW5kIGluc3RhbGwgR05VIGNvcmV1dGlscyB0byBnZXQgYW4gJ3JtJyBpbXBsZW1lbnRhdGlvbgordGhhdCBiZWhhdmVzIHByb3Blcmx5OiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8+LgorCitJZiB5b3Ugd2FudCB0byBjb21wbGV0ZSB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHVzaW5nIHlvdXIgcHJvYmxlbWF0aWMKKydybScgYW55d2F5LCBleHBvcnQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEFDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNCit0byAieWVzIiwgYW5kIHJlLXJ1biBjb25maWd1cmUuCisKK0VORAorICAgIGFzX2ZuX2Vycm9yICQ/ICJZb3VyICdybScgcHJvZ3JhbSBpcyBiYWQsIHNvcnJ5LiIgIiRMSU5FTk8iIDUKKyAgZmkKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworZmkKKworY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiAjICgoKAorICB5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworICAgbm8pIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworZXNhYworYW1fbWFrZT0ke01BS0UtbWFrZX0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmICRhc19lY2hvICdUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCcgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjY7IH0KK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgICAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FNX0JBQ0tTTEFTSD0nXCcKKworCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKyAgICBDWFg9JENDQworICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFgiID4mNQorJGFzX2VjaG8gIiRDWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorICAgIENYWD0iZysrIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENYWD0kYWNfY3RfQ1hYCisgIGZpCitmaQorCisgIGZpCitmaQorIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisKKyMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBbYWJdLm91dCApCisJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkjIGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwlmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0dWFsbHkgd29ya2luZy4KKwlicmVhazs7CisgICAgKiApCisJYnJlYWs7OworICBlc2FjCitkb25lCit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKworZWxzZQorICBhY19maWxlPScnCitmaQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiQysrIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CithY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorCitybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCSAgYnJlYWs7OworICAgICogKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQysrIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X29iamV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKyAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JE9CSkVYVAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jeHhfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdYWD15ZXMKK2Vsc2UKKyAgR1hYPQorZmkKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2N4eF9nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWc9JGFjX2N4eF93ZXJyb3JfZmxhZworICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jeHhfZz1ubworICAgQ1hYRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2Vsc2UKKyAgQ1hYRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworCSBDWFhGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jeHhfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK0RFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKKworYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorCisKK2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gIiA+JjY7IH0KK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gJ21ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYworZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQorJGFzX2VjaG8gIiRfYW1fcmVzdWx0IiA+JjY7IH0KK3JtIC1mIGNvbmZpbmMgY29uZm1mCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nOworZmkKKworaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCisgIEFNREVQQkFDS1NMQVNIPSdcJworICBhbV9fbm9kZXA9J19ubycKK2ZpCisgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIEFNREVQX1RSVUU9CisgIEFNREVQX0ZBTFNFPScjJworZWxzZQorICBBTURFUF9UUlVFPScjJworICBBTURFUF9GQUxTRT0KK2ZpCisKKworCitkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEIi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorZmkKKworCisKKyAgICBheF9jeHhfY29tcGlsZV9jeHgxMV9yZXF1aXJlZD10cnVlCisgIGFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisgIGFjX3N1Y2Nlc3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrMTEgZmVhdHVyZXMgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrMTEgZmVhdHVyZXMgYnkgZGVmYXVsdC4uLiAiID4mNjsgfQoraWYgJHtheF9jdl9jeHhfY29tcGlsZV9jeHgxMSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY2hlY2sKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpIDw9IHNpemVvZihUKSwgIm5vdCBiaWcgZW5vdWdoIik7CisgICAgfTsKKworICAgIHN0cnVjdCBCYXNlIHsKKyAgICB2aXJ0dWFsIHZvaWQgZigpIHt9CisgICAgfTsKKyAgICBzdHJ1Y3QgQ2hpbGQgOiBwdWJsaWMgQmFzZSB7CisgICAgdmlydHVhbCB2b2lkIGYoKSBvdmVycmlkZSB7fQorICAgIH07CisKKyAgICB0eXBlZGVmIGNoZWNrPGNoZWNrPGJvb2w+PiByaWdodF9hbmdsZV9icmFja2V0czsKKworICAgIGludCBhOworICAgIGRlY2x0eXBlKGEpIGI7CisKKyAgICB0eXBlZGVmIGNoZWNrPGludD4gY2hlY2tfdHlwZTsKKyAgICBjaGVja190eXBlIGM7CisgICAgY2hlY2tfdHlwZSYmIGNyID0gc3RhdGljX2Nhc3Q8Y2hlY2tfdHlwZSYmPihjKTsKKworICAgIGF1dG8gZCA9IGE7CisgICAgYXV0byBsID0gW10oKXt9OworCisgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzcyODE4NC90ZW1wbGF0ZS1hbGlhc2VzLWFuZC1zZmluYWUKKyAgICAvLyBDbGFuZyAzLjEgZmFpbHMgd2l0aCBoZWFkZXJzIG9mIGxpYnN0ZCsrIDQuOC4zIHdoZW4gdXNpbmcgc3RkOjpmdW5jdGlvbiBiZWNhdXNlIG9mIHRoaXMKKyAgICBuYW1lc3BhY2UgdGVzdF90ZW1wbGF0ZV9hbGlhc19zZmluYWUgeworICAgICAgICBzdHJ1Y3QgZm9vIHt9OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHVzaW5nIG1lbWJlciA9IHR5cGVuYW1lIFQ6Om1lbWJlcl90eXBlOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHZvaWQgZnVuYyguLi4pIHt9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgdm9pZCBmdW5jKG1lbWJlcjxUPiopIHt9CisKKyAgICAgICAgdm9pZCB0ZXN0KCk7CisKKyAgICAgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgZnVuYzxmb28+KDApOworICAgICAgICB9CisgICAgfQorCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBheF9jdl9jeHhfY29tcGlsZV9jeHgxMT15ZXMKK2Vsc2UKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTE9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X2N4eF9jb21waWxlX2N4eDExIiA+JjUKKyRhc19lY2hvICIkYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTEiID4mNjsgfQorICBpZiB0ZXN0IHgkYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MTEgPSB4eWVzOyB0aGVuCisgICAgYWNfc3VjY2Vzcz15ZXMKKyAgZmkKKworCisKKyAgICBpZiB0ZXN0IHgkYWNfc3VjY2VzcyA9IHhubzsgdGhlbgorICAgIGZvciBzd2l0Y2ggaW4gLXN0ZD1jKysxMSAtc3RkPWMrKzB4OyBkbworICAgICAgY2FjaGV2YXI9YCRhc19lY2hvICJheF9jdl9jeHhfY29tcGlsZV9jeHgxMV8kc3dpdGNoIiB8ICRhc190cl9zaGAKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKzExIGZlYXR1cmVzIHdpdGggJHN3aXRjaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrMTEgZmVhdHVyZXMgd2l0aCAkc3dpdGNoLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRjYWNoZXZhcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfQ1hYRkxBR1M9IiRDWFhGTEFHUyIKKyAgICAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgJHN3aXRjaCIKKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY2hlY2sKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpIDw9IHNpemVvZihUKSwgIm5vdCBiaWcgZW5vdWdoIik7CisgICAgfTsKKworICAgIHN0cnVjdCBCYXNlIHsKKyAgICB2aXJ0dWFsIHZvaWQgZigpIHt9CisgICAgfTsKKyAgICBzdHJ1Y3QgQ2hpbGQgOiBwdWJsaWMgQmFzZSB7CisgICAgdmlydHVhbCB2b2lkIGYoKSBvdmVycmlkZSB7fQorICAgIH07CisKKyAgICB0eXBlZGVmIGNoZWNrPGNoZWNrPGJvb2w+PiByaWdodF9hbmdsZV9icmFja2V0czsKKworICAgIGludCBhOworICAgIGRlY2x0eXBlKGEpIGI7CisKKyAgICB0eXBlZGVmIGNoZWNrPGludD4gY2hlY2tfdHlwZTsKKyAgICBjaGVja190eXBlIGM7CisgICAgY2hlY2tfdHlwZSYmIGNyID0gc3RhdGljX2Nhc3Q8Y2hlY2tfdHlwZSYmPihjKTsKKworICAgIGF1dG8gZCA9IGE7CisgICAgYXV0byBsID0gW10oKXt9OworCisgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzcyODE4NC90ZW1wbGF0ZS1hbGlhc2VzLWFuZC1zZmluYWUKKyAgICAvLyBDbGFuZyAzLjEgZmFpbHMgd2l0aCBoZWFkZXJzIG9mIGxpYnN0ZCsrIDQuOC4zIHdoZW4gdXNpbmcgc3RkOjpmdW5jdGlvbiBiZWNhdXNlIG9mIHRoaXMKKyAgICBuYW1lc3BhY2UgdGVzdF90ZW1wbGF0ZV9hbGlhc19zZmluYWUgeworICAgICAgICBzdHJ1Y3QgZm9vIHt9OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHVzaW5nIG1lbWJlciA9IHR5cGVuYW1lIFQ6Om1lbWJlcl90eXBlOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHZvaWQgZnVuYyguLi4pIHt9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgdm9pZCBmdW5jKG1lbWJlcjxUPiopIHt9CisKKyAgICAgICAgdm9pZCB0ZXN0KCk7CisKKyAgICAgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgZnVuYzxmb28+KDApOworICAgICAgICB9CisgICAgfQorCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICRjYWNoZXZhcj15ZXMKK2Vsc2UKKyAgZXZhbCAkY2FjaGV2YXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgIENYWEZMQUdTPSIkYWNfc2F2ZV9DWFhGTEFHUyIKK2ZpCitldmFsIGFjX3Jlcz1cJCRjYWNoZXZhcgorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgICBpZiBldmFsIHRlc3QgeFwkJGNhY2hldmFyID0geHllczsgdGhlbgorICAgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTICRzd2l0Y2giCisgICAgICAgIGFjX3N1Y2Nlc3M9eWVzCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgIGlmIHRlc3QgeCRheF9jeHhfY29tcGlsZV9jeHgxMV9yZXF1aXJlZCA9IHh0cnVlOyB0aGVuCisgICAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICIqKiogQSBjb21waWxlciB3aXRoIHN1cHBvcnQgZm9yIEMrKzExIGxhbmd1YWdlIGZlYXR1cmVzIGlzIHJlcXVpcmVkLiIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBlbHNlCisgICAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICAgIEhBVkVfQ1hYMTE9MAorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBObyBjb21waWxlciB3aXRoIEMrKzExIHN1cHBvcnQgd2FzIGZvdW5kIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IE5vIGNvbXBpbGVyIHdpdGggQysrMTEgc3VwcG9ydCB3YXMgZm91bmQiID4mNjt9CisgICAgZWxzZQorICAgICAgSEFWRV9DWFgxMT0xCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1hYMTEgMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorCisKKyAgZmkKKworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi40LjYnCittYWNyb19yZXZpc2lvbj0nMi40LjYnCisKKworCisKKworCisKKworCisKKworCisKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCisjIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCisKK0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgoraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludCAtciAtLScKK2VsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50ZiAlc1xuJworZWxzZQorICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCisgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorICB7CisgICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKKyAgfQorICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCitmaQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiIKK30KKworY2FzZSAkRUNITyBpbgorICBwcmludGYqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnRmIiA+JjUKKyRhc19lY2hvICJwcmludGYiID4mNjsgfSA7OworICBwcmludCopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludCAtciIgPiY1CiskYXNfZWNobyAicHJpbnQgLXIiID4mNjsgfSA7OworICAqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogY2F0IiA+JjUKKyRhc19lY2hvICJjYXQiID4mNjsgfSA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0cnVjdCBzdGF0OworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfcHJvZ19jY19jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyAgIyBNYWtlIHN1cmUgaXQgd29ya3MgYm90aCB3aXRoICRDQyBhbmQgd2l0aCBzaW1wbGUgY2MuCisgICMgRm9sbG93aW5nIEFDX1BST0dfQ0NfQ19PLCB3ZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUKKyAgIyBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sCisgICMgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgorICBhbV9jdl9wcm9nX2NjX2Nfbz15ZXMKKyAgZm9yIGFtX2kgaW4gMSAyOyBkbworICAgIGlmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0IiA+JjUKKyAgICgkQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCkgPiY1IDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gXAorICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dDsgdGhlbgorICAgICAgOiBPSworICAgIGVsc2UKKyAgICAgIGFtX2N2X3Byb2dfY2NfY19vPW5vCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgcm0gLWYgY29yZSBjb25mdGVzdCoKKyAgdW5zZXQgYW1faQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHJvZ19jY19jX28iID4mNQorJGFzX2VjaG8gIiRhbV9jdl9wcm9nX2NjX2NfbyIgPiY2OyB9CitpZiB0ZXN0ICIkYW1fY3ZfcHJvZ19jY19jX28iICE9IHllczsgdGhlbgorICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKyAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCisgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KKyAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKyAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCisgICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgJ0QnIC0tIGJlY2F1c2UgJy1NRCcgbWVhbnMgInB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCIuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKyAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KKyAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgorICAgICBkb25lCisgICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KKyAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX1NFRCIgfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKwordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0dSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfR1JFUCIgfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKK2Nhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9FR1JFUCIgfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorY2FzZSBgIiRhY19wYXRoX0VHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCisgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisgRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0ZHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRkdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBmZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0ZHUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRkdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCitjYXNlIGAiJGFjX3BhdGhfRkdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdGR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9GR1JFUCIgRkdSRVAgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0ZHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKKyAgICAgIGFjX3BhdGhfRkdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9GR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRkdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZmdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0ZHUkVQPSRGR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRkdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0ZHUkVQIiA+JjY7IH0KKyBGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCisKKwordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLCB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSRsdF9zYXZlX2lmcworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9JGx0X2N2X3BhdGhfTEQKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTk0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSROTQorZWxzZQorICBsdF9ubV90b19jaGVjaz0ke2FjX3Rvb2xfcHJlZml4fW5tCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0kYWNfZGlyLyRsdF90bXBfbm0KKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IjsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSAnc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCSMgTVNZUyBjb252ZXJ0cyAvZGV2L251bGwgdG8gTlVMLCBNaW5HVyBubSB0cmVhdHMgTlVMIGFzIGVtcHR5CisJY2FzZSAkYnVpbGRfb3MgaW4KKwltaW5ndyopIGx0X2JhZF9maWxlPWNvbmZ0ZXN0Lm5tL25vZmlsZSA7OworCSopIGx0X2JhZF9maWxlPS9kZXYvbnVsbCA7OworCWVzYWMKKwljYXNlIGAiJHRtcF9ubSIgLUIgJGx0X2JhZF9maWxlIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqJGx0X2JhZF9maWxlKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsgMgorCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsgMgorCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSRsdF9zYXZlX2lmcworICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wYXRoX05NIiA+JjY7IH0KK2lmIHRlc3Qgbm8gIT0gIiRsdF9jdl9wYXRoX05NIjsgdGhlbgorICBOTT0kbHRfY3ZfcGF0aF9OTQorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfY3RfRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RVTVBCSU49JGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTgoraWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RVTVBCSU4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorICAgIERVTVBCSU49IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgorICBmaQorZmkKKworICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgOiAhPSAiJERVTVBCSU4iOyB0aGVuCisgICAgTk09JERVTVBCSU4KKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9ubV9pbnRlcmZhY2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQorZmkKKworIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3N5c19tYXhfY21kX2xlbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9QUJDRAorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGJpdHJpZyogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KiB8IGZyZWVic2QqIHwgbmV0YnNkKiB8IG9wZW5ic2QqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvczIqKQorICAgICMgVGhlIHRlc3QgdGFrZXMgYSBsb25nIHRpbWUgb24gT1MvMi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MgorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWwkgXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgJiYgXAorICAgICAgIHRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4OyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCBYYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0IDE3ICE9ICIkaSIgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSIgPiY1CiskYXNfZWNobyAibm9uZSIgPiY2OyB9CitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCisKKworCisKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworCitmaQorCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9yZWxvYWRfZmxhZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisgICAgZmkKKyAgICA7OworICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAkd2wtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgJ3Vua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB0aGF0IHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSAnZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgJ3Bhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbNC05XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pWzMtOV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XVwuWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbMy05XSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKiB8IGJpdHJpZyopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK29zMiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorCitmaWxlX21hZ2ljX2dsb2I9Cit3YW50X25vY2FzZWdsb2I9bm8KK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgbWluZ3cqIHwgcHczMiopCisgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworICAgIGVsc2UKKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAoraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKyAgICBETExUT09MPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisgIGZpCitlbHNlCisgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitmaQorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaDsKKyAgIyBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9CitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICBmb3IgYWNfcHJvZyBpbiBhcgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2ZpCisKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcl9hdF9maWxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICAgICAgaWYgdGVzdCAwIC1lcSAiJGFjX3N0YXR1cyI7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJaWYgdGVzdCAwIC1uZSAiJGFjX3N0YXR1cyI7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisKK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X2FyX2F0X2ZpbGUiOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiaXRyaWcqIHwgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKK2ZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisgICopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tCQ0RFR1JTVF0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tCQ0RUXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW0JDREVHUlNUXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tCRFJUXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW0FCRFRdJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tERk5TVFVdJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKK2VzYWMKKworaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgIyBHZXRzIGxpc3Qgb2YgZGF0YSBzeW1ib2xzIHRvIGltcG9ydC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSJzZWQgLW4gLWUgJ3MvXkkgLiogXCguKlwpJC9cMS9wJyIKKyAgIyBBZGp1c3QgdGhlIGJlbG93IGdsb2JhbCBzeW1ib2wgdHJhbnNmb3JtcyB0byBmaXh1cCBpbXBvcnRlZCB2YXJpYWJsZXMuCisgIGx0X2NkZWNsX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkL2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciBcMTsvcCciCisgIGx0X2NfbmFtZV9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyIKKyAgbHRfY19uYW1lX2xpYl9ob29rPSJcCisgIC1lICdzL15JIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCdcCisgIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSAwfSwvcCciCitlbHNlCisgICMgRGlzYWJsZSBob29rcyBieSBkZWZhdWx0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9CisgIGx0X2NkZWNsX2hvb2s9CisgIGx0X2NfbmFtZV9ob29rPQorICBsdF9jX25hbWVfbGliX2hvb2s9CitmaQorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIlwKKyRsdF9jZGVjbF9ob29rXAorIiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiJcCiskbHRfY19uYW1lX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgd2l0aCBsaWIgcHJlZml4IGFuZAorIyBzeW1ib2wgYWRkcmVzcy4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiJcCiskbHRfY19uYW1lX2xpYl9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uLAorICAgICMgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZSBhbmQgSSBmb3IgYW55IGltcG9ydGVkIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyAnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIC9eICpTeW1ib2wgbmFtZSAqOiAve3NwbGl0KFwkIDAsc24sXCI6XCIpOyBzaT1zdWJzdHIoc25bMl0sMil9OyJcCisiICAgICAvXiAqVHlwZSAqOiBjb2RlL3twcmludCBcIlRcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGRhdGEve3ByaW50IFwiSVwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9XCJEXCJ9OyBcJCAwfi9cKFwpLipcfC97Zj1cIlRcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLGEsL1x8fFxyLyk7IHNwbGl0KGFbMl0scyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgZixzWzFdLHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IGYsdFsxXSxzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdFwiIjsgfSA+JjUKKyAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfV0lOMzJfV0NFCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkIF9fb3NmX18KKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9Y29uZnRzdG0uJGFjX29iamV4dAorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiY1CisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0IHllcyA9ICIkcGlwZV93b3JrcyI7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKKworZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c3Jvb3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c3Jvb3Q7CitlbHNlCisgIHdpdGhfc3lzcm9vdD1ubworZmkKKworCitsdF9zeXNyb290PQorY2FzZSAkd2l0aF9zeXNyb290IGluICMoCisgeWVzKQorICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgIGZpCisgICA7OyAjKAorIC8qKQorICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgOzsgIygKKyBub3wnJykKKyAgIDs7ICMoCisgKikKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9zeXNyb290IiA+JjUKKyRhc19lY2hvICIkd2l0aF9zeXNyb290IiA+JjY7IH0KKyAgIGFzX2ZuX2Vycm9yICQ/ICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorICAgOzsKK2VzYWMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CiskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgd29ya2luZyBkZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSB3b3JraW5nIGRkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfbHRfREQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBwcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKK2NhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCis6ICR7bHRfREQ6PSRERH0KK2lmIHRlc3QgLXogIiRsdF9ERCI7IHRoZW4KKyAgYWNfcGF0aF9sdF9ERF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZGQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX2x0X0REPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9sdF9ERCIgfHwgY29udGludWUKK2lmICIkYWNfcGF0aF9sdF9ERCIgYnM9MzIgY291bnQ9MSA8Y29uZnRlc3QyLmkgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgorICBjbXAgLXMgY29uZnRlc3QuaSBjb25mdGVzdC5vdXQgXAorICAmJiBhY19jdl9wYXRoX2x0X0REPSIkYWNfcGF0aF9sdF9ERCIgYWNfcGF0aF9sdF9ERF9mb3VuZD06CitmaQorICAgICAgJGFjX3BhdGhfbHRfRERfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX2x0X0REIjsgdGhlbgorICAgIDoKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9sdF9ERD0kbHRfREQKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX2x0X0REIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9sdF9ERCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gdHJ1bmNhdGUgYmluYXJ5IHBpcGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byB0cnVuY2F0ZSBiaW5hcnkgcGlwZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdHJ1bmNhdGVfYmluKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcHJpbnRmIDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmID5jb25mdGVzdC5pCitjYXQgY29uZnRlc3QuaSBjb25mdGVzdC5pID5jb25mdGVzdDIuaQorbHRfY3ZfdHJ1bmNhdGVfYmluPQoraWYgIiRhY19jdl9wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCisgIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCisgICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJGFjX2N2X3BhdGhfbHRfREQgYnM9NDA5NiBjb3VudD0xIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0Cit0ZXN0IC16ICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiAmJiBsdF9jdl90cnVuY2F0ZV9iaW49IiRTRUQgLWUgNHEiCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90cnVuY2F0ZV9iaW4iID4mNQorJGFzX2VjaG8gIiRsdF9jdl90cnVuY2F0ZV9iaW4iID4mNjsgfQorCisKKworCisKKworCisjIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KK2Z1bmNfY2NfYmFzZW5hbWUgKCkKK3sKKyAgICBmb3IgY2NfdGVtcCBpbiAkKiIiOyBkbworICAgICAgY2FzZSAkY2NfdGVtcCBpbgorICAgICAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgICAgIFwtKikgOzsKKyAgICAgICAgKikgYnJlYWs7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICBmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKK30KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0IG5vID0gIiRlbmFibGVfbGlidG9vbF9sb2NrIiB8fCBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbW9kZQorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0zMgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT02NAorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnI2xpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCittaXBzNjQqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgZW11bD1lbGYKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqMzItYml0KikKKwllbXVsPSIke2VtdWx9MzIiCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWVtdWw9IiR7ZW11bH02NCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTVNCKikKKwllbXVsPSIke2VtdWx9YnRzbWlwIgorCTs7CisgICAgICAqTFNCKikKKwllbXVsPSIke2VtdWx9bHRzbWlwIgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpOMzIqKQorCWVtdWw9IiR7ZW11bH1uMzIiCisJOzsKKyAgICBlc2FjCisgICAgTEQ9IiR7TEQtbGR9IC1tICRlbXVsIgorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNhc2VzIG9ubHkgY292ZXIgdGhlCisgICMgc2l0dWF0aW9ucyB3aGVyZSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgKHN1Y2ggYXMgd2hlbgorICAjIGRvaW5nIDMyLWJpdCBjb21waWxhdGlvbiBmb3IgYSBob3N0IHdoZXJlIGxkIGRlZmF1bHRzIHRvIDY0LWJpdCwgb3IKKyAgIyB2aWNlIHZlcnNhKTsgdGhlIGNvbW1vbiBjYXNlcyB3aGVyZSBubyBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIGRvCisgICMgbm90IGFwcGVhciBpbiB0aGUgbGlzdC4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorCSAgICAgICp4ODYtNjQqKQorCQlMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgorCQk7OworCSAgICAgICopCisJCUxEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkJOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgcG93ZXJwYzY0bGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMybHBwY2xpbnV4IgorCSAgICA7OworCSAgcG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwb3dlcnBjbGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0bHBwYyIKKwkgICAgOzsKKwkgIHBvd2VycGMtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9jY19uZWVkc19iZWxmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9jY19uZWVkc19iZWxmPXllcworZWxzZQorICBsdF9jdl9jY19uZWVkc19iZWxmPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9CisgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9JFNBVkVfQ0ZMQUdTCisgIGZpCisgIDs7CisqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikKKyAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICBpPzg2LSotc29sYXJpcyp8eDg2XzY0LSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCisgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBMRD0ke0xELWxkfV9zb2wyCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSRlbmFibGVfbGlidG9vbF9sb2NrCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKyAgICBNQU5JRkVTVF9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKyAgZmkKK2Vsc2UKKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CitpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCI7IHRoZW4KKyAgTUFOSUZFU1RfVE9PTD06CitmaQorCisKKworCisKKworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiREU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCitpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiREU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IiRhY19jdF9EU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9EU1lNVVRJTD0kYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9EU1lNVVRJTCIgPSB4OyB0aGVuCisgICAgRFNZTVVUSUw9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFNZTVVUSUw9JGFjX2N0X0RTWU1VVElMCisgIGZpCitlbHNlCisgIERTWU1VVElMPSIkYWNfY3ZfcHJvZ19EU1lNVVRJTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1ubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX05NRURJVD0iJE5NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX05NRURJVD0iJHthY190b29sX3ByZWZpeH1ubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTk1FRElUPSRhY19jdl9wcm9nX05NRURJVAoraWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICROTUVESVQiID4mNQorJGFzX2VjaG8gIiROTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX05NRURJVCI7IHRoZW4KKyAgYWNfY3RfTk1FRElUPSROTUVESVQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IiRhY19jdF9OTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCitpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X05NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X05NRURJVCIgPSB4OyB0aGVuCisgICAgTk1FRElUPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE5NRURJVD0kYWNfY3RfTk1FRElUCisgIGZpCitlbHNlCisgIE5NRURJVD0iJGFjX2N2X3Byb2dfTk1FRElUIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTElQTys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX0xJUE89IiRMSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfTElQTz0iJHthY190b29sX3ByZWZpeH1saXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0xJUE89JGFjX2N2X3Byb2dfTElQTworaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElQTyIgPiY1CiskYXNfZWNobyAiJExJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0xJUE8iOyB0aGVuCisgIGFjX2N0X0xJUE89JExJUE8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsaXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsaXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0iJGFjX2N0X0xJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSJsaXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0xJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9MSVBPIiA9IHg7IHRoZW4KKyAgICBMSVBPPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIExJUE89JGFjX2N0X0xJUE8KKyAgZmkKK2Vsc2UKKyAgTElQTz0iJGFjX2N2X3Byb2dfTElQTyIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w9IiRPVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MPSIke2FjX3Rvb2xfcHJlZml4fW90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MPSRhY19jdl9wcm9nX09UT09MCitpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0wiID4mNQorJGFzX2VjaG8gIiRPVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0wiOyB0aGVuCisgIGFjX2N0X09UT09MPSRPVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9IiRhY19jdF9PVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSJvdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTCIgPSB4OyB0aGVuCisgICAgT1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w9JGFjX2N0X09UT09MCisgIGZpCitlbHNlCisgIE9UT09MPSIkYWNfY3ZfcHJvZ19PVE9PTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIkT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MNjQ9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTDY0PSRhY19jdl9wcm9nX09UT09MNjQKK2lmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MNjQiID4mNQorJGFzX2VjaG8gIiRPVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTDY0IjsgdGhlbgorICBhY19jdF9PVE9PTDY0PSRPVE9PTDY0CisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9IiRhY19jdF9PVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0ib3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTDY0PSRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MNjQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0w2NCIgPSB4OyB0aGVuCisgICAgT1RPT0w2ND0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTDY0PSRhY19jdF9PVE9PTDY0CisgIGZpCitlbHNlCisgIE9UT09MNjQ9IiRhY19jdl9wcm9nX09UT09MNjQiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJExUX01VTFRJX01PRFVMRSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1CisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgorCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCisgICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCisJIyB0aGUgY29tcGlsZXIsIGl0IHdvcmtlZC4KKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IjsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2OyB9CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTERGTEFHUz0kc2F2ZV9MREZMQUdTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZm9yY2VfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9CisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdWywuXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCisgICAgZmkKKyAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworCisjIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKKyMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKKyMgaGF2aW5nIGEgZm9ybWF0OgorIyAiRElSWzpESVJdOiIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCisjICI6RElSWzpESVJdIgorIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgorIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCisjICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSWzpESVJdIgorIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCitmdW5jX211bmdlX3BhdGhfbGlzdCAoKQoreworICAgIGNhc2UgeCQyIGluCisgICAgeCkKKyAgICAgICAgOzsKKyAgICAqOikKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYCBcJCQxXCIKKyAgICAgICAgOzsKKyAgICB4OiopCisgICAgICAgIGV2YWwgJDE9XCJcJCQxIGAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgKjo6KikKKyAgICAgICAgZXZhbCAkMT1cIlwkJDFcIGAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcJCQxXCIKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKKyAgICAgICAgOzsKKyAgICBlc2FjCit9CisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorCitmaQorICBDUFA9JGFjX2N2X3Byb2dfQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1CiskYXNfZWNobyAiJENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCitmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworZnVuY19zdHJpcG5hbWVfY25mICgpCit7CisgIGNhc2UgJDIgaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgInMlXiQxJSU7IHMlXFxcXCQyXCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgInMlXiQxJSU7IHMlJDJcJCUlImA7OworICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWVfY25mCisKKworCisKKworIyBTZXQgb3B0aW9ucworCisKKworICAgICAgICBlbmFibGVfZGxvcGVuPW5vCisKKworICBlbmFibGVfd2luMzJfZGxsPW5vCisKKworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zaGFyZWQ9eWVzCitmaQorCisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7CisgICAgKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KKwkgIHBpY19tb2RlPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgcGljX21vZGU9ZGVmYXVsdAorZmkKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQorY2FzZSAkaG9zdCwkZW5hYmxlX3NoYXJlZCBpbgorcG93ZXIqLSotYWl4WzUtOV0qLHllcykKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZS4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFpeC1zb25hbWUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FpeF9zb25hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FpeF9zb25hbWU7IGNhc2UgJHdpdGh2YWwgaW4KKyAgICBhaXh8c3ZyNHxib3RoKQorICAgICAgOzsKKyAgICAqKQorICAgICAgYXNfZm5fZXJyb3IgJD8gIlVua25vd24gYXJndW1lbnQgdG8gLS13aXRoLWFpeC1zb25hbWUiICIkTElORU5PIiA1CisgICAgICA7OworICAgIGVzYWMKKyAgICBsdF9jdl93aXRoX2FpeF9zb25hbWU9JHdpdGhfYWl4X3NvbmFtZQorZWxzZQorICBpZiAke2x0X2N2X3dpdGhfYWl4X3NvbmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3dpdGhfYWl4X3NvbmFtZT1haXgKK2ZpCisKKyAgICB3aXRoX2FpeF9zb25hbWU9JGx0X2N2X3dpdGhfYWl4X3NvbmFtZQorZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfYWl4X3NvbmFtZSIgPiY1CiskYXNfZWNobyAiJHdpdGhfYWl4X3NvbmFtZSIgPiY2OyB9CisgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorICAgICMgRm9yIHRoZSBBSVggd2F5IG9mIG11bHRpbGliLCB3ZSBuYW1lIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIKKyAgICAjIGJhc2VkIG9uIHRoZSBiaXR3aWR0aCB1c2VkLCB0cmFkaXRpb25hbGx5ICdzaHIubycgb3IgJ3Nocl82NC5vJywKKyAgICAjIGFuZCAnc2hyLmltcCcgb3IgJ3Nocl82NC5pbXAnLCByZXNwZWN0aXZlbHksIGZvciB0aGUgSW1wb3J0IEZpbGUuCisgICAgIyBFdmVuIHdoZW4gR05VIGNvbXBpbGVycyBpZ25vcmUgT0JKRUNUX01PREUgYnV0IG5lZWQgJy1tYWl4NjQnIGZsYWcsCisgICAgIyB0aGUgQUlYIHRvb2xjaGFpbiB3b3JrcyBiZXR0ZXIgd2l0aCBPQkpFQ1RfTU9ERSBzZXQgKGRlZmF1bHQgMzIpLgorICAgIGlmIHRlc3QgNjQgPSAiJHtPQkpFQ1RfTU9ERS0zMn0iOyB0aGVuCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHJfNjQKKyAgICBlbHNlCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHIKKyAgICBmaQorICBmaQorICA7OworKikKKyAgd2l0aF9haXhfc29uYW1lPWFpeAorICA7OworZXNhYworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9JGx0bWFpbgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CitvYmpkaXI9JGx0X2N2X29iamRpcgorCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKK29sZF9DQz0kQ0MKK29sZF9DRkxBR1M9JENGTEFHUworCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK2Z1bmNfY2NfYmFzZW5hbWUgJGNvbXBpbGVyCitjY19iYXNlbmFtZT0kZnVuY19jY19iYXNlbmFtZV9yZXN1bHQKKworCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvIiR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKworCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmaWxlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvImZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKKyAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKworbHRfc2F2ZV9DQz0kQ0MKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQorCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorZWxzZQorICAgIDoKK2ZpCisKK2ZpCisKKworCisKKworCisgIGx0X3Byb2dfY29tcGlsZXJfd2w9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorCisKKyAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3MyKikKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLXN0YXRpYycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctWGxpbmtlciAnCisgICAgICBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSItWGNvbXBpbGVyICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgbmFnZm9yKikKKyAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3MyKikKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLXN0YXRpYycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisJOzsKKyAgICAgIG5hZ2ZvciopCisJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJOzsKKyAgICAgIHRjYyopCisJIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgWzEtN10uKiB8ICpTdW4qRm9ydHJhbipcIDguWzAtM10qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICA7OworICAgICAgICAqSW50ZWwqXCBbQ0ZdKkNvbXBpbGVyKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKwkgIDs7CisJKlBvcnRsYW5kXCBHcm91cCopCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mcGljJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXBpYycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIjsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCitmaQorCitmaQorCisKKworCisKKworCisKKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubworICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiOyB0aGVuCisgICAgOgorZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorZmkKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworaGFyZF9saW5rcz1ub3R0ZXN0ZWQKK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgcnVucGF0aF92YXI9CisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgYXJjaGl2ZV9jbWRzPQorICBhcmNoaXZlX2V4cHN5bV9jbWRzPQorICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KKyAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubworICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9CisgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgaGFyZGNvZGVfbWludXNfTD1ubworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGluaGVyaXRfcnBhdGg9bm8KKyAgbGlua19hbGxfZGVwbGlicz11bmtub3duCisgIG1vZHVsZV9jbWRzPQorICBtb2R1bGVfZXhwc3ltX2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIGluY2x1ZGVfZXhwc3ltcz0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgJyAoJyBhbmQgJykkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogJ2F8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyAnYScgYW5kICdiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgJ2QnLgorICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqIHwgYml0cmlnKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQorICAgIGxpbmtfYWxsX2RlcGxpYnM9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHdsJworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKF4pXCspXHNcKy8vJyAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGZpfgorICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBzaHJleHRfY21kcz0uZGxsCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwlwcmVmaXhfY21kcz0iJFNFRCJ+CisJaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCisJICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKKwlmaX4KKwlwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KKwljYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMworICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcworCSAgOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXRjYyopCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1yZHluYW1pYycKKwkgIDs7CisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2Fubm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCBubyA9ICIkbGRfc2hsaWJzIjsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0KKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEdOVSBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHRvIEFJWCBubS4KKwkjIFdpdGhvdXQgdGhlICItbCIgb3B0aW9uLCBvciB3aXRoIHRoZSAiLUIiIG9wdGlvbiwgQUlYIG5tIHRyZWF0cworCSMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzCisJIyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJIyBXaGlsZSB0aGUgJ3dlYWsnIGtleXdvcmQgaXMgaWdub3JlZCBpbiB0aGUgRXhwb3J0IEZpbGUsIHdlIG5lZWQKKwkjIGl0IGluIHRoZSBJbXBvcnQgRmlsZSBmb3IgdGhlICdhaXgtc29uYW1lJyBmZWF0dXJlLCBzbyB3ZSBoYXZlCisJIyB0byByZXBsYWNlIHRoZSAiLUIiIG9wdGlvbiB3aXRoICItUCIgZm9yIEFJWCBubS4KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IGlmIChcJCAyID09ICJXIikgeyBwcmludCBcJCAzICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMyB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW15CXSpcKSQvUFwxLydcJydgIC1QQ3BnbCAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgJiYgKHN1YnN0cihcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgaGF2ZSBydW50aW1lIGxpbmtpbmcgZW5hYmxlZCwgYW5kIHVzZSBpdCBmb3IgZXhlY3V0YWJsZXMuCisJIyBGb3Igc2hhcmVkIGxpYnJhcmllcywgd2UgZW5hYmxlL2Rpc2FibGUgcnVudGltZSBsaW5raW5nCisJIyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGNyZWF0ZWQgLQorCSMgd2hlbiAid2l0aF9haXhfc29uYW1lLGFpeF91c2VfcnVudGltZWxpbmtpbmciIGlzOgorCSMgImFpeCxubyIgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKwkjICJhaXgseWVzIiAgbGliLnNvICAgICAgICAgIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisJIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQorCSMgImJvdGgsbm8iICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzCisJIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcworCSMgImJvdGgseWVzIiBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKwkjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vCisJIyAic3ZyNCwqIiAgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKwljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0IHgtYnJ0bCA9ICJ4JGxkX2ZsYWciIHx8IHRlc3QgeC1XbCwtYnJ0bCA9ICJ4JGxkX2ZsYWciKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAjIFdpdGggYWl4LXNvbmFtZT1zdnI0LCB3ZSBjcmVhdGUgdGhlIGxpYi5zby5WIHNoYXJlZCBhcmNoaXZlcyBvbmx5LAorCSAgICAjIHNvIHdlIGRvbid0IGhhdmUgbGliLmEgc2hhcmVkIGxpYnMgdG8gbGluayBvdXIgZXhlY3V0YWJsZXMuCisJICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWJydGwiCisJICBmaQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgYXJjaGl2ZV9jbWRzPScnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGZpbGVfbGlzdF9zcGVjPSckd2wtZiwnCisgICAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAgIGFpeCwqKSA7OyAjIHRyYWRpdGlvbmFsLCBubyBpbXBvcnQgZmlsZQorICAgICAgc3ZyNCwqIHwgKix5ZXMpICMgdXNlIGltcG9ydCBmaWxlCisJIyBUaGUgSW1wb3J0IEZpbGUgZGVmaW5lcyB3aGF0IHRvIGhhcmRjb2RlLgorCWhhcmRjb2RlX2RpcmVjdD1ubworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubworCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHdsLUcnCisJZmkKKwkjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCisJIyBzaGFyZWQgbGlicmFyeSwgb3IgdGhlIGxpbmtlciBtYXkgZXZlbnR1YWxseSBmaW5kIHNoYXJlZCBsaWJyYXJpZXMKKwkjIC93aXRoLyBJbXBvcnQgRmlsZSAtIHdlIGRvIG5vdCB3YW50IHRvIG1peCB0aGVtLgorCXNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKKwlzaGFyZWRfZmxhZ19zdnI0PSctc2hhcmVkICR3bC1HJworICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJworCSAgZmkKKwkgIHNoYXJlZF9mbGFnX2FpeD0nJHdsLWJNOlNSRScKKwkgIHNoYXJlZF9mbGFnX3N2cjQ9JyR3bC1HJworCWZpCisgICAgICBmaQorCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPS91c3IvbGliOi9saWIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCitmaQorCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCisgICAgICBlbHNlCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPS91c3IvbGliOi9saWIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCitmaQorCisJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHdsLWJlcm5vdG9rJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtYmVyb2snCisJICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKwkgIGZpCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZH4kTUtESVIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCisJICAjIC1icnRsIGFmZmVjdHMgbXVsdGlwbGUgbGlua2VyIHNldHRpbmdzLCAtYmVyb2sgZG9lcyBub3QgYW5kIGlzIG92ZXJyaWRkZW4gbGF0ZXIKKwkgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoWywgXVxcKSUtYmVyb2tcXDElZyJgJworCSAgaWYgdGVzdCBzdnI0ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCisJICBmaQorCSAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JENDICckc2hhcmVkX2ZsYWdfc3ZyNCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kU1RSSVAgLWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm9+KCBmdW5jX2VjaG9fYWxsICIjISAkc29uYW1lKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSI7IGlmIHRlc3Qgc2hyXzY0ID0gIiRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiIyA2NCI7IGVsc2UgZnVuY19lY2hvX2FsbCAiIyAzMiI7IGZpOyBjYXQgJGV4cG9ydF9zeW1ib2xzICkgPiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wJworCSAgZWxzZQorCSAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kTVYgICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJG91dHB1dF9vYmpkaXInCisJICBmaQorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYnNkaVs0NV0qKQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBjbCopCisJIyBOYXRpdmUgTVNWQworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJZmlsZV9saXN0X3NwZWM9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9LmRsbAorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCisgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOworICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKyAgICAgICAgICBmaX4KKyAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgbGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwlleGNsdWRlX2V4cHN5bXM9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKyAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhY34KKyAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKyAgICAgICAgICBmaScKKwk7OworICAgICAgKikKKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9LmRsbAorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKworICBlbHNlCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKKyAgZmkKKyAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KnxuYWdmb3IqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCB5ZXMgPSAiJF9sdF9kYXJfY2FuX3NoYXJlZCI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kc3ltdXRpbCIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorCisgIGVsc2UKKyAgbGRfc2hsaWJzPW5vCisgIGZpCisKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMi4qKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAtZiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKwloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwloYXJkY29kZV9taW51c19MPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9fYis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9bm8KKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgTERGTEFHUz0iJExERkxBR1MgLWIiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCitlbHNlCisgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworZmkKKworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwkgIDs7CisJKikKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHNhdmVfTERGTEFHUz0kTERGTEFHUworCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHdsLWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bC9kZXYvbnVsbCIKKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCitlbHNlCisgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgJHdsLWV4cG9ydHNfZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQorCWxpbmtfYWxsX2RlcGxpYnM9bm8KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJbGRfc2hsaWJzPXllcworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKworICAgIG9wZW5ic2QqIHwgYml0cmlnKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCisJZWxzZQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKKwlmaQorICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBzaHJleHRfY21kcz0uZGxsCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwlwcmVmaXhfY21kcz0iJFNFRCJ+CisJaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCisJICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKKwlmaX4KKwlwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KKwljYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1pbnB1dCAkd2wkbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJd2xhcmM9JyR3bCcKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHdsJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKyAgICAgICopCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgJyR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwlpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3Qgc2VxdWVudCA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIHJlbG9hZF9jbWRzPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCWxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPSckd2wteix0ZXh0JworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR3bC16LHRleHQnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHdsLXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1SLCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCBzbmkgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KK3Rlc3Qgbm8gPSAiJGxkX3NobGlicyIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKworCisKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisKKyAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCisJICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwkgIHRoZW4KKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICBmaQorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovLC9MUi8nIDs7CisgICAgKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LycgOzsKKyAgZXNhYworICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PVwoW0EtWmEtel06XCl8XDF8ZycgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PS98L3xnJyA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCisgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKyAgKlw7KikKKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorICAgIDs7CisgICopCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgOzsKKyAgZXNhYworICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4uLgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPS9gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgICMgLi4uYnV0IGlmIHNvbWUgcGF0aCBjb21wb25lbnQgYWxyZWFkeSBlbmRzIHdpdGggdGhlIG11bHRpbGliIGRpciB3ZSBhc3N1bWUKKyAgIyB0aGF0IGFsbCBpcyBmaW5lIGFuZCB0cnVzdCAtcHJpbnQtc2VhcmNoLWRpcnMgYXMgaXMgKEdDQyA0LjI/IG9yIG5ld2VyKS4KKyAgY2FzZSAiJGx0X211bHRpX29zX2RpcjsgJGx0X3NlYXJjaF9wYXRoX3NwZWMgIiBpbgorICAiLzsgIiogfCAiLy47ICIqIHwgIi8uLzsgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIvICIqKQorICAgIGx0X211bHRpX29zX2Rpcj0KKyAgICA7OworICBlc2FjCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsaWYgdGVzdCAtbiAiJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworQkVHSU4ge1JTID0gIiAiOyBGUyA9ICIvfFxuIjt9IHsKKyAgbHRfZm9vID0gIiI7CisgIGx0X2NvdW50ID0gMDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb28gPSAiLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW2x0X2Zvb10rKzsgfQorICBpZiAobHRfZnJlcVtsdF9mb29dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzfC9cKFtBLVphLXpdOlwpfFwxfGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPS5zbworcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgJyMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiAnLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJENDIC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgVXNpbmcgSW1wb3J0IEZpbGVzIGFzIGFyY2hpdmUgbWVtYmVycywgaXQgaXMgcG9zc2libGUgdG8gc3VwcG9ydAorICAgICMgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBvZiBzaGFyZWQgbGlicmFyeSBhcmNoaXZlcyBvbiBBSVguIFdoaWxlCisgICAgIyB0aGlzIHdvdWxkIHdvcmsgZm9yIGJvdGggd2l0aCBhbmQgd2l0aG91dCBydW50aW1lIGxpbmtpbmcsIGl0IHdpbGwKKyAgICAjIHByZXZlbnQgc3RhdGljIGxpbmtpbmcgb2Ygc3VjaCBhcmNoaXZlcy4gU28gd2UgZG8gZmlsZW5hbWUtYmFzZWQKKyAgICAjIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgd2l0aCAuc28gZXh0ZW5zaW9uIG9ubHksIHdoaWNoIGlzIHVzZWQKKyAgICAjIHdoZW4gYm90aCBydW50aW1lIGxpbmtpbmcgYW5kIHNoYXJlZCBsaW5raW5nIGlzIGVuYWJsZWQuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBydW50aW1lIGxpbmtpbmcgbWF5IGltcGFjdCBwZXJmb3JtYW5jZSwgc28gd2UgZG8KKyAgICAjIG5vdCB3YW50IHRoaXMgdG8gYmUgdGhlIGRlZmF1bHQgZXZlbnR1YWxseS4gQWxzbywgd2UgdXNlIHRoZQorICAgICMgdmVyc2lvbmVkIC5zbyBsaWJzIGZvciBleGVjdXRhYmxlcyBvbmx5IGlmIHRoZXJlIGlzIHRoZSAtYnJ0bAorICAgICMgbGlua2VyIGZsYWcgaW4gTERGTEFHUyBhcyB3ZWxsLCBvciAtLXdpdGgtYWl4LXNvbmFtZT1zdnI0IG9ubHkuCisgICAgIyBUbyBhbGxvdyBmb3IgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBzdXBwb3J0LCB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICMgbGliTkFNRS5zby5WIGFzIGFuIGFyY2hpdmUgZmlsZSwgY29udGFpbmluZzoKKyAgICAjICopIGFuIEltcG9ydCBGaWxlLCByZWZlcnJpbmcgdG8gdGhlIHZlcnNpb25lZCBmaWxlbmFtZSBvZiB0aGUKKyAgICAjICAgIGFyY2hpdmUgYXMgd2VsbCBhcyB0aGUgc2hhcmVkIGFyY2hpdmUgbWVtYmVyLCB0ZWxsaW5nIHRoZQorICAgICMgICAgYml0d2lkdGggKDMyIG9yIDY0KSBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGFuZCBwcm92aWRpbmcgdGhlCisgICAgIyAgICBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBldmVudHVhbGx5CisgICAgIyAgICBkZWNvcmF0ZWQgd2l0aCB0aGUgJ3dlYWsnIGtleXdvcmQKKyAgICAjICopIHRoZSBzaGFyZWQgb2JqZWN0IHdpdGggdGhlIEZfTE9BRE9OTFkgZmxhZyBzZXQsIHRvIHJlYWxseSBhdm9pZAorICAgICMgICAgaXQgYmVpbmcgc2VlbiBieSB0aGUgbGlua2VyLgorICAgICMgQXQgcnVuIHRpbWUgd2UgYmV0dGVyIHVzZSB0aGUgcmVhbCBmaWxlIHJhdGhlciB0aGFuIGFub3RoZXIgc3ltbGluaywKKyAgICAjIGJ1dCBmb3IgbGluayB0aW1lIHdlIGNyZWF0ZSB0aGUgc3ltbGluayBsaWJOQU1FLnNvIC0+IGxpYk5BTUUuc28uVgorCisgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbm5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgYWl4LHllcykgIyB0cmFkaXRpb25hbCBsaWJ0b29sCisgICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIHVudmVyc2lvbmFibGUgbGliLnNvJworICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBhaXgsbm8pICMgdHJhZGl0aW9uYWwgQUlYIG9ubHkKKyAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggbGliLmEobGliLnNvLlYpJworICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICA7OworICAgIHN2cjQsKikgIyBmdWxsIHN2cjQgb25seQorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgICAgOzsKKyAgICAqLHllcykgIyBib3RoLCBwcmVmZXIgc3ZyNAorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyksIGxpYi5hKGxpYi5zby5WKSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLmEgbmVlZHMgZXh0cmEgaGFuZGxpbmcKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9IiRyZWFsbmFtZSJ+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRsaW5rbmFtZSJ+JGluc3RhbGxfc2hhcmVkX3Byb2cgIiRkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0In50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJworICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdmb3IgbiBpbiAkbGlicmFyeV9uYW1lcyAkb2xkX2xpYnJhcnk7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRuIn50ZXN0ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiA9ICIkbiIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCisgICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgICA7OworICAgICosbm8pICMgYm90aCwgcHJlZmVyIGFpeAorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuYShsaWIuc28uViksIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5zby5WIGFuZCBzeW1saW5rIGxpYk5BTUUuc28gbmVlZCBleHRyYSBoYW5kbGluZworICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kZGxuYW1lICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9JHJlYWxuYW1lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRsaW5rbmFtZSJ+KGNkICIkZGVzdGRpciIgJiYgJExOX1MgLWYgJGRsbmFtZSAkZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvKScKKyAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUifmZvciBuIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbiJ+ZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28iJworICAgICAgOzsKKyAgICBlc2FjCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0uZGxsCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSIKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JExJQgorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisgIGVzYWMKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMjNdLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyLiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBpZiB0ZXN0IDMyID0gIiRIUFVYX0lBNjRfTU9ERSI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXgzMgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXg2NAorICAgIGZpCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4WzMtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2xpbnV4KmFuZHJvaWQqKQorICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIGZpbmlzaF9jbWRzPQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJworICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisKK2ZpCisKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIElkZWFsbHksIHdlIGNvdWxkIHVzZSBsZGNvbmZpZyB0byByZXBvcnQgKmFsbCogZGlyZWN0b3JlcyB3aGljaCBhcmUKKyAgIyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLCBob3dldmVyIHRoaXMgaXMgc3RpbGwgbm90IHBvc3NpYmxlLiAgQXNpZGUgZnJvbSBub3QKKyAgIyBiZWluZyBjZXJ0YWluIC9zYmluL2xkY29uZmlnIGlzIGF2YWlsYWJsZSwgY29tbWFuZAorICAjICdsZGNvbmZpZyAtTiAtWCAtdiB8IGdyZXAgXi8nIG9uIDY0Yml0IEZlZG9yYSBkb2VzIG5vdCByZXBvcnQgL3Vzci9saWI2NCwKKyAgIyBldmVuIHRob3VnaCBpdCBpcyBzZWFyY2hlZCBhdCBydW4tdGltZS4gIFRyeSB0byBkbyB0aGUgYmVzdCBndWVzcyBieQorICAjIGFwcGVuZGluZyBsZC5zby5jb25mIGNvbnRlbnRzIChhbmQgaW5jbHVkZXMpIHRvIHRoZSBzZWFyY2ggcGF0aC4KKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2RlbGYqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBuZWVkX3ZlcnNpb249bm8KKyAgZWxzZQorICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgZmkKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIE9TLzIgY2FuIG9ubHkgbG9hZCBhIERMTCB3aXRoIGEgYmFzZSBuYW1lIG9mIDggY2hhcmFjdGVycyBvciBsZXNzLgorICBzb25hbWVfc3BlYz0nYHRlc3QgLW4gIiRvczJkbGxuYW1lIiAmJiBsaWJuYW1lPSIkb3MyZGxsbmFtZSI7CisgICAgdj0kKCRFQ0hPICRyZWxlYXNlJHZlcnN1ZmZpeCB8IHRyIC1kIC4tKTsKKyAgICBuPSQoJEVDSE8gJGxpYm5hbWUgfCBjdXQgLWIgLSQoKDggLSAkeyN2fSkpIHwgdHIgLiBfKTsKKyAgICAkRUNITyAkbiR2YCRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1fZGxsLiRsaWJleHQnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1CRUdJTkxJQlBBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICBmaScKKyAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAkUk0gXCRkbHBhdGgnCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPXNjbworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworZmkKKworaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKK2ZpCisKKyMgcmVtZW1iZXIgdW5hdWdtZW50ZWQgc3lzX2xpYl9kbHNlYXJjaF9wYXRoIGNvbnRlbnQgZm9yIGxpYnRvb2wgc2NyaXB0IGRlY2xzLi4uCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIC4uLiBidXQgaXQgbmVlZHMgTFRfU1lTX0xJQlJBUllfUEFUSCBtdW5naW5nIGZvciBvdGhlciBjb25maWd1cmUtdGltZSBjb2RlCitmdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAiJExUX1NZU19MSUJSQVJZX1BBVEgiCisKKyMgdG8gYmUgdXNlZCBhcyBkZWZhdWx0IExUX1NZU19MSUJSQVJZX1BBVEggdmFsdWUgaW4gZ2VuZXJhdGVkIGxpYnRvb2wKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9JExUX1NZU19MSUJSQVJZX1BBVEgKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CisgICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCBubyAhPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgJiYKKyAgICAgdGVzdCBubyAhPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQorCitpZiB0ZXN0IHJlbGluayA9ICIkaGFyZGNvZGVfYWN0aW9uIiB8fAorICAgdGVzdCB5ZXMgPSAiJGluaGVyaXRfcnBhdGgiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8CisgICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorCisKKworCisKKworICBpZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGwKK2Vsc2UKKworICAgIGx0X2N2X2Rsb3Blbj1keWxkCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisKK2ZpCisKKyAgICA7OworCisgIHRwZiopCisgICAgIyBEb24ndCB0cnkgdG8gcnVuIGFueSBsaW5rIHRlc3RzIGZvciBUUEYuICBXZSBrbm93IGl0J3MgaW1wb3NzaWJsZQorICAgICMgYmVjYXVzZSBUUEYgaXMgYSBjcm9zcy1jb21waWxlciwgYW5kIHdlIGtub3cgaG93IHdlIG9wZW4gRFNPcy4KKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgICA7OworCisgICopCisgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2hsX2xvYWQiICJhY19jdl9mdW5jX3NobF9sb2FkIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49c2hsX2xvYWQKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2hsX2xvYWQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzaGxfbG9hZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcworZWxzZQorICBhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPXNobF9sb2FkIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkCitlbHNlCisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzdmxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sc3ZsZAorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsZF9kbGRfbGluays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbGRfbGluayAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsZF9saW5rICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxkX2xpbmsgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3Qgbm8gPSAiJGx0X2N2X2Rsb3BlbiI7IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPXllcworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKyAgICB0ZXN0IHllcyA9ICIkYWNfY3ZfaGVhZGVyX2RsZmNuX2giICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9JExJQlMKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2Rsb3Blbl9zZWxmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcworZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzaWJpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQorCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2Rsb3Blbl9zZWxmIjsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNpYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CisgICAgZmkKKworICAgIENQUEZMQUdTPSRzYXZlX0NQUEZMQUdTCisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgTElCUz0kc2F2ZV9MSUJTCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICIgPiY2OyB9CitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICAgIDs7CisgICopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgOzsKKyAgZXNhYworZmkKKworCisKKworCisKKworCisKKworCisKKyAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFs0LTldKikKKyAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICAgIGNhc2UgJGVuYWJsZV9zaGFyZWQsJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorICAgICAgeWVzLGFpeCx5ZXMpIDs7CQkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBmaWxlIG9ubHkKKyAgICAgIHllcyxzdnI0LCopIDs7CQkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBhcmNoaXZlIG1lbWJlciBvbmx5CisgICAgICB5ZXMsKikgZW5hYmxlX3N0YXRpYz1ubyA7OwkjIHNoYXJlZCBvYmplY3QgaW4gbGliLmEgYXJjaGl2ZSBhcyB3ZWxsCisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zaGFyZWQiID4mNjsgfQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zdGF0aWMiID4mNjsgfQorCisKKworCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitDQz0kbHRfc2F2ZV9DQworCisgICAgICBpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3Qgbm8gIT0gIiRDWFgiICYmCisgICAgKCAodGVzdCBnKysgPSAiJENYWCIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAodGVzdCBnKysgIT0gIiRDWFgiKSkpOyB0aGVuCisgIGFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJENYWENQUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wcm9nX0NYWENQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCisKK2ZpCisgIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1hYQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9bm8KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9CitoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQoraGFyZGNvZGVfbWludXNfTF9DWFg9bm8KK2hhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCitoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCitpbmhlcml0X3JwYXRoX0NYWD1ubworbW9kdWxlX2NtZHNfQ1hYPQorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0KK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPXVua25vd24KK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSRvbGRfYXJjaGl2ZV9jbWRzCityZWxvYWRfZmxhZ19DWFg9JHJlbG9hZF9mbGFnCityZWxvYWRfY21kc19DWFg9JHJlbG9hZF9jbWRzCitub191bmRlZmluZWRfZmxhZ19DWFg9Cit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9CitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0X0NYWD0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciI7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCisKKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIGNvbXBpbGVyX0NYWD0kQ0MKKyAgZnVuY19jY19iYXNlbmFtZSAkY29tcGlsZXIKK2NjX2Jhc2VuYW1lPSRmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdAorCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0KKyAgICBmaQorCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLCB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSRsdF9zYXZlX2lmcworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9JGx0X2N2X3BhdGhfTEQKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHdsJworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworICAgICAgYWl4WzQtOV0qKQorICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPQorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBoYXZlIHJ1bnRpbWUgbGlua2luZyBlbmFibGVkLCBhbmQgdXNlIGl0IGZvciBleGVjdXRhYmxlcy4KKyAgICAgICAgICAjIEZvciBzaGFyZWQgbGlicmFyaWVzLCB3ZSBlbmFibGUvZGlzYWJsZSBydW50aW1lIGxpbmtpbmcKKyAgICAgICAgICAjIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRlZCAtCisgICAgICAgICAgIyB3aGVuICJ3aXRoX2FpeF9zb25hbWUsYWl4X3VzZV9ydW50aW1lbGlua2luZyIgaXM6CisgICAgICAgICAgIyAiYWl4LG5vIiAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgImFpeCx5ZXMiICBsaWIuc28gICAgICAgICAgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisgICAgICAgICAgIyAiYm90aCxubyIgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAiYm90aCx5ZXMiIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8KKyAgICAgICAgICAjICJzdnI0LCoiICAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAgICMgV2l0aCBhaXgtc29uYW1lPXN2cjQsIHdlIGNyZWF0ZSB0aGUgbGliLnNvLlYgc2hhcmVkIGFyY2hpdmVzIG9ubHksCisJICAgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgorCSAgICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgorCSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgorCSAgICBmaQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JycKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCisgICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgICAgICBmaWxlX2xpc3Rfc3BlY19DWFg9JyR3bC1mLCcKKyAgICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICAgIGFpeCwqKSA7OwkjIG5vIGltcG9ydCBmaWxlCisgICAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQorICAgICAgICAgICMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD1ubworICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0kc2hhcmVkX2ZsYWcnICR3bC1HJworCSAgZmkKKwkgICMgTmVlZCB0byBlbnN1cmUgcnVudGltZSBsaW5raW5nIGlzIGRpc2FibGVkIGZvciB0aGUgdHJhZGl0aW9uYWwKKwkgICMgc2hhcmVkIGxpYnJhcnksIG9yIHRoZSBsaW5rZXIgbWF5IGV2ZW50dWFsbHkgZmluZCBzaGFyZWQgbGlicmFyaWVzCisJICAjIC93aXRoLyBJbXBvcnQgRmlsZSAtIHdlIGRvIG5vdCB3YW50IHRvIG1peCB0aGVtLgorCSAgc2hhcmVkX2ZsYWdfYWl4PSctc2hhcmVkJworCSAgc2hhcmVkX2ZsYWdfc3ZyND0nLXNoYXJlZCAkd2wtRycKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJworCSAgICBmaQorCSAgICBzaGFyZWRfZmxhZ19haXg9JyR3bC1iTTpTUkUnCisJICAgIHNoYXJlZF9mbGFnX3N2cjQ9JyR3bC1HJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKwlpZiB0ZXN0IGFpeCx5ZXMgPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKyAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICAgICAgIyBUaGUgIi1HIiBsaW5rZXIgZmxhZyBhbGxvd3MgdW5kZWZpbmVkIHN5bWJvbHMuCisgICAgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSctYmVybm90b2snCisgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgIyBleGVjdXRhYmxlLgorICAgICAgICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9L3Vzci9saWI6L2xpYgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCitmaQorCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0iLXogbm9kZWZzIgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPS91c3IvbGliOi9saWIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorZmkKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWJlcm5vdG9rJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtYmVyb2snCisJICAgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmR+JE1LRElSICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCSAgICAjIC1icnRsIGFmZmVjdHMgbXVsdGlwbGUgbGlua2VyIHNldHRpbmdzLCAtYmVyb2sgZG9lcyBub3QgYW5kIGlzIG92ZXJyaWRkZW4gbGF0ZXIKKwkgICAgY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQ9J2BmdW5jX2VjaG9fYWxsICIkY29tcGlsZXJfZmxhZ3MgIiB8ICRTRUQgLWUgInMlLWJydGxcXChbLCBdXFwpJS1iZXJva1xcMSVnImAnCisJICAgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgICAjIGxpYnJhcmllcy4gTmVlZCAtYm5vcnRsIGxhdGUsIHdlIG1heSBoYXZlIC1icnRsIGluIExERkxBR1MuCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCisJICAgIGZpCisJICAgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCisJICAgIGVsc2UKKwkgICAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iJGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJworCSAgICBmaQorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iJGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIGxkX3NobGlic19DWFg9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScgJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworCSAgZmlsZV9saXN0X3NwZWNfQ1hYPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9LmRsbAorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KKyAgICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICAgIGxpbmtuYW1lcz0nCisJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgQ1hYKT0ndHJ1ZScKKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBvbGRfcG9zdGluc3RhbGxfY21kc19DWFg9J2NobW9kIDY0NCAkb2xkbGliJworCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKyAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWN+CisgICAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorICAgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgICAgZmknCisJICA7OworCSopCisJICAjIGcrKworCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWFsbC1zeW1ib2xzJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCisJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKworCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSAgICAjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAorICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKworICBlbHNlCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScnCisgIGZpCisgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KnxuYWdmb3IqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCB5ZXMgPSAiJF9sdF9kYXJfY2FuX3NoYXJlZCI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2NtZHNfQ1hYPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2RzeW11dGlsIgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9InNlZCAtZSAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICAgICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2RzeW11dGlsIgorICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBmaQorCisgIGVsc2UKKyAgbGRfc2hsaWJzX0NYWD1ubworICBmaQorCisJOzsKKworICAgICAgb3MyKikKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCWhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcworCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorCXNocmV4dF9jbWRzPS5kbGwKKwlhcmNoaXZlX2NtZHNfQ1hYPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgIGVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgIHByZWZpeF9jbWRzPSIkU0VEIn4KKwkgIGlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKKwkgIGZpfgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICBlbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisJb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19DWFg9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QyLiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgaGFpa3UqKQorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wrYiAkd2wkbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJworICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgLWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGhwdXgxMCp8aHB1eDExKikKKyAgICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsK2IgJHdsJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICAgICAgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbMy05XSopCisJaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICAgICAgaW5oZXJpdF9ycGF0aF9DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiAtZiBcJHRlbXBsaWIgJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiAtZiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbMS01XS4qIHwgKnBnY3BwXCBbMS01XS4qKQorCSAgICAgIHByZWxpbmtfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKyAgICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKyAgICAgICAgICAgICAgICAkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKyAgICAgICAgICAgICAgICAkUkFOTElCICRvbGRsaWInCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKyAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtLXJwYXRoICR3bCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKiB8IG1waXhsKiB8IGJneGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIGNvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKwk7OworCisgICAgICBvcGVuYnNkKiB8IGJpdHJpZyopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorCWVsc2UKKwkgIGxkX3NobGlic19DWFg9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIGFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgLWYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorICAgICAgICAgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHdsLWlucHV0ICR3bCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKyAgICAgICAgICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1NICR3bCRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlICctRycgTk9UICctc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtRyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkJKikKKwkJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSckd2wteix0ZXh0JworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBDQU5OT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHdsLXosdGV4dCcKKwlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR3bC16LG5vZGVmcycKKwlhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtUiwkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KKyAgICAgICAgICAgICAgJyIkb2xkX2FyY2hpdmVfY21kc19DWFgiCisJICAgIHJlbG9hZF9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRyZWxvYWRfb2Jqc34KKyAgICAgICAgICAgICAgJyIkcmVsb2FkX2NtZHNfQ1hYIgorCSAgICA7OworCSAgKikKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KKyAgICB0ZXN0IG5vID0gIiRsZF9zaGxpYnNfQ1hYIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBHQ0NfQ1hYPSRHWFgKKyAgICBMRF9DWFg9JExECisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICAjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorcHJlZGVwX29iamVjdHNfQ1hYPQorcG9zdGRlcF9vYmplY3RzX0NYWD0KK3ByZWRlcHNfQ1hYPQorcG9zdGRlcHNfQ1hYPQorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0KKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK19MVF9FT0YKKworCitfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKypcIC1mdXNlLWxpbmtlci1wbHVnaW4qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby11c2UtbGlua2VyLXBsdWdpbiIgOzsKK2VzYWMKKworaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHByZXYkcCBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgeC1MID0gIiRwIiB8fAorICAgICAgICAgIHRlc3QgeC1SID0gIiRwIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisgICAgICAgICBjYXNlICRwIGluCisgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICBlc2FjCisgICAgICAgZmkKKyAgICAgICBjYXNlICRwIGluCisgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICBlc2FjCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgY2FzZSAkcHJldiBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIjsgdGhlbgorCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0kcHJldiRwCisJICAgZWxzZQorCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSAkcHJldiRwIgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRwb3N0ZGVwc19DWFgiOyB0aGVuCisJICAgcG9zdGRlcHNfQ1hYPSRwcmV2JHAKKwkgZWxzZQorCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICRwcmV2JHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICBwcmV2PQorICAgICAgIDs7CisKKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCisJIGlmIHRlc3QgLXogIiRwcmVkZXBfb2JqZWN0c19DWFgiOyB0aGVuCisJICAgcHJlZGVwX29iamVjdHNfQ1hYPSRwCisJIGVsc2UKKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSRwCisJIGVsc2UKKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcG9zdGRlcF9vYmplY3RzX0NYWCAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyBDWFggdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFszLTldKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBwcmVkZXBfb2JqZWN0c19DWFg9CisgIHBvc3RkZXBfb2JqZWN0c19DWFg9CisgIHBvc3RkZXBzX0NYWD0KKyAgOzsKK2VzYWMKKworCitjYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCisqIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OworZXNhYworIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9CitpZiB0ZXN0IC1uICIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IjsgdGhlbgorIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9YGVjaG8gIiAke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IiB8ICRTRUQgLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9CitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CisKKworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSckd2wtc3RhdGljJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgICA7OworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKyAgICAgIDs7CisgICAgaW50ZXJpeFszLTldKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbNC05XSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwllbHNlCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsIENYWCk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworCTs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJICAgIDs7CisJICBlY3BjKiApCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZwaWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikKKwkgICAgIyBJQk0gWEwgOC4wLCA5LjAgb24gUFBDIGFuZCBCbHVlR2VuZQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcXBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctcXN0YXRpY2xpbmsnCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIjsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KK2ZpCisKK2ZpCisKKworCisKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWFwiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubworICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCI7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorZmkKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorCisKKworCitoYXJkX2xpbmtzPW5vdHRlc3RlZAoraWYgdGVzdCBubyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKworICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4WzQtOV0qKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gR05VIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgdG8gQUlYIG5tLgorICAgICMgV2l0aG91dCB0aGUgIi1sIiBvcHRpb24sIG9yIHdpdGggdGhlICItQiIgb3B0aW9uLCBBSVggbm0gdHJlYXRzCisgICAgIyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMKKyAgICAjIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKyAgICAjIFdoaWxlIHRoZSAnd2Vhaycga2V5d29yZCBpcyBpZ25vcmVkIGluIHRoZSBFeHBvcnQgRmlsZSwgd2UgbmVlZAorICAgICMgaXQgaW4gdGhlIEltcG9ydCBGaWxlIGZvciB0aGUgJ2FpeC1zb25hbWUnIGZlYXR1cmUsIHNvIHdlIGhhdmUKKyAgICAjIHRvIHJlcGxhY2UgdGhlICItQiIgb3B0aW9uIHdpdGggIi1QIiBmb3IgQUlYIG5tLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IGlmIChcJCAyID09ICJXIikgeyBwcmludCBcJCAzICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMyB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgZnVuY19lY2hvX2FsbCAkTk0gfCAkU0VEIC1lICdcJydzL0JcKFteQl0qXCkkL1BcMS8nXCcnYCAtUENwZ2wgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpICYmIChzdWJzdHIoXCQgMSwxLDEpICE9ICIuIikpIHsgaWYgKChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSB7IHByaW50IFwkIDEgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAxIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0kbHRkbGxfY21kcworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBjbCopCisgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisgICAgICA7OworICAgICopCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhjbHVkZV9leHBzeW1zX0NYWD0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSB8IGdudSopCisgICAgbGlua19hbGxfZGVwbGlic19DWFg9bm8KKyAgICA7OworICAqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgOzsKKyAgZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KK3Rlc3Qgbm8gPSAiJGxkX3NobGlic19DWFgiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKword2l0aF9nbnVfbGRfQ1hYPSR3aXRoX2dudV9sZAorCisKKworCisKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCisgIGlmIHRlc3QgeWVzLHllcyA9ICIkR0NDLCRlbmFibGVfc2hhcmVkIjsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kc19DWFggaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorCSAgY29tcGlsZXJfZmxhZ3M9LXYKKwkgIGxpbmtlcl9mbGFncz0tdgorCSAgdmVyc3RyaW5nPQorCSAgb3V0cHV0X29iamRpcj0uCisJICBsaWJuYW1lPWNvbmZ0ZXN0CisJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwkgIHRoZW4KKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJICBlbHNlCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKwkgIGZpCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjY7IH0KKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPS5zbworcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgJyMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiAnLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJENDIC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgVXNpbmcgSW1wb3J0IEZpbGVzIGFzIGFyY2hpdmUgbWVtYmVycywgaXQgaXMgcG9zc2libGUgdG8gc3VwcG9ydAorICAgICMgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBvZiBzaGFyZWQgbGlicmFyeSBhcmNoaXZlcyBvbiBBSVguIFdoaWxlCisgICAgIyB0aGlzIHdvdWxkIHdvcmsgZm9yIGJvdGggd2l0aCBhbmQgd2l0aG91dCBydW50aW1lIGxpbmtpbmcsIGl0IHdpbGwKKyAgICAjIHByZXZlbnQgc3RhdGljIGxpbmtpbmcgb2Ygc3VjaCBhcmNoaXZlcy4gU28gd2UgZG8gZmlsZW5hbWUtYmFzZWQKKyAgICAjIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgd2l0aCAuc28gZXh0ZW5zaW9uIG9ubHksIHdoaWNoIGlzIHVzZWQKKyAgICAjIHdoZW4gYm90aCBydW50aW1lIGxpbmtpbmcgYW5kIHNoYXJlZCBsaW5raW5nIGlzIGVuYWJsZWQuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBydW50aW1lIGxpbmtpbmcgbWF5IGltcGFjdCBwZXJmb3JtYW5jZSwgc28gd2UgZG8KKyAgICAjIG5vdCB3YW50IHRoaXMgdG8gYmUgdGhlIGRlZmF1bHQgZXZlbnR1YWxseS4gQWxzbywgd2UgdXNlIHRoZQorICAgICMgdmVyc2lvbmVkIC5zbyBsaWJzIGZvciBleGVjdXRhYmxlcyBvbmx5IGlmIHRoZXJlIGlzIHRoZSAtYnJ0bAorICAgICMgbGlua2VyIGZsYWcgaW4gTERGTEFHUyBhcyB3ZWxsLCBvciAtLXdpdGgtYWl4LXNvbmFtZT1zdnI0IG9ubHkuCisgICAgIyBUbyBhbGxvdyBmb3IgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBzdXBwb3J0LCB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICMgbGliTkFNRS5zby5WIGFzIGFuIGFyY2hpdmUgZmlsZSwgY29udGFpbmluZzoKKyAgICAjICopIGFuIEltcG9ydCBGaWxlLCByZWZlcnJpbmcgdG8gdGhlIHZlcnNpb25lZCBmaWxlbmFtZSBvZiB0aGUKKyAgICAjICAgIGFyY2hpdmUgYXMgd2VsbCBhcyB0aGUgc2hhcmVkIGFyY2hpdmUgbWVtYmVyLCB0ZWxsaW5nIHRoZQorICAgICMgICAgYml0d2lkdGggKDMyIG9yIDY0KSBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGFuZCBwcm92aWRpbmcgdGhlCisgICAgIyAgICBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBldmVudHVhbGx5CisgICAgIyAgICBkZWNvcmF0ZWQgd2l0aCB0aGUgJ3dlYWsnIGtleXdvcmQKKyAgICAjICopIHRoZSBzaGFyZWQgb2JqZWN0IHdpdGggdGhlIEZfTE9BRE9OTFkgZmxhZyBzZXQsIHRvIHJlYWxseSBhdm9pZAorICAgICMgICAgaXQgYmVpbmcgc2VlbiBieSB0aGUgbGlua2VyLgorICAgICMgQXQgcnVuIHRpbWUgd2UgYmV0dGVyIHVzZSB0aGUgcmVhbCBmaWxlIHJhdGhlciB0aGFuIGFub3RoZXIgc3ltbGluaywKKyAgICAjIGJ1dCBmb3IgbGluayB0aW1lIHdlIGNyZWF0ZSB0aGUgc3ltbGluayBsaWJOQU1FLnNvIC0+IGxpYk5BTUUuc28uVgorCisgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbm5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgYWl4LHllcykgIyB0cmFkaXRpb25hbCBsaWJ0b29sCisgICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIHVudmVyc2lvbmFibGUgbGliLnNvJworICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBhaXgsbm8pICMgdHJhZGl0aW9uYWwgQUlYIG9ubHkKKyAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggbGliLmEobGliLnNvLlYpJworICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICA7OworICAgIHN2cjQsKikgIyBmdWxsIHN2cjQgb25seQorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgICAgOzsKKyAgICAqLHllcykgIyBib3RoLCBwcmVmZXIgc3ZyNAorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyksIGxpYi5hKGxpYi5zby5WKSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLmEgbmVlZHMgZXh0cmEgaGFuZGxpbmcKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9IiRyZWFsbmFtZSJ+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRsaW5rbmFtZSJ+JGluc3RhbGxfc2hhcmVkX3Byb2cgIiRkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0In50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJworICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdmb3IgbiBpbiAkbGlicmFyeV9uYW1lcyAkb2xkX2xpYnJhcnk7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRuIn50ZXN0ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiA9ICIkbiIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCisgICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgICA7OworICAgICosbm8pICMgYm90aCwgcHJlZmVyIGFpeAorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuYShsaWIuc28uViksIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5zby5WIGFuZCBzeW1saW5rIGxpYk5BTUUuc28gbmVlZCBleHRyYSBoYW5kbGluZworICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kZGxuYW1lICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9JHJlYWxuYW1lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRsaW5rbmFtZSJ+KGNkICIkZGVzdGRpciIgJiYgJExOX1MgLWYgJGRsbmFtZSAkZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvKScKKyAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUifmZvciBuIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbiJ+ZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28iJworICAgICAgOzsKKyAgICBlc2FjCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0uZGxsCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKworICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kTElCCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMjNdLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyLiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBpZiB0ZXN0IDMyID0gIiRIUFVYX0lBNjRfTU9ERSI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXgzMgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXg2NAorICAgIGZpCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4WzMtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2xpbnV4KmFuZHJvaWQqKQorICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIGZpbmlzaF9jbWRzPQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJworICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFhcIiIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKworZmkKKworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgSWRlYWxseSwgd2UgY291bGQgdXNlIGxkY29uZmlnIHRvIHJlcG9ydCAqYWxsKiBkaXJlY3RvcmVzIHdoaWNoIGFyZQorICAjIHNlYXJjaGVkIGZvciBsaWJyYXJpZXMsIGhvd2V2ZXIgdGhpcyBpcyBzdGlsbCBub3QgcG9zc2libGUuICBBc2lkZSBmcm9tIG5vdAorICAjIGJlaW5nIGNlcnRhaW4gL3NiaW4vbGRjb25maWcgaXMgYXZhaWxhYmxlLCBjb21tYW5kCisgICMgJ2xkY29uZmlnIC1OIC1YIC12IHwgZ3JlcCBeLycgb24gNjRiaXQgRmVkb3JhIGRvZXMgbm90IHJlcG9ydCAvdXNyL2xpYjY0LAorICAjIGV2ZW4gdGhvdWdoIGl0IGlzIHNlYXJjaGVkIGF0IHJ1bi10aW1lLiAgVHJ5IHRvIGRvIHRoZSBiZXN0IGd1ZXNzIGJ5CisgICMgYXBwZW5kaW5nIGxkLnNvLmNvbmYgY29udGVudHMgKGFuZCBpbmNsdWRlcykgdG8gdGhlIHNlYXJjaCBwYXRoLgorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZGVsZiotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCogfCBiaXRyaWcqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIG5lZWRfdmVyc2lvbj1ubworICBlbHNlCisgICAgbmVlZF92ZXJzaW9uPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgT1MvMiBjYW4gb25seSBsb2FkIGEgRExMIHdpdGggYSBiYXNlIG5hbWUgb2YgOCBjaGFyYWN0ZXJzIG9yIGxlc3MuCisgIHNvbmFtZV9zcGVjPSdgdGVzdCAtbiAiJG9zMmRsbG5hbWUiICYmIGxpYm5hbWU9IiRvczJkbGxuYW1lIjsKKyAgICB2PSQoJEVDSE8gJHJlbGVhc2UkdmVyc3VmZml4IHwgdHIgLWQgLi0pOworICAgIG49JCgkRUNITyAkbGlibmFtZSB8IGN1dCAtYiAtJCgoOCAtICR7I3Z9KSkgfCB0ciAuIF8pOworICAgICRFQ0hPICRuJHZgJHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfV9kbGwuJGxpYmV4dCcKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUJFR0lOTElCUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgIGZpJworICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICRSTSBcJGRscGF0aCcKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9c2NvCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworZmkKKworIyByZW1lbWJlciB1bmF1Z21lbnRlZCBzeXNfbGliX2Rsc2VhcmNoX3BhdGggY29udGVudCBmb3IgbGlidG9vbCBzY3JpcHQgZGVjbHMuLi4KK2NvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGg9JHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgLi4uIGJ1dCBpdCBuZWVkcyBMVF9TWVNfTElCUkFSWV9QQVRIIG11bmdpbmcgZm9yIG90aGVyIGNvbmZpZ3VyZS10aW1lIGNvZGUKK2Z1bmNfbXVuZ2VfcGF0aF9saXN0IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICIkTFRfU1lTX0xJQlJBUllfUEFUSCIKKworIyB0byBiZSB1c2VkIGFzIGRlZmF1bHQgTFRfU1lTX0xJQlJBUllfUEFUSCB2YWx1ZSBpbiBnZW5lcmF0ZWQgbGlidG9vbAorY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0kTFRfU1lTX0xJQlJBUllfUEFUSAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gIiA+JjY7IH0KK2hhcmRjb2RlX2FjdGlvbl9DWFg9CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXJfQ1hYIiB8fAorICAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgQ1hYKSIgJiYKKyAgICAgdGVzdCBubyAhPSAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIjsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNjsgfQorCitpZiB0ZXN0IHJlbGluayA9ICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfHwKKyAgIHRlc3QgeWVzID0gIiRpbmhlcml0X3JwYXRoX0NYWCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKKyAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworCisKKworCisKKworCisKKworCisKKworICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKKworCisKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorCisKKworCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworYXhfcHRocmVhZF9vaz1ubworCisjIFdlIHVzZWQgdG8gY2hlY2sgZm9yIHB0aHJlYWQuaCBmaXJzdCwgYnV0IHRoaXMgZmFpbHMgaWYgcHRocmVhZC5oCisjIHJlcXVpcmVzIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgKGUuZy4gb24gVHJ1ZTY0IG9yIFNlcXVlbnQpLgorIyBJdCBnZXRzIGNoZWNrZWQgZm9yIGluIHRoZSBsaW5rIHRlc3QgYW55d2F5LgorCisjIEZpcnN0IG9mIGFsbCwgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHNldCBhbnkgb2YgdGhlIFBUSFJFQURfTElCUywKKyMgZXRjZXRlcmEgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaWYgdGhyZWFkcyBsaW5raW5nIHdvcmtzIHVzaW5nCisjIHRoZW06CitpZiB0ZXN0IHgiJFBUSFJFQURfTElCUyRQVEhSRUFEX0NGTEFHUyIgIT0geDsgdGhlbgorICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9qb2luIGluIExJQlM9JFBUSFJFQURfTElCUyB3aXRoIENGTEFHUz0kUFRIUkVBRF9DRkxBR1MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfam9pbiBpbiBMSUJTPSRQVEhSRUFEX0xJQlMgd2l0aCBDRkxBR1M9JFBUSFJFQURfQ0ZMQUdTLi4uICIgPiY2OyB9CisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX2pvaW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwdGhyZWFkX2pvaW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXhfcHRocmVhZF9vaz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X3B0aHJlYWRfb2siID4mNQorJGFzX2VjaG8gIiRheF9wdGhyZWFkX29rIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCB4IiRheF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgorICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iIgorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCisgICAgICAgIGZpCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorZmkKKworIyBXZSBtdXN0IGNoZWNrIGZvciB0aGUgdGhyZWFkcyBsaWJyYXJ5IHVuZGVyIGEgbnVtYmVyIG9mIGRpZmZlcmVudAorIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCisjIChlLmcuIERFQykgaGF2ZSBib3RoIC1scHRocmVhZCBhbmQgLWxwdGhyZWFkcywgd2hlcmUgb25lIG9mIHRoZQorIyBsaWJyYXJpZXMgaXMgYnJva2VuIChub24tUE9TSVgpLgorCisjIENyZWF0ZSBhIGxpc3Qgb2YgdGhyZWFkIGZsYWdzIHRvIHRyeS4gIEl0ZW1zIHN0YXJ0aW5nIHdpdGggYSAiLSIgYXJlCisjIEMgY29tcGlsZXIgZmxhZ3MsIGFuZCBvdGhlciBpdGVtcyBhcmUgbGlicmFyeSBuYW1lcywgZXhjZXB0IGZvciAibm9uZSIKKyMgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZpZyIKKyMgd2hpY2ggaXMgYSBwcm9ncmFtIHJldHVybmluZyB0aGUgZmxhZ3MgZm9yIHRoZSBQdGggZW11bGF0aW9uIGxpYnJhcnkuCisKK2F4X3B0aHJlYWRfZmxhZ3M9InB0aHJlYWRzIG5vbmUgLUt0aHJlYWQgLWt0aHJlYWQgbHRocmVhZCAtcHRocmVhZCAtcHRocmVhZHMgLW10aHJlYWRzIHB0aHJlYWQgLS10aHJlYWQtc2FmZSAtbXQgcHRocmVhZC1jb25maWciCisKKyMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKKyMgaW5kaXZpZHVhbCBpdGVtcyBmb2xsb3c6CisKKyMgcHRocmVhZHM6IEFJWCAobXVzdCBjaGVjayB0aGlzIGJlZm9yZSAtbHB0aHJlYWQpCisjIG5vbmU6IGluIGNhc2UgdGhyZWFkcyBhcmUgaW4gbGliYzsgc2hvdWxkIGJlIHRyaWVkIGJlZm9yZSAtS3RocmVhZCBhbmQKKyMgICAgICAgb3RoZXIgY29tcGlsZXIgZmxhZ3MgdG8gcHJldmVudCBjb250aW51YWwgY29tcGlsZXIgd2FybmluZ3MKKyMgLUt0aHJlYWQ6IFNlcXVlbnQgKHRocmVhZHMgaW4gbGliYywgYnV0IC1LdGhyZWFkIG5lZWRlZCBmb3IgcHRocmVhZC5oKQorIyAta3RocmVhZDogRnJlZUJTRCBrZXJuZWwgdGhyZWFkcyAocHJlZmVycmVkIHRvIC1wdGhyZWFkIHNpbmNlIFNNUC1hYmxlKQorIyBsdGhyZWFkOiBMaW51eFRocmVhZHMgcG9ydCBvbiBGcmVlQlNEIChhbHNvIHByZWZlcnJlZCB0byAtcHRocmVhZCkKKyMgLXB0aHJlYWQ6IExpbnV4L2djYyAoa2VybmVsIHRocmVhZHMpLCBCU0QvZ2NjICh1c2VybGFuZCB0aHJlYWRzKQorIyAtcHRocmVhZHM6IFNvbGFyaXMvZ2NjCisjIC1tdGhyZWFkczogTWluZ3czMi9nY2MsIEx5bngvZ2NjCisjIC1tdDogU3VuIFdvcmtzaG9wIEMgKG1heSBvbmx5IGxpbmsgU3VuT1MgdGhyZWFkcyBbLWx0aHJlYWRdLCBidXQgaXQKKyMgICAgICBkb2Vzbid0IGh1cnQgdG8gY2hlY2sgc2luY2UgdGhpcyBzb21ldGltZXMgZGVmaW5lcyBwdGhyZWFkcyB0b287CisjICAgICAgYWxzbyBkZWZpbmVzIC1EX1JFRU5UUkFOVCkKKyMgICAgICAuLi4gLW10IGlzIGFsc28gdGhlIHB0aHJlYWRzIGZsYWcgZm9yIEhQL2FDQworIyBwdGhyZWFkOiBMaW51eCwgZXRjZXRlcmEKKyMgLS10aHJlYWQtc2FmZTogS0FJIEMrKworIyBwdGhyZWFkLWNvbmZpZzogdXNlIHB0aHJlYWQtY29uZmlnIHByb2dyYW0gKGZvciBHTlUgUHRoIGxpYnJhcnkpCisKK2Nhc2UgJHtob3N0X29zfSBpbgorICAgICAgICBzb2xhcmlzKikKKworICAgICAgICAjIE9uIFNvbGFyaXMgKGF0IGxlYXN0LCBmb3Igc29tZSB2ZXJzaW9ucyksIGxpYmMgY29udGFpbnMgc3R1YmJlZAorICAgICAgICAjIChub24tZnVuY3Rpb25hbCkgdmVyc2lvbnMgb2YgdGhlIHB0aHJlYWRzIHJvdXRpbmVzLCBzbyBsaW5rLWJhc2VkCisgICAgICAgICMgdGVzdHMgd2lsbCBlcnJvbmVvdXNseSBzdWNjZWVkLiAgKFdlIG5lZWQgdG8gbGluayB3aXRoIC1wdGhyZWFkcy8tbXQvCisgICAgICAgICMgLWxwdGhyZWFkLikgIChUaGUgc3R1YnMgYXJlIG1pc3NpbmcgcHRocmVhZF9jbGVhbnVwX3B1c2gsIG9yIHJhdGhlcgorICAgICAgICAjIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoaXMgbWFjcm8sIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0aGF0LCBidXQKKyAgICAgICAgIyB3aG8ga25vd3Mgd2hldGhlciB0aGV5J2xsIHN0dWIgdGhhdCB0b28gaW4gYSBmdXR1cmUgbGliYy4pICBTbywKKyAgICAgICAgIyB3ZSdsbCBqdXN0IGxvb2sgZm9yIC1wdGhyZWFkcyBhbmQgLWxwdGhyZWFkIGZpcnN0OgorCisgICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkcyBwdGhyZWFkIC1tdCAtcHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKKyAgICAgICAgOzsKKworICAgICAgICBkYXJ3aW4qKQorICAgICAgICBheF9wdGhyZWFkX2ZsYWdzPSItcHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKKyAgICAgICAgOzsKK2VzYWMKKworIyBDbGFuZyBkb2Vzbid0IGNvbnNpZGVyIHVucmVjb2duaXplZCBvcHRpb25zIGFuIGVycm9yIHVubGVzcyB3ZSBzcGVjaWZ5CisjIC1XZXJyb3IuIFdlIHRocm93IGluIHNvbWUgZXh0cmEgQ2xhbmctc3BlY2lmaWMgb3B0aW9ucyB0byBlbnN1cmUgdGhhdAorIyB0aGlzIGRvZXNuJ3QgaGFwcGVuIGZvciBHQ0MsIHdoaWNoIGFsc28gYWNjZXB0cyAtV2Vycm9yLgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIG5lZWRzIC1XZXJyb3IgdG8gcmVqZWN0IHVua25vd24gZmxhZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgbmVlZHMgLVdlcnJvciB0byByZWplY3QgdW5rbm93biBmbGFncy4uLiAiID4mNjsgfQorc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitheF9wdGhyZWFkX2V4dHJhX2ZsYWdzPSItV2Vycm9yIgorQ0ZMQUdTPSIkQ0ZMQUdTICRheF9wdGhyZWFkX2V4dHJhX2ZsYWdzIC1XdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV3NpemVvZi1hcnJheS1hcmd1bWVudCIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBmb28odm9pZCk7CitpbnQKK21haW4gKCkKK3sKK2ZvbygpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgYXhfcHRocmVhZF9leHRyYV9mbGFncz0KKyAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCitmb3IgZmxhZyBpbiAkYXhfcHRocmVhZF9mbGFnczsgZG8KKworICAgICAgICBjYXNlICRmbGFnIGluCisgICAgICAgICAgICAgICAgbm9uZSkKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3MuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgLSopCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyIKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgcHRocmVhZC1jb25maWcpCisgICAgICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwdGhyZWFkLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcHRocmVhZC1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGF4X3B0aHJlYWRfY29uZmlnIjsgdGhlbgorICBhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnPSIkYXhfcHRocmVhZF9jb25maWciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19heF9wdGhyZWFkX2NvbmZpZz0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnIiAmJiBhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnPSJubyIKK2ZpCitmaQorYXhfcHRocmVhZF9jb25maWc9JGFjX2N2X3Byb2dfYXhfcHRocmVhZF9jb25maWcKK2lmIHRlc3QgLW4gIiRheF9wdGhyZWFkX2NvbmZpZyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9wdGhyZWFkX2NvbmZpZyIgPiY1CiskYXNfZWNobyAiJGF4X3B0aHJlYWRfY29uZmlnIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfY29uZmlnIiA9IHhubzsgdGhlbiBjb250aW51ZTsgZmkKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9ImBwdGhyZWFkLWNvbmZpZyAtLWxkZmxhZ3NgIGBwdGhyZWFkLWNvbmZpZyAtLWxpYnNgIgorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IC1sJGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IC1sJGZsYWcuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1sJGZsYWciCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTICRheF9wdGhyZWFkX2V4dHJhX2ZsYWdzIgorCisgICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgZnVuY3Rpb25zLiAgV2UgbXVzdCBpbmNsdWRlIHB0aHJlYWQuaCwKKyAgICAgICAgIyBzaW5jZSBzb21lIGZ1bmN0aW9ucyBtYXkgYmUgbWFjcm9zLiAgKE9uIHRoZSBTZXF1ZW50LCB3ZQorICAgICAgICAjIG5lZWQgYSBzcGVjaWFsIGZsYWcgLUt0aHJlYWQgdG8gbWFrZSB0aGlzIGhlYWRlciBjb21waWxlLikKKyAgICAgICAgIyBXZSBjaGVjayBmb3IgcHRocmVhZF9qb2luIGJlY2F1c2UgaXQgaXMgaW4gLWxwdGhyZWFkIG9uIElSSVgKKyAgICAgICAgIyB3aGlsZSBwdGhyZWFkX2NyZWF0ZSBpcyBpbiBsaWJjLiAgV2UgY2hlY2sgZm9yIHB0aHJlYWRfYXR0cl9pbml0CisgICAgICAgICMgZHVlIHRvIERFQyBjcmF6aW5lc3Mgd2l0aCAtbHB0aHJlYWRzLiAgV2UgY2hlY2sgZm9yCisgICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2ggYmVjYXVzZSBpdCBpcyBvbmUgb2YgdGhlIGZldyBwdGhyZWFkCisgICAgICAgICMgZnVuY3Rpb25zIG9uIFNvbGFyaXMgdGhhdCBkb2Vzbid0IGhhdmUgYSBub24tZnVuY3Rpb25hbCBsaWJjIHN0dWIuCisgICAgICAgICMgV2UgdHJ5IHB0aHJlYWRfY3JlYXRlIG9uIGdlbmVyYWwgcHJpbmNpcGxlcy4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHJvdXRpbmUodm9pZCAqYSkgeyBhID0gMDsgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgKnN0YXJ0X3JvdXRpbmUodm9pZCAqYSkgeyByZXR1cm4gYTsgfQoraW50CittYWluICgpCit7CitwdGhyZWFkX3QgdGg7IHB0aHJlYWRfYXR0cl90IGF0dHI7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdGgsIDAsIHN0YXJ0X3JvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3BvcCgwKSAvKiA7ICovCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXhfcHRocmVhZF9vaz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfcHRocmVhZF9vayIgPiY1CiskYXNfZWNobyAiJGF4X3B0aHJlYWRfb2siID4mNjsgfQorICAgICAgICBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmaQorCisgICAgICAgIFBUSFJFQURfTElCUz0iIgorICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgorZG9uZQorZmkKKworIyBWYXJpb3VzIG90aGVyIGNoZWNrczoKK2lmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorCisgICAgICAgICMgRGV0ZWN0IEFJWCBsb3NzYWdlOiBKT0lOQUJMRSBhdHRyaWJ1dGUgaXMgY2FsbGVkIFVOREVUQUNIRUQuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZS4uLiAiID4mNjsgfQorICAgICAgICBhdHRyX25hbWU9dW5rbm93bgorICAgICAgICBmb3IgYXR0ciBpbiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEOyBkbworICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworaW50IGF0dHIgPSAkYXR0cjsgcmV0dXJuIGF0dHIgLyogOyAqLworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGF0dHJfbmFtZT0kYXR0cjsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBkb25lCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXR0cl9uYW1lIiA+JjUKKyRhc19lY2hvICIkYXR0cl9uYW1lIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCAiJGF0dHJfbmFtZSIgIT0gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEU7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSAkYXR0cl9uYW1lCitfQUNFT0YKKworICAgICAgICBmaQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMuLi4gIiA+JjY7IH0KKyAgICAgICAgZmxhZz1ubworICAgICAgICBjYXNlICR7aG9zdF9vc30gaW4KKyAgICAgICAgICAgIGFpeCogfCBmcmVlYnNkKiB8IGRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZFIjs7CisgICAgICAgICAgICBvc2YqIHwgaHB1eCopIGZsYWc9Ii1EX1JFRU5UUkFOVCI7OworICAgICAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgZmxhZz0iLURfUkVFTlRSQU5UIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICMgVE9ETzogV2hhdCBhYm91dCBDbGFuZyBvbiBTb2xhcmlzPworICAgICAgICAgICAgICAgIGZsYWc9Ii1tdCAtRF9SRUVOVFJBTlQiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWciID4mNQorJGFzX2VjaG8gIiRmbGFnIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCAieCRmbGFnIiAhPSB4bm87IHRoZW4KKyAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIGZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUFRIUkVBRF9QUklPX0lOSEVSSVQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFBUSFJFQURfUFJJT19JTkhFUklULi4uICIgPiY2OyB9CitpZiAke2F4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitpbnQKK21haW4gKCkKK3sKK2ludCBpID0gUFRIUkVBRF9QUklPX0lOSEVSSVQ7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9eWVzCitlbHNlCisgIGF4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQiID4mNQorJGFzX2VjaG8gIiRheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCIgPiY2OyB9CisgICAgICAgIGlmIHRlc3QgIngkYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQiID0gInh5ZXMiOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworICAgICAgICAjIE1vcmUgQUlYIGxvc3NhZ2U6IGNvbXBpbGUgd2l0aCAqX3IgdmFyaWFudAorICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0geHllczsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgIGFpeCopCisgICAgICAgICAgICAgICAgY2FzZSAieC8kQ0MiIGluICMoCisgIHgqL2M4OXx4Ki9jODlfMTI4fHgqL2M5OXx4Ki9jOTlfMTI4fHgqL2NjfHgqL2NjMTI4fHgqL3hsY3x4Ki94bGNfdjZ8eCoveGxjMTI4fHgqL3hsYzEyOF92NikgOgorICAgICNoYW5kbGUgYWJzb2x1dGUgcGF0aCBkaWZmZXJlbnRseSBmcm9tIFBBVEggYmFzZWQgcHJvZ3JhbSBsb29rdXAKKyAgICAgICAgICAgICAgICAgICBjYXNlICJ4JENDIiBpbiAjKAorICB4LyopIDoKKyAgICBpZiBhc19mbl9leGVjdXRhYmxlX3AgJHtDQ31fcjsgdGhlbiA6CisgIFBUSFJFQURfQ0M9IiR7Q0N9X3IiCitmaSA7OyAjKAorICAqKSA6CisgICAgZm9yIGFjX3Byb2cgaW4gJHtDQ31fcgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1BUSFJFQURfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUFRIUkVBRF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19QVEhSRUFEX0NDPSIkUFRIUkVBRF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1BUSFJFQURfQ0M9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1BUSFJFQURfQ0M9JGFjX2N2X3Byb2dfUFRIUkVBRF9DQworaWYgdGVzdCAtbiAiJFBUSFJFQURfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUFRIUkVBRF9DQyIgPiY1CiskYXNfZWNobyAiJFBUSFJFQURfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkUFRIUkVBRF9DQyIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRQVEhSRUFEX0NDIiB8fCBQVEhSRUFEX0NDPSIkQ0MiCisgOzsKK2VzYWMgOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgIGZpCitmaQorCit0ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJENDIgorCisKKworCisKKyMgRmluYWxseSwgZXhlY3V0ZSBBQ1RJT04tSUYtRk9VTkQvQUNUSU9OLUlGLU5PVC1GT1VORDoKK2lmIHRlc3QgeCIkYXhfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIUkVBRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA6CitlbHNlCisgICAgICAgIGF4X3B0aHJlYWRfb2s9bm8KKworZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKworCisJIyBhbGxvdyB0byBvdmVycmlkZSBnY292IGxvY2F0aW9uCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ2NvdiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ2NvditzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ2NvdjsgX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEg9JHdpdGhfZ2NvdgorZWxzZQorICBfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSD1nY292CitmaQorCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBjb2RlIGNvdmVyYWdlIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCB3aXRoIGNvZGUgY292ZXJhZ2Ugc3VwcG9ydC4uLiAiID4mNjsgfQorCSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NvZGVfY292ZXJhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jb2RlX2NvdmVyYWdlOworZWxzZQorICBlbmFibGVfY29kZV9jb3ZlcmFnZT1ubworZmkKKworCisJIGlmIHRlc3QgeCRlbmFibGVfY29kZV9jb3ZlcmFnZSA9IHh5ZXM7IHRoZW4KKyAgQ09ERV9DT1ZFUkFHRV9FTkFCTEVEX1RSVUU9CisgIENPREVfQ09WRVJBR0VfRU5BQkxFRF9GQUxTRT0nIycKK2Vsc2UKKyAgQ09ERV9DT1ZFUkFHRV9FTkFCTEVEX1RSVUU9JyMnCisgIENPREVfQ09WRVJBR0VfRU5BQkxFRF9GQUxTRT0KK2ZpCisKKwlDT0RFX0NPVkVSQUdFX0VOQUJMRUQ9JGVuYWJsZV9jb2RlX2NvdmVyYWdlCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9jb2RlX2NvdmVyYWdlIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX2NvZGVfY292ZXJhZ2UiID4mNjsgfQorCisJaWYgIHRlc3QgIiRlbmFibGVfY29kZV9jb3ZlcmFnZSIgPSAieWVzIiA7IHRoZW4gOgorCisJCSMgY2hlY2sgZm9yIGdjb3YKKwkJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9JF9BWF9DT0RFX0NPVkVSQUdFX0dDT1ZfUFJPR19XSVRIIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fSRfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfR0NPVis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRHQ09WIjsgdGhlbgorICBhY19jdl9wcm9nX0dDT1Y9IiRHQ09WIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfR0NPVj0iJHthY190b29sX3ByZWZpeH0kX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEgiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorR0NPVj0kYWNfY3ZfcHJvZ19HQ09WCitpZiB0ZXN0IC1uICIkR0NPViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHQ09WIiA+JjUKKyRhc19lY2hvICIkR0NPViIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfR0NPViI7IHRoZW4KKyAgYWNfY3RfR0NPVj0kR0NPVgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRfQVhfQ09ERV9DT1ZFUkFHRV9HQ09WX1BST0dfV0lUSCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJF9BWF9DT0RFX0NPVkVSQUdFX0dDT1ZfUFJPR19XSVRIOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9HQ09WKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0dDT1YiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfR0NPVj0iJGFjX2N0X0dDT1YiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9HQ09WPSIkX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEgiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfR0NPVj0kYWNfY3ZfcHJvZ19hY19jdF9HQ09WCitpZiB0ZXN0IC1uICIkYWNfY3RfR0NPViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9HQ09WIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfR0NPViIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0dDT1YiID0geDsgdGhlbgorICAgIEdDT1Y9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgR0NPVj0kYWNfY3RfR0NPVgorICBmaQorZWxzZQorICBHQ09WPSIkYWNfY3ZfcHJvZ19HQ09WIgorZmkKKworCQlpZiB0ZXN0ICJYJEdDT1YiID0gIlg6IjsgdGhlbiA6CisgIGFzX2ZuX2Vycm9yICQ/ICJnY292IGlzIG5lZWRlZCB0byBkbyBjb3ZlcmFnZSIgIiRMSU5FTk8iIDUKK2ZpCisKKworCQkJCWlmICB0ZXN0ICIkR0NDIiA9ICJubyIgOyB0aGVuIDoKKworCQkJYXNfZm5fZXJyb3IgJD8gIm5vdCBjb21waWxpbmcgd2l0aCBnY2MsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBnY292IGNvZGUgY292ZXJhZ2UiICIkTElORU5PIiA1CisKK2ZpCisKKwkJIyBMaXN0IG9mIHN1cHBvcnRlZCBsY292IHZlcnNpb25zLgorCQlsY292X3ZlcnNpb25fbGlzdD0iMS42IDEuNyAxLjggMS45IDEuMTAgMS4xMSIKKworCQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxjb3YiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxjb3Y7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0xDT1YrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTENPViI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MQ09WPSIkTENPViIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0xDT1Y9Imxjb3YiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTENPVj0kYWNfY3ZfcHJvZ19MQ09WCitpZiB0ZXN0IC1uICIkTENPViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMQ09WIiA+JjUKKyRhc19lY2hvICIkTENPViIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisJCSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2VuaHRtbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2VuaHRtbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfR0VOSFRNTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRHRU5IVE1MIjsgdGhlbgorICBhY19jdl9wcm9nX0dFTkhUTUw9IiRHRU5IVE1MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfR0VOSFRNTD0iZ2VuaHRtbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitHRU5IVE1MPSRhY19jdl9wcm9nX0dFTkhUTUwKK2lmIHRlc3QgLW4gIiRHRU5IVE1MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdFTkhUTUwiID4mNQorJGFzX2VjaG8gIiRHRU5IVE1MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworCQlpZiAgdGVzdCAiJExDT1YiIDsgdGhlbiA6CisKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxjb3YgdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGNvdiB2ZXJzaW9uLi4uICIgPiY2OyB9CitpZiAke2F4X2N2X2xjb3ZfdmVyc2lvbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKwkJCQlheF9jdl9sY292X3ZlcnNpb249aW52YWxpZAorCQkJCWxjb3ZfdmVyc2lvbj1gJExDT1YgLXYgMj4vZGV2L251bGwgfCAkU0VEIC1lICdzL14uKiAvLydgCisJCQkJZm9yIGxjb3ZfY2hlY2tfdmVyc2lvbiBpbiAkbGNvdl92ZXJzaW9uX2xpc3Q7IGRvCisJCQkJCWlmIHRlc3QgIiRsY292X3ZlcnNpb24iID0gIiRsY292X2NoZWNrX3ZlcnNpb24iOyB0aGVuCisJCQkJCQlheF9jdl9sY292X3ZlcnNpb249IiRsY292X2NoZWNrX3ZlcnNpb24gKG9rKSIKKwkJCQkJZmkKKwkJCQlkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X2xjb3ZfdmVyc2lvbiIgPiY1CiskYXNfZWNobyAiJGF4X2N2X2xjb3ZfdmVyc2lvbiIgPiY2OyB9CisKK2Vsc2UKKworCQkJbGNvdl9tc2c9IlRvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIHJlcG9ydGluZyB5b3UgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxjb3YgdmVyc2lvbnMgaW5zdGFsbGVkOiAkbGNvdl92ZXJzaW9uX2xpc3QiCisJCQlhc19mbl9lcnJvciAkPyAiJGxjb3ZfbXNnIiAiJExJTkVOTyIgNQorCitmaQorCisJCWNhc2UgJGF4X2N2X2xjb3ZfdmVyc2lvbiBpbgorCQkJIiJ8aW52YWxpZCkKKwkJCQlsY292X21zZz0iWW91IG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBvZiBsY292OiAkbGNvdl92ZXJzaW9uX2xpc3QgKGZvdW5kOiAkbGNvdl92ZXJzaW9uKS4iCisJCQkJYXNfZm5fZXJyb3IgJD8gIiRsY292X21zZyIgIiRMSU5FTk8iIDUKKwkJCQlMQ09WPSJleGl0IDA7IgorCQkJOzsKKwkJZXNhYworCisJCWlmICB0ZXN0IC16ICIkR0VOSFRNTCIgOyB0aGVuIDoKKworCQkJYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIGdlbmh0bWwgZnJvbSB0aGUgbGNvdiBwYWNrYWdlIiAiJExJTkVOTyIgNQorCitmaQorCisJCQkJQ09ERV9DT1ZFUkFHRV9DRkxBR1M9Ii1PMCAtZyAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisJCUNPREVfQ09WRVJBR0VfTERGTEFHUz0iLWxnY292IgorCisKKworCitDT0RFX0NPVkVSQUdFX1JVTEVTPScKKyMgQ29kZSBjb3ZlcmFnZQorIworIyBPcHRpb25hbDoKKyMgIC0gQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlk6IFRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIGNvZGUgY292ZXJhZ2UgcmVwb3J0aW5nLgorIyAgICAoRGVmYXVsdDogJCh0b3BfYnVpbGRkaXIpKQorIyAgLSBDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFOiBGaWxlbmFtZSBhbmQgcGF0aCBmb3IgdGhlIC5pbmZvIGZpbGUgZ2VuZXJhdGVkCisjICAgIGJ5IGxjb3YgZm9yIGNvZGUgY292ZXJhZ2UuIChEZWZhdWx0OgorIyAgICAkKFBBQ0tBR0VfTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pLWNvdmVyYWdlLmluZm8pCisjICAtIENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWTogRGlyZWN0b3J5IGZvciBnZW5lcmF0ZWQgY29kZSBjb3ZlcmFnZQorIyAgICByZXBvcnRzIHRvIGJlIGNyZWF0ZWQuIChEZWZhdWx0OgorIyAgICAkKFBBQ0tBR0VfTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pLWNvdmVyYWdlKQorIyAgLSBDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19HQ09WUEFUSDogLS1nY292LXRvb2wgcGF0aHRvZ2NvdgorIyAgLSBDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19ERUZBVUxUOiBFeHRyYSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGxjb3YgaW5zdGFuY2UuCisjICAgIChEZWZhdWx0OiAkQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfR0NPVlBBVEgpCisjICAtIENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TOiBFeHRyYSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGxjb3YgaW5zdGFuY2UuCisjICAgIChEZWZhdWx0OiAkQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfREVGQVVMVCkKKyMgIC0gQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlM6IEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgZ2VuaHRtbAorIyAgICBpbnN0YW5jZS4gKERlZmF1bHQ6IGVtcHR5KQorIyAgLSBDT0RFX0NPVkVSQUdFX0lHTk9SRV9QQVRURVJOOiBFeHRyYSBnbG9iIHBhdHRlcm4gb2YgZmlsZXMgdG8gaWdub3JlCisjCisjIFRoZSBnZW5lcmF0ZWQgcmVwb3J0IHdpbGwgYmUgdGl0bGVkIHVzaW5nIHRoZSAkKFBBQ0tBR0VfTkFNRSkgYW5kCisjICQoUEFDS0FHRV9WRVJTSU9OKS4gSW4gb3JkZXIgdG8gYWRkIHRoZSBjdXJyZW50IGdpdCBoYXNoIHRvIHRoZSB0aXRsZSwKKyMgdXNlIHRoZSBnaXQtdmVyc2lvbi1nZW4gc2NyaXB0LCBhdmFpbGFibGUgb25saW5lLgorCisjIE9wdGlvbmFsIHZhcmlhYmxlcworQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkgPz0gJCh0b3BfYnVpbGRkaXIpCitDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFID89ICQoUEFDS0FHRV9OQU1FKS0kKFBBQ0tBR0VfVkVSU0lPTiktY292ZXJhZ2UuaW5mbworQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRElSRUNUT1JZID89ICQoUEFDS0FHRV9OQU1FKS0kKFBBQ0tBR0VfVkVSU0lPTiktY292ZXJhZ2UKK0NPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0dDT1ZQQVRIID89IC0tZ2Nvdi10b29sICIkKEdDT1YpIgorQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfREVGQVVMVCA/PSAkKENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0dDT1ZQQVRIKQorQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlMgPz0gJChDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19ERUZBVUxUKQorQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlMgPz0KK0NPREVfQ09WRVJBR0VfSUdOT1JFX1BBVFRFUk4gPz0KKworY29kZV9jb3ZlcmFnZV9xdWlldCA9ICQoY29kZV9jb3ZlcmFnZV9xdWlldF8kKFYpKQorY29kZV9jb3ZlcmFnZV9xdWlldF8gPQorY29kZV9jb3ZlcmFnZV9xdWlldF8wID0gLS1xdWlldAorCisjIFVzZSByZWN1cnNpdmUgbWFrZXMgaW4gb3JkZXIgdG8gaWdub3JlIGVycm9ycyBkdXJpbmcgY2hlY2sKK2NoZWNrLWNvZGUtY292ZXJhZ2U6CisJLSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIC1rIGNoZWNrCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY29kZS1jb3ZlcmFnZS1jYXB0dXJlCisKKyMgQ2FwdHVyZSBjb2RlIGNvdmVyYWdlIGRhdGEKK2NvZGUtY292ZXJhZ2UtY2FwdHVyZTogY29kZS1jb3ZlcmFnZS1jYXB0dXJlLWhvb2sKKwkkKExDT1YpICQoY29kZV9jb3ZlcmFnZV9xdWlldCkgLS1kaXJlY3RvcnkgJChDT0RFX0NPVkVSQUdFX0RJUkVDVE9SWSkgLS1jYXB0dXJlIC0tb3V0cHV0LWZpbGUgIiQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkudG1wIiAtLXRlc3QtbmFtZSAiJChQQUNLQUdFX05BTUUpLSQoUEFDS0FHRV9WRVJTSU9OKSIgLS1uby1jaGVja3N1bSAtLWNvbXBhdC1saWJ0b29sICQoQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlMpCisJJChMQ09WKSAkKGNvZGVfY292ZXJhZ2VfcXVpZXQpIC0tZGlyZWN0b3J5ICQoQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkpIC0tcmVtb3ZlICIkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcCIgIi90bXAvKiIgJChDT0RFX0NPVkVSQUdFX0lHTk9SRV9QQVRURVJOKSAtLW91dHB1dC1maWxlICIkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIgorCS1Acm0gLWYgJChDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFKS50bXAKKwlMQU5HPUMgJChHRU5IVE1MKSAkKGNvZGVfY292ZXJhZ2VfcXVpZXQpIC0tcHJlZml4ICQoQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkpIC0tb3V0cHV0LWRpcmVjdG9yeSAiJChDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlkpIiAtLXRpdGxlICIkKFBBQ0tBR0VfTkFNRSktJChQQUNLQUdFX1ZFUlNJT04pIENvZGUgQ292ZXJhZ2UiIC0tbGVnZW5kIC0tc2hvdy1kZXRhaWxzICIkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIiAkKENPREVfQ09WRVJBR0VfR0VOSFRNTF9PUFRJT05TKQorCUBlY2hvICJmaWxlOi8vJChhYnNfYnVpbGRkaXIpLyQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRElSRUNUT1JZKS9pbmRleC5odG1sIgorCisjIEhvb2sgcnVsZSBleGVjdXRlZCBiZWZvcmUgY29kZS1jb3ZlcmFnZS1jYXB0dXJlLCBvdmVycmlkYWJsZSBieSB0aGUgdXNlcgorY29kZS1jb3ZlcmFnZS1jYXB0dXJlLWhvb2s6CisKK2NsZWFuOiBjb2RlLWNvdmVyYWdlLWNsZWFuCitjb2RlLWNvdmVyYWdlLWNsZWFuOgorCS0kKExDT1YpIC0tZGlyZWN0b3J5ICQodG9wX2J1aWxkZGlyKSAtegorCS1ybSAtcmYgJChDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFKSAkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcCAkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSkKKwktZmluZCAuIC1uYW1lICIqLmdjZGEiIC1vIC1uYW1lICIqLmdjb3YiIC1kZWxldGUKKworR0lUSUdOT1JFRklMRVMgPz0KK0dJVElHTk9SRUZJTEVTICs9ICQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkgJChDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlkpCisKK0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgPz0KK0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgKz0gLS1kaXNhYmxlLWNvZGUtY292ZXJhZ2UKKworLlBIT05ZOiBjaGVjay1jb2RlLWNvdmVyYWdlIGNvZGUtY292ZXJhZ2UtY2FwdHVyZSBjb2RlLWNvdmVyYWdlLWNhcHR1cmUtaG9vayBjb2RlLWNvdmVyYWdlLWNsZWFuCisnCisKKworZmkKKworCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdXNlciBuYW1lc3BhY2VzIGFyZSBzdXBwb3J0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB1c2VyIG5hbWVzcGFjZXMgYXJlIHN1cHBvcnRlZC4uLiAiID4mNjsgfQoraWYgJHtheF9jdl91c2VyX25hbWVzcGFjZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYXhfY3ZfdXNlcl9uYW1lc3BhY2U9bm8KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworaW50IHVzZXJmbih2b2lkICpkKSB7CisgIHVzbGVlcCgxMDAwMDApOyAgLyogc3luY2hyb25pemUgYnkgc2xlZXAgKi8KKyAgcmV0dXJuIChnZXR1aWQoKSAhPSAwKTsKK30KK2NoYXIgdXNlcnN0WzEwMjQqMTAyNF07CitpbnQgbWFpbigpIHsKKyAgY2hhciBidWZmZXJbMTAyNF07CisgIGludCByYywgc3RhdHVzLCBmZDsKKyAgcGlkX3QgY2hpbGQgPSBjbG9uZSh1c2VyZm4sIHVzZXJzdCArIDEwMjQqMTAyNCwgQ0xPTkVfTkVXVVNFUnxTSUdDSExELCAwKTsKKyAgaWYgKGNoaWxkIDwgMCkgcmV0dXJuIDE7CisKKyAgc3ByaW50ZihidWZmZXIsICIvcHJvYy8lZC91aWRfbWFwIiwgY2hpbGQpOworICBmZCA9IG9wZW4oYnVmZmVyLCBPX0NSRUFUfE9fV1JPTkxZfE9fVFJVTkMsIDA3NTUpOworICBzcHJpbnRmKGJ1ZmZlciwgIjAgJWQgMVxuIiwgZ2V0dWlkKCkpOworICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgIGNsb3NlKGZkKTsKKworICByYyA9IHdhaXRwaWQoY2hpbGQsICZzdGF0dXMsIDApOworICBpZiAocmMgPD0gMCkgcmV0dXJuIDE7CisgIGlmICghV0lGRVhJVEVEKHN0YXR1cykpIHJldHVybiAxOworICByZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXhfY3ZfdXNlcl9uYW1lc3BhY2U9eWVzCitlbHNlCisgIGF4X2N2X3VzZXJfbmFtZXNwYWNlPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9jdl91c2VyX25hbWVzcGFjZSIgPiY1CiskYXNfZWNobyAiJGF4X2N2X3VzZXJfbmFtZXNwYWNlIiA+JjY7IH0KKyBpZiB0ZXN0ICIkYXhfY3ZfdXNlcl9uYW1lc3BhY2UiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVVNFUl9OQU1FU1BBQ0UgMSIgPj5jb25mZGVmcy5oCisKKyBmaQorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIFVUUyBuYW1lc3BhY2VzIGFyZSBzdXBwb3J0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBVVFMgbmFtZXNwYWNlcyBhcmUgc3VwcG9ydGVkLi4uICIgPiY2OyB9CitpZiAke2F4X2N2X3V0c19uYW1lc3BhY2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGF4X2N2X3V0c19uYW1lc3BhY2U9bm8KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworaW50IHV0c2ZuKHZvaWQgKmQpIHsKKyAgY2hhciBidWZmZXJbMTAyNF07CisgIGNvbnN0IGNoYXIgKm5hbWUgPSAiYXV0b2NvbmZ0ZXN0IjsKKyAgaW50IHJjID0gc2V0aG9zdG5hbWUobmFtZSwgc3RybGVuKG5hbWUpKTsKKyAgaWYgKHJjICE9IDApIHJldHVybiAxOworICBnZXRob3N0bmFtZShidWZmZXIsIDEwMjQpOworICByZXR1cm4gKHN0cmNtcChidWZmZXIsIG5hbWUpICE9IDApOworfQorCitjaGFyIHN0MlsxMDI0KjEwMjRdOworaW50IGZuKHZvaWQgKmQpIHsKKyAgcGlkX3QgY2hpbGQ7CisgIGludCByYywgc3RhdHVzOworICB1c2xlZXAoMTAwMDAwKTsgIC8qIHN5bmNocm9uaXplIGJ5IHNsZWVwICovCisgIGlmIChnZXR1aWQoKSAhPSAwKSByZXR1cm4gMTsKKyAgY2hpbGQgPSBjbG9uZSh1dHNmbiwgc3QyICsgMTAyNCoxMDI0LCBDTE9ORV9ORVdVVFN8U0lHQ0hMRCwgMCk7CisgIGlmIChjaGlsZCA8IDApIHJldHVybiAxOworICByYyA9IHdhaXRwaWQoY2hpbGQsICZzdGF0dXMsIDApOworICBpZiAocmMgPD0gMCkgcmV0dXJuIDE7CisgIGlmICghV0lGRVhJVEVEKHN0YXR1cykpIHJldHVybiAxOworICByZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsKK30KK2NoYXIgc3RbMTAyNCoxMDI0XTsKK2ludCBtYWluKCkgeworICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgaW50IHJjLCBzdGF0dXMsIGZkOworICBwaWRfdCBjaGlsZCA9IGNsb25lKGZuLCBzdCArIDEwMjQqMTAyNCwgQ0xPTkVfTkVXVVNFUnxTSUdDSExELCAwKTsKKyAgaWYgKGNoaWxkIDwgMCkgcmV0dXJuIDE7CisKKyAgc3ByaW50ZihidWZmZXIsICIvcHJvYy8lZC91aWRfbWFwIiwgY2hpbGQpOworICBmZCA9IG9wZW4oYnVmZmVyLCBPX0NSRUFUfE9fV1JPTkxZfE9fVFJVTkMsIDA3NTUpOworICBzcHJpbnRmKGJ1ZmZlciwgIjAgJWQgMVxuIiwgZ2V0dWlkKCkpOworICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgIGNsb3NlKGZkKTsKKworICByYyA9IHdhaXRwaWQoY2hpbGQsICZzdGF0dXMsIDApOworICBpZiAocmMgPD0gMCkgcmV0dXJuIDE7CisgIGlmICghV0lGRVhJVEVEKHN0YXR1cykpIHJldHVybiAxOworICByZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsKK30KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBheF9jdl91dHNfbmFtZXNwYWNlPXllcworZWxzZQorICBheF9jdl91dHNfbmFtZXNwYWNlPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9jdl91dHNfbmFtZXNwYWNlIiA+JjUKKyRhc19lY2hvICIkYXhfY3ZfdXRzX25hbWVzcGFjZSIgPiY2OyB9CisgaWYgdGVzdCAiJGF4X2N2X3V0c19uYW1lc3BhY2UiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVVRTX05BTUVTUEFDRSAxIiA+PmNvbmZkZWZzLmgKKworIGZpCisKKworZm9yIGFjX2hlYWRlciBpbiBuZXRkYi5oIG5ldGluZXQvdGNwLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBjb25maWcuaCIKKworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIgorCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKK2FjX2xpYm9ianM9CithY19sdGxpYm9ianM9CitVPQorZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCisgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKK2RvbmUKK0xJQk9CSlM9JGFjX2xpYm9ianMKKworTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmUuLi4gIiA+JjY7IH0KKyAgIGlmIHRlc3QgLW4gIiRhbV9zbGVlcF9waWQiOyB0aGVuCisgICAgICMgSGlkZSB3YXJuaW5ncyBhYm91dCByZXVzZWQgUElEcy4KKyAgICAgd2FpdCAkYW1fc2xlZXBfcGlkIDI+L2Rldi9udWxsCisgICBmaQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRvbmUiID4mNQorJGFzX2VjaG8gImRvbmUiID4mNjsgfQorIGlmIHRlc3QgLW4gIiRFWEVFWFQiOyB0aGVuCisgIGFtX19FWEVFWFRfVFJVRT0KKyAgYW1fX0VYRUVYVF9GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX0VYRUVYVF9UUlVFPScjJworICBhbV9fRVhFRVhUX0ZBTFNFPQorZmkKKworaWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtDT0RFX0NPVkVSQUdFX0VOQUJMRURfVFJVRX0iICYmIHRlc3QgLXogIiR7Q09ERV9DT1ZFUkFHRV9FTkFCTEVEX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQ09ERV9DT1ZFUkFHRV9FTkFCTEVEXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQorCis6ICIke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfSIKK2FjX3dyaXRlX2ZhaWw9MAorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKworZGVidWc9ZmFsc2UKK2FjX2NzX3JlY2hlY2s9ZmFsc2UKK2FjX2NzX3NpbGVudD1mYWxzZQorCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisKKworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcFInCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXBSJworICBmaQorZWxzZQorICBhc19sbl9zPSdjcCAtcFInCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAoraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKKworIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCithc19mbl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorYXNfdGVzdF94PSd0ZXN0IC14JworYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworZXhlYyA2PiYxCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mICRDT05GSUdfU1RBVFVTIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNFT0YKK3Rlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KK2FjX2xvZz0iCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGMtYXJlcy10ZXN0ICRhc19tZSAtLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAkICQwICRACisKK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIgorCitfQUNFT0YKKworY2FzZSAkYWNfY29uZmlnX2ZpbGVzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Citlc2FjCisKK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9JCo7OworZXNhYworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKK2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyIKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1RBR10uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorICAgICAgLS1jb25maWcgICAgIHByaW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQKKyAgICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisKK0NvbmZpZ3VyYXRpb24gZmlsZXM6CiskY29uZmlnX2ZpbGVzCisKK0NvbmZpZ3VyYXRpb24gaGVhZGVyczoKKyRjb25maWdfaGVhZGVycworCitDb25maWd1cmF0aW9uIGNvbW1hbmRzOgorJGNvbmZpZ19jb21tYW5kcworCitSZXBvcnQgYnVncyB0byA8LT4uIgorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKK2FjX2NzX3ZlcnNpb249IlxcCitjLWFyZXMtdGVzdCBjb25maWcuc3RhdHVzIC0KK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCisKK0NvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitNS0RJUl9QPSckTUtESVJfUCcKK0FXSz0nJEFXSycKK3Rlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPT8qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAtLSo9KQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPQorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CisgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfSEVBREVSUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIGFzX2ZuX2Vycm9yICQ/ICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKKworICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorICBzZXQgWCAkU0hFTEwgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKK0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICIkbWFjcm9fdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZD0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3BpY19tb2RlPSdgJEVDSE8gIiRwaWNfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZmFzdF9pbnN0YWxsPSdgJEVDSE8gIiRlbmFibGVfZmFzdF9pbnN0YWxsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPSdgJEVDSE8gIiRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTSEVMTD0nYCRFQ0hPICIkU0hFTEwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUNITz0nYCRFQ0hPICIkRUNITyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitQQVRIX1NFUEFSQVRPUj0nYCRFQ0hPICIkUEFUSF9TRVBBUkFUT1IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9hbGlhcz0nYCRFQ0hPICIkaG9zdF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0PSdgJEVDSE8gIiRob3N0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfYWxpYXM9J2AkRUNITyAiJGJ1aWxkX2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkPSdgJEVDSE8gIiRidWlsZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0VEPSdgJEVDSE8gIiRTRUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworWHNlZD0nYCRFQ0hPICIkWHNlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VHUkVQPSdgJEVDSE8gIiRFR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitGR1JFUD0nYCRFQ0hPICIkRkdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NPSdgJEVDSE8gIiROTSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMTl9TPSdgJEVDSE8gIiRMTl9TIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithY19vYmpleHQ9J2AkRUNITyAiJGFjX29iamV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249J2AkRUNITyAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDQz0nYCRFQ0hPICIkQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0ZMQUdTPSdgJEVDSE8gIiRDRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXI9J2AkRUNITyAiJGNvbXBpbGVyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQz0nYCRFQ0hPICIkR0NDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X25tX2ludGVyZmFjZT0nYCRFQ0hPICIkbHRfY3Zfbm1faW50ZXJmYWNlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RydW5jYXRlX2Jpbj0nYCRFQ0hPICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTD0nYCRFQ0hPICIkT1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w2ND0nYCRFQ0hPICIkT1RPT0w2NCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJleHQ9J2AkRUNITyAiJGxpYmV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaHJleHRfY21kcz0nYCRFQ0hPICIkc2hyZXh0X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXh0cmFjdF9leHBzeW1zX2NtZHM9J2AkRUNITyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZD0nYCRFQ0hPICIkd2l0aF9nbnVfbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0PSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbWludXNfTD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX3ZlcnNpb249J2AkRUNITyAiJG5lZWRfdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2ZXJzaW9uX3R5cGU9J2AkRUNITyAiJHZlcnNpb25fdHlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitydW5wYXRoX3Zhcj0nYCRFQ0hPICIkcnVucGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9J2AkRUNITyAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJuYW1lX3NwZWM9J2AkRUNITyAiJGxpYm5hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJyYXJ5X25hbWVzX3NwZWM9J2AkRUNITyAiJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzb25hbWVfc3BlYz0nYCRFQ0hPICIkc29uYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5zdGFsbF9vdmVycmlkZV9tb2RlPSdgJEVDSE8gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfY21kcz0nYCRFQ0hPICIkZmluaXNoX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2V2YWw9J2AkRUNITyAiJGZpbmlzaF9ldmFsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2ludG9fbGlicz0nYCRFQ0hPICIkaGFyZGNvZGVfaW50b19saWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGg9J2AkRUNITyAiJGNvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0nYCRFQ0hPICIkY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb249J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3N0cmlwbGliPSdgJEVDSE8gIiRvbGRfc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3RyaXBsaWI9J2AkRUNITyAiJHN0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwX29iamVjdHM9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzPSdgJEVDSE8gIiRwcmVkZXBzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzPSdgJEVDSE8gIiRwb3N0ZGVwcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRF9DWFg9J2AkRUNITyAiJExEX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZ19DWFg9J2AkRUNITyAiJHJlbG9hZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kc19DWFg9J2AkRUNITyAiJHJlbG9hZF9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDX0NYWD0nYCRFQ0hPICIkR0NDX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZF9DWFg9J2AkRUNITyAiJHdpdGhfZ251X2xkX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitub191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcG9zdGxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWNfQ1hYPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICIkcHJlZGVwX29iamVjdHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwc19DWFg9J2AkRUNITyAiJHByZWRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzX0NYWD0nYCRFQ0hPICIkcG9zdGRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gU0hFTEwgXAorRUNITyBcCitQQVRIX1NFUEFSQVRPUiBcCitTRUQgXAorR1JFUCBcCitFR1JFUCBcCitGR1JFUCBcCitMRCBcCitOTSBcCitMTl9TIFwKK2x0X1NQMk5MIFwKK2x0X05MMlNQIFwKK3JlbG9hZF9mbGFnIFwKK09CSkRVTVAgXAorZGVwbGlic19jaGVja19tZXRob2QgXAorZmlsZV9tYWdpY19jbWQgXAorZmlsZV9tYWdpY19nbG9iIFwKK3dhbnRfbm9jYXNlZ2xvYiBcCitETExUT09MIFwKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0IFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorbHRfY3Zfbm1faW50ZXJmYWNlIFwKK25tX2ZpbGVfbGlzdF9zcGVjIFwKK2x0X2N2X3RydW5jYXRlX2JpbiBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCitsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCitsdF9wcm9nX2NvbXBpbGVyX3dsIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKK25lZWRfbG9ja3MgXAorTUFOSUZFU1RfVE9PTCBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKK2V4Y2x1ZGVfZXhwc3ltcyBcCitpbmNsdWRlX2V4cHN5bXMgXAorZmlsZV9saXN0X3NwZWMgXAordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgXAorbGlibmFtZV9zcGVjIFwKK2xpYnJhcnlfbmFtZXNfc3BlYyBcCitzb25hbWVfc3BlYyBcCitpbnN0YWxsX292ZXJyaWRlX21vZGUgXAorZmluaXNoX2V2YWwgXAorb2xkX3N0cmlwbGliIFwKK3N0cmlwbGliIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyBcCitwcmVkZXBfb2JqZWN0cyBcCitwb3N0ZGVwX29iamVjdHMgXAorcHJlZGVwcyBcCitwb3N0ZGVwcyBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGggXAorTERfQ1hYIFwKK3JlbG9hZF9mbGFnX0NYWCBcCitjb21waWxlcl9DWFggXAorbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFggXAord2l0aF9nbnVfbGRfQ1hYIFwKK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCBcCitub191bmRlZmluZWRfZmxhZ19DWFggXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAorZXhjbHVkZV9leHBzeW1zX0NYWCBcCitpbmNsdWRlX2V4cHN5bXNfQ1hYIFwKK2ZpbGVfbGlzdF9zcGVjX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIFwKK3ByZWRlcF9vYmplY3RzX0NYWCBcCitwb3N0ZGVwX29iamVjdHNfQ1hYIFwKK3ByZWRlcHNfQ1hYIFwKK3Bvc3RkZXBzX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcworICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiByZWxvYWRfY21kcyBcCitvbGRfcG9zdGluc3RhbGxfY21kcyBcCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKK29sZF9hcmNoaXZlX2NtZHMgXAorZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCithcmNoaXZlX2NtZHMgXAorYXJjaGl2ZV9leHBzeW1fY21kcyBcCittb2R1bGVfY21kcyBcCittb2R1bGVfZXhwc3ltX2NtZHMgXAorZXhwb3J0X3N5bWJvbHNfY21kcyBcCitwcmVsaW5rX2NtZHMgXAorcG9zdGxpbmtfY21kcyBcCitwb3N0aW5zdGFsbF9jbWRzIFwKK3Bvc3R1bmluc3RhbGxfY21kcyBcCitmaW5pc2hfY21kcyBcCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAorY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aCBcCitjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIFwKK3JlbG9hZF9jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFggXAorYXJjaGl2ZV9jbWRzX0NYWCBcCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCittb2R1bGVfY21kc19DWFggXAorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCitleHBvcnRfc3ltYm9sc19jbWRzX0NYWCBcCitwcmVsaW5rX2NtZHNfQ1hYIFwKK3Bvc3RsaW5rX2NtZHNfQ1hYOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcworICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJworCisKKworCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKworIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiZGVwZmlsZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CisgICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKKyAgICAiY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0gYWNfdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKK30KKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xccicKK2Vsc2UKKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorZmkKKworZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKK19BQ0VPRgorCisKK3sKKyAgZWNobyAiY2F0ID5jb25mJCRzdWJzLmF3ayA8PF9BQ0VPRiIgJiYKKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRzdWJzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnXidgCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCisgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYKK19BQ0VPRgorc2VkIC1uICcKK2gKK3MvXi9TWyIvOyBzLyEuKi8iXT0vCitwCitnCitzL15bXiFdKiEvLworOnJlcGwKK3QgcmVwbAorcy8nIiRhY19kZWxpbSInJC8vCit0IGRlbGltCis6bmwKK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBubAorOmRlbGltCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQorfQorCitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJGFjX3RtcC9zdWJzMS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorX0FDRU9GCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgc29sZSAkKHNyY2RpciksCisjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZW50cmllcyBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPVsJIF0qL3sKK2gKK3MvLy8KK3MvXi86Lworcy9bCSBdKiQvOi8KK3MvOlwkKHNyY2Rpcik6LzovZworcy86XCR7c3JjZGlyfTovOi9nCitzLzpAc3JjZGlyQDovOi9nCitzL146Ki8vCitzLzoqJC8vCit4CitzL1woPVsJIF0qXCkuKi9cMS8KK0cKK3MvXG4vLworcy9eW149XSo9WwkgXSokLy8KK30nCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfSEVBREVSUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCitpZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCitjYXQgPiIkYWNfdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKK0JFR0lOIHsKK19BQ0VPRgorCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworIyBoZXJlLWRvY3VtZW50IGluIGNvbmZpZy5zdGF0dXMsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorCisjIENyZWF0ZSBhIGRlbGltaXRlciBzdHJpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBjb25mZGVmcy5oLCB0byBlYXNlCisjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIDo7IGRvCisgIGFjX3R0PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3R0IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorIyBsaWtld2lzZSBQIGNvbnRhaW5zIG1hY3JvIHBhcmFtZXRlcnMgaWYgYW55LiAgUHJlc2VydmUgYmFja3NsYXNoCisjIG5ld2xpbmUgc2VxdWVuY2VzLgorCithY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorc2VkIC1uICcKK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgY2xlYXIKKzpjbGVhcgorcy9cXCQvLwordCBic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi9wCitkCis6YnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcXFxcXG4iXFwvcAorYiBjb250CisnIDxjb25mZGVmcy5oIHwgc2VkICcKK3MvJyIkYWNfZGVsaW0iJy8iXFxcCisiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorfQorL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisgIGxpbmUgPSBcJCAwCisgIHNwbGl0KGxpbmUsIGFyZywgIiAiKQorICBpZiAoYXJnWzFdID09ICIjIikgeworICAgIGRlZnVuZGVmID0gYXJnWzJdCisgICAgbWFjMSA9IGFyZ1szXQorICB9IGVsc2UgeworICAgIGRlZnVuZGVmID0gc3Vic3RyKGFyZ1sxXSwgMikKKyAgICBtYWMxID0gYXJnWzJdCisgIH0KKyAgc3BsaXQobWFjMSwgbWFjMiwgIigiKSAjKQorICBtYWNybyA9IG1hYzJbMV0KKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisgIGlmIChEX2lzX3NldFttYWNyb10pIHsKKyAgICAjIFByZXNlcnZlIHRoZSB3aGl0ZSBzcGFjZSBzdXJyb3VuZGluZyB0aGUgIiMiLgorICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKyAgICBuZXh0CisgIH0gZWxzZSB7CisgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorICAgICMgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAgICAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworICAgICAgcHJpbnQgIi8qIiwgcHJlZml4IGRlZnVuZGVmLCBtYWNybywgIiovIgorICAgICAgbmV4dAorICAgIH0KKyAgfQorfQoreyBwcmludCB9CitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorCisKK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKKyAgOltGSF0tKSBhY190YWc9LTotOzsKKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgZXNhYworICBhY19zYXZlX0lGUz0kSUZTCisgIElGUz06CisgIHNldCB4ICRhY190YWcKKyAgSUZTPSRhY19zYXZlX0lGUworICBzaGlmdAorICBhY19maWxlPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6TCkgYWNfc291cmNlPSQxOzsKKyAgOltGSF0pCisgICAgYWNfZmlsZV9pbnB1dHM9CisgICAgZm9yIGFjX2YKKyAgICBkbworICAgICAgY2FzZSAkYWNfZiBpbgorICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OworICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCisJIHRlc3QgLWYgIiRhY19mIiB8fAorCSAgIGNhc2UgJGFjX2YgaW4KKwkgICBbXFwvJF0qKSBmYWxzZTs7CisJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworCSAgIGVzYWMgfHwKKwkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKKyAgYWNfTUtESVJfUD0kTUtESVJfUAorICBjYXNlICRNS0RJUl9QIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICA+JGFjX3RtcC9vdXQgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiRhY190bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwKKyAgICAgICIkYWNfdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQorCisgIHJtIC1mICIkYWNfdG1wL3N0ZGluIgorICBjYXNlICRhY19maWxlIGluCisgIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkYWNfdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJGFjX3RtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgZmkKKyAgZWxzZQorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CisgIGZpCisjIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9IiRhY19maWxlIgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5hbWUgLS0gIiRfYW1fYXJnIiB8fAorJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRfYW1fYXJnIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgeworICAjIE9sZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCAnTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAorJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkbWYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nICdtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KKyA7OworICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0ke29maWxlfVQKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQKKyMgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlICBzYW1lCisjIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPSdDWFggJworCisjIENvbmZpZ3VyZWQgZGVmYXVsdHMgZm9yIHN5c19saWJfZGxzZWFyY2hfcGF0aCBtdW5naW5nLgorOiBcJHtMVF9TWVNfTElCUkFSWV9QQVRIPSIkY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aCJ9CisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCisKKyMgV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkPworbWFjcm9fdmVyc2lvbj0kbWFjcm9fdmVyc2lvbgorbWFjcm9fcmV2aXNpb249JG1hY3JvX3JldmlzaW9uCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCitidWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworCisjIFdoYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkLgorcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgU2hhcmVkIGFyY2hpdmUgbWVtYmVyIGJhc2VuYW1lLGZvciBmaWxlbmFtZSBiYXNlZCBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIG9uIEFJWC4KK3NoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYworCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlcy4KK0VDSE89JGx0X0VDSE8KKworIyBUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0ZW0uCitQQVRIX1NFUEFSQVRPUj0kbHRfUEFUSF9TRVBBUkFUT1IKKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgorU0VEPSRsdF9TRUQKKworIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KK1hzZWQ9IlwkU0VEIC1lIDFzL15YLy8iCisKKyMgQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMuCitHUkVQPSRsdF9HUkVQCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXIuCitGR1JFUD0kbHRfRkdSRVAKKworIyBBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlci4KK05NPSRsdF9OTQorCisjIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JG1heF9jbWRfbGVuCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSRhY19vYmpleHQKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9JGV4ZWV4dAorCisjIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCIuCitsdF91bnNldD0kbHRfdW5zZXQKKworIyB0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzLgorU1AyTkw9JGx0X2x0X1NQMk5MCisKKyMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KK05MMlNQPSRsdF9sdF9OTDJTUAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisKKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisKKyMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCitPQkpEVU1QPSRsdF9PQkpEVU1QCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCitmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorCisjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisKKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSRsdF9ETExUT09MCisKKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorCisjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KK1NUUklQPSRsdF9TVFJJUAorCisjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb24uCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249JGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbgorCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0NDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9DRkxBR1MKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW50byBhIGxpc3Qgb2Ygc3ltYm9scyB0byBtYW51YWxseSByZWxvY2F0ZS4KK2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisKKyMgVGhlIG5hbWUgbGlzdGVyIGludGVyZmFjZS4KK25tX2ludGVyZmFjZT0kbHRfbHRfY3Zfbm1faW50ZXJmYWNlCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisKKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCB3aGVyZSBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCitsdF9zeXNyb290PSRsdF9zeXNyb290CisKKyMgQ29tbWFuZCB0byB0cnVuY2F0ZSBhIGJpbmFyeSBwaXBlLgorbHRfdHJ1bmNhdGVfYmluPSRsdF9sdF9jdl90cnVuY2F0ZV9iaW4KKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIE1hbmlmZXN0IHRvb2wuCitNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSRsdF9EU1lNVVRJTAorCisjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorTk1FRElUPSRsdF9OTUVESVQKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0kbHRfTElQTworCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9JGx0X09UT09MCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCitPVE9PTDY0PSRsdF9PVE9PTDY0CisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSRsaWJleHQKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCisKKyMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisjIG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgRGV0ZWN0ZWQgcnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aAorCisjIEV4cGxpY2l0IExUX1NZU19MSUJSQVJZX1BBVEggc2V0IGR1cmluZyAuL2NvbmZpZ3VyZSB0aW1lLgorY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0kbHRfY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aAorCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXIKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0MKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0CisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kcworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHMKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHNobGlicGF0aF92YXIgaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpYworCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHMKK3Bvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCitwcmVkZXBzPSRsdF9wcmVkZXBzCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHMKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGgKKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICAgIGNhdCA8PCdfTFRfRU9GJyA+PiAiJGNmZ2ZpbGUiCisKKyMgIyMjIEJFR0lOIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKKworIyBmdW5jX211bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQQVRICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZBUklBQkxFIGlzIG5hbWUgb2YgdmFyaWFibGUgY29udGFpbmluZyBfc3BhY2VfIHNlcGFyYXRlZCBsaXN0IG9mCisjIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBieSB0aGUgY29udGVudHMgb2YgUEFUSCwgd2hpY2ggaXMgc3RyaW5nCisjIGhhdmluZyBhIGZvcm1hdDoKKyMgIkRJUls6RElSXToiCisjICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRQorIyAiOkRJUls6RElSXSIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUlBbOkRJUlBdOjpbRElSQTpdRElSQSIKKyMgICAgICAgc3RyaW5nICJESVJQWyBESVJQXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUgYW5kIHN0cmluZworIyAgICAgICAiRElSQVsgRElSQV0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUls6RElSXSIKKyMgICAgICAgVkFSSUFCTEUgd2lsbCBiZSByZXBsYWNlZCBieSAiRElSWyBESVJdIgorZnVuY19tdW5nZV9wYXRoX2xpc3QgKCkKK3sKKyAgICBjYXNlIHgkMiBpbgorICAgIHgpCisgICAgICAgIDs7CisgICAgKjopCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2AgXCQkMVwiCisgICAgICAgIDs7CisgICAgeDoqKQorICAgICAgICBldmFsICQxPVwiXCQkMSBgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2BcIgorICAgICAgICA7OworICAgICo6OiopCisgICAgICAgIGV2YWwgJDE9XCJcJCQxXCBgJEVDSE8gJDIgfCAkU0VEIC1lICdzLy4qOjovLycgLWUgJ3MvOi8gL2cnYFwiCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3MvOi8gL2cnYFwgXCQkMVwiCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorZnVuY19jY19iYXNlbmFtZSAoKQoreworICAgIGZvciBjY190ZW1wIGluICQqIiI7IGRvCisgICAgICBjYXNlICRjY190ZW1wIGluCisgICAgICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICAgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICAgICAgXC0qKSA7OworICAgICAgICAqKSBicmVhazs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorfQorCisKKyMgIyMjIEVORCBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9DWFgKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnX0NYWAorcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfQ1hYCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWAorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfQ1hYCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19DWFgKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGRfQ1hYCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHNobGlicGF0aF92YXIgaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19DWFgKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19DWFgKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kc19DWFgKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kc19DWFgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWNfQ1hYCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9DWFgKKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfQ1hYCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19DWFgKK3ByZWRlcHM9JGx0X3ByZWRlcHNfQ1hYCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAorCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKK19MVF9FT0YKKworIDs7CisKKyAgZXNhYworZG9uZSAjIGZvciBhY190YWcKKworCithc19mbl9leGl0IDAKK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKwordGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgorIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisjIFVuZm9ydHVuYXRlbHksIG9uIERPUyB0aGlzIGZhaWxzLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQgb3BlbgorIyBieSBjb25maWd1cmUsIHNvIGNvbmZpZy5zdGF0dXMgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBpdDsgaXRzCisjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorIyBlZmZlY3RpdmVseSBjbG9zaW5nIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZAorIyBhcHBlbmRlZCB0byBieSBjb25maWcuc3RhdHVzLiAgV2hlbiBjb21pbmcgYmFjayB0byBjb25maWd1cmUsIHdlCisjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGFjX2NzX3N1Y2Nlc3M9OgorICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisgIHRlc3QgIiRzaWxlbnQiID0geWVzICYmCisgICAgYWNfY29uZmlnX3N0YXR1c19hcmdzPSIkYWNfY29uZmlnX3N0YXR1c19hcmdzIC0tcXVpZXQiCisgIGV4ZWMgNT4vZGV2L251bGwKKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTICRhY19jb25maWdfc3RhdHVzX2FyZ3MgfHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQorICBleGVjIDU+PmNvbmZpZy5sb2cKKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKyAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQorZmkKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjI7fQorZmkKKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9jb25maWd1cmUuYWMgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzdjZTVjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwyMiBAQAorQUNfUFJFUkVRKDIuNTcpCitBQ19JTklUKFtjLWFyZXMtdGVzdF0sWy1dLFstXSkKK0FDX0NPTkZJR19TUkNESVIoW2FyZXMtdGVzdC5jY10pCitBQ19DT05GSUdfTUFDUk9fRElSKFsuLi9tNF0pCisKK0FNX0lOSVRfQVVUT01BS0UoW25vLWRlZmluZV0pCittNF9pZmRlZihbQU1fU0lMRU5UX1JVTEVTXSwgW0FNX1NJTEVOVF9SVUxFUyhbeWVzXSldKQorCitkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK0FDX1BST0dfQ1hYCitBWF9DWFhfQ09NUElMRV9TVERDWFhfMTEoW25vZXh0XSxbbWFuZGF0b3J5XSkKK0xUX0lOSVQKK0FDX1NVQlNUKExJQlRPT0xfREVQUykKK0FYX1BUSFJFQUQKK0FYX0NPREVfQ09WRVJBR0UKK0FYX0NIRUNLX1VTRVJfTkFNRVNQQUNFCitBWF9DSEVDS19VVFNfTkFNRVNQQUNFCisKK0FDX0NIRUNLX0hFQURFUlMobmV0ZGIuaCBuZXRpbmV0L3RjcC5oKQorQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2Rucy1kdW1wLmNjIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9kbnMtZHVtcC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjNkZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9kbnMtZHVtcC5jYwpAQCAtMCwwICsxLDM1IEBACisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImRucy1wcm90by5oIgorCituYW1lc3BhY2UgYXJlcyB7CisKK3N0YXRpYyB2b2lkIFNob3dGaWxlKGNvbnN0IGNoYXIqIGZpbGVuYW1lKSB7CisgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKyAgaWYgKGZkIDwgMCkgeworICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIG9wZW4gJyIgPDwgZmlsZW5hbWUgPDwgIiciIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm47CisgIH0KKyAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gY29udGVudHM7CisgIHdoaWxlICh0cnVlKSB7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMTAyNF07CisgICAgaW50IGxlbiA9IHJlYWQoZmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIGlmIChsZW4gPD0gMCkgYnJlYWs7CisgICAgY29udGVudHMuaW5zZXJ0KGNvbnRlbnRzLmVuZCgpLCBidWZmZXIsIGJ1ZmZlciArIGxlbik7CisgIH0KKyAgc3RkOjpjb3V0IDw8IFBhY2tldFRvU3RyaW5nKGNvbnRlbnRzKSA8PCBzdGQ6OmVuZGw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhcmVzCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKKyAgZm9yIChpbnQgaWkgPSAxOyBpaSA8IGFyZ2M7ICsraWkpIHsKKyAgICBhcmVzOjpTaG93RmlsZShhcmd2W2lpXSk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9kbnMtcHJvdG8tdGVzdC5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvZG5zLXByb3RvLXRlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzNmEwYwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvZG5zLXByb3RvLXRlc3QuY2MKQEAgLTAsMCArMSwxMzEgQEAKKyNpbmNsdWRlICJhcmVzLXRlc3QuaCIKKyNpbmNsdWRlICJkbnMtcHJvdG8uaCIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGFyZXMgeworbmFtZXNwYWNlIHRlc3QgeworCitURVNUKEROU1Byb3RvLCBFbmNvZGVRdWVzdGlvbnMpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnNldF9xaWQoMHgxMjM0KS5zZXRfcmVzcG9uc2UoKS5zZXRfYWEoKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJleGFtcGxlLmNvbS4iLCBuc190X2EpKQorICAgIC5hZGRfcXVlc3Rpb24obmV3IEROU1F1ZXN0aW9uKCJ3d3cuZXhhbXBsZS5jb20iLCBuc190X2FhYWEsIG5zX2NfY2hhb3MpKTsKKworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBxaWQKKyAgICAweDg0LCAvLyByZXNwb25zZSArIHF1ZXJ5ICsgQUEgKyBub3QtVEMgKyBub3QtUkQKKyAgICAweDAwLCAvLyBub3QtUkEgKyBub3QtWiArIG5vdC1BRCArIG5vdC1DRCArIHJjPU5vRXJyb3IKKyAgICAweDAwLCAweDAyLCAgLy8gbnVtIHF1ZXN0aW9ucworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYWRkaXRpb25hbCBSUnMKKyAgICAvLyBRdWVzdGlvbiAxCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDAxLCAgLy8gdHlwZSBBCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgLy8gUXVlc3Rpb24gMgorICAgIDB4MDMsICd3JywgJ3cnLCAndycsCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDFDLCAgLy8gdHlwZSBBQUFBID0gMjgKKyAgICAweDAwLCAweDAzLCAgLy8gY2xhc3MgQ0hBT1MgPSAzCisgIH07CisgIEVYUEVDVF9FUShkYXRhLCBwa3QuZGF0YSgpKTsKK30KKworVEVTVChETlNQcm90bywgRW5jb2RlU2luZ2xlTmFtZUFuc3dlcnMpIHsKKyAgRE5TUGFja2V0IHBrdDsKKyAgcGt0LnFpZF8gPSAweDEyMzQ7CisgIHBrdC5yZXNwb25zZV8gPSB0cnVlOworICBwa3QuYWFfID0gdHJ1ZTsKKyAgcGt0Lm9wY29kZV8gPSBuc19vX3F1ZXJ5OworICBwa3QuYWRkX2Fuc3dlcihuZXcgRE5TQ25hbWVSUigiZXhhbXBsZS5jb20iLCAweDAxMDIwMzA0LCAib3RoZXIuY29tLiIpKTsKKyAgcGt0LmFkZF9hdXRoKG5ldyBETlNQdHJSUigid3d3LmV4YW1wbGUuY29tIiwgMHgwMTAyMDMwNCwgInd3dy5vdGhlci5jb20iKSk7CisKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IHsKKyAgICAweDEyLCAweDM0LCAgLy8gcWlkCisgICAgMHg4NCwgLy8gcmVzcG9uc2UgKyBxdWVyeSArIEFBICsgbm90LVRDICsgbm90LVJECisgICAgMHgwMCwgLy8gbm90LVJBICsgbm90LVogKyBub3QtQUQgKyBub3QtQ0QgKyByYz1Ob0Vycm9yCisgICAgMHgwMCwgMHgwMCwgIC8vIG51bSBxdWVzdGlvbnMKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIGFuc3dlciBSUnMKKyAgICAweDAwLCAweDAxLCAgLy8gbnVtIGF1dGhvcml0eSBSUnMKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIGFkZGl0aW9uYWwgUlJzCisgICAgLy8gQW5zd2VyIDEKKyAgICAweDA3LCAnZScsICd4JywgJ2EnLCAnbScsICdwJywgJ2wnLCAnZScsCisgICAgMHgwMywgJ2MnLCAnbycsICdtJywKKyAgICAweDAwLAorICAgIDB4MDAsIDB4MDUsICAvLyBSUiB0eXBlCisgICAgMHgwMCwgMHgwMSwgIC8vIGNsYXNzIElOCisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgLy8gVFRMCisgICAgMHgwMCwgMHgwQiwgIC8vIHJkYXRhIGxlbmd0aAorICAgIDB4MDUsICdvJywgJ3QnLCAnaCcsICdlJywgJ3InLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAvLyBBdXRob3JpdHkgMQorICAgIDB4MDMsICd3JywgJ3cnLCAndycsCisgICAgMHgwNywgJ2UnLCAneCcsICdhJywgJ20nLCAncCcsICdsJywgJ2UnLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgICAweDAwLCAweDBjLCAgLy8gUlIgdHlwZQorICAgIDB4MDAsIDB4MDEsICAvLyBjbGFzcyBJTgorICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIC8vIFRUTAorICAgIDB4MDAsIDB4MEYsICAvLyByZGF0YSBsZW5ndGgKKyAgICAweDAzLCAndycsICd3JywgJ3cnLAorICAgIDB4MDUsICdvJywgJ3QnLCAnaCcsICdlJywgJ3InLAorICAgIDB4MDMsICdjJywgJ28nLCAnbScsCisgICAgMHgwMCwKKyAgfTsKKyAgRVhQRUNUX0VRKGRhdGEsIHBrdC5kYXRhKCkpOworfQorCitURVNUKEROU1Byb3RvLCBFbmNvZGVBZGRyZXNzQW5zd2VycykgeworICBETlNQYWNrZXQgcGt0OworICBwa3QucWlkXyA9IDB4MTIzNDsKKyAgcGt0LnJlc3BvbnNlXyA9IHRydWU7CisgIHBrdC5hYV8gPSB0cnVlOworICBwa3Qub3Bjb2RlXyA9IG5zX29fcXVlcnk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGFkZHJ2NCA9IHsweDAyLCAweDAzLCAweDA0LCAweDA1fTsKKyAgcGt0LmFkZF9hbnN3ZXIobmV3IEROU0FSUigiZXhhbXBsZS5jb20iLCAweDAxMDIwMzA0LCBhZGRydjQpKTsKKyAgYnl0ZSBhZGRydjZbMTZdID0gezB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDA0LCAweDA0LCAweDA0LCAweDA0fTsKKyAgcGt0LmFkZF9hZGRpdGlvbmFsKG5ldyBETlNBYWFhUlIoInd3dy5leGFtcGxlLmNvbSIsIDB4MDEwMjAzMDQsIGFkZHJ2NiwgMTYpKTsKKworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0geworICAgIDB4MTIsIDB4MzQsICAvLyBxaWQKKyAgICAweDg0LCAvLyByZXNwb25zZSArIHF1ZXJ5ICsgQUEgKyBub3QtVEMgKyBub3QtUkQKKyAgICAweDAwLCAvLyBub3QtUkEgKyBub3QtWiArIG5vdC1BRCArIG5vdC1DRCArIHJjPU5vRXJyb3IKKyAgICAweDAwLCAweDAwLCAgLy8gbnVtIHF1ZXN0aW9ucworICAgIDB4MDAsIDB4MDEsICAvLyBudW0gYW5zd2VyIFJScworICAgIDB4MDAsIDB4MDAsICAvLyBudW0gYXV0aG9yaXR5IFJScworICAgIDB4MDAsIDB4MDEsICAvLyBudW0gYWRkaXRpb25hbCBSUnMKKyAgICAvLyBBbnN3ZXIgMQorICAgIDB4MDcsICdlJywgJ3gnLCAnYScsICdtJywgJ3AnLCAnbCcsICdlJywKKyAgICAweDAzLCAnYycsICdvJywgJ20nLAorICAgIDB4MDAsCisgICAgMHgwMCwgMHgwMSwgIC8vIFJSIHR5cGUKKyAgICAweDAwLCAweDAxLCAgLy8gY2xhc3MgSU4KKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAvLyBUVEwKKyAgICAweDAwLCAweDA0LCAgLy8gcmRhdGEgbGVuZ3RoCisgICAgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgICAvLyBBZGRpdGlvbmFsIDEKKyAgICAweDAzLCAndycsICd3JywgJ3cnLAorICAgIDB4MDcsICdlJywgJ3gnLCAnYScsICdtJywgJ3AnLCAnbCcsICdlJywKKyAgICAweDAzLCAnYycsICdvJywgJ20nLAorICAgIDB4MDAsCisgICAgMHgwMCwgMHgxYywgIC8vIFJSIHR5cGUKKyAgICAweDAwLCAweDAxLCAgLy8gY2xhc3MgSU4KKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAvLyBUVEwKKyAgICAweDAwLCAweDEwLCAgLy8gcmRhdGEgbGVuZ3RoCisgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwKKyAgICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDA0LCAweDA0LCAweDA0LCAweDA0CisgIH07CisgIEVYUEVDVF9FUShkYXRhLCBwa3QuZGF0YSgpKTsKK30KKworCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGFyZXMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvZG5zLXByb3RvLmNjIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9kbnMtcHJvdG8uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViN2YyZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvZG5zLXByb3RvLmNjCkBAIC0wLDAgKzEsNjM3IEBACisjaW5jbHVkZSAiZG5zLXByb3RvLmgiCisKKy8vIEluY2x1ZGUgYXJlcyBpbnRlcm5hbCBmaWxlIGZvciBETlMgcHJvdG9jb2wgZGV0YWlscworI2luY2x1ZGUgImFyZXMuaCIKKyNpbmNsdWRlICJhcmVzX2Rucy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPHNzdHJlYW0+CisKK25hbWVzcGFjZSBhcmVzIHsKKworc3RkOjpzdHJpbmcgSGV4RHVtcChzdGQ6OnZlY3RvcjxieXRlPiBkYXRhKSB7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgZGF0YS5zaXplKCk7ICBpaSsrKSB7CisgICAgY2hhciBidWZmZXJbMiArIDFdOworICAgIHNwcmludGYoYnVmZmVyLCAiJTAyeCIsIGRhdGFbaWldKTsKKyAgICBzcyA8PCBidWZmZXI7CisgIH0KKyAgcmV0dXJuIHNzLnN0cigpOworfQorCitzdGQ6OnN0cmluZyBIZXhEdW1wKGNvbnN0IGJ5dGUgKmRhdGEsIGludCBsZW4pIHsKKyAgcmV0dXJuIEhleER1bXAoc3RkOjp2ZWN0b3I8Ynl0ZT4oZGF0YSwgZGF0YSArIGxlbikpOworfQorCitzdGQ6OnN0cmluZyBIZXhEdW1wKGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pIHsKKyAgcmV0dXJuIEhleER1bXAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBieXRlKj4oZGF0YSksIGxlbik7Cit9CisKK3N0ZDo6c3RyaW5nIFN0YXR1c1RvU3RyaW5nKGludCBzdGF0dXMpIHsKKyAgc3dpdGNoIChzdGF0dXMpIHsKKyAgY2FzZSBBUkVTX1NVQ0NFU1M6IHJldHVybiAiQVJFU19TVUNDRVNTIjsKKyAgY2FzZSBBUkVTX0VOT0RBVEE6IHJldHVybiAiQVJFU19FTk9EQVRBIjsKKyAgY2FzZSBBUkVTX0VGT1JNRVJSOiByZXR1cm4gIkFSRVNfRUZPUk1FUlIiOworICBjYXNlIEFSRVNfRVNFUlZGQUlMOiByZXR1cm4gIkFSRVNfRVNFUlZGQUlMIjsKKyAgY2FzZSBBUkVTX0VOT1RGT1VORDogcmV0dXJuICJBUkVTX0VOT1RGT1VORCI7CisgIGNhc2UgQVJFU19FTk9USU1QOiByZXR1cm4gIkFSRVNfRU5PVElNUCI7CisgIGNhc2UgQVJFU19FUkVGVVNFRDogcmV0dXJuICJBUkVTX0VSRUZVU0VEIjsKKyAgY2FzZSBBUkVTX0VCQURRVUVSWTogcmV0dXJuICJBUkVTX0VCQURRVUVSWSI7CisgIGNhc2UgQVJFU19FQkFETkFNRTogcmV0dXJuICJBUkVTX0VCQUROQU1FIjsKKyAgY2FzZSBBUkVTX0VCQURGQU1JTFk6IHJldHVybiAiQVJFU19FQkFERkFNSUxZIjsKKyAgY2FzZSBBUkVTX0VCQURSRVNQOiByZXR1cm4gIkFSRVNfRUJBRFJFU1AiOworICBjYXNlIEFSRVNfRUNPTk5SRUZVU0VEOiByZXR1cm4gIkFSRVNfRUNPTk5SRUZVU0VEIjsKKyAgY2FzZSBBUkVTX0VUSU1FT1VUOiByZXR1cm4gIkFSRVNfRVRJTUVPVVQiOworICBjYXNlIEFSRVNfRU9GOiByZXR1cm4gIkFSRVNfRU9GIjsKKyAgY2FzZSBBUkVTX0VGSUxFOiByZXR1cm4gIkFSRVNfRUZJTEUiOworICBjYXNlIEFSRVNfRU5PTUVNOiByZXR1cm4gIkFSRVNfRU5PTUVNIjsKKyAgY2FzZSBBUkVTX0VERVNUUlVDVElPTjogcmV0dXJuICJBUkVTX0VERVNUUlVDVElPTiI7CisgIGNhc2UgQVJFU19FQkFEU1RSOiByZXR1cm4gIkFSRVNfRUJBRFNUUiI7CisgIGNhc2UgQVJFU19FQkFERkxBR1M6IHJldHVybiAiQVJFU19FQkFERkxBR1MiOworICBjYXNlIEFSRVNfRU5PTkFNRTogcmV0dXJuICJBUkVTX0VOT05BTUUiOworICBjYXNlIEFSRVNfRUJBREhJTlRTOiByZXR1cm4gIkFSRVNfRUJBREhJTlRTIjsKKyAgY2FzZSBBUkVTX0VOT1RJTklUSUFMSVpFRDogcmV0dXJuICJBUkVTX0VOT1RJTklUSUFMSVpFRCI7CisgIGNhc2UgQVJFU19FTE9BRElQSExQQVBJOiByZXR1cm4gIkFSRVNfRUxPQURJUEhMUEFQSSI7CisgIGNhc2UgQVJFU19FQUREUkdFVE5FVFdPUktQQVJBTVM6IHJldHVybiAiQVJFU19FQUREUkdFVE5FVFdPUktQQVJBTVMiOworICBjYXNlIEFSRVNfRUNBTkNFTExFRDogcmV0dXJuICJBUkVTX0VDQU5DRUxMRUQiOworICBkZWZhdWx0OiByZXR1cm4gIlVOS05PV04iOworICB9Cit9CisKK3N0ZDo6c3RyaW5nIFJjb2RlVG9TdHJpbmcoaW50IHJjb2RlKSB7CisgIHN3aXRjaCAocmNvZGUpIHsKKyAgY2FzZSBuc19yX25vZXJyb3I6IHJldHVybiAiTk9FUlJPUiI7CisgIGNhc2UgbnNfcl9mb3JtZXJyOiByZXR1cm4gIkZPUk1FUlIiOworICBjYXNlIG5zX3Jfc2VydmZhaWw6IHJldHVybiAiU0VSVkZBSUwiOworICBjYXNlIG5zX3Jfbnhkb21haW46IHJldHVybiAiTlhET01BSU4iOworICBjYXNlIG5zX3Jfbm90aW1wbDogcmV0dXJuICJOT1RJTVBMIjsKKyAgY2FzZSBuc19yX3JlZnVzZWQ6IHJldHVybiAiUkVGVVNFRCI7CisgIGNhc2UgbnNfcl95eGRvbWFpbjogcmV0dXJuICJZWERPTUFJTiI7CisgIGNhc2UgbnNfcl95eHJyc2V0OiByZXR1cm4gIllYUlJTRVQiOworICBjYXNlIG5zX3JfbnhycnNldDogcmV0dXJuICJOWFJSU0VUIjsKKyAgY2FzZSBuc19yX25vdGF1dGg6IHJldHVybiAiTk9UQVVUSCI7CisgIGNhc2UgbnNfcl9ub3R6b25lOiByZXR1cm4gIk5PVFpPTkUiOworICBjYXNlIG5zX3JfYmFkc2lnOiByZXR1cm4gIkJBRFNJRyI7CisgIGNhc2UgbnNfcl9iYWRrZXk6IHJldHVybiAiQkFES0VZIjsKKyAgY2FzZSBuc19yX2JhZHRpbWU6IHJldHVybiAiQkFEVElNRSI7CisgIGRlZmF1bHQ6IHJldHVybiAiVU5LTk9XTiI7CisgIH0KK30KKworc3RkOjpzdHJpbmcgUlJUeXBlVG9TdHJpbmcoaW50IHJydHlwZSkgeworICBzd2l0Y2ggKHJydHlwZSkgeworICBjYXNlIG5zX3RfYTogcmV0dXJuICJBIjsKKyAgY2FzZSBuc190X25zOiByZXR1cm4gIk5TIjsKKyAgY2FzZSBuc190X21kOiByZXR1cm4gIk1EIjsKKyAgY2FzZSBuc190X21mOiByZXR1cm4gIk1GIjsKKyAgY2FzZSBuc190X2NuYW1lOiByZXR1cm4gIkNOQU1FIjsKKyAgY2FzZSBuc190X3NvYTogcmV0dXJuICJTT0EiOworICBjYXNlIG5zX3RfbWI6IHJldHVybiAiTUIiOworICBjYXNlIG5zX3RfbWc6IHJldHVybiAiTUciOworICBjYXNlIG5zX3RfbXI6IHJldHVybiAiTVIiOworICBjYXNlIG5zX3RfbnVsbDogcmV0dXJuICJOVUxMIjsKKyAgY2FzZSBuc190X3drczogcmV0dXJuICJXS1MiOworICBjYXNlIG5zX3RfcHRyOiByZXR1cm4gIlBUUiI7CisgIGNhc2UgbnNfdF9oaW5mbzogcmV0dXJuICJISU5GTyI7CisgIGNhc2UgbnNfdF9taW5mbzogcmV0dXJuICJNSU5GTyI7CisgIGNhc2UgbnNfdF9teDogcmV0dXJuICJNWCI7CisgIGNhc2UgbnNfdF90eHQ6IHJldHVybiAiVFhUIjsKKyAgY2FzZSBuc190X3JwOiByZXR1cm4gIlJQIjsKKyAgY2FzZSBuc190X2Fmc2RiOiByZXR1cm4gIkFGU0RCIjsKKyAgY2FzZSBuc190X3gyNTogcmV0dXJuICJYMjUiOworICBjYXNlIG5zX3RfaXNkbjogcmV0dXJuICJJU0ROIjsKKyAgY2FzZSBuc190X3J0OiByZXR1cm4gIlJUIjsKKyAgY2FzZSBuc190X25zYXA6IHJldHVybiAiTlNBUCI7CisgIGNhc2UgbnNfdF9uc2FwX3B0cjogcmV0dXJuICJOU0FQX1BUUiI7CisgIGNhc2UgbnNfdF9zaWc6IHJldHVybiAiU0lHIjsKKyAgY2FzZSBuc190X2tleTogcmV0dXJuICJLRVkiOworICBjYXNlIG5zX3RfcHg6IHJldHVybiAiUFgiOworICBjYXNlIG5zX3RfZ3BvczogcmV0dXJuICJHUE9TIjsKKyAgY2FzZSBuc190X2FhYWE6IHJldHVybiAiQUFBQSI7CisgIGNhc2UgbnNfdF9sb2M6IHJldHVybiAiTE9DIjsKKyAgY2FzZSBuc190X254dDogcmV0dXJuICJOWFQiOworICBjYXNlIG5zX3RfZWlkOiByZXR1cm4gIkVJRCI7CisgIGNhc2UgbnNfdF9uaW1sb2M6IHJldHVybiAiTklNTE9DIjsKKyAgY2FzZSBuc190X3NydjogcmV0dXJuICJTUlYiOworICBjYXNlIG5zX3RfYXRtYTogcmV0dXJuICJBVE1BIjsKKyAgY2FzZSBuc190X25hcHRyOiByZXR1cm4gIk5BUFRSIjsKKyAgY2FzZSBuc190X2t4OiByZXR1cm4gIktYIjsKKyAgY2FzZSBuc190X2NlcnQ6IHJldHVybiAiQ0VSVCI7CisgIGNhc2UgbnNfdF9hNjogcmV0dXJuICJBNiI7CisgIGNhc2UgbnNfdF9kbmFtZTogcmV0dXJuICJETkFNRSI7CisgIGNhc2UgbnNfdF9zaW5rOiByZXR1cm4gIlNJTksiOworICBjYXNlIG5zX3Rfb3B0OiByZXR1cm4gIk9QVCI7CisgIGNhc2UgbnNfdF9hcGw6IHJldHVybiAiQVBMIjsKKyAgY2FzZSBuc190X2RzOiByZXR1cm4gIkRTIjsKKyAgY2FzZSBuc190X3NzaGZwOiByZXR1cm4gIlNTSEZQIjsKKyAgY2FzZSBuc190X3Jyc2lnOiByZXR1cm4gIlJSU0lHIjsKKyAgY2FzZSBuc190X25zZWM6IHJldHVybiAiTlNFQyI7CisgIGNhc2UgbnNfdF9kbnNrZXk6IHJldHVybiAiRE5TS0VZIjsKKyAgY2FzZSBuc190X3RrZXk6IHJldHVybiAiVEtFWSI7CisgIGNhc2UgbnNfdF90c2lnOiByZXR1cm4gIlRTSUciOworICBjYXNlIG5zX3RfaXhmcjogcmV0dXJuICJJWEZSIjsKKyAgY2FzZSBuc190X2F4ZnI6IHJldHVybiAiQVhGUiI7CisgIGNhc2UgbnNfdF9tYWlsYjogcmV0dXJuICJNQUlMQiI7CisgIGNhc2UgbnNfdF9tYWlsYTogcmV0dXJuICJNQUlMQSI7CisgIGNhc2UgbnNfdF9hbnk6IHJldHVybiAiQU5ZIjsKKyAgY2FzZSBuc190X3p4ZnI6IHJldHVybiAiWlhGUiI7CisgIGNhc2UgbnNfdF9tYXg6IHJldHVybiAiTUFYIjsKKyAgZGVmYXVsdDogcmV0dXJuICJVTktOT1dOIjsKKyAgfQorfQorCitzdGQ6OnN0cmluZyBDbGFzc1RvU3RyaW5nKGludCBxY2xhc3MpIHsKKyAgc3dpdGNoIChxY2xhc3MpIHsKKyAgY2FzZSBuc19jX2luOiByZXR1cm4gIklOIjsKKyAgY2FzZSBuc19jX2NoYW9zOiByZXR1cm4gIkNIQU9TIjsKKyAgY2FzZSBuc19jX2hzOiByZXR1cm4gIkhFU0lPRCI7CisgIGNhc2UgbnNfY19ub25lOiByZXR1cm4gIk5PTkUiOworICBjYXNlIG5zX2NfYW55OiByZXR1cm4gIkFOWSI7CisgIGRlZmF1bHQ6IHJldHVybiAiVU5LTk9XTiI7CisgIH0KK30KKworc3RkOjpzdHJpbmcgQWRkcmVzc1RvU3RyaW5nKGNvbnN0IHZvaWQqIHZhZGRyLCBpbnQgbGVuKSB7CisgIGNvbnN0IGJ5dGUqIGFkZHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGJ5dGUqPih2YWRkcik7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBpZiAobGVuID09IDQpIHsKKyAgICBjaGFyIGJ1ZmZlcls0KjQgKyAzICsgMV07CisgICAgc3ByaW50ZihidWZmZXIsICIldS4ldS4ldS4ldSIsCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilhZGRyWzBdLAorICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpYWRkclsxXSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKWFkZHJbMl0sCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilhZGRyWzNdKTsKKyAgICBzcyA8PCBidWZmZXI7CisgIH0gZWxzZSBpZiAobGVuID09IDE2KSB7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDE2OyAgaWkrPTIpIHsKKyAgICAgIGlmIChpaSA+IDApIHNzIDw8ICc6JzsKKyAgICAgIGNoYXIgYnVmZmVyWzQgKyAxXTsKKyAgICAgIHNwcmludGYoYnVmZmVyLCAiJTAyeCUwMngiLCAodW5zaWduZWQgY2hhcilhZGRyW2lpXSwgKHVuc2lnbmVkIGNoYXIpYWRkcltpaSsxXSk7CisgICAgICBzcyA8PCBidWZmZXI7CisgICAgfQorICB9IGVsc2UgeworICAgIHNzIDw8ICIhIiA8PCBIZXhEdW1wKGFkZHIsIGxlbikgPDwgIiEiOworICB9CisgIHJldHVybiBzcy5zdHIoKTsKK30KKworc3RkOjpzdHJpbmcgUGFja2V0VG9TdHJpbmcoY29uc3Qgc3RkOjp2ZWN0b3I8Ynl0ZT4mIHBhY2tldCkgeworICBjb25zdCBieXRlKiBkYXRhID0gcGFja2V0LmRhdGEoKTsKKyAgaW50IGxlbiA9IHBhY2tldC5zaXplKCk7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBpZiAobGVuIDwgTlNfSEZJWEVEU1opIHsKKyAgICBzcyA8PCAiKHRvbyBzaG9ydCwgbGVuICIgPDwgbGVuIDw8ICIpIjsKKyAgICByZXR1cm4gc3Muc3RyKCk7CisgIH0KKyAgc3MgPDwgKChETlNfSEVBREVSX1FSKGRhdGEpID09IDApID8gIlJFUSAiIDogIlJTUCAiKTsKKyAgc3dpdGNoIChETlNfSEVBREVSX09QQ09ERShkYXRhKSkgeworICBjYXNlIG5zX29fcXVlcnk6IHNzIDw8ICJRUlkgIjsgYnJlYWs7CisgIGNhc2UgbnNfb19pcXVlcnk6IHNzIDw8ICJJUVJZICI7IGJyZWFrOworICBjYXNlIG5zX29fc3RhdHVzOiBzcyA8PCAiU1RBVFVTICI7IGJyZWFrOworICBjYXNlIG5zX29fbm90aWZ5OiBzcyA8PCAiTk9USUZZICI7IGJyZWFrOworICBjYXNlIG5zX29fdXBkYXRlOiBzcyA8PCAiVVBEQVRFICI7IGJyZWFrOworICBkZWZhdWx0OiBzcyA8PCAiVU5LTk9XTigiIDw8IEROU19IRUFERVJfT1BDT0RFKGRhdGEpIDw8ICIpICI7IGJyZWFrOworICB9CisgIGlmIChETlNfSEVBREVSX0FBKGRhdGEpKSBzcyA8PCAiQUEgIjsKKyAgaWYgKEROU19IRUFERVJfVEMoZGF0YSkpIHNzIDw8ICJUQyAiOworICBpZiAoRE5TX0hFQURFUl9SRChkYXRhKSkgc3MgPDwgIlJEICI7CisgIGlmIChETlNfSEVBREVSX1JBKGRhdGEpKSBzcyA8PCAiUkEgIjsKKyAgaWYgKEROU19IRUFERVJfWihkYXRhKSkgc3MgPDwgIlogIjsKKyAgaWYgKEROU19IRUFERVJfUVIoZGF0YSkgPT0gMSkgc3MgPDwgUmNvZGVUb1N0cmluZyhETlNfSEVBREVSX1JDT0RFKGRhdGEpKTsKKworICBpbnQgbnF1ZXN0aW9ucyA9IEROU19IRUFERVJfUURDT1VOVChkYXRhKTsKKyAgaW50IG5hbnN3ZXJzID0gRE5TX0hFQURFUl9BTkNPVU5UKGRhdGEpOworICBpbnQgbmF1dGhzID0gRE5TX0hFQURFUl9OU0NPVU5UKGRhdGEpOworICBpbnQgbmFkZHMgPSBETlNfSEVBREVSX0FSQ09VTlQoZGF0YSk7CisKKyAgY29uc3QgYnl0ZSogcHEgPSBkYXRhICsgTlNfSEZJWEVEU1o7CisgIGxlbiAtPSBOU19IRklYRURTWjsKKyAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IG5xdWVzdGlvbnM7IGlpKyspIHsKKyAgICBzcyA8PCAiIFE6IiA8PCBRdWVzdGlvblRvU3RyaW5nKHBhY2tldCwgJnBxLCAmbGVuKTsKKyAgfQorICBjb25zdCBieXRlKiBwcnIgPSBwcTsKKyAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IG5hbnN3ZXJzOyBpaSsrKSB7CisgICAgc3MgPDwgIiBBOiIgPDwgUlJUb1N0cmluZyhwYWNrZXQsICZwcnIsICZsZW4pOworICB9CisgIGZvciAoaW50IGlpID0gMDsgaWkgPCBuYXV0aHM7IGlpKyspIHsKKyAgICBzcyA8PCAiIEFVVEg6IiA8PCBSUlRvU3RyaW5nKHBhY2tldCwgJnByciwgJmxlbik7CisgIH0KKyAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IG5hZGRzOyBpaSsrKSB7CisgICAgc3MgPDwgIiBBREQ6IiA8PCBSUlRvU3RyaW5nKHBhY2tldCwgJnByciwgJmxlbik7CisgIH0KKyAgcmV0dXJuIHNzLnN0cigpOworfQorCitzdGQ6OnN0cmluZyBRdWVzdGlvblRvU3RyaW5nKGNvbnN0IHN0ZDo6dmVjdG9yPGJ5dGU+JiBwYWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqKiBkYXRhLCBpbnQqIGxlbikgeworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgInsiOworICBpZiAoKmxlbiA8IE5TX1FGSVhFRFNaKSB7CisgICAgc3MgPDwgIih0b28gc2hvcnQsIGxlbiAiIDw8ICpsZW4gPDwgIikiOworICAgIHJldHVybiBzcy5zdHIoKTsKKyAgfQorCisgIGNoYXIgKm5hbWUgPSBudWxscHRyOworICBsb25nIGVuY2xlbjsKKyAgaW50IHJjID0gYXJlc19leHBhbmRfbmFtZSgqZGF0YSwgcGFja2V0LmRhdGEoKSwgcGFja2V0LnNpemUoKSwgJm5hbWUsICZlbmNsZW4pOworICBpZiAocmMgIT0gQVJFU19TVUNDRVNTKSB7CisgICAgc3MgPDwgIihlcnJvciBmcm9tIGFyZXNfZXhwYW5kX25hbWUpIjsKKyAgICByZXR1cm4gc3Muc3RyKCk7CisgIH0KKyAgaWYgKGVuY2xlbiA+ICpsZW4pIHsKKyAgICBzcyA8PCAiKGVycm9yLCBlbmNvZGVkIG5hbWUgbGVuICIgPDwgZW5jbGVuIDw8ICJiaWdnZXIgdGhhbiByZW1haW5pbmcgZGF0YSAiIDw8ICpsZW4gPDwgIiBieXRlcykiOworICAgIHJldHVybiBzcy5zdHIoKTsKKyAgfQorICAqbGVuIC09IGVuY2xlbjsKKyAgKmRhdGEgKz0gZW5jbGVuOworICBzcyA8PCAiJyIgPDwgbmFtZSA8PCAiJyAiOworICBmcmVlKG5hbWUpOworICBpZiAoKmxlbiA8IE5TX1FGSVhFRFNaKSB7CisgICAgc3MgPDwgIih0b28gc2hvcnQsIGxlbiBsZWZ0ICIgPDwgKmxlbiA8PCAiKSI7CisgICAgcmV0dXJuIHNzLnN0cigpOworICB9CisgIHNzIDw8IENsYXNzVG9TdHJpbmcoRE5TX1FVRVNUSU9OX0NMQVNTKCpkYXRhKSkgPDwgIiAiOworICBzcyA8PCBSUlR5cGVUb1N0cmluZyhETlNfUVVFU1RJT05fVFlQRSgqZGF0YSkpOworICAqZGF0YSArPSBOU19RRklYRURTWjsKKyAgKmxlbiAtPSBOU19RRklYRURTWjsKKyAgc3MgPDwgIn0iOworICByZXR1cm4gc3Muc3RyKCk7Cit9CisKK3N0ZDo6c3RyaW5nIFJSVG9TdHJpbmcoY29uc3Qgc3RkOjp2ZWN0b3I8Ynl0ZT4mIHBhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSoqIGRhdGEsIGludCogbGVuKSB7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCAieyI7CisgIGlmICgqbGVuIDwgTlNfUlJGSVhFRFNaKSB7CisgICAgc3MgPDwgInRvbyBzaG9ydCwgbGVuICIgPDwgKmxlbiA8PCAiKSI7CisgICAgcmV0dXJuIHNzLnN0cigpOworICB9CisKKyAgY2hhciAqbmFtZSA9IG51bGxwdHI7CisgIGxvbmcgZW5jbGVuOworICBpbnQgcmMgPSBhcmVzX2V4cGFuZF9uYW1lKCpkYXRhLCBwYWNrZXQuZGF0YSgpLCBwYWNrZXQuc2l6ZSgpLCAmbmFtZSwgJmVuY2xlbik7CisgIGlmIChyYyAhPSBBUkVTX1NVQ0NFU1MpIHsKKyAgICBzcyA8PCAiKGVycm9yIGZyb20gYXJlc19leHBhbmRfbmFtZSkiOworICAgIHJldHVybiBzcy5zdHIoKTsKKyAgfQorICBpZiAoZW5jbGVuID4gKmxlbikgeworICAgIHNzIDw8ICIoZXJyb3IsIGVuY29kZWQgbmFtZSBsZW4gIiA8PCBlbmNsZW4gPDwgImJpZ2dlciB0aGFuIHJlbWFpbmluZyBkYXRhICIgPDwgKmxlbiA8PCAiIGJ5dGVzKSI7CisgICAgcmV0dXJuIHNzLnN0cigpOworICB9CisgICpsZW4gLT0gZW5jbGVuOworICAqZGF0YSArPSBlbmNsZW47CisgIHNzIDw8ICInIiA8PCBuYW1lIDw8ICInICI7CisgIGZyZWUobmFtZSk7CisgIG5hbWUgPSBudWxscHRyOworCisgIGlmICgqbGVuIDwgTlNfUlJGSVhFRFNaKSB7CisgICAgc3MgPDwgIih0b28gc2hvcnQsIGxlbiBsZWZ0ICIgPDwgKmxlbiA8PCAiKSI7CisgICAgcmV0dXJuIHNzLnN0cigpOworICB9CisgIGludCBycnR5cGUgPSBETlNfUlJfVFlQRSgqZGF0YSk7CisgIGlmIChycnR5cGUgPT0gbnNfdF9vcHQpIHsKKyAgICBzcyA8PCAiTUFYVURQPSIgPDwgRE5TX1JSX0NMQVNTKCpkYXRhKSA8PCAiICI7CisgICAgc3MgPDwgUlJUeXBlVG9TdHJpbmcocnJ0eXBlKSA8PCAiICI7CisgICAgc3MgPDwgIlJDT0RFMj0iIDw8IEROU19SUl9UVEwoKmRhdGEpOworICB9IGVsc2UgeworICAgIHNzIDw8IENsYXNzVG9TdHJpbmcoRE5TX1JSX0NMQVNTKCpkYXRhKSkgPDwgIiAiOworICAgIHNzIDw8IFJSVHlwZVRvU3RyaW5nKHJydHlwZSkgPDwgIiAiOworICAgIHNzIDw8ICJUVEw9IiA8PCBETlNfUlJfVFRMKCpkYXRhKTsKKyAgfQorICBpbnQgcmRhdGFsZW4gPSBETlNfUlJfTEVOKCpkYXRhKTsKKworICAqZGF0YSArPSBOU19SUkZJWEVEU1o7CisgICpsZW4gLT0gTlNfUlJGSVhFRFNaOworICBpZiAoKmxlbiA8IHJkYXRhbGVuKSB7CisgICAgc3MgPDwgIihSUiB0b28gbG9uZyBhdCAiIDw8IHJkYXRhbGVuIDw8ICIsIGxlbiBsZWZ0ICIgPDwgKmxlbiA8PCAiKSI7CisgIH0gZWxzZSB7CisgICAgc3dpdGNoIChycnR5cGUpIHsKKyAgICBjYXNlIG5zX3RfYToKKyAgICBjYXNlIG5zX3RfYWFhYToKKyAgICAgIHNzIDw8ICIgIiA8PCBBZGRyZXNzVG9TdHJpbmcoKmRhdGEsIHJkYXRhbGVuKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgbnNfdF90eHQ6IHsKKyAgICAgIGNvbnN0IGJ5dGUqIHAgPSAqZGF0YTsKKyAgICAgIHdoaWxlIChwIDwgKCpkYXRhICsgcmRhdGFsZW4pKSB7CisgICAgICAgIGludCBsZW4gPSAqcCsrOworICAgICAgICBpZiAoKHAgKyBsZW4pIDw9ICgqZGF0YSArIHJkYXRhbGVuKSkgeworICAgICAgICAgIHN0ZDo6c3RyaW5nIHR4dChwLCBwICsgbGVuKTsKKyAgICAgICAgICBzcyA8PCAiICIgPDwgbGVuIDw8ICI6JyIgPDwgdHh0IDw8ICInIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzcyA8PCAiKHN0cmluZyB0b28gbG9uZykiOworICAgICAgICB9CisgICAgICAgIHAgKz0gbGVuOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgbnNfdF9jbmFtZToKKyAgICBjYXNlIG5zX3RfbnM6CisgICAgY2FzZSBuc190X3B0cjogeworICAgICAgaW50IHJjID0gYXJlc19leHBhbmRfbmFtZSgqZGF0YSwgcGFja2V0LmRhdGEoKSwgcGFja2V0LnNpemUoKSwgJm5hbWUsICZlbmNsZW4pOworICAgICAgaWYgKHJjICE9IEFSRVNfU1VDQ0VTUykgeworICAgICAgICBzcyA8PCAiKGVycm9yIGZyb20gYXJlc19leHBhbmRfbmFtZSkiOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHNzIDw8ICIgJyIgPDwgbmFtZSA8PCAiJyI7CisgICAgICBmcmVlKG5hbWUpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgbnNfdF9teDoKKyAgICAgIGlmIChyZGF0YWxlbiA+IDIpIHsKKyAgICAgICAgaW50IHJjID0gYXJlc19leHBhbmRfbmFtZSgqZGF0YSArIDIsIHBhY2tldC5kYXRhKCksIHBhY2tldC5zaXplKCksICZuYW1lLCAmZW5jbGVuKTsKKyAgICAgICAgaWYgKHJjICE9IEFSRVNfU1VDQ0VTUykgeworICAgICAgICAgIHNzIDw8ICIoZXJyb3IgZnJvbSBhcmVzX2V4cGFuZF9uYW1lKSI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3MgPDwgIiAiIDw8IEROU19fMTZCSVQoKmRhdGEpIDw8ICIgJyIgPDwgbmFtZSA8PCAiJyI7CisgICAgICAgIGZyZWUobmFtZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzcyA8PCAiKFJSIHRvbyBzaG9ydCkiOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBuc190X3NydjogeworICAgICAgaWYgKHJkYXRhbGVuID4gNikgeworICAgICAgICBjb25zdCBieXRlKiBwID0gKmRhdGE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcHJpbyA9IEROU19fMTZCSVQocCk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgd2VpZ2h0ID0gRE5TX18xNkJJVChwICsgMik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydCA9IEROU19fMTZCSVQocCArIDQpOworICAgICAgICBwICs9IDY7CisgICAgICAgIGludCByYyA9IGFyZXNfZXhwYW5kX25hbWUocCwgcGFja2V0LmRhdGEoKSwgcGFja2V0LnNpemUoKSwgJm5hbWUsICZlbmNsZW4pOworICAgICAgICBpZiAocmMgIT0gQVJFU19TVUNDRVNTKSB7CisgICAgICAgICAgc3MgPDwgIihlcnJvciBmcm9tIGFyZXNfZXhwYW5kX25hbWUpIjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzcyA8PCBwcmlvIDw8ICIgIiA8PCB3ZWlnaHQgPDwgIiAiIDw8IHBvcnQgPDwgIiAnIiA8PCBuYW1lIDw8ICInIjsKKyAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNzIDw8ICIoUlIgdG9vIHNob3J0KSI7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBuc190X3NvYTogeworICAgICAgY29uc3QgYnl0ZSogcCA9ICpkYXRhOworICAgICAgaW50IHJjID0gYXJlc19leHBhbmRfbmFtZShwLCBwYWNrZXQuZGF0YSgpLCBwYWNrZXQuc2l6ZSgpLCAmbmFtZSwgJmVuY2xlbik7CisgICAgICBpZiAocmMgIT0gQVJFU19TVUNDRVNTKSB7CisgICAgICAgIHNzIDw8ICIoZXJyb3IgZnJvbSBhcmVzX2V4cGFuZF9uYW1lKSI7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3MgPDwgIiAnIiA8PCBuYW1lIDw8ICInIjsKKyAgICAgIGZyZWUobmFtZSk7CisgICAgICBwICs9IGVuY2xlbjsKKyAgICAgIHJjID0gYXJlc19leHBhbmRfbmFtZShwLCBwYWNrZXQuZGF0YSgpLCBwYWNrZXQuc2l6ZSgpLCAmbmFtZSwgJmVuY2xlbik7CisgICAgICBpZiAocmMgIT0gQVJFU19TVUNDRVNTKSB7CisgICAgICAgIHNzIDw8ICIoZXJyb3IgZnJvbSBhcmVzX2V4cGFuZF9uYW1lKSI7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3MgPDwgIiAnIiA8PCBuYW1lIDw8ICInIjsKKyAgICAgIGZyZWUobmFtZSk7CisgICAgICBwICs9IGVuY2xlbjsKKyAgICAgIGlmICgocCArIDIwKSA8PSAoKmRhdGEgKyByZGF0YWxlbikpIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWwgPSBETlNfXzMyQklUKHApOworICAgICAgICB1bnNpZ25lZCBsb25nIHJlZnJlc2ggPSBETlNfXzMyQklUKHAgKyA0KTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByZXRyeSA9IEROU19fMzJCSVQocCArIDgpOworICAgICAgICB1bnNpZ25lZCBsb25nIGV4cGlyZSA9IEROU19fMzJCSVQocCArIDEyKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtaW5pbXVtID0gRE5TX18zMkJJVChwICsgMTYpOworICAgICAgICBzcyA8PCAiICIgPDwgc2VyaWFsIDw8ICIgIiA8PCByZWZyZXNoIDw8ICIgIiA8PCByZXRyeSA8PCAiICIgPDwgZXhwaXJlIDw8ICIgIiA8PCBtaW5pbXVtOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3MgPDwgIihSUiB0b28gc2hvcnQpIjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG5zX3RfbmFwdHI6IHsKKyAgICAgIGlmIChyZGF0YWxlbiA+IDcpIHsKKyAgICAgICAgY29uc3QgYnl0ZSogcCA9ICpkYXRhOworICAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVyID0gRE5TX18xNkJJVChwKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwcmVmID0gRE5TX18xNkJJVChwICsgMik7CisgICAgICAgIHAgKz0gNDsKKyAgICAgICAgc3MgPDwgb3JkZXIgPDwgIiAiIDw8IHByZWY7CisKKyAgICAgICAgaW50IGxlbiA9ICpwKys7CisgICAgICAgIHN0ZDo6c3RyaW5nIGZsYWdzKHAsIHAgKyBsZW4pOworICAgICAgICBzcyA8PCAiICIgPDwgZmxhZ3M7CisgICAgICAgIHAgKz0gbGVuOworCisgICAgICAgIGxlbiA9ICpwKys7CisgICAgICAgIHN0ZDo6c3RyaW5nIHNlcnZpY2UocCwgcCArIGxlbik7CisgICAgICAgIHNzIDw8ICIgJyIgPDwgc2VydmljZSA8PCAiJyI7CisgICAgICAgIHAgKz0gbGVuOworCisgICAgICAgIGxlbiA9ICpwKys7CisgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4cChwLCBwICsgbGVuKTsKKyAgICAgICAgc3MgPDwgIiAnIiA8PCByZWdleHAgPDwgIiciOworICAgICAgICBwICs9IGxlbjsKKworICAgICAgICBpbnQgcmMgPSBhcmVzX2V4cGFuZF9uYW1lKHAsIHBhY2tldC5kYXRhKCksIHBhY2tldC5zaXplKCksICZuYW1lLCAmZW5jbGVuKTsKKyAgICAgICAgaWYgKHJjICE9IEFSRVNfU1VDQ0VTUykgeworICAgICAgICAgIHNzIDw8ICIoZXJyb3IgZnJvbSBhcmVzX2V4cGFuZF9uYW1lKSI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3MgPDwgIiAnIiA8PCBuYW1lIDw8ICInIjsKKyAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNzIDw8ICIoUlIgdG9vIHNob3J0KSI7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIHNzIDw8ICIgIiA8PCBIZXhEdW1wKCpkYXRhLCByZGF0YWxlbik7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgKmRhdGEgKz0gcmRhdGFsZW47CisgICpsZW4gLT0gcmRhdGFsZW47CisKKyAgc3MgPDwgIn0iOworICByZXR1cm4gc3Muc3RyKCk7Cit9CisKK3ZvaWQgUHVzaEludDMyKHN0ZDo6dmVjdG9yPGJ5dGU+KiBkYXRhLCBpbnQgdmFsdWUpIHsKKyAgZGF0YS0+cHVzaF9iYWNrKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKKyAgZGF0YS0+cHVzaF9iYWNrKCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDE2KTsKKyAgZGF0YS0+cHVzaF9iYWNrKCh2YWx1ZSAmIDB4MDAwMGZmMDApID4+IDgpOworICBkYXRhLT5wdXNoX2JhY2sodmFsdWUgJiAweDAwMDAwMGZmKTsKK30KKwordm9pZCBQdXNoSW50MTYoc3RkOjp2ZWN0b3I8Ynl0ZT4qIGRhdGEsIGludCB2YWx1ZSkgeworICBkYXRhLT5wdXNoX2JhY2soKHZhbHVlICYgMHhmZjAwKSA+PiA4KTsKKyAgZGF0YS0+cHVzaF9iYWNrKHZhbHVlICYgMHgwMGZmKTsKK30KKworc3RkOjp2ZWN0b3I8Ynl0ZT4gRW5jb2RlU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzKG5hbWUpOworICBzdGQ6OnN0cmluZyBsYWJlbDsKKyAgLy8gVE9ETzogY29wZSB3aXRoIGVzY2FwZXMKKyAgd2hpbGUgKHN0ZDo6Z2V0bGluZShzcywgbGFiZWwsICcuJykpIHsKKyAgICBkYXRhLnB1c2hfYmFjayhsYWJlbC5sZW5ndGgoKSk7CisgICAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgbGFiZWwuYmVnaW4oKSwgbGFiZWwuZW5kKCkpOworICB9CisgIGRhdGEucHVzaF9iYWNrKDApOworICByZXR1cm4gZGF0YTsKK30KKworc3RkOjp2ZWN0b3I8Ynl0ZT4gRE5TUXVlc3Rpb246OmRhdGEoKSBjb25zdCB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGVuY25hbWUgPSBFbmNvZGVTdHJpbmcobmFtZV8pOworICBkYXRhLmluc2VydChkYXRhLmVuZCgpLCBlbmNuYW1lLmJlZ2luKCksIGVuY25hbWUuZW5kKCkpOworICBQdXNoSW50MTYoJmRhdGEsIHJydHlwZV8pOworICBQdXNoSW50MTYoJmRhdGEsIHFjbGFzc18pOworICByZXR1cm4gZGF0YTsKK30KKworc3RkOjp2ZWN0b3I8Ynl0ZT4gRE5TUlI6OmRhdGEoKSBjb25zdCB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBETlNRdWVzdGlvbjo6ZGF0YSgpOworICBQdXNoSW50MzIoJmRhdGEsIHR0bF8pOworICByZXR1cm4gZGF0YTsKK30KKworc3RkOjp2ZWN0b3I8Ynl0ZT4gRE5TU2luZ2xlTmFtZVJSOjpkYXRhKCkgY29uc3QgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gRE5TUlI6OmRhdGEoKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZW5jbmFtZSA9IEVuY29kZVN0cmluZyhvdGhlcl8pOworICBpbnQgbGVuID0gZW5jbmFtZS5zaXplKCk7CisgIFB1c2hJbnQxNigmZGF0YSwgbGVuKTsKKyAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgZW5jbmFtZS5iZWdpbigpLCBlbmNuYW1lLmVuZCgpKTsKKyAgcmV0dXJuIGRhdGE7Cit9CisKK3N0ZDo6dmVjdG9yPGJ5dGU+IEROU1R4dFJSOjpkYXRhKCkgY29uc3QgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gRE5TUlI6OmRhdGEoKTsKKyAgaW50IGxlbiA9IDA7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHR4dCA6IHR4dF8pIHsKKyAgICBsZW4gKz0gKDEgKyB0eHQuc2l6ZSgpKTsKKyAgfQorICBQdXNoSW50MTYoJmRhdGEsIGxlbik7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHR4dCA6IHR4dF8pIHsKKyAgICBkYXRhLnB1c2hfYmFjayh0eHQuc2l6ZSgpKTsKKyAgICBkYXRhLmluc2VydChkYXRhLmVuZCgpLCB0eHQuYmVnaW4oKSwgdHh0LmVuZCgpKTsKKyAgfQorICByZXR1cm4gZGF0YTsKK30KKworc3RkOjp2ZWN0b3I8Ynl0ZT4gRE5TTXhSUjo6ZGF0YSgpIGNvbnN0IHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IEROU1JSOjpkYXRhKCk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGVuY25hbWUgPSBFbmNvZGVTdHJpbmcob3RoZXJfKTsKKyAgaW50IGxlbiA9IDIgKyBlbmNuYW1lLnNpemUoKTsKKyAgUHVzaEludDE2KCZkYXRhLCBsZW4pOworICBQdXNoSW50MTYoJmRhdGEsIHByZWZfKTsKKyAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgZW5jbmFtZS5iZWdpbigpLCBlbmNuYW1lLmVuZCgpKTsKKyAgcmV0dXJuIGRhdGE7Cit9CisKK3N0ZDo6dmVjdG9yPGJ5dGU+IEROU1NydlJSOjpkYXRhKCkgY29uc3QgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gRE5TUlI6OmRhdGEoKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZW5jbmFtZSA9IEVuY29kZVN0cmluZyh0YXJnZXRfKTsKKyAgaW50IGxlbiA9IDYgKyBlbmNuYW1lLnNpemUoKTsKKyAgUHVzaEludDE2KCZkYXRhLCBsZW4pOworICBQdXNoSW50MTYoJmRhdGEsIHByaW9fKTsKKyAgUHVzaEludDE2KCZkYXRhLCB3ZWlnaHRfKTsKKyAgUHVzaEludDE2KCZkYXRhLCBwb3J0Xyk7CisgIGRhdGEuaW5zZXJ0KGRhdGEuZW5kKCksIGVuY25hbWUuYmVnaW4oKSwgZW5jbmFtZS5lbmQoKSk7CisgIHJldHVybiBkYXRhOworfQorCitzdGQ6OnZlY3RvcjxieXRlPiBETlNBZGRyZXNzUlI6OmRhdGEoKSBjb25zdCB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBETlNSUjo6ZGF0YSgpOworICBpbnQgbGVuID0gYWRkcl8uc2l6ZSgpOworICBQdXNoSW50MTYoJmRhdGEsIGxlbik7CisgIGRhdGEuaW5zZXJ0KGRhdGEuZW5kKCksIGFkZHJfLmJlZ2luKCksIGFkZHJfLmVuZCgpKTsKKyAgcmV0dXJuIGRhdGE7Cit9CisKK3N0ZDo6dmVjdG9yPGJ5dGU+IEROU1NvYVJSOjpkYXRhKCkgY29uc3QgeworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhID0gRE5TUlI6OmRhdGEoKTsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZW5jbmFtZTEgPSBFbmNvZGVTdHJpbmcobnNuYW1lXyk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGVuY25hbWUyID0gRW5jb2RlU3RyaW5nKHJuYW1lXyk7CisgIGludCBsZW4gPSBlbmNuYW1lMS5zaXplKCkgKyBlbmNuYW1lMi5zaXplKCkgKyA1KjQ7CisgIFB1c2hJbnQxNigmZGF0YSwgbGVuKTsKKyAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgZW5jbmFtZTEuYmVnaW4oKSwgZW5jbmFtZTEuZW5kKCkpOworICBkYXRhLmluc2VydChkYXRhLmVuZCgpLCBlbmNuYW1lMi5iZWdpbigpLCBlbmNuYW1lMi5lbmQoKSk7CisgIFB1c2hJbnQzMigmZGF0YSwgc2VyaWFsXyk7CisgIFB1c2hJbnQzMigmZGF0YSwgcmVmcmVzaF8pOworICBQdXNoSW50MzIoJmRhdGEsIHJldHJ5Xyk7CisgIFB1c2hJbnQzMigmZGF0YSwgZXhwaXJlXyk7CisgIFB1c2hJbnQzMigmZGF0YSwgbWluaW11bV8pOworICByZXR1cm4gZGF0YTsKK30KKworc3RkOjp2ZWN0b3I8Ynl0ZT4gRE5TT3B0UlI6OmRhdGEoKSBjb25zdCB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEgPSBETlNSUjo6ZGF0YSgpOworICBpbnQgbGVuID0gMDsKKyAgZm9yIChjb25zdCBETlNPcHRpb24mIG9wdCA6IG9wdHNfKSB7CisgICAgbGVuICs9ICg0ICsgb3B0LmRhdGFfLnNpemUoKSk7CisgIH0KKyAgUHVzaEludDE2KCZkYXRhLCBsZW4pOworICBmb3IgKGNvbnN0IEROU09wdGlvbiYgb3B0IDogb3B0c18pIHsKKyAgICBQdXNoSW50MTYoJmRhdGEsIG9wdC5jb2RlXyk7CisgICAgUHVzaEludDE2KCZkYXRhLCBvcHQuZGF0YV8uc2l6ZSgpKTsKKyAgICBkYXRhLmluc2VydChkYXRhLmVuZCgpLCBvcHQuZGF0YV8uYmVnaW4oKSwgb3B0LmRhdGFfLmVuZCgpKTsKKyAgfQorICByZXR1cm4gZGF0YTsKK30KKworc3RkOjp2ZWN0b3I8Ynl0ZT4gRE5TTmFwdHJSUjo6ZGF0YSgpIGNvbnN0IHsKKyAgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSA9IEROU1JSOjpkYXRhKCk7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGVuY25hbWUgPSBFbmNvZGVTdHJpbmcocmVwbGFjZW1lbnRfKTsKKyAgaW50IGxlbiA9ICg0ICsgMSArIGZsYWdzXy5zaXplKCkgKyAxICsgc2VydmljZV8uc2l6ZSgpICsgMSArIHJlZ2V4cF8uc2l6ZSgpICsgZW5jbmFtZS5zaXplKCkpOworICBQdXNoSW50MTYoJmRhdGEsIGxlbik7CisgIFB1c2hJbnQxNigmZGF0YSwgb3JkZXJfKTsKKyAgUHVzaEludDE2KCZkYXRhLCBwcmVmXyk7CisgIGRhdGEucHVzaF9iYWNrKGZsYWdzXy5zaXplKCkpOworICBkYXRhLmluc2VydChkYXRhLmVuZCgpLCBmbGFnc18uYmVnaW4oKSwgZmxhZ3NfLmVuZCgpKTsKKyAgZGF0YS5wdXNoX2JhY2soc2VydmljZV8uc2l6ZSgpKTsKKyAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgc2VydmljZV8uYmVnaW4oKSwgc2VydmljZV8uZW5kKCkpOworICBkYXRhLnB1c2hfYmFjayhyZWdleHBfLnNpemUoKSk7CisgIGRhdGEuaW5zZXJ0KGRhdGEuZW5kKCksIHJlZ2V4cF8uYmVnaW4oKSwgcmVnZXhwXy5lbmQoKSk7CisgIGRhdGEuaW5zZXJ0KGRhdGEuZW5kKCksIGVuY25hbWUuYmVnaW4oKSwgZW5jbmFtZS5lbmQoKSk7CisgIHJldHVybiBkYXRhOworfQorCitzdGQ6OnZlY3RvcjxieXRlPiBETlNQYWNrZXQ6OmRhdGEoKSBjb25zdCB7CisgIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGE7CisgIFB1c2hJbnQxNigmZGF0YSwgcWlkXyk7CisgIGJ5dGUgYiA9IDB4MDA7CisgIGlmIChyZXNwb25zZV8pIGIgfD0gMHg4MDsKKyAgYiB8PSAoKG9wY29kZV8gJiAweDBmKSA8PCAzKTsKKyAgaWYgKGFhXykgYiB8PSAweDA0OworICBpZiAodGNfKSBiIHw9IDB4MDI7CisgIGlmIChyZF8pIGIgfD0gMHgwMTsKKyAgZGF0YS5wdXNoX2JhY2soYik7CisgIGIgPSAweDAwOworICBpZiAocmFfKSBiIHw9IDB4ODA7CisgIGlmICh6XykgYiB8PSAweDQwOworICBpZiAoYWRfKSBiIHw9IDB4MjA7CisgIGlmIChjZF8pIGIgfD0gMHgxMDsKKyAgYiB8PSAocmNvZGVfICYgMHgwZik7CisgIGRhdGEucHVzaF9iYWNrKGIpOworCisgIGludCBjb3VudCA9IHF1ZXN0aW9uc18uc2l6ZSgpOworICBQdXNoSW50MTYoJmRhdGEsIGNvdW50KTsKKyAgY291bnQgPSBhbnN3ZXJzXy5zaXplKCk7CisgIFB1c2hJbnQxNigmZGF0YSwgY291bnQpOworICBjb3VudCA9IGF1dGhzXy5zaXplKCk7CisgIFB1c2hJbnQxNigmZGF0YSwgY291bnQpOworICBjb3VudCA9IGFkZHNfLnNpemUoKTsKKyAgUHVzaEludDE2KCZkYXRhLCBjb3VudCk7CisKKyAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RE5TUXVlc3Rpb24+JiBxdWVzdGlvbiA6IHF1ZXN0aW9uc18pIHsKKyAgICBzdGQ6OnZlY3RvcjxieXRlPiBxZGF0YSA9IHF1ZXN0aW9uLT5kYXRhKCk7CisgICAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgcWRhdGEuYmVnaW4oKSwgcWRhdGEuZW5kKCkpOworICB9CisgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEROU1JSPiYgcnIgOiBhbnN3ZXJzXykgeworICAgIHN0ZDo6dmVjdG9yPGJ5dGU+IHJyZGF0YSA9IHJyLT5kYXRhKCk7CisgICAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgcnJkYXRhLmJlZ2luKCksIHJyZGF0YS5lbmQoKSk7CisgIH0KKyAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RE5TUlI+JiByciA6IGF1dGhzXykgeworICAgIHN0ZDo6dmVjdG9yPGJ5dGU+IHJyZGF0YSA9IHJyLT5kYXRhKCk7CisgICAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgcnJkYXRhLmJlZ2luKCksIHJyZGF0YS5lbmQoKSk7CisgIH0KKyAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RE5TUlI+JiByciA6IGFkZHNfKSB7CisgICAgc3RkOjp2ZWN0b3I8Ynl0ZT4gcnJkYXRhID0gcnItPmRhdGEoKTsKKyAgICBkYXRhLmluc2VydChkYXRhLmVuZCgpLCBycmRhdGEuYmVnaW4oKSwgcnJkYXRhLmVuZCgpKTsKKyAgfQorICByZXR1cm4gZGF0YTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFyZXMKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvZG5zLXByb3RvLmggYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2Rucy1wcm90by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjcxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2Rucy1wcm90by5oCkBAIC0wLDAgKzEsMjQyIEBACisvLyAtKi0gbW9kZTogYysrIC0qLQorI2lmbmRlZiBETlNfUFJPVE9fSAorI2RlZmluZSBETlNfUFJPVE9fSAorLy8gVXRpbGl0aWVzIGZvciBwcm9jZXNzaW5nIEROUyBwYWNrZXQgY29udGVudHMKKworLy8gSW5jbHVkZSBhcmVzIGludGVybmFsIGZpbGUgZm9yIEROUyBwcm90b2NvbCBjb25zdGFudHMKKyNpbmNsdWRlICJuYW1lc2VyLmgiCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGFyZXMgeworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKworc3RkOjpzdHJpbmcgSGV4RHVtcChzdGQ6OnZlY3RvcjxieXRlPiBkYXRhKTsKK3N0ZDo6c3RyaW5nIEhleER1bXAoY29uc3QgYnl0ZSAqZGF0YSwgaW50IGxlbik7CitzdGQ6OnN0cmluZyBIZXhEdW1wKGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pOworCitzdGQ6OnN0cmluZyBTdGF0dXNUb1N0cmluZyhpbnQgc3RhdHVzKTsKK3N0ZDo6c3RyaW5nIFJjb2RlVG9TdHJpbmcoaW50IHJjb2RlKTsKK3N0ZDo6c3RyaW5nIFJSVHlwZVRvU3RyaW5nKGludCBycnR5cGUpOworc3RkOjpzdHJpbmcgQ2xhc3NUb1N0cmluZyhpbnQgcWNsYXNzKTsKK3N0ZDo6c3RyaW5nIEFkZHJlc3NUb1N0cmluZyhjb25zdCB2b2lkKiBhZGRyLCBpbnQgbGVuKTsKKworLy8gQ29udmVydCBETlMgcHJvdG9jb2wgZGF0YSB0byBzdHJpbmdzLgorLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGRlZmVuc2l2ZTsgdGhleSBhc3N1bWUKKy8vIGEgdmFsaWRseSBmb3JtYXR0ZWQgaW5wdXQsIGFuZCBzbyBzaG91bGQgbm90IGJlIHVzZWQgb24KKy8vIGV4dGVybmFsbHktZGV0ZXJtaW5lZCBpbnB1dHMuCitzdGQ6OnN0cmluZyBQYWNrZXRUb1N0cmluZyhjb25zdCBzdGQ6OnZlY3RvcjxieXRlPiYgcGFja2V0KTsKK3N0ZDo6c3RyaW5nIFF1ZXN0aW9uVG9TdHJpbmcoY29uc3Qgc3RkOjp2ZWN0b3I8Ynl0ZT4mIHBhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSoqIGRhdGEsIGludCogbGVuKTsKK3N0ZDo6c3RyaW5nIFJSVG9TdHJpbmcoY29uc3Qgc3RkOjp2ZWN0b3I8Ynl0ZT4mIHBhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSoqIGRhdGEsIGludCogbGVuKTsKKworCisvLyBNYW5pcHVsYXRlIEROUyBwcm90b2NvbCBkYXRhLgordm9pZCBQdXNoSW50MzIoc3RkOjp2ZWN0b3I8Ynl0ZT4qIGRhdGEsIGludCB2YWx1ZSk7Cit2b2lkIFB1c2hJbnQxNihzdGQ6OnZlY3RvcjxieXRlPiogZGF0YSwgaW50IHZhbHVlKTsKK3N0ZDo6dmVjdG9yPGJ5dGU+IEVuY29kZVN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CisKK3N0cnVjdCBETlNRdWVzdGlvbiB7CisgIEROU1F1ZXN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBuc190eXBlIHJydHlwZSwgbnNfY2xhc3MgcWNsYXNzKQorICAgIDogbmFtZV8obmFtZSksIHJydHlwZV8ocnJ0eXBlKSwgcWNsYXNzXyhxY2xhc3MpIHt9CisgIEROU1F1ZXN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBuc190eXBlIHJydHlwZSkKKyAgICA6IG5hbWVfKG5hbWUpLCBycnR5cGVfKHJydHlwZSksIHFjbGFzc18obnNfY19pbikge30KKyAgdmlydHVhbCB+RE5TUXVlc3Rpb24oKSB7fQorICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEoKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgbmFtZV87CisgIG5zX3R5cGUgcnJ0eXBlXzsKKyAgbnNfY2xhc3MgcWNsYXNzXzsKK307CisKK3N0cnVjdCBETlNSUiA6IHB1YmxpYyBETlNRdWVzdGlvbiB7CisgIEROU1JSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBuc190eXBlIHJydHlwZSwgbnNfY2xhc3MgcWNsYXNzLCBpbnQgdHRsKQorICAgIDogRE5TUXVlc3Rpb24obmFtZSwgcnJ0eXBlLCBxY2xhc3MpLCB0dGxfKHR0bCkge30KKyAgRE5TUlIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIG5zX3R5cGUgcnJ0eXBlLCBpbnQgdHRsKQorICAgIDogRE5TUXVlc3Rpb24obmFtZSwgcnJ0eXBlKSwgdHRsXyh0dGwpIHt9CisgIHZpcnR1YWwgfkROU1JSKCkge30KKyAgdmlydHVhbCBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhKCkgY29uc3QgPSAwOworICBpbnQgdHRsXzsKK307CisKK3N0cnVjdCBETlNBZGRyZXNzUlIgOiBwdWJsaWMgRE5TUlIgeworICBETlNBZGRyZXNzUlIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIG5zX3R5cGUgcnJ0eXBlLCBpbnQgdHRsLAorICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYWRkciwgaW50IGFkZHJsZW4pCisgICAgOiBETlNSUihuYW1lLCBycnR5cGUsIHR0bCksIGFkZHJfKGFkZHIsIGFkZHIgKyBhZGRybGVuKSB7fQorICBETlNBZGRyZXNzUlIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIG5zX3R5cGUgcnJ0eXBlLCBpbnQgdHRsLAorICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Ynl0ZT4mIGFkZHIpCisgICAgOiBETlNSUihuYW1lLCBycnR5cGUsIHR0bCksIGFkZHJfKGFkZHIpIHt9CisgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSgpIGNvbnN0OworICBzdGQ6OnZlY3RvcjxieXRlPiBhZGRyXzsKK307CisKK3N0cnVjdCBETlNBUlIgOiBwdWJsaWMgRE5TQWRkcmVzc1JSIHsKKyAgRE5TQVJSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdHRsLCBjb25zdCBieXRlKiBhZGRyLCBpbnQgYWRkcmxlbikKKyAgICA6IEROU0FkZHJlc3NSUihuYW1lLCBuc190X2EsIHR0bCwgYWRkciwgYWRkcmxlbikge30KKyAgRE5TQVJSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdHRsLCBjb25zdCBzdGQ6OnZlY3RvcjxieXRlPiYgYWRkcikKKyAgICA6IEROU0FkZHJlc3NSUihuYW1lLCBuc190X2EsIHR0bCwgYWRkcikge30KK307CisKK3N0cnVjdCBETlNBYWFhUlIgOiBwdWJsaWMgRE5TQWRkcmVzc1JSIHsKKyAgRE5TQWFhYVJSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdHRsLCBjb25zdCBieXRlKiBhZGRyLCBpbnQgYWRkcmxlbikKKyAgICA6IEROU0FkZHJlc3NSUihuYW1lLCBuc190X2FhYWEsIHR0bCwgYWRkciwgYWRkcmxlbikge30KKyAgRE5TQWFhYVJSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdHRsLCBjb25zdCBzdGQ6OnZlY3RvcjxieXRlPiYgYWRkcikKKyAgICA6IEROU0FkZHJlc3NSUihuYW1lLCBuc190X2FhYWEsIHR0bCwgYWRkcikge30KK307CisKK3N0cnVjdCBETlNTaW5nbGVOYW1lUlIgOiBwdWJsaWMgRE5TUlIgeworICBETlNTaW5nbGVOYW1lUlIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIG5zX3R5cGUgcnJ0eXBlLCBpbnQgdHRsLAorICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG90aGVyKQorICAgIDogRE5TUlIobmFtZSwgcnJ0eXBlLCB0dGwpLCBvdGhlcl8ob3RoZXIpIHt9CisgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBvdGhlcl87Cit9OworCitzdHJ1Y3QgRE5TQ25hbWVSUiA6IHB1YmxpYyBETlNTaW5nbGVOYW1lUlIgeworICBETlNDbmFtZVJSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdHRsLCBjb25zdCBzdGQ6OnN0cmluZyYgb3RoZXIpCisgICAgOiBETlNTaW5nbGVOYW1lUlIobmFtZSwgbnNfdF9jbmFtZSwgdHRsLCBvdGhlcikge30KK307CisKK3N0cnVjdCBETlNOc1JSIDogcHVibGljIEROU1NpbmdsZU5hbWVSUiB7CisgIEROU05zUlIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB0dGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdGhlcikKKyAgICA6IEROU1NpbmdsZU5hbWVSUihuYW1lLCBuc190X25zLCB0dGwsIG90aGVyKSB7fQorfTsKKworc3RydWN0IEROU1B0clJSIDogcHVibGljIEROU1NpbmdsZU5hbWVSUiB7CisgIEROU1B0clJSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdHRsLCBjb25zdCBzdGQ6OnN0cmluZyYgb3RoZXIpCisgICAgOiBETlNTaW5nbGVOYW1lUlIobmFtZSwgbnNfdF9wdHIsIHR0bCwgb3RoZXIpIHt9Cit9OworCitzdHJ1Y3QgRE5TVHh0UlIgOiBwdWJsaWMgRE5TUlIgeworICBETlNUeHRSUihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHR0bCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0eHQpCisgICAgOiBETlNSUihuYW1lLCBuc190X3R4dCwgdHRsKSwgdHh0Xyh0eHQpIHt9CisgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSgpIGNvbnN0OworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdHh0XzsKK307CisKK3N0cnVjdCBETlNNeFJSIDogcHVibGljIEROU1JSIHsKKyAgRE5TTXhSUihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHR0bCwgaW50IHByZWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdGhlcikKKyAgICA6IEROU1JSKG5hbWUsIG5zX3RfbXgsIHR0bCksIHByZWZfKHByZWYpLCBvdGhlcl8ob3RoZXIpIHt9CisgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSgpIGNvbnN0OworICBpbnQgcHJlZl87CisgIHN0ZDo6c3RyaW5nIG90aGVyXzsKK307CisKK3N0cnVjdCBETlNTcnZSUiA6IHB1YmxpYyBETlNSUiB7CisgIEROU1NydlJSKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdHRsLAorICAgICAgICAgICBpbnQgcHJpbywgaW50IHdlaWdodCwgaW50IHBvcnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQpCisgICAgOiBETlNSUihuYW1lLCBuc190X3NydiwgdHRsKSwgcHJpb18ocHJpbyksIHdlaWdodF8od2VpZ2h0KSwgcG9ydF8ocG9ydCksIHRhcmdldF8odGFyZ2V0KSB7fQorICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEoKSBjb25zdDsKKyAgaW50IHByaW9fOworICBpbnQgd2VpZ2h0XzsKKyAgaW50IHBvcnRfOworICBzdGQ6OnN0cmluZyB0YXJnZXRfOworfTsKKworc3RydWN0IEROU1NvYVJSIDogcHVibGljIEROU1JSIHsKKyAgRE5TU29hUlIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB0dGwsCisgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuc25hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBybmFtZSwKKyAgICAgICAgICAgaW50IHNlcmlhbCwgaW50IHJlZnJlc2gsIGludCByZXRyeSwgaW50IGV4cGlyZSwgaW50IG1pbmltdW0pCisgICAgOiBETlNSUihuYW1lLCBuc190X3NvYSwgdHRsKSwgbnNuYW1lXyhuc25hbWUpLCBybmFtZV8ocm5hbWUpLAorICAgICAgc2VyaWFsXyhzZXJpYWwpLCByZWZyZXNoXyhyZWZyZXNoKSwgcmV0cnlfKHJldHJ5KSwKKyAgICAgIGV4cGlyZV8oZXhwaXJlKSwgbWluaW11bV8obWluaW11bSkge30KKyAgdmlydHVhbCBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhKCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIG5zbmFtZV87CisgIHN0ZDo6c3RyaW5nIHJuYW1lXzsKKyAgaW50IHNlcmlhbF87CisgIGludCByZWZyZXNoXzsKKyAgaW50IHJldHJ5XzsKKyAgaW50IGV4cGlyZV87CisgIGludCBtaW5pbXVtXzsKK307CisKK3N0cnVjdCBETlNOYXB0clJSIDogcHVibGljIEROU1JSIHsKKyAgRE5TTmFwdHJSUihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHR0bCwKKyAgICAgICAgICAgICBpbnQgb3JkZXIsIGludCBwcmVmLAorICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFncywKKyAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2VydmljZSwKKyAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVnZXhwLAorICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXBsYWNlbWVudCkKKyAgICA6IEROU1JSKG5hbWUsIG5zX3RfbmFwdHIsIHR0bCksIG9yZGVyXyhvcmRlciksIHByZWZfKHByZWYpLAorICAgICAgZmxhZ3NfKGZsYWdzKSwgc2VydmljZV8oc2VydmljZSksIHJlZ2V4cF8ocmVnZXhwKSwgcmVwbGFjZW1lbnRfKHJlcGxhY2VtZW50KSB7fQorICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPGJ5dGU+IGRhdGEoKSBjb25zdDsKKyAgaW50IG9yZGVyXzsKKyAgaW50IHByZWZfOworICBzdGQ6OnN0cmluZyBmbGFnc187CisgIHN0ZDo6c3RyaW5nIHNlcnZpY2VfOworICBzdGQ6OnN0cmluZyByZWdleHBfOworICBzdGQ6OnN0cmluZyByZXBsYWNlbWVudF87Cit9OworCitzdHJ1Y3QgRE5TT3B0aW9uIHsKKyAgaW50IGNvZGVfOworICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhXzsKK307CisKK3N0cnVjdCBETlNPcHRSUiA6IHB1YmxpYyBETlNSUiB7CisgIEROU09wdFJSKGludCBleHRyY29kZSwgaW50IHVkcHNpemUpCisgICAgOiBETlNSUigiIiwgbnNfdF9vcHQsIHN0YXRpY19jYXN0PG5zX2NsYXNzPih1ZHBzaXplKSwgZXh0cmNvZGUpIHt9CisgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8Ynl0ZT4gZGF0YSgpIGNvbnN0OworICBzdGQ6OnZlY3RvcjxETlNPcHRpb24+IG9wdHNfOworfTsKKworc3RydWN0IEROU1BhY2tldCB7CisgIEROU1BhY2tldCgpCisgICAgOiBxaWRfKDApLCByZXNwb25zZV8oZmFsc2UpLCBvcGNvZGVfKG5zX29fcXVlcnkpLAorICAgICAgYWFfKGZhbHNlKSwgdGNfKGZhbHNlKSwgcmRfKGZhbHNlKSwgcmFfKGZhbHNlKSwKKyAgICAgIHpfKGZhbHNlKSwgYWRfKGZhbHNlKSwgY2RfKGZhbHNlKSwgcmNvZGVfKG5zX3Jfbm9lcnJvcikge30KKyAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgdGFrZSBvd25lcnNoaXAgb2YgZ2l2ZW4gcG9pbnRlcnMuCisgIEROU1BhY2tldCYgYWRkX3F1ZXN0aW9uKEROU1F1ZXN0aW9uICpxKSB7CisgICAgcXVlc3Rpb25zXy5wdXNoX2JhY2soc3RkOjp1bmlxdWVfcHRyPEROU1F1ZXN0aW9uPihxKSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIEROU1BhY2tldCYgYWRkX2Fuc3dlcihETlNSUiAqcSkgeworICAgIGFuc3dlcnNfLnB1c2hfYmFjayhzdGQ6OnVuaXF1ZV9wdHI8RE5TUlI+KHEpKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgRE5TUGFja2V0JiBhZGRfYXV0aChETlNSUiAqcSkgeworICAgIGF1dGhzXy5wdXNoX2JhY2soc3RkOjp1bmlxdWVfcHRyPEROU1JSPihxKSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIEROU1BhY2tldCYgYWRkX2FkZGl0aW9uYWwoRE5TUlIgKnEpIHsKKyAgICBhZGRzXy5wdXNoX2JhY2soc3RkOjp1bmlxdWVfcHRyPEROU1JSPihxKSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIC8vIENoYWluYWJsZSBzZXR0ZXJzLgorICBETlNQYWNrZXQmIHNldF9xaWQoaW50IHFpZCkgeyBxaWRfID0gcWlkOyByZXR1cm4gKnRoaXM7IH0KKyAgRE5TUGFja2V0JiBzZXRfcmVzcG9uc2UoYm9vbCB2ID0gdHJ1ZSkgeyByZXNwb25zZV8gPSB2OyByZXR1cm4gKnRoaXM7IH0KKyAgRE5TUGFja2V0JiBzZXRfYWEoYm9vbCB2ID0gdHJ1ZSkgeyBhYV8gPSB2OyByZXR1cm4gKnRoaXM7IH0KKyAgRE5TUGFja2V0JiBzZXRfdGMoYm9vbCB2ID0gdHJ1ZSkgeyB0Y18gPSB2OyByZXR1cm4gKnRoaXM7IH0KKyAgRE5TUGFja2V0JiBzZXRfcmQoYm9vbCB2ID0gdHJ1ZSkgeyByZF8gPSB2OyByZXR1cm4gKnRoaXM7IH0KKyAgRE5TUGFja2V0JiBzZXRfcmEoYm9vbCB2ID0gdHJ1ZSkgeyByYV8gPSB2OyByZXR1cm4gKnRoaXM7IH0KKyAgRE5TUGFja2V0JiBzZXRfeihib29sIHYgPSB0cnVlKSB7IHpfID0gdjsgcmV0dXJuICp0aGlzOyB9CisgIEROU1BhY2tldCYgc2V0X2FkKGJvb2wgdiA9IHRydWUpIHsgYWRfID0gdjsgcmV0dXJuICp0aGlzOyB9CisgIEROU1BhY2tldCYgc2V0X2NkKGJvb2wgdiA9IHRydWUpIHsgY2RfID0gdjsgcmV0dXJuICp0aGlzOyB9CisgIEROU1BhY2tldCYgc2V0X3Jjb2RlKG5zX3Jjb2RlIHJjb2RlKSB7IHJjb2RlXyA9IHJjb2RlOyByZXR1cm4gKnRoaXM7IH0KKworICAvLyBSZXR1cm4gdGhlIGVuY29kZWQgcGFja2V0LgorICBzdGQ6OnZlY3RvcjxieXRlPiBkYXRhKCkgY29uc3Q7CisKKyAgaW50IHFpZF87CisgIGJvb2wgcmVzcG9uc2VfOworICBuc19vcGNvZGUgb3Bjb2RlXzsKKyAgYm9vbCBhYV87CisgIGJvb2wgdGNfOworICBib29sIHJkXzsKKyAgYm9vbCByYV87CisgIGJvb2wgel87CisgIGJvb2wgYWRfOworICBib29sIGNkXzsKKyAgbnNfcmNvZGUgcmNvZGVfOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RE5TUXVlc3Rpb24+PiBxdWVzdGlvbnNfOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RE5TUlI+PiBhbnN3ZXJzXzsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEROU1JSPj4gYXV0aHNfOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RE5TUlI+PiBhZGRzXzsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhcmVzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9nbW9jay0xLjcuMC9ndGVzdC9zcmMvZ3Rlc3QtYWxsLmNjIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9nbW9jay0xLjcuMC9ndGVzdC9zcmMvZ3Rlc3QtYWxsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWNlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy90ZXN0L2dtb2NrLTEuNy4wL2d0ZXN0L3NyYy9ndGVzdC1hbGwuY2MKQEAgLTAsMCArMSw0OCBAQAorLy8gQ29weXJpZ2h0IDIwMDgsIEdvb2dsZSBJbmMuCisvLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLy8KKy8vIEF1dGhvcjogbWhldWxlQGdvb2dsZS5jb20gKE1hcmt1cyBIZXVsZSkKKy8vCisvLyBHb29nbGUgQysrIFRlc3RpbmcgRnJhbWV3b3JrIChHb29nbGUgVGVzdCkKKy8vCisvLyBTb21ldGltZXMgaXQncyBkZXNpcmFibGUgdG8gYnVpbGQgR29vZ2xlIFRlc3QgYnkgY29tcGlsaW5nIGEgc2luZ2xlIGZpbGUuCisvLyBUaGlzIGZpbGUgc2VydmVzIHRoaXMgcHVycG9zZS4KKworLy8gVGhpcyBsaW5lIGVuc3VyZXMgdGhhdCBndGVzdC5oIGNhbiBiZSBjb21waWxlZCBvbiBpdHMgb3duLCBldmVuCisvLyB3aGVuIGl0J3MgZnVzZWQuCisjaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QuaCIKKworLy8gVGhlIGZvbGxvd2luZyBsaW5lcyBwdWxsIGluIHRoZSByZWFsIGd0ZXN0ICouY2MgZmlsZXMuCisjaW5jbHVkZSAic3JjL2d0ZXN0LmNjIgorI2luY2x1ZGUgInNyYy9ndGVzdC1kZWF0aC10ZXN0LmNjIgorI2luY2x1ZGUgInNyYy9ndGVzdC1maWxlcGF0aC5jYyIKKyNpbmNsdWRlICJzcmMvZ3Rlc3QtcG9ydC5jYyIKKyNpbmNsdWRlICJzcmMvZ3Rlc3QtcHJpbnRlcnMuY2MiCisjaW5jbHVkZSAic3JjL2d0ZXN0LXRlc3QtcGFydC5jYyIKKyNpbmNsdWRlICJzcmMvZ3Rlc3QtdHlwZWQtdGVzdC5jYyIKZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvZ21vY2stMS43LjAvc3JjL2dtb2NrLWFsbC5jYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3Rlc3QvZ21vY2stMS43LjAvc3JjL2dtb2NrLWFsbC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWViY2U3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdGVzdC9nbW9jay0xLjcuMC9zcmMvZ21vY2stYWxsLmNjCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDA4LCBHb29nbGUgSW5jLgorLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vCisvLyBBdXRob3I6IHdhbkBnb29nbGUuY29tIChaaGFueW9uZyBXYW4pCisvLworLy8gR29vZ2xlIEMrKyBNb2NraW5nIEZyYW1ld29yayAoR29vZ2xlIE1vY2spCisvLworLy8gVGhpcyBmaWxlICNpbmNsdWRlcyBhbGwgR29vZ2xlIE1vY2sgaW1wbGVtZW50YXRpb24gLmNjIGZpbGVzLiAgVGhlCisvLyBwdXJwb3NlIGlzIHRvIGFsbG93IGEgdXNlciB0byBidWlsZCBHb29nbGUgTW9jayBieSBjb21waWxpbmcgdGhpcworLy8gZmlsZSBhbG9uZS4KKworLy8gVGhpcyBsaW5lIGVuc3VyZXMgdGhhdCBnbW9jay5oIGNhbiBiZSBjb21waWxlZCBvbiBpdHMgb3duLCBldmVuCisvLyB3aGVuIGl0J3MgZnVzZWQuCisjaW5jbHVkZSAiZ21vY2svZ21vY2suaCIKKworLy8gVGhlIGZvbGxvd2luZyBsaW5lcyBwdWxsIGluIHRoZSByZWFsIGdtb2NrICouY2MgZmlsZXMuCisjaW5jbHVkZSAic3JjL2dtb2NrLWNhcmRpbmFsaXRpZXMuY2MiCisjaW5jbHVkZSAic3JjL2dtb2NrLWludGVybmFsLXV0aWxzLmNjIgorI2luY2x1ZGUgInNyYy9nbW9jay1tYXRjaGVycy5jYyIKKyNpbmNsdWRlICJzcmMvZ21vY2stc3BlYy1idWlsZGVycy5jYyIKKyNpbmNsdWRlICJzcmMvZ21vY2suY2MiCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy92Yy9hY291bnRyeS92YzZhY291bnRyeS5kc3AgYi9hcC9hcHAvYy1hcmVzL3NyYy92Yy9hY291bnRyeS92YzZhY291bnRyeS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwMzVlYQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3ZjL2Fjb3VudHJ5L3ZjNmFjb3VudHJ5LmRzcApAQCAtMCwwICsxLDE5MCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJhY291bnRyeSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQorDQorQ0ZHPWFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJ2YzZhY291bnRyeS5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAidmM2YWNvdW50cnkubWFrIiBDRkc9ImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJhY291bnRyeSAtIFdpbjMyIHVzaW5nIGNhcmVzIERMTCBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAiYWNvdW50cnkgLSBXaW4zMiB1c2luZyBjYXJlcyBETEwgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAiYWNvdW50cnkgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQorIU1FU1NBR0UgImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICIiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCitDUFA9Y2wuZXhlDQorUlNDPXJjLmV4ZQ0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImRsbC1kZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJkbGwtZGVidWcvb2JqIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJkbGwtZGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgImRsbC1kZWJ1Zy9vYmoiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dYIC9aaSAvT2QgL0kgIi4uXC4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9GRCAvR1ogL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGNhcmVzZC5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtZGVidWcvYWNvdW50cnkuZXhlIiAvcGRidHlwZTpjb24gL2xpYnBhdGg6Ii4uXGNhcmVzXGRsbC1kZWJ1ZyIgL2ZpeGVkOm5vDQorIyBBREQgTElOSzMyIGNhcmVzZC5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtZGVidWcvYWNvdW50cnkuZXhlIiAvcGRidHlwZTpjb24gL2xpYnBhdGg6Ii4uXGNhcmVzXGRsbC1kZWJ1ZyIgL2ZpeGVkOm5vDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiZGxsLXJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiZGxsLXJlbGVhc2Uvb2JqIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJkbGwtcmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiZGxsLXJlbGVhc2Uvb2JqIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0ZEIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBjYXJlcy5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6ImRsbC1yZWxlYXNlL2Fjb3VudHJ5LmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGRsbC1yZWxlYXNlIiAvZml4ZWQ6bm8NCisjIEFERCBMSU5LMzIgY2FyZXMubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtcmVsZWFzZS9hY291bnRyeS5leGUiIC9saWJwYXRoOiIuLlxjYXJlc1xkbGwtcmVsZWFzZSIgL2ZpeGVkOm5vDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImxpYi1kZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJsaWItZGVidWcvb2JqIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJsaWItZGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgImxpYi1kZWJ1Zy9vYmoiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dYIC9aaSAvT2QgL0kgIi4uXC4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0QgIkNBUkVTX1NUQVRJQ0xJQiIgL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJDQVJFU19TVEFUSUNMSUIiIC9GRCAvR1ogL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGxpYmNhcmVzZC5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJsaWItZGVidWcvYWNvdW50cnkuZXhlIiAvcGRidHlwZTpjb24gL2xpYnBhdGg6Ii4uXGNhcmVzXGxpYi1kZWJ1ZyIgL2ZpeGVkOm5vDQorIyBBREQgTElOSzMyIGxpYmNhcmVzZC5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJsaWItZGVidWcvYWNvdW50cnkuZXhlIiAvcGRidHlwZTpjb24gL2xpYnBhdGg6Ii4uXGNhcmVzXGxpYi1kZWJ1ZyIgL2ZpeGVkOm5vDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAibGliLXJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAibGliLXJlbGVhc2Uvb2JqIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJsaWItcmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAibGliLXJlbGVhc2Uvb2JqIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiQ0FSRVNfU1RBVElDTElCIiAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0QgIkNBUkVTX1NUQVRJQ0xJQiIgL0ZEIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBsaWJjYXJlcy5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6ImxpYi1yZWxlYXNlL2Fjb3VudHJ5LmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGxpYi1yZWxlYXNlIiAvZml4ZWQ6bm8NCisjIEFERCBMSU5LMzIgbGliY2FyZXMubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJsaWItcmVsZWFzZS9hY291bnRyeS5leGUiIC9saWJwYXRoOiIuLlxjYXJlc1xsaWItcmVsZWFzZSIgL2ZpeGVkOm5vDQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJhY291bnRyeSAtIFdpbjMyIHVzaW5nIGNhcmVzIERMTCBEZWJ1ZyINCisjIE5hbWUgImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIFJlbGVhc2UiDQorIyBOYW1lICJhY291bnRyeSAtIFdpbjMyIHVzaW5nIGNhcmVzIExJQiBEZWJ1ZyINCisjIE5hbWUgImFjb3VudHJ5IC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIFJlbGVhc2UiDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWNvdW50cnkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2dldG9wdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfbm93YXJuLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19zdHJjYXNlY21wLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5caW5ldF9uZXRfcHRvbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGluZXRfbnRvcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfZ2V0b3B0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19ub3dhcm4uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3N0cmNhc2VjbXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxpbmV0X25ldF9wdG9uLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5caW5ldF9udG9wLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3ZjL2FkaWcvdmM2YWRpZy5kc3AgYi9hcC9hcHAvYy1hcmVzL3NyYy92Yy9hZGlnL3ZjNmFkaWcuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODk4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy92Yy9hZGlnL3ZjNmFkaWcuZHNwCkBAIC0wLDAgKzEsMTkwIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImFkaWciIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KKw0KK0NGRz1hZGlnIC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJ2YzZhZGlnLm1hayIuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJ2YzZhZGlnLm1hayIgQ0ZHPSJhZGlnIC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJhZGlnIC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFICJhZGlnIC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQorIU1FU1NBR0UgImFkaWcgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQorIU1FU1NBR0UgImFkaWcgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAiYWRpZyAtIFdpbjMyIHVzaW5nIGNhcmVzIERMTCBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJkbGwtZGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiZGxsLWRlYnVnL29iaiINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiZGxsLWRlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJkbGwtZGVidWcvb2JqIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR1ggL1ppIC9PZCAvSSAiLi5cLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRkQgL0daIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBjYXJlc2QubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiZGxsLWRlYnVnL2FkaWcuZXhlIiAvcGRidHlwZTpjb24gL2xpYnBhdGg6Ii4uXGNhcmVzXGRsbC1kZWJ1ZyIgL2ZpeGVkOm5vDQorIyBBREQgTElOSzMyIGNhcmVzZC5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtZGVidWcvYWRpZy5leGUiIC9wZGJ0eXBlOmNvbiAvbGlicGF0aDoiLi5cY2FyZXNcZGxsLWRlYnVnIiAvZml4ZWQ6bm8NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiYWRpZyAtIFdpbjMyIHVzaW5nIGNhcmVzIERMTCBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImRsbC1yZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgImRsbC1yZWxlYXNlL29iaiINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiZGxsLXJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgImRsbC1yZWxlYXNlL29iaiINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9GRCAvYw0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIgY2FyZXMubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtcmVsZWFzZS9hZGlnLmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGRsbC1yZWxlYXNlIiAvZml4ZWQ6bm8NCisjIEFERCBMSU5LMzIgY2FyZXMubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtcmVsZWFzZS9hZGlnLmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGRsbC1yZWxlYXNlIiAvZml4ZWQ6bm8NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiYWRpZyAtIFdpbjMyIHVzaW5nIGNhcmVzIExJQiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJsaWItZGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAibGliLWRlYnVnL29iaiINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAibGliLWRlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJsaWItZGVidWcvb2JqIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJDQVJFU19TVEFUSUNMSUIiIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR1ggL1ppIC9PZCAvSSAiLi5cLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiQ0FSRVNfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBsaWJjYXJlc2QubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoibGliLWRlYnVnL2FkaWcuZXhlIiAvcGRidHlwZTpjb24gL2xpYnBhdGg6Ii4uXGNhcmVzXGxpYi1kZWJ1ZyIgL2ZpeGVkOm5vDQorIyBBREQgTElOSzMyIGxpYmNhcmVzZC5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJsaWItZGVidWcvYWRpZy5leGUiIC9wZGJ0eXBlOmNvbiAvbGlicGF0aDoiLi5cY2FyZXNcbGliLWRlYnVnIiAvZml4ZWQ6bm8NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiYWRpZyAtIFdpbjMyIHVzaW5nIGNhcmVzIExJQiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImxpYi1yZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgImxpYi1yZWxlYXNlL29iaiINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAibGliLXJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgImxpYi1yZWxlYXNlL29iaiINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0QgIkNBUkVTX1NUQVRJQ0xJQiIgL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJDQVJFU19TVEFUSUNMSUIiIC9GRCAvYw0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIgbGliY2FyZXMubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJsaWItcmVsZWFzZS9hZGlnLmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGxpYi1yZWxlYXNlIiAvZml4ZWQ6bm8NCisjIEFERCBMSU5LMzIgbGliY2FyZXMubGliIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJsaWItcmVsZWFzZS9hZGlnLmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGxpYi1yZWxlYXNlIiAvZml4ZWQ6bm8NCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImFkaWcgLSBXaW4zMiB1c2luZyBjYXJlcyBETEwgRGVidWciDQorIyBOYW1lICJhZGlnIC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIFJlbGVhc2UiDQorIyBOYW1lICJhZGlnIC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIERlYnVnIg0KKyMgTmFtZSAiYWRpZyAtIFdpbjMyIHVzaW5nIGNhcmVzIExJQiBSZWxlYXNlIg0KKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFkaWcuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2dldG9wdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfbm93YXJuLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19zdHJjYXNlY21wLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5caW5ldF9uZXRfcHRvbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGluZXRfbnRvcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfZ2V0b3B0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19ub3dhcm4uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3N0cmNhc2VjbXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxpbmV0X25ldF9wdG9uLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5caW5ldF9udG9wLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL2FwL2FwcC9jLWFyZXMvc3JjL3ZjL2Fob3N0L3ZjNmFob3N0LmRzcCBiL2FwL2FwcC9jLWFyZXMvc3JjL3ZjL2Fob3N0L3ZjNmFob3N0LmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTA3MzNmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdmMvYWhvc3QvdmM2YWhvc3QuZHNwCkBAIC0wLDAgKzEsMTkwIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImFob3N0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCisNCitDRkc9YWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgInZjNmFob3N0Lm1hayIuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJ2YzZhaG9zdC5tYWsiIENGRz0iYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImFob3N0IC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFICJhaG9zdCAtIFdpbjMyIHVzaW5nIGNhcmVzIERMTCBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFICJhaG9zdCAtIFdpbjMyIHVzaW5nIGNhcmVzIExJQiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAiYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAiYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBETEwgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiZGxsLWRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgImRsbC1kZWJ1Zy9vYmoiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgImRsbC1kZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiZGxsLWRlYnVnL29iaiINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTURkIC9XMyAvR1ggL1ppIC9PZCAvSSAiLi5cLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dYIC9aaSAvT2QgL0kgIi4uXC4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0ZEIC9HWiAvYw0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIgY2FyZXNkLmxpYiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6ImRsbC1kZWJ1Zy9haG9zdC5leGUiIC9wZGJ0eXBlOmNvbiAvbGlicGF0aDoiLi5cY2FyZXNcZGxsLWRlYnVnIiAvZml4ZWQ6bm8NCisjIEFERCBMSU5LMzIgY2FyZXNkLmxpYiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6ImRsbC1kZWJ1Zy9haG9zdC5leGUiIC9wZGJ0eXBlOmNvbiAvbGlicGF0aDoiLi5cY2FyZXNcZGxsLWRlYnVnIiAvZml4ZWQ6bm8NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBETEwgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJkbGwtcmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJkbGwtcmVsZWFzZS9vYmoiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgImRsbC1yZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJkbGwtcmVsZWFzZS9vYmoiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRkQgL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGNhcmVzLmxpYiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiZGxsLXJlbGVhc2UvYWhvc3QuZXhlIiAvbGlicGF0aDoiLi5cY2FyZXNcZGxsLXJlbGVhc2UiIC9maXhlZDpubw0KKyMgQUREIExJTkszMiBjYXJlcy5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6ImRsbC1yZWxlYXNlL2Fob3N0LmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGRsbC1yZWxlYXNlIiAvZml4ZWQ6bm8NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAibGliLWRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgImxpYi1kZWJ1Zy9vYmoiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgImxpYi1kZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAibGliLWRlYnVnL29iaiINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTURkIC9XMyAvR1ggL1ppIC9PZCAvSSAiLi5cLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiQ0FSRVNfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dYIC9aaSAvT2QgL0kgIi4uXC4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0QgIkNBUkVTX1NUQVRJQ0xJQiIgL0ZEIC9HWiAvYw0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIgbGliY2FyZXNkLmxpYiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6ImxpYi1kZWJ1Zy9haG9zdC5leGUiIC9wZGJ0eXBlOmNvbiAvbGlicGF0aDoiLi5cY2FyZXNcbGliLWRlYnVnIiAvZml4ZWQ6bm8NCisjIEFERCBMSU5LMzIgbGliY2FyZXNkLmxpYiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6ImxpYi1kZWJ1Zy9haG9zdC5leGUiIC9wZGJ0eXBlOmNvbiAvbGlicGF0aDoiLi5cY2FyZXNcbGliLWRlYnVnIiAvZml4ZWQ6bm8NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJsaWItcmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJsaWItcmVsZWFzZS9vYmoiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgImxpYi1yZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJsaWItcmVsZWFzZS9vYmoiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJDQVJFU19TVEFUSUNMSUIiIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiQ0FSRVNfU1RBVElDTElCIiAvRkQgL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGxpYmNhcmVzLmxpYiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoibGliLXJlbGVhc2UvYWhvc3QuZXhlIiAvbGlicGF0aDoiLi5cY2FyZXNcbGliLXJlbGVhc2UiIC9maXhlZDpubw0KKyMgQUREIExJTkszMiBsaWJjYXJlcy5saWIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6ImxpYi1yZWxlYXNlL2Fob3N0LmV4ZSIgL2xpYnBhdGg6Ii4uXGNhcmVzXGxpYi1yZWxlYXNlIiAvZml4ZWQ6bm8NCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImFob3N0IC0gV2luMzIgdXNpbmcgY2FyZXMgRExMIERlYnVnIg0KKyMgTmFtZSAiYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBETEwgUmVsZWFzZSINCisjIE5hbWUgImFob3N0IC0gV2luMzIgdXNpbmcgY2FyZXMgTElCIERlYnVnIg0KKyMgTmFtZSAiYWhvc3QgLSBXaW4zMiB1c2luZyBjYXJlcyBMSUIgUmVsZWFzZSINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhaG9zdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfZ2V0b3B0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19ub3dhcm4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3N0cmNhc2VjbXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxpbmV0X25ldF9wdG9uLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5caW5ldF9udG9wLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19nZXRvcHQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX25vd2Fybi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfc3RyY2FzZWNtcC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGluZXRfbmV0X3B0b24uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxpbmV0X250b3AuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvYXAvYXBwL2MtYXJlcy9zcmMvdmMvY2FyZXMvdmM2Y2FyZXMuZHNwIGIvYXAvYXBwL2MtYXJlcy9zcmMvdmMvY2FyZXMvdmM2Y2FyZXMuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYTQ5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy92Yy9jYXJlcy92YzZjYXJlcy5kc3AKQEAgLTAsMCArMSw0NTMgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iY2FyZXMiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0DQorDQorQ0ZHPWNhcmVzIC0gV2luMzIgTElCIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJ2YzZjYXJlcy5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAidmM2Y2FyZXMubWFrIiBDRkc9ImNhcmVzIC0gV2luMzIgTElCIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJjYXJlcyAtIFdpbjMyIERMTCBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgImNhcmVzIC0gV2luMzIgRExMIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJjYXJlcyAtIFdpbjMyIExJQiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIpDQorIU1FU1NBR0UgImNhcmVzIC0gV2luMzIgTElCIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFIA0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQorDQorIUlGICAiJChDRkcpIiA9PSAiY2FyZXMgLSBXaW4zMiBETEwgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiZGxsLWRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgImRsbC1kZWJ1Zy9vYmoiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgImRsbC1kZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiZGxsLWRlYnVnL29iaiINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorQ1BQPWNsLmV4ZQ0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dYIC9aaSAvT2QgL0kgIi4uXC4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJERUJVR0JVSUxEIiAvRCAiQ0FSRVNfQlVJTERJTkdfTElCUkFSWSIgL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiREVCVUdCVUlMRCIgL0QgIkNBUkVTX0JVSUxESU5HX0xJQlJBUlkiIC9GRCAvR1ogL2MNCitNVEw9bWlkbC5leGUNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC93aW4zMg0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIHdzMl8zMi5saWIgYWR2YXBpMzIubGliIGtlcm5lbDMyLmxpYiAvbm9sb2dvIC9kbGwgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6ImRsbC1kZWJ1Zy9jYXJlc2QuZGxsIiAvaW1wbGliOiJkbGwtZGVidWcvY2FyZXNkLmxpYiIgL3BkYnR5cGU6Y29uIC9maXhlZDpubw0KKyMgQUREIExJTkszMiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvZGxsIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtZGVidWcvY2FyZXNkLmRsbCIgL2ltcGxpYjoiZGxsLWRlYnVnL2NhcmVzZC5saWIiIC9wZGJ0eXBlOmNvbiAvZml4ZWQ6bm8NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiY2FyZXMgLSBXaW4zMiBETEwgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJkbGwtcmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJkbGwtcmVsZWFzZS9vYmoiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgImRsbC1yZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJkbGwtcmVsZWFzZS9vYmoiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0NQUD1jbC5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIkNBUkVTX0JVSUxESU5HX0xJQlJBUlkiIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIkNBUkVTX0JVSUxESU5HX0xJQlJBUlkiIC9GRCAvYw0KK01UTD1taWRsLmV4ZQ0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL3dpbjMyDQorUlNDPXJjLmV4ZQ0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIgd3MyXzMyLmxpYiBhZHZhcGkzMi5saWIga2VybmVsMzIubGliIC9ub2xvZ28gL2RsbCAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJkbGwtcmVsZWFzZS9jYXJlcy5kbGwiIC9pbXBsaWI6ImRsbC1yZWxlYXNlL2NhcmVzLmxpYiIgL2ZpeGVkOm5vIC9yZWxlYXNlIC9pbmNyZW1lbnRhbDpubw0KKyMgQUREIExJTkszMiB3czJfMzIubGliIGFkdmFwaTMyLmxpYiBrZXJuZWwzMi5saWIgL25vbG9nbyAvZGxsIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6ImRsbC1yZWxlYXNlL2NhcmVzLmRsbCIgL2ltcGxpYjoiZGxsLXJlbGVhc2UvY2FyZXMubGliIiAvZml4ZWQ6bm8gL3JlbGVhc2UgL2luY3JlbWVudGFsOm5vDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImNhcmVzIC0gV2luMzIgTElCIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImxpYi1kZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJsaWItZGVidWcvb2JqIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJsaWItZGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgImxpYi1kZWJ1Zy9vYmoiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitDUFA9Y2wuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTURkIC9XMyAvR1ggL1ppIC9PZCAvSSAiLi5cLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIkRFQlVHQlVJTEQiIC9EICJDQVJFU19CVUlMRElOR19MSUJSQVJZIiAvRCAiQ0FSRVNfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dYIC9aaSAvT2QgL0kgIi4uXC4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJERUJVR0JVSUxEIiAvRCAiQ0FSRVNfQlVJTERJTkdfTElCUkFSWSIgL0QgIkNBUkVTX1NUQVRJQ0xJQiIgL0ZEIC9HWiAvYw0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliLWRlYnVnL2xpYmNhcmVzZC5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6ImxpYi1kZWJ1Zy9saWJjYXJlc2QubGliIiAvbWFjaGluZTpJMzg2DQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImNhcmVzIC0gV2luMzIgTElCIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAibGliLXJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAibGliLXJlbGVhc2Uvb2JqIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJsaWItcmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAibGliLXJlbGVhc2Uvb2JqIg0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorQ1BQPWNsLmV4ZQ0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiQ0FSRVNfQlVJTERJTkdfTElCUkFSWSIgL0QgIkNBUkVTX1NUQVRJQ0xJQiIgL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiQ0FSRVNfQlVJTERJTkdfTElCUkFSWSIgL0QgIkNBUkVTX1NUQVRJQ0xJQiIgL0ZEIC9jDQorUlNDPXJjLmV4ZQ0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElCMzI9bGluay5leGUgLWxpYg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWItcmVsZWFzZS9saWJjYXJlcy5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6ImxpYi1yZWxlYXNlL2xpYmNhcmVzLmxpYiIgL21hY2hpbmU6STM4Ng0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAiY2FyZXMgLSBXaW4zMiBETEwgRGVidWciDQorIyBOYW1lICJjYXJlcyAtIFdpbjMyIERMTCBSZWxlYXNlIg0KKyMgTmFtZSAiY2FyZXMgLSBXaW4zMiBMSUIgRGVidWciDQorIyBOYW1lICJjYXJlcyAtIFdpbjMyIExJQiBSZWxlYXNlIg0KKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfX2Nsb3NlX3NvY2tldHMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX19nZXRfaG9zdGVudC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfX3JlYWRfbGluZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfX3RpbWV2YWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2NhbmNlbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfY3JlYXRlX3F1ZXJ5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19kYXRhLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19kZXN0cm95LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19leHBhbmRfbmFtZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfZXhwYW5kX3N0cmluZy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfZmRzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19mcmVlX2hvc3RlbnQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2ZyZWVfc3RyaW5nLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19nZXRlbnYuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2dldGhvc3RieWFkZHIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2dldGhvc3RieW5hbWUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2dldG5hbWVpbmZvLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19nZXRzb2NrLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19pbml0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19saWJyYXJ5X2luaXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2xsaXN0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19ta3F1ZXJ5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19ub3dhcm4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX29wdGlvbnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3BhcnNlX2FfcmVwbHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3BhcnNlX214X3JlcGx5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19wYXJzZV9uYXB0cl9yZXBseS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfcGFyc2VfbnNfcmVwbHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3BhcnNlX3B0cl9yZXBseS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfcGFyc2Vfc29hX3JlcGx5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19wYXJzZV9zcnZfcmVwbHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3BhcnNlX3R4dF9yZXBseS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfcGxhdGZvcm0uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3Byb2Nlc3MuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3F1ZXJ5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19zZWFyY2guYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3NlbmQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3N0cmNhc2VjbXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3N0cmR1cC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfc3RyZXJyb3IuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3RpbWVvdXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3ZlcnNpb24uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3dyaXRldi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGJpdG5jbXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxpbmV0X25ldF9wdG9uLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5caW5ldF9udG9wLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cd2luZG93c19wb3J0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfYnVpbGQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2RhdGEuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX2Rucy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfZ2V0ZW52LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19pcGhscGFwaS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfaXB2Ni5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfbGlicmFyeV9pbml0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19sbGlzdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfbm93YXJuLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19wbGF0Zm9ybS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfcHJpdmF0ZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFyZXNfcnVsZXMuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3NldHVwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19zdHJjYXNlY21wLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYXJlc19zdHJkdXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3ZlcnNpb24uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhcmVzX3dyaXRldi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGJpdG5jbXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxjb25maWctd2luMzIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxpbmV0X25ldF9wdG9uLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5caW5ldF9udG9wLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbmFtZXNlci5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNldHVwX29uY2UuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGNhcmVzLnJjDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy92Yy9jYXJlcy92YzZjYXJlcy5kc3cgYi9hcC9hcHAvYy1hcmVzL3NyYy92Yy9jYXJlcy92YzZjYXJlcy5kc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhZDM3NQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2FwcC9jLWFyZXMvc3JjL3ZjL2NhcmVzL3ZjNmNhcmVzLmRzdwpAQCAtMCwwICsxLDI5IEBACitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJjYXJlcyI9Ii5cdmM2Y2FyZXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy92Yy92YzZhd3MuZHN3IGIvYXAvYXBwL2MtYXJlcy9zcmMvdmMvdmM2YXdzLmRzdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQzYTVhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvYXBwL2MtYXJlcy9zcmMvdmMvdmM2YXdzLmRzdwpAQCAtMCwwICsxLDc0IEBACitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJjYXJlcyI9Ii5cY2FyZXNcdmM2Y2FyZXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiYWNvdW50cnkiPSIuXGFjb3VudHJ5XHZjNmFjb3VudHJ5LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgY2FyZXMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiYWRpZyI9Ii5cYWRpZ1x2YzZhZGlnLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgY2FyZXMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiYWhvc3QiPSIuXGFob3N0XHZjNmFob3N0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgY2FyZXMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS9hcC9hcHAvYy1hcmVzL3NyYy93aW5kb3dzX3BvcnQuYyBiL2FwL2FwcC9jLWFyZXMvc3JjL3dpbmRvd3NfcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWNkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9hcHAvYy1hcmVzL3NyYy93aW5kb3dzX3BvcnQuYwpAQCAtMCwwICsxLDIyIEBACisjaW5jbHVkZSAiYXJlc19zZXR1cC5oIgorCisKKy8qIG9ubHkgZG8gdGhlIGZvbGxvd2luZyBvbiB3aW5kb3dzCisgKi8KKyNpZiAoZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChXQVRUMzIpKSAmJiAhZGVmaW5lZChNU0RPUykKKworI2lmZGVmIF9fV0FUQ09NQ19fCisvKgorICogV2F0Y29tIG5lZWRzIGEgRGxsTWFpbigpIGluIG9yZGVyIHRvIGluaXRpYWxpc2UgdGhlIGNsaWIgc3RhcnR1cCBjb2RlLgorICovCitCT09MCitXSU5BUEkgRGxsTWFpbiAoSElOU1RBTkNFIGhuZCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICh2b2lkKSBobmQ7CisgICh2b2lkKSByZWFzb247CisgICh2b2lkKSByZXNlcnZlZDsKKyAgcmV0dXJuIChUUlVFKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0lOMzIgYnVpbGRzIG9ubHkgKi8K